Что означает крайняя левая цифра в дампе DWARF из readelf?

Например:

 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <c>   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

В начале каждой записи DIE есть число, такое как <0>, <1>... что означают эти числа? Похоже, что одно и то же число указывает на один и тот же тип DWARF, я думаю, например. записи с <1> означают, что все они (DW_TAG_base_type).


person Amumu    schedule 12.01.2017    source источник


Ответы (1)


DWARF DIE расположены в виде дерева. Крайняя левая цифра говорит вам о глубине DIE. В вашем примере:

 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)

<0> означает, что этот DIE появляется на самом внешнем уровне. Это произойдет только при компиляции или вводе единиц DIE.

Затем:

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

Этот DIE является потомком модуля компиляции DIE.

Вы можете получить более глубокую вложенность; например, локальные переменные функции могут быть довольно глубоко вложены, в зависимости от блочной структуры функции. Элементы в пространстве имен также могут быть вложенными.

person Tom Tromey    schedule 12.01.2017