繁体   English   中英

获取有关ELF中的功能和相关符号的信息

[英]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;
   }
}

使用libbfd:

https://sourceware.org/binutils/docs/bfd/

这是binutils工具用来获取有关ELF符号的信息的库。

您也可以编写自己的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM