".eh_frame"和".eh_frame_hdr"这两个部分存储了什么内容,确切地说是什么?涉及到IT技术。

33

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

1个回答

26
请查看cfi-directives,它应该涵盖大部分相关部分的历史和理论。
关于eh_frame,它包含了异常展开和源语言信息。此节中的每个条目都由单个CFI(调用帧信息)表示。
请参见linuxfoundation中的eh_frame
eh_frame_hdr被C ++运行时代码用于访问eh_frame。这意味着它包含指针和二进制搜索表,以有效地从eh_frame检索信息。
现在,如果您想查看如何读取/写入这些部分,那么我建议您查看以下链接器代码。
(查找EhFrame.cpp、EhFrameHdr.cpp和EhFrameReader.cpp
祝你好运!

7
Mozilla博客的链接已经失效。 - user117529
在网络档案中找到了这个链接:http://web.archive.org/web/20130111101034/http://blog.mozilla.org/respindola/2011/05/12/cfi-directives - Icarus3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接