首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pyelftools获取程序头信息

用pyelftools获取程序头信息
EN

Stack Overflow用户
提问于 2020-08-14 16:57:41
回答 1查看 646关注 0票数 0

我只是想用pyelftools (偏移量、虚拟地址和物理地址)获取程序头信息。

这可以通过运行以下方式从终端执行:

readelf -l <elf_file>

但我很难从pyelftools获得同样的信息。我从这些例子中拼凑出以下几点:

代码语言:javascript
复制
elffile = ELFFile(stream)
section_header = elffile.structs.Elf_Shdr.parse_stream(stream)
print (section_header)

注意:Elf_Shdr是程序头文件。

这将打印偏移量、虚拟地址、物理地址等,但不是我想要的十六进制格式,也不是readelf打印它的方式。有没有办法让它打印出像readelf这样的十六进制格式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-16 15:27:15

在你的岗位上发生了一些奇怪的事情。

你说:

我只是想用pyelftools (偏移量、虚拟地址和物理地址)获取程序头信息。注意: Elf_Shdr是程序头文件。

但是Elf_Shdr不是程序头,而是节头。看看elftools/elf/structs.py

代码语言:javascript
复制
Elf_Shdr:
                Section header

然后,在您的代码中,您将以某种原因解析两次文件。第一个字符串足以解析它,您可以从elffile对象访问所有头数据:

代码语言:javascript
复制
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 - 这里实现的这里感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63417042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档