【发布时间】:2019-03-02 06:55:23
【问题描述】:
背景是我们有一个没有展开表的预构建对象文件,但不知何故 gcc unwind 在对象上回溯有问题。是否可以在没有源代码的情况下生成展开表?考虑到展开表是基于堆栈静态的,即使没有源代码也可以使用。
【问题讨论】:
-
gcc 还是 gdb? gcc 不应该展开任何事情。我假设 gdb 或类似的工具。而且我认为这与异常处理无关(在这种情况下,您确实需要足够的展开信息才能使代码正常工作,更不用说可调试了)。如果您可以准确地反汇编目标文件并插入足够多的 CFI 指令并将其组装回来,那么您应该能够纠正这种情况。视情况而定,这可能是不切实际的乏味。
-
感谢您的回复。我的意思是当 -funwind-table 传递给 GCC 时在目标文件中生成的展开表。
-
@AlexeyFrunze 关于准确反汇编目标文件,这是一个有趣的观点。是否可以将对象分解为 asm 文件并重新组装回来?
-
在here 周围寻找项目、论文和想法。
-
@AlexeyFrunze 谢谢。
标签: gcc compiler-construction binutils dwarf stack-unwinding