![](/img/trans.png)
[英]Can I get object name from a symbol information in the symbol table in an ELF file?
[英]Get information about functions and related symbol in ELF
我想检查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;
}
}
您也可以编写自己的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行代码,它们所做的不仅仅是解析格式。
您可以在以下网站找到更多参考: wiki.OSDev.org/ELF
我建议还阅读外部链接中提供的x86和x86_64的ELF ABI。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.