我想在C / C ++中检查函数和相关符号(ELF)。
我之前使用过gdb,然后获取了我想要的信息。
gdb ./mybinary
<gdb promt and reading elf..>
(gdb) info functions
0x000000000067a5a0 bfd_true
<etc..>
因此,我的问题是如何在我的程序中获取相同的信息。
注意: 我希望能够在我的程序中逐个查看带有相关符号的函数,而不是像gdb那样一次性完成。
为任务提供代码:
int main()
{
// any code for elf lookup (functions and related symbol) (while loop)
// result_symbol is a variable with information about function related symbol
// result_function is a variable with information about function name
// it should be possible to compare the data with other data
char function_compare = "system";
if(!strcmp(result_function, function_compare)
{
std::cout << "system() function found in the ELF!" << std::endl;
}
}
答案 0 :(得分:0)
答案 1 :(得分:-1)
您也可以编写自己的ELF解析器。 请注意,32位和64位平台的对象略有不同。
导出的函数列在重定位表上, 符号名称分别位于SHT_SYNSYM / ELF32_Sym或SHT_SYNSYM / ELF64_Sym下。 重定位地址通常在x86上为R_386_ *,在64位对象上为R_X86_64_GLOB_DAT / R_X86_64_JMP_SLOT。
ELF设计简单,供您参考,我的32位解析器大约有350行代码,而64位解析器大约是320行,而且它们不仅仅是解析格式。
找到更多参考资料我建议还阅读外部链接中提供的x86和x86_64的ELF ABI。