オペレーティングシステムが明記されていないので、使えるツールも分かりません。プログラムを書くにしても、プログラミング言語もわかりません。とりあえず、プログラムは書かずにUnix系の基本的なツールだけを使って実現することにします。
まず、ELFフォーマットについて調べましょう。
上で調べた通り、.rodata
セクションのファイル中での位置は、セクションヘッダテーブルに書いてあります。セクションヘッダテーブルの位置は、ファイル先頭のELFヘッダに書いてあります。まずELFヘッダの最初のe_ident
だけを見てみます。
$ od -A x -N 0x10 -t x1 ファイル
000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
000010
elf(5)のElf__N___Ehdr構造体の定義と見比べてみると、
- EI_CLASS = 0x01 (32ビット)
- EI_DATA = 0x01 (リトルエンディアン)
です (定数の値については/usr/include/などにあるelf.hを参照してください)。したがって、このファイルは32ビットアーキテクチャで、16ビット以上の整数値はリトルエンディアンで格納されることがわかります。そこでELFヘッダ全体を表示してみると、