现在,我正在使用readelf库开发类似于pyelftools的程序。
我想像下面这样打印这张桌子。
在这里,Offset字段是stderr@GOT地址。
jiwon@jiwon$ readelf -a --wide libstdbuf.so
...
Relocation section '.rel.dyn' at offset 0x454 contains 12 entries:
Offset Info Type Sym. Value Symbol's Name
00001c50 00000206 R_386_GLOB_DAT 00000000 stderr@GLIBC_2.0
...假设我只有未知符号的地址(00001c50)。
我的情况,我想让函数像get_symname_by_GOTaddress一样,从00001c50到stderr@GLIBC_2.0进行解析。
问题:,但是我在二进制文件中找不到GOT address和symbol name之间的任何链接信息。我怎么才能拿到呢?
发布于 2018-10-02 14:45:47
.rel.dyn部分中的每个条目至少有以下字段:
r_offset;
r_info;因此,首先扫描该部分,直到地址匹配条目的r_offset字段为止,然后字段r_info包含(也)符号表的索引,该索引是根据以下内容组成的:
/* for 32bit */
#define ELF32_R_INFO(sym, type) (((sym)<<8)+(unsigned char)(type))
/* for 64bit */
#define ELF64_R_INFO(sym, type) (((Elf64_Xword)(sym)<<32)+ \
(Elf64_Xword)(type))因此,您可以提取sym索引,然后从符号表中获取条目,该表具有字段st_name,该字段是字符串表中的索引,字符串表中包含字符表示形式中的符号名。
有关更多信息的链接:
rel.dyn剖面描述 -> 符号表描述 -> 字符串表描述
https://stackoverflow.com/questions/52594277
复制相似问题