我正在考虑解释动态符号表(.dynsym
)的 ELF 可执行文件。我可以成功解释符号表.symtab
(每个符号 16 个字节)使用value
属性来表示符号的地址和name
属性表示字符串开头的偏移量.strtab
部分。但我无法解释动态符号表(.dynsym
)使用相同的方法。我参考了阿里的博客[1]。
我看了阿里的另一个博客[2],但我不明白如何使用哈希表解释动态符号表。显然,它与符号表使用的映射不同。我应该如何解释动态符号表(.dynsym)?
另外,我正在查看的 ELF 可执行文件有两个部分,即.hash
and .gnu.hash
。我应该参考哪一部分来获取哈希值?
[1] http://blogs.oracle.com/ali/entry/inside_elf_symbol_tables
[2] http://blogs.oracle.com/ali/entry/gnu_hash_elf_sections
根据 ELF 规范,每个符号都使用以下结构定义:
typedef struct {
Elf32_Word
Elf32_Addr
Elf32_Word
unsigned char
unsigned char
Elf32_Half
} Elf32_Sym;
所以一般来说这将是 16 个字节。动态和静态符号表使用相同的结构,因此解析该表对于静态和链接来说是相同的。当然,这些值的含义并不总是相同的。
您可以通过两种方式访问符号表中的符号。首先,如果您已经知道符号索引,则可以直接转到该索引。但有时您没有符号索引,只有符号名称,实际上您想检查符号表是否有具有该名称的符号的定义。在第二种情况下,您使用哈希部分。这些用于快速检查符号表中是否存在符号:symbol-name
-> hash
-> symb_index
-> 检查是否symbol_table[symb_index] == symbol-name
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)