Введите PT_NOTE, p_offset=p_addr=0x254, p_filesz=p_memsz =0x44
Смещение указывает на середину заголовка ELF (где-то в таблице сегментов). Байты, на которые он указывает, не похожи на действительные примечания — это настоящие данные заголовка программы. Числа 0x254/0x44 появляются слишком постоянно, чтобы быть совпадением.
Насколько я вижу, сегменты типа PT_NOTE все равно игнорируются загрузчиком Linux. Похоже, какой-то поставщик инструментальной цепочки решил использовать поля в сегменте типа заметки в качестве рабочего пространства - не для загрузки и/или сопоставления, а для другой интерпретации. Документ ABI не предполагает ничего подобного. В двоичных файлах также есть разделы типа примечаний в другом месте и с совершенно допустимым форматом.
Что здесь за история?РЕДАКТИРОВАТЬ: может быть это все-таки не царапина; по крайней мере, в имеющихся у меня двоичных файлах число 0x44 соответствует общему размеру разделов примечаний в них (ABI-тег 0x20 и идентификатор сборки 0x24). И все же, что со смещением и адресом?
В моих недавно созданных (с помощью GCC) двоичных файлах есть сегмент PT_NOTE размером 0x44, но смещение/адрес соответствует двум смежным нотам. разделы в двоичном формате. Таким образом, это может быть либо старая ошибка компоновщика, которую загрузчик простил и с тех пор исправил, либо какое-то волшебное условие, специфичное для PT_NOTE...
Доказательства в другом месте:
- Смещение сегментов программы ELF в файле
- https://velog.io/@silvergun8291/GEF-%EC ... 9%EB%B2%95
- https:/ /gist.github.com/rallias/4abdb811ed8cced0623c
- https://www.filescan.io/uploads/670caa9 ... ff/details
- https://lists.volatilityfoundation.org/ ... GUKCEQBUH/
Код: Выделить всё
Elf file type is DYN (Position-Independent Executable file)
Entry point 0x8a0
There are 11 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000040 0x0000000000000040 0x0000000000000040 0x000268 0x000268 R 0x8
LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x000ee0 0x000ee0 R E 0x200000
GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x10
NOTE 0x000254 0x0000000000000254 0x0000000000000254 0x000044 0x000044 R 0x4
GNU_EH_FRAME 0x000cac 0x0000000000000cac 0x0000000000000cac 0x00006c 0x00006c R 0x4
LOAD 0x001d70 0x0000000000201d70 0x0000000000201d70 0x0002a0 0x0002f0 RW 0x200000
GNU_RELRO 0x001d70 0x0000000000201d70 0x0000000000201d70 0x000290 0x000290 R 0x1
DYNAMIC 0x001d80 0x0000000000201d80 0x0000000000201d80 0x0001f0 0x0001f0 RW 0x8
INTERP 0x004000 0x0000000000203000 0x0000000000203000 0x00000d 0x00000d R 0x1
[Requesting program interpreter: ./ld-2.27.so]
LOAD 0x004000 0x0000000000203000 0x0000000000203000 0x000030 0x000030 RW 0x1000
LOAD 0x005000 0x0000000000204000 0x0000000000204000 0x000148 0x000148 RW 0x1000
Section to Segment mapping:
Segment Sections...
00
01 .dynsym .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame
02
03
04 .eh_frame_hdr
05 .init_array .fini_array .dynamic .got .data .bss
06 .init_array .fini_array .dynamic .got
07 .dynamic
08 .interp
09 .interp .note.ABI-tag
10 .dynstr .gnu.hash .note.gnu.build-id
А здесь читается -WS:
Код: Выделить всё
There are 29 section headers, starting at offset 0x2c28:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .dynsym DYNSYM 00000000000002c8 0002c8 0001c8 18 A 26 1 8
[ 2] .gnu.version VERSYM 0000000000000570 000570 000026 02 A 1 0 2
[ 3] .gnu.version_r VERNEED 0000000000000598 000598 000030 00 A 26 1 8
[ 4] .rela.dyn RELA 00000000000005c8 0005c8 000108 18 A 1 0 8
[ 5] .rela.plt RELA 00000000000006d0 0006d0 0000f0 18 AI 1 17 8
[ 6] .init PROGBITS 00000000000007c0 0007c0 000017 00 AX 0 0 4
[ 7] .plt PROGBITS 00000000000007e0 0007e0 0000b0 10 AX 0 0 16
[ 8] .plt.got PROGBITS 0000000000000890 000890 000008 08 AX 0 0 8
[ 9] .text PROGBITS 00000000000008a0 0008a0 0003a2 00 AX 0 0 16
[10] .fini PROGBITS 0000000000000c44 000c44 000009 00 AX 0 0 4
[11] .rodata PROGBITS 0000000000000c50 000c50 00005b 00 A 0 0 4
[12] .eh_frame_hdr PROGBITS 0000000000000cac 000cac 00006c 00 A 0 0 4
[13] .eh_frame PROGBITS 0000000000000d18 000d18 0001c8 00 A 0 0 8
[14] .init_array INIT_ARRAY 0000000000201d70 001d70 000008 08 WA 0 0 8
[15] .fini_array FINI_ARRAY 0000000000201d78 001d78 000008 08 WA 0 0 8
[16] .dynamic DYNAMIC 0000000000201d80 001d80 0001f0 10 WA 26 0 8
[17] .got PROGBITS 0000000000201f70 001f70 000090 08 WA 0 0 8
[18] .data PROGBITS 0000000000202000 002000 000010 00 WA 0 0 8
[19] .bss NOBITS 0000000000202020 002010 000040 00 WA 0 0 32
[20] .comment PROGBITS 0000000000000000 002010 00002b 01 MS 0 0 1
[21] .symtab SYMTAB 0000000000000000 002040 0007c8 18 22 43 8
[22] .strtab STRTAB 0000000000000000 002808 000320 00 0 0 1
[23] .shstrtab STRTAB 0000000000000000 002b28 0000fe 00 0 0 1
[24] .interp PROGBITS 0000000000203000 004000 00000d 00 A 0 0 8
[25] .note.ABI-tag NOTE 0000000000203010 004010 000020 00 A 0 0 8
[26] .dynstr STRTAB 0000000000204000 005000 0000ef 00 A 0 0 8
[27] .gnu.hash GNU_HASH 00000000002040f0 0050f0 000030 00 A 1 0 8
[28] .note.gnu.build-id NOTE 0000000000204120 005120 000024 00 A 0 0 8
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
D (mbind), l (large), p (processor specific)
Сами двоичные файлы можно загрузить в виде вложений в этом выпуске GitHub.
Раздел комментариев указывает на цепочку инструментов:
GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Предполагая, что он создан на базе Ubuntu 18...
Подробнее здесь: https://stackoverflow.com/questions/793 ... et-address
Мобильная версия