32

我知道,在使用支持异常的语言(例如 C++)时,必须向运行时环境提供附加信息,以描述在处理异常期间必须展开的调用帧。此信息包含在目标文件的特殊部分中,例如.eh_frame.eh_frame_hdr

但是,这些部分中存储了什么样的数据结构?我的意思是,可以使用任何 C 结构来读取它们吗?它们与GNU 汇编代码中的.cfi语句(例如.cfi_startproc.cfi_endproc.cfi_offset、和)有什么关系吗?如果他们这样做,这些条款中的每一个在这些部分中导致什么?该部分与该部分有什么关系?.cfi_def_cfa_offset.cfi_personality.cfi_lsda.eh_frame_hdr.eh_frame

我希望尽可能多地使用 C 结构进行解释。谢谢你。

4

1 回答 1

23

请参阅cfi 指令

它应该涵盖大部分相关部分的历史和理论。

关于eh_frame,它包含异常展开和源语言信息。本节中的每个条目由单个 CFI(调用帧信息)表示

见,linuxfoundation 中的 eh_frame

eh_frame_hdr,由 c++ 运行时代码用于访问 eh_frame。这意味着,它包含指针和二进制搜索表,以有效地从 eh_frame 检索信息。

现在,如果你想看看你是如何读/写这部分的,那么我建议你看看下面的链接器代码。

(寻找EhFrame.cpp、EhFrameHdr.cpp 和 EhFrameReader.cpp

祝你好运 !!

于 2012-12-30T15:20:00.720 回答