Hatena::ブログ(Diary)

ゆずさん研究所

 | 

2013/10/14

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

08:06

前回見たように、.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_name0x00000056.shstrtabセクションの先頭位置からのオフセット位置0x1584 + 0x56 -> ".dynsym"
.sh_type0x00000003セクションのタイプ文字列テーブル(SHT_STRTAB)
.sh_flags0x00000002各種フラグロード時にメモリ上に領域確保するセクション(SHF_ALLOC)
.sh_addr0x0804820cロード先アドレス0x0804820c
.sh_offset0x0000020cELF形式中でのセクションの位置0x20c
.sh_size0x00000045セクションのバイトサイズ69バイト
.sh_link0x00000000関連付けられているシンボルテーブルのセクションヘッダインデックス-
.sh_info0x00000000最後の局所シンボルのシンボルテーブルインデックスより1大きい-
.sh_addralign0x00000001セクションがメモリにロードされる際のバイトアラインメント1バイト
.sh_entsize0x00000000構造体配列になっているセクションで利用される。配列要素のサイズ-

セクション本体はオフセット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.
リンク元
 |