我只是想用pyelftools (偏移量、虚拟地址和物理地址)获取程序头信息。
这可以通过运行以下方式从终端执行:
readelf -l <elf_file>
但我很难从pyelftools获得同样的信息。我从这些例子中拼凑出以下几点:
elffile = ELFFile(stream)
section_header = elffile.structs.Elf_Shdr.parse_stream(stream)
print (section_header)注意:Elf_Shdr是程序头文件。
这将打印偏移量、虚拟地址、物理地址等,但不是我想要的十六进制格式,也不是readelf打印它的方式。有没有办法让它打印出像readelf这样的十六进制格式
发布于 2020-08-16 15:27:15
在你的岗位上发生了一些奇怪的事情。
你说:
我只是想用pyelftools (偏移量、虚拟地址和物理地址)获取程序头信息。注意: Elf_Shdr是程序头文件。
但是Elf_Shdr不是程序头,而是节头。看看elftools/elf/structs.py
Elf_Shdr:
Section header然后,在您的代码中,您将以某种原因解析两次文件。第一个字符串足以解析它,您可以从elffile对象访问所有头数据:
for segment in elffile.iter_segments():
header = segment.header
for key, value in header.items():
if isinstance(value, int):
print(key, hex(value))这里,我迭代ELF文件的所有段(它们由程序头描述),然后迭代标题中的所有属性,如果它们是整数,则将它们打印为十六进制。这里没有魔法,标题只是标准字典的容器。
https://stackoverflow.com/questions/63417042
复制相似问题