.eh_frame和.eh_frame_hdr部分究竟存储了什么?

时间:2012-12-30 13:48:10

标签: linux gcc exception-handling elf

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

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

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

1 个答案:

答案 0 :(得分:19)

请参阅cfi-directives

它应该涵盖大多数部分的历史和理论。

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

表示

eh_frame in linuxfoundation

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

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

(寻找EhFrame.cpp, EhFrameHdr.cpp and EhFrameReader.cpp

祝你好运!!