.eh_frame和.eh_frame_hdr部分存储的是什么?

我知道,在使用支持exception的语言(如C ++)时,必须向运行时环境提供附加信息,以描述在处理exception期间必须展开的调用帧。 此信息包含在对象文件的特殊部分中,例如.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结构的解释。 谢谢。

请看cfi指令

它应该涵盖所讨论的大部分章节的历史和理论。

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

请参阅linuxfoundation中的eh_frame

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

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

(查找EhFrame.cpp,EhFrameHdr.cpp和EhFrameReader.cpp )

祝你好运 !!