Python 使用pyelftools获取程序头信息
我只是想用Python 使用pyelftools获取程序头信息,python,elf,pyelftools,Python,Elf,Pyelftools,我只是想用pyelftools(偏移量、虚拟地址和物理地址)获取程序头信息 这可以通过运行以下命令从终端完成: readelf-l 但是我很难从pyelftools获得相同的信息。从这些例子中,我拼凑了以下内容: elffile = ELFFile(stream) section_header = elffile.structs.Elf_Shdr.parse_stream(stream) print (section_header) 注意:Elf_Shdr是程序头文件 这将打印偏移量、虚拟地址
pyelftools
(偏移量、虚拟地址和物理地址)获取程序头信息
这可以通过运行以下命令从终端完成:
readelf-l
但是我很难从pyelftools获得相同的信息。从这些例子中,我拼凑了以下内容:
elffile = ELFFile(stream)
section_header = elffile.structs.Elf_Shdr.parse_stream(stream)
print (section_header)
注意:Elf_Shdr
是程序头文件
这将打印偏移量、虚拟地址、物理地址等,但不是我想要的十六进制格式,或者像
readelf
那样打印。有没有办法让它打印出十六进制格式,比如readelf
?你的帖子中发生了一些奇怪的事情
你说:
我只是想用它来获取程序标题信息
pyelftools(偏移量、虚拟地址和物理地址)
注意:Elf_Shdr是程序头文件
但Elf_Shdr不是程序头,而是节头。看
然后在代码中,由于某种原因,您对文件进行了两次解析。第一个字符串足以解析它,您可以从elffile
object:
for segment in elffile.iter_segments():
header = segment.header
for key, value in header.items():
if isinstance(value, int):
print(key, hex(value))
在这里,我迭代ELF文件的所有段(它们由程序头描述),然后迭代头中的所有属性,如果是整数,则将它们打印为十六进制。这里并没有魔法,头只是标准字典的容器
另外,您可能对使用pyelftools实现的
readelf
感兴趣。您有一个带有字段的Python对象。当然,您可以按照自己喜欢的方式确定这些字段的格式吗?
for segment in elffile.iter_segments():
header = segment.header
for key, value in header.items():
if isinstance(value, int):
print(key, hex(value))