使用pyelftools抓取程序头信息
Grabbing program header information with pyelftools
我只是想通过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
?
这样的十六进制格式
你的 post 发生了一些奇怪的事情。
你说:
I am simply trying to grab the program header information with
pyelftools (the offset, virtual address, and physical address).
Note: Elf_Shdr is the program header file.
但是 Elf_Shdr 不是程序 header,而是部分 header。看看elftools/elf/structs.py
Elf_Shdr:
Section header
然后在你的代码中你出于某种原因解析了文件两次。第一个字符串足以解析它,您可以从 elffile
object:
访问所有 header 数据
for segment in elffile.iter_segments():
header = segment.header
for key, value in header.items():
if isinstance(value, int):
print(key, hex(value))
这里我遍历ELF文件的所有段(它们由程序headers描述),然后遍历header中的所有属性,如果是整数则将它们打印为十六进制。这里没有魔法,header 只是标准字典的容器。
您也可能对使用 pyelftools 实现的 readelf
感兴趣 - here.
我只是想通过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
?
你的 post 发生了一些奇怪的事情。
你说:
I am simply trying to grab the program header information with pyelftools (the offset, virtual address, and physical address).
Note: Elf_Shdr is the program header file.
但是 Elf_Shdr 不是程序 header,而是部分 header。看看elftools/elf/structs.py
Elf_Shdr:
Section header
然后在你的代码中你出于某种原因解析了文件两次。第一个字符串足以解析它,您可以从 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文件的所有段(它们由程序headers描述),然后遍历header中的所有属性,如果是整数则将它们打印为十六进制。这里没有魔法,header 只是标准字典的容器。
您也可能对使用 pyelftools 实现的 readelf
感兴趣 - here.