我知道,当使用支持异常的语言(如C++)时,必须向运行时环境提供附加信息,以描述在处理异常时必须解开的调用帧。此信息包含在对象文件的特殊部分中,例如.eh\u frame和.eh\u frame\u hdr
但是,这些部分中存储了什么样的数据结构?我的意思是,它们可以用任何C结构来读取吗?它们与GNU汇编代码中的.cfi语句(如.cfi\u startproc,.cfi\u endproc,.cfi\u offset,.cfi\u offset,.cfi\u personality和.cfi\u lsda)有关吗?如果他们这样做了,这些条款中的每一条在这些章节中会导致什么?.eh\u frame\u hdr部分与.eh\u frame部分有什么关系
我希望尽可能多地使用C结构进行解释。多谢各位
请参见cfi指令
它应该涵盖大部分相关章节的历史和理论
关于eh_框架,它包含异常解除和源语言信息。本节中的每个条目由单个CFI(调用帧信息)表示
参见linuxfoundation中的eh_框架
EHFrimulyHDR,C++运行时代码用于访问EH帧。这意味着,它包含指针和二进制搜索表,可以有效地从eh_帧检索信息
现在,如果您想了解如何读/写这些部分,那么我建议您看看下面的链接器代码
(查找EhFrame.cpp、EhFrameHdr.cpp和EhFrameReader.cpp)
祝你好运