umq (4421) の日記

○ ◎ ●

バイト列に意味はあるのか(01)

umq による 2004年09月06日 20時47分 の日記 (#248520)

さて,読者不在な日記なので,適当に書いていくが,初回は string(1) について書くことにする。

strings(1) は GNU Binutils に含まれるツールで,実行ファイルの中から文字列を取り出したりするのに使われる。

マニュアルを確認すると
strings - print the strings of printable characters in files
とある。
まぁ文字通り ``printable'' な文字を表示するツールということになる。

さて,``printable'' とは、ひらたくいうと「表示可能」ということだが,もう少し厳密にみるとどうなるだろう。

GNU Binutils の場合,``printable'' かどうかは safe-ctype.c 中で定義されている。
定義から,具体的には
SP ! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~

の95文字が該当することがわかる。

実際に strings(1) を実行すると,引数なしでは,上記の ``printable'' な文字(もしくは HT(\x09))が 4 つ以上固まっている部分が,1行につきひとつずつ表示される。

手近なファイルを,strings(1) で調べてみると,ソースコードのバージョン情報が埋込まれていたり,表示の文面がそのまま入っているのがわかる。
しかし,機械的に「文字」に相当するバイト列を取出しているだけなので,当然のことながら,意味不明の文字列も多く出てくる。

strings(1) は,非常にシンプルで,取り出す対象の文字セットが限られている。例えば,これを日本語対応にするとしたら,どういうことを考える必要があるだろうか。

次回からは,そのあたりへ向って,関連するキーワードを少しずつ書いていこうと思う。
それにあたっては,monyo(6525) さんjstringshsgw(14585) さんjstrings を参考にさせてもらうことをあらかじめ記しておく。

[ひとつまえ]

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

処理中...