【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.