首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ELF文件中反汇编.text部分的行转到源代码中对应的行

如何将ELF文件中反汇编.text部分的行转到源代码中对应的行
EN

Stack Overflow用户
提问于 2020-04-22 15:54:12
回答 1查看 417关注 0票数 0

我正在尝试用Python创建一个行覆盖程序。

目标是从在设备上运行的测试接收PC列表,并获得所述设备的固件的哪些功能、条件和线路被测试覆盖的信息。

所述设备具有ARC处理器,如果这有帮助的话。

我有ELF二进制文件和源代码(用C编写),但不能在这里分享它们(公司机密信息)。

我已经获取了ELF文件,并设法获得了.text段的反汇编(本质上是程序的汇编代码)。

我已经拆卸了设备的FW,所以我以这种方式拆卸了FW:

PC: hex_opcode assembly_command操作数

如下所示:

0x100: 7effmov a,b

另外,使用来自Eli Bendersky的pyelftools:https://github.com/eliben/pyelftools

我已经设法获得了源文件和函数开头的行号,因此我已经设法将每个函数的汇编代码映射到source。

从函数中使用High PC和Low PC,我已经成功地将PC从测试日志链接到函数。

但是现在我被卡住了,试图将单个装配线映射到它们在C源代码中的位置。

我知道我需要在DWARF中阅读.debug_line中的信息,但我不太理解它。

我成功地发现了这一点:

https://wiki.osdev.org/DWARF

他们说: Line += Line base +(操作码-操作码基础)%行范围

我有除Line和Opcode之外的所有信息。

所谓“行”,是指函数的起始行吗?(f.e.如果"void func()“位于文件Soure.c第5行)上一行?

" opcode“是汇编命令的主要操作码吗?或者是完整的汇编命令操作码(如二进制表示中的0x7efff)?来自DWARF info的其他操作码?

根据我的理解,计算是以十进制完成的,所以操作码必须转换为十进制。

提前感谢你的帮助。

瓦迪姆

EN

回答 1

Stack Overflow用户

发布于 2020-04-22 23:10:47

,但是现在我被卡住了,试图将单个装配线映射到它们在C源代码中的位置。

你想要两样东西:

  1. 使用调试信息构建固件。通常,您只需要将-g添加到所有现有的编译和链接行中。

注意:不要删除任何优化标志,否则编译后的代码将不再与您为其收集覆盖率的二进制代码相匹配。

注意:如果您的构建过程运行strip,则需要在剥离之前保存二进制文件。

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

https://stackoverflow.com/questions/61359930

复制
相关文章

相似问题

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