Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pyelftools获取程序头信息_Python_Elf_Pyelftools - Fatal编程技术网

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))