[Dwarf-discuss] Facing a issue in contents of dwarf debug info section in an ELF file
Rishi Raj
rishiraj45035@gmail.com
Mon Sep 25 07:26:49 GMT 2023
Thanks, it worked.
On Mon, 25 Sept 2023, 12:42 Kyle Huey, <khuey@pernos.co> wrote:
> Most likely the .debug_info section is SHF_COMPRESSED. Try compiling with
> -gz=none.
>
> - Kyle
>
> On Mon, Sep 25, 2023, 1:36 PM Rishi Raj via Dwarf-discuss <
> dwarf-discuss@lists.dwarfstd.org> wrote:
>
>> <https://stackoverflow.com/posts/77169835/timeline>
>>
>> I am trying to implement a dwarf parser in C++ without using any external
>> dependencies. As mentioned in dwarf5 standard, debug info first 4 bytes or
>> 12 bytes denotes the unit length Basically this:
>>
>> unit_length (initial length)
>> A 4-byte or 12-byte unsigned integer representing the length of the3
>> .debug_info contribution for that compilation unit, not including the length field itself. In the 32-bit DWARF format, this is a 4-byte unsigned integer (which must be less than 0xfffffff0); in the 64-bit DWARF format, this consists of the 4-byte value 0xffffffff followed by an 8-byte unsigned integer that gives the actual length (see Section 7.4 on page 196).
>>
>> When I am dumping the .debug_info section hexadecimally using objdump I
>> am getting this(see readelf output below).
>>
>> objdump -s -j .debug_info hello.o
>>
>> hello.o: file format elf64-x86-64
>>
>> Contents of section .debug_info:
>>
>> 0000 01000000 00000000 9a000000 00000000 ................
>> 0010 01000000 00000000 789c9bc6 c0c0c0ca ........x.......
>> 0020 c0c801a4 18984084 2c031a10 42623372 ......@.,...Bb3r
>> 0030 b0832916 0805d1c6 c804e5b1 4178ac20 ..).........Ax.
>> 0040 8a998535 33af04a8 8115498e 05aa2002 ...53.....I... .
>> 0050 8bf18c73 58131918 99394172 4c137318 ...sX....9ArL.s.
>> 0060 180011e5 0560
>>
>> So according to this, the length should be 0x01000000, but the actual
>> length is 0x96.(see readelf output below)
>> readelf -wi hello.o
>> Contents of the .debug_info section:
>>
>> Compilation Unit @ offset 0:
>> Length: 0x96 (32-bit)
>> Version: 5 Unit Type: DW_UT_compile (1) Abbrev Offset: 0
>> Pointer Size: 8
>>
>> I know I am missing something basic, but even after reading the standards
>> for many times. I am unable to find my mistake. One more thing, I searched
>> for some basic dwarf parsers so that I could understand what they are doing
>> but could not find any. All of the parsers were big libraries, which was
>> difficult to understand. If any of you can at least provide some readable
>> and understandable parser code, It will be helpful too.
>>
>> ELF header dump:
>>
>> ELF Header:
>> Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
>> Class: ELF64
>> Data: 2's complement, little endian
>> Version: 1 (current)
>> OS/ABI: UNIX - System V
>> ABI Version: 0
>> Type: REL (Relocatable file)
>> Machine: Advanced Micro Devices X86-64
>> Version: 0x1
>> Entry point address: 0x0
>> Start of program headers: 0 (bytes into file)
>> Start of section headers: 3048 (bytes into file)
>> Flags: 0x0
>> Size of this header: 64 (bytes)
>> Size of program headers: 0 (bytes)
>> Number of program headers: 0
>> Size of section headers: 64 (bytes)
>> --
>> Dwarf-discuss mailing list
>> Dwarf-discuss@lists.dwarfstd.org
>> https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.dwarfstd.org/pipermail/dwarf-discuss/attachments/20230925/a3e5ad33/attachment-0001.htm>
More information about the Dwarf-discuss
mailing list