我正在寻找一种很好的方法来枚举当前二进制文件和当前进程可能加载的所有共享对象的所有ELF部分及其地址。
我知道dl_iterate_phdr()的存在,它为我提供了一个易于使用的ELF段列表,但是我正在寻找ELF部分,所以它不是我的正确调用。
我不关心可移植性,只要它在Linux上与ELF一起工作,我就很高兴!
任何暗示都很感激!
发布于 2012-02-01 23:44:53
我假设您正在尝试以编程方式从C/C++程序中访问这些信息。我怀疑您应该能够使用GNU二进制文件描述符库 (BFD)做您想做的事情,它用于实现GNU链接器、objdump等(它还有一个维基百科文章)。特别是参阅手册的第2.6节,它都是关于章节的。BFD创建一个"部分“链接列表,通过结构bfd的”节“成员访问。我认为您应该能够在argv上使用fopen打开当前的二进制文件。BFD船与二值。
发布于 2012-02-02 01:36:25
这听起来是个很糟糕的主意,但是如果您对它有合法的使用,我只需要解析/proc/self/maps
并打开引用的文件。没有理由相信节头甚至被映射到内存中;很可能,它们位于磁盘上的.data
之后,因此在将共享对象映射到内存时将被.bss
的零覆盖。
打开文件后,可以使用libbfd
,但我将直接使用elf.h
。跟踪Ehdr
到Shdr
表很容易。
发布于 2012-02-01 23:48:36
Read亲自命令可以这样做,例如,readelf -s
这并不简单,所以发布到readelf源代码的链接似乎是最好的选择。其中一个原因是处理标头和节结构需要大量的宏。
8c-source.html
https://stackoverflow.com/questions/9104694
复制相似问题