当前位置:  开发笔记 > 编程语言 > 正文

来自readelf的DWARF转储中最左边的数字是什么意思?

如何解决《来自readelf的DWARF转储中最左边的数字是什么意思?》经验,为你挑选了1个好方法。

例如:

 <0>: Abbrev Number: 1 (DW_TAG_compile_unit)
       DW_AT_producer    : (indirect string, offset: 0xe): GNU C1
1 5.4.0 20160609 -masm=intel -m32 -mtune=generic -march=i686 -g -fst
ack-protector-strong
    <10>   DW_AT_language    : 12       (ANSI C99)
    <11>   DW_AT_name        : (indirect string, offset: 0xbe): hell
o.c
    <15>   DW_AT_comp_dir    : (indirect string, offset: 0x97): /tmp
    <19>   DW_AT_low_pc      : 0x804840b
    <1d>   DW_AT_high_pc     : 0x2e
    <21>   DW_AT_stmt_list   : 0x0
 <1><25>: Abbrev Number: 2 (DW_TAG_base_type)
    <26>   DW_AT_byte_size   : 4
    <27>   DW_AT_encoding    : 7        (unsigned)
    <28>   DW_AT_name        : (indirect string, offset: 0x77): unsi
gned int
 <1><2c>: Abbrev Number: 2 (DW_TAG_base_type)
    <2d>   DW_AT_byte_size   : 1
    <2e>   DW_AT_encoding    : 8        (unsigned char)
    <2f>   DW_AT_name        : (indirect string, offset: 0x84): unsi
gned char
 <1><33>: Abbrev Number: 2 (DW_TAG_base_type)
    <34>   DW_AT_byte_size   : 2
    <35>   DW_AT_encoding    : 7        (unsigned)
    <36>   DW_AT_name        : (indirect string, offset: 0xa1): shor
t unsigned int

在每个模具入口的开始,有一个数字,如<0>,<1>...什么做这些数字意味着?似乎相同的数字表示相同的DWARF类型,我想例如条目具有<1>均值它们都是 (DW_TAG_base_type).



1> Tom Tromey..:

DWARF DIE排列在树上.最左边的数字告诉你DIE的深度.在你的例子中:

 <0>: Abbrev Number: 1 (DW_TAG_compile_unit)

<0>意味着这个DIE出现在最外层.这只适用于编译或类型单元DIE.

然后:

 <1><25>: Abbrev Number: 2 (DW_TAG_base_type)

这个DIE是编译单元DIE的子代.

你可以得到更深的嵌套; 例如,函数的局部变量可能是非常深层嵌套的,具体取决于函数的块结构.命名空间中的项也可以嵌套.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有