gpt4 book ai didi

linux - 我可以通过 "GOT address"获取符号名称吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:57 24 4
gpt4 key购买 nike

现在我正在使用 pyelftools 库开发类似 readelf 的程序。

我想打印如下表格。
在这里,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
...


假设我只有未知符号的 GOT 地址(00001c50)。

我的情况 我想制作像 get_symname_by_GOTaddress 这样的函数来解析 00001c50stderr@GLIBC_2.0

问题: 但是,我在二进制文件中找不到GOT地址符号名之间的链接信息.我怎么才能得到它?

最佳答案

.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 section description -> symbol table description -> string table description

关于linux - 我可以通过 "GOT address"获取符号名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com