binutilsのbin2cをビルドの続きです。
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の各コマンドを確認する際に、安心して動作確認等で使用することが、できるってことになります。
コメント