调用帧信息解析与查找
1. 解析基础操作
在处理指针时,我们将 base 初始化为 0。接着,屏蔽掉最低 4 位和最高位,确定结果对应哪个相关的 DW_EH_PE_* 宏。屏蔽最高位(0x80)是因为它对应间接编码方案,我们无需处理。
如果指针是绝对的,基地址为 0;否则,基地址是作为参数给出的四个值之一。在每种情况下,如果请求的编码没有提供基地址,我们会抛出异常。然后,我们使用计算出的基地址调用 parse_eh_frame_pointer_with_base 并返回结果。
2. 解析帧描述项(FDE)
FDE 比公共信息项(CIE)更简单,但结构非常相似,因此解析它们无需学习新的概念。
- 定义存储类型 :在 sdb/include/libsdb/dwarf.hpp 中,在 common_information_entry 定义下方添加嵌套类型来存储 FDE 数据:
namespace sdb {
class call_frame_information {
public:
// ...
struct frame_description_entry {
std::uint32_t length;
const common_information_entry* cie;
file_addr initial_location;
超级会员免费看
订阅专栏 解锁全文
3263

被折叠的 条评论
为什么被折叠?



