【ELF形式】.gnu.hash セクション

セクションヘッダの内容をダンプしてみます。

#
# .gnu.hash
#
# セクションヘッダ
$ od -x -A x -j0x11ec -N0x28 sample
0011ec 0044 0000 fff6 6fff 0002 0000 81ac 0804
0011fc 01ac 0000 0020 0000 0005 0000 0000 0000
00120c 0004 0000 0004 0000
001214

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

Elf_Shdr バイナリ 項目 バイナリの意味
.sh_name 0x00000044 セクション名 ".gnu.hash"
.sh_type 0x6ffffff6 セクションのタイプ GNU形式ハッシュテーブル(SHT_GNU_HASH)
.sh_flags 0x00000002 各種フラグ ロード時にメモリ上に領域確保するセクション(SHF_ALLOC)
.sh_addr 0x080481ac ロード先アドレス 0x080481ac
.sh_offset 0x000001ac ELF形式中でのセクションの位置 0x1ac
.sh_size 0x00000020 セクションのバイトサイズ 32バイト
.sh_link 0x00000005 関連付けられているシンボルテーブルのセクションヘッダインデックス 第5セクション(.dynsym)に関連付け
.sh_info 0x00000000 (同上) -
.sh_addralign 0x00000004 セクションがメモリにロードされる際のバイトアラインメント 4バイト
.sh_entsize 0x00000004 構造体配列になっているセクションで利用される。配列要素のサイズ 4バイト

セクション内容をダンプしてみます。

#セクション
$ od -x -A x -j0x01ac -N0x20 sample
0001ac 0002 0000 0003 0000 0001 0000 0005 0000
0001bc 2000 2000 0000 0000 0003 0000 4bad c0e3
0001cc

$ readelf -x4 sample

セクション '.gnu.hash' の 十六進数ダンプ:
  0x080481ac 02000000 03000000 01000000 05000000 ................
  0x080481bc 00200020 00000000 03000000 ad4be3c0 . . .........K..

.gnu.hashセクションは、.sh_linkを見ると、第5セクション(.dynsym)に関連付けられたハッシュテーブルのようなので、のちほど.dynsymと合わせて見てみたいと思います。