gpt4 book ai didi

C++ dwarf 标签编号格式

转载 作者:行者123 更新时间:2023-11-28 03:15:44 29 4
gpt4 key购买 nike

考虑以下矮人代码示例 -

<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0xd): GNU C++ 4.3.0 20080428 (Red Hat 4.3.0-8)
<10> DW_AT_language : 4 (C++)
<11> DW_AT_name : (indirect string, offset: 0x75): test.cpp
<15> DW_AT_comp_dir : (indirect string, offset: 0x4d): /home/dwarf
<19> DW_AT_low_pc : 0x0
<21> DW_AT_high_pc : 0xb
<29> DW_AT_stmt_list : 0x0
<1><2d>: Abbrev Number: 2 (DW_TAG_class_type)
<2e> DW_AT_name : C
<30> DW_AT_byte_size : 8
<31> DW_AT_decl_file : 1
<32> DW_AT_decl_line : 1
<33> DW_AT_sibling : <0x86>
<2><37>: Abbrev Number: 3 (DW_TAG_member)
<38> DW_AT_name : x
<3a> DW_AT_decl_file : 1
<3b> DW_AT_decl_line : 7
<3c> DW_AT_type : <0x86>
<40> DW_AT_data_member_location: 2 byte block: 23 0 (DW_OP_plus_uconst: 0)
<43> DW_AT_accessibility: 3 (private)
<2><44>: Abbrev Number: 3 (DW_TAG_member)
<45> DW_AT_name : y
<47> DW_AT_decl_file : 1
<48> DW_AT_decl_line : 8
<49> DW_AT_type : <0x86>
<4d> DW_AT_data_member_location: 2 byte block: 23 4 (DW_OP_plus_uconst: 4)
<50> DW_AT_accessibility: 3 (private)

我一直在研究一个通过 dwarf 文件进行解析的程序,但我不确定其中的一部分。如果您注意到,每个标签的左侧都有一个额外的数字(在此示例中有 <0>、<1> 和 <2>)。我不太确定那是什么。我认为这是某种堆栈级别或某种东西,因为 <0> 被赋予整个程序, <1> 被赋予顶级类,而 <2> 被赋予其成员变量。但是,我无法在 documentation 中找到任何内容。 .作为引用,这里是原始程序 -

class C {
public:
C();
C(int x, int y);
int getX();
private:
int x;
int y;
};

class SubC : public C {
int z;
};

int f() {return 0;}

C c;
SubC subC;

int i;
double d;

最佳答案

DWARF DIE 被组织成一棵树 - 单个文件的顶级 DW_TAG_compile_unit 将包含所有类型定义(例如 DW_TAG_class_type)、所有函数(DW_TAG_subprogram) 和全局/静态变量 (DW_TAG_variable)。类定义 (DW_TAG_class_type) 将是父 DIE 并包含子项,例如用于成员变量的 DW_TAG_member 或用于方法的 DW_TAG_subprogram

您附加的输出是您特定的 DWARF 转储程序的运行方式 - 看起来它正在使用该数字来显示父/子关系。这是 readelf 吗?其他 dwarf dumper 程序可能会选择以不同的方式显示这一点。在 Mac OS X 上,dwarfdump 显示了这种与缩进的关系 - 子 DIE 的缩进比父 DIE 多一点。

如果您正在查看 http://dwarfstd.org/ 上的 DWARF 规范你不会在标准中找到关于这个数字的任何信息——但是如果你编写一个真正的 DWARF 解析器(而不是解释 readelf 或其他任何输出的解析器),你会看到DWARF4 规范中的第 2.3 节(“调试信息条目的关系”)和第 7.5.3 节“缩写表”(DW_CHILDREN_yesDW_CHILDREN_no)涵盖了该主题。

关于C++ dwarf 标签编号格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946281/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com