是否可以在目标文件上生成展开表

问题描述 投票:2回答:1

背景是我们有一个没有展开表的预建对象文件,但不知何故,gcc unwind在对象上有回溯问题。是否可以生成没有源代码的展开表?考虑展开表是基于堆栈静态的,即使没有源代码也可以使用。

gcc compiler-construction binutils dwarf stack-unwinding
1个回答
2
投票

通常,无法从目标文件中的机器代码生成正确的展开表。首先,一些结构很难在展开信息中准确表示。 Retpolines就是一个例子。

更大的实际问题是DWARF展开信息是按功能构造的。裸目标文件(没有调试信息,只有最小符号表)不捕获功能边界信息。没有它,就不可能说文件中的位置是函数调用的目标还是函数的开始。类似地,对noreturn函数的调用可能是函数中的最后一条指令,即使它后面没有返回指令。可以使用重定位数据。有几种工具试图推断出功能界限;每个反汇编程序都在某种程度上做到了。

最好的办法是找到失败的功能并找出原因,然后使用自定义编写的展开数据或GDB插件进行补偿。作为Alexey Frunze said,完全转换将是相当乏味的。

© www.soinside.com 2019 - 2024. All rights reserved.