我知道,当使用支持异常的语言(例如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结构进行解释。谢谢。