.eh_frame 与 .debug_frame 部分?

.eh_frame vs .debug_frame section?

提问人:Fee 提问时间:5/8/2023 最后编辑:Fee 更新时间:5/9/2023 访问量:392

问:

该部分似乎包含堆栈展开信息,并由矮人标准定义。.debug_frame

该部分似乎基本上包含相同的信息,但有一些细微的差异,并且由 linux 基金会定义.eh_frame

  • 为什么同一件事有两个非常相似的标准?

  • 什么时候使用一个部分而不是另一个部分?

GCC Clang 精灵 矮人 堆栈展开

评论


答:

3赞 Employed Russian 5/9/2023 #1

该部分似乎基本上包含相同的信息.eh_frame

例外是正常工作所必需的。它必须包含足够的信息,以便从所有可能引发异常的地方展开,但不必包含除此以外的任何内容。例如,它不需要包含通过函数序言或尾声展开所需的信息,因为那里不会提出任何异常。.eh_frame

(和其他部分)仅用于调试(以及“自我感知”程序,这些程序在崩溃时会展开自己的堆栈)。它应该包含足够的信息,以便调试器从程序中的任意位置展开堆栈,尽管在实践中它可能不是(例如,LLVM 目前没有发出函数尾声的准确信息)。.debug_frame.debug_*