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 >
-- Dwarf-discuss mailing list Dwarf-discuss@lists.dwarfstd.org https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss