【ELF形式】.dynstr セクション

前回見たように、.dynstrセクションは、.dynsymセクションヘッダのsh_nameが参照する文字列(シンボル名)を格納しています。

#
# .dynstr セクションヘッダ
#
$ od -x -A x -j0x123c -N0x28 sample
00123c 0056 0000 0003 0000 0002 0000 820c 0804
00124c 020c 0000 0045 0000 0000 0000 0000 0000
00125c 0001 0000 0000 0000
001264

セクションヘッダの内容は、以下の通り。

Elf32_Shdr バイナリ 項目 バイナリの意味
.sh_name 0x00000056 .shstrtabセクションの先頭位置からのオフセット位置 0x1584 + 0x56 -> ".dynsym"
.sh_type 0x00000003 セクションのタイプ 文字列テーブル(SHT_STRTAB)
.sh_flags 0x00000002 各種フラグ ロード時にメモリ上に領域確保するセクション(SHF_ALLOC)
.sh_addr 0x0804820c ロード先アドレス 0x0804820c
.sh_offset 0x0000020c ELF形式中でのセクションの位置 0x20c
.sh_size 0x00000045 セクションのバイトサイズ 69バイト
.sh_link 0x00000000 関連付けられているシンボルテーブルのセクションヘッダインデックス -
.sh_info 0x00000000 最後の局所シンボルのシンボルテーブルインデックスより1大きい -
.sh_addralign 0x00000001 セクションがメモリにロードされる際のバイトアラインメント 1バイト
.sh_entsize 0x00000000 構造体配列になっているセクションで利用される。配列要素のサイズ -

セクション本体はオフセット0x20cの位置に、サイズ69バイトの領域となるので、その領域をダンプしてみます。

#
# .dynstr セクション
#
$ od -x -A x -j0x020c -N0x0045 sample
00020c 6c00 6269 2e63 6f73 362e 5f00 4f49 735f
00021c 6474 6e69 755f 6573 0064 5f5f 696c 6362
00022c 735f 6174 7472 6d5f 6961 006e 5f5f 6d67
00023c 6e6f 735f 6174 7472 5f5f 4700 494c 4342
00024c 325f 302e 0000
000251

$ readelf -x6 sample

セクション '.dynstr' の 十六進数ダンプ:
  0x0804820c 006c6962 632e736f 2e36005f 494f5f73 .libc.so.6._IO_s
  0x0804821c 7464696e 5f757365 64005f5f 6c696263 tdin_used.__libc
  0x0804822c 5f737461 72745f6d 61696e00 5f5f676d _start_main.__gm
  0x0804823c 6f6e5f73 74617274 5f5f0047 4c494243 on_start__.GLIBC
  0x0804824c 5f322e30 00                         _2.0.