我可以通过 "GOT address" 获取交易品种名称吗?
Can I get symbol name by "GOT address"?
现在我正在使用 pyelftools
库开发类似 readelf
的程序。
我想像下面那样打印 table。
在这里,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
的函数来解决00001c50
到stderr@GLIBC_2.0
.
问题: 但是,我在二进制文件中找不到GOT address
和symbol name
之间的任何链接信息.我怎么才能得到它?
.rel.dyn
部分中的每个条目至少包含以下字段:
r_offset;
r_info;
所以首先扫描该部分直到地址匹配条目的 r_offset
字段,然后字段 r_info
包含(也)符号 table 的索引,它是根据这个:
/* 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
索引,然后从符号 table 中获取条目,它具有字段 st_name
,这是字符串 [=28] 的索引=],其中包含字符表示中的符号名称。
更多信息链接:
rel.dyn section description -> symbol table description -> string table description
现在我正在使用 pyelftools
库开发类似 readelf
的程序。
我想像下面那样打印 table。
在这里,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
的函数来解决00001c50
到stderr@GLIBC_2.0
.
问题: 但是,我在二进制文件中找不到GOT address
和symbol name
之间的任何链接信息.我怎么才能得到它?
.rel.dyn
部分中的每个条目至少包含以下字段:
r_offset;
r_info;
所以首先扫描该部分直到地址匹配条目的 r_offset
字段,然后字段 r_info
包含(也)符号 table 的索引,它是根据这个:
/* 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
索引,然后从符号 table 中获取条目,它具有字段 st_name
,这是字符串 [=28] 的索引=],其中包含字符表示中的符号名称。
更多信息链接:
rel.dyn section description -> symbol table description -> string table description