binutilsにodはない

続きです。
bin2c.cが必要な理由をいろいろ考えているうちに、間違いに気づきました。
binutilsパッケージのbinutilsディレクトリの.cファイル一覧にod?.cというファイルがありますが、
これをodコマンド関連のソースと勘違いしてました。

takk@deb9:~/src/binutils-2.28/binutils$ ls od*.c
od-elf32_avr.c  od-macho.c  od-xcoff.c
takk@deb9:~/src/binutils-2.28/binutils$ 

ファイル名のodをoctal dumpの略だと思ってたのですが、
ファイル名をよく見ると、ELFやMACH-O、COFF等、各オブジェクトファイルのフォーマットを表していますね。
つまり、ファイル名に付いているodは、octal dumpではなく、object dumpってことになります。

dumpの略とは限らず、dataの略かもしれませんが、各ソースで16進printfしているかgrepすればすぐわかります。

takk@deb9:~/src/binutils-2.28/binutils$ grep printf od*.c -l
od-elf32_avr.c
od-macho.c
od-xcoff.c
takk@deb9:~/src/binutils-2.28/binutils$ 

各ファイルでヒットしましたので、16進printfしてますね。なのでocatl dumpの略ってことで認識しておけば良いでしょう。
(本当は作者に聞かないと分からないところではありますが)

grepでファイル名だけで確認するといつも不安なので、シャッフルして適当に10行表示。

takk@deb9:~/src/binutils-2.28/binutils$ grep printf od*.c | shuf | head
od-xcoff.c:      printf (_("File header:\n"));
od-macho.c:  printf ("  initprot: ");
od-elf32_avr.c:    printf (" (%2.1f%% Full)", ((float) data_usage / device.ram_size) * 100);
od-xcoff.c:            printf (_(" number of CTL anchors: %u\n"), ctl_info);
od-macho.c:  printf ("          undefined symbols: idx: %10lu  num: %-8lu",
od-macho.c:      printf ("%08x:", start + i);
od-macho.c:  printf ("  maxprot: ");
od-xcoff.c:      printf (_(" %3u %3u "),
od-macho.c:	  printf ("set segment: %u and offset: 0x%08x\n",
od-xcoff.c:      printf (_("            Flags: %08x "), flags);
takk@deb9:~/src/binutils-2.28/binutils$ 

ファイル名からこのように気づきはしましたが、
そもそもodコマンドってcoreutilsにあります。パッケージの統廃合もありましたし、コマンドが多すぎてよく忘れますが。

binutilsは、オブジェクトファイルとしてのバイナリを扱うパッケージなんでしょう。
odやhexdumpといったbinutils内に単純メモリダンプのコマンドがない
と考えると、bin2cの役割に納得がいきます。

bin2cは、単純なプログラムなんですが、単純なプログラムだからこそ、binutilsの各コマンドを確認する際に、安心して動作確認等で使用することが、できるってことになります。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA