По readelf
:Почему исполняемый файл .data?
----------------------------------------------------------------------
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[24] .data PROGBITS 0000000000601040 00001040
0000000000000051 0000000000000000 WA 0 0 32
----------------------------------------------------------------------
Section to Segment mapping:
Segment Sections...
00
01
02
03 .init_array .fini_array .jcr .dynamic .got .got.plt .data .bss
----------------------------------------------------------------------
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR
INTERP
LOAD
LOAD 0x0000000000000e10 0x0000000000600e10 0x0000000000600e10
0x0000000000000281 0x0000000000000288 RW 200000
Как вы можете видеть выше .data сегмент имеет W
(Write) и A
(Alloc) разрешения и .data
загружается в LOAD
секции с R
(Read) W
(Write).
Однако Шеллкод в разделе .data
является исполняемым файлом, в соответствии с GDB:
0x601060 <bytecode>: xor rax,rax
=> 0x601063 <bytecode+3>: xor rdi,rdi
И я не знаю, почему. Это верно? Что мне не хватает?
Возможно, моя интерпретация результата readelf неверна? – JohnCage
Возможно, пользователи 'readelf' обычно понимают этот вывод, но вам может быть полезно предоставить дополнительный контекст; что * конкретно * выделяется вам как-то странно, что бы вы ожидали увидеть вместо этого и т. д. Так как вы не говорите, что такое ваша интерпретация, кому-то трудно подтвердить это. – dimo414
Фактически, как мы можем видеть выше: (1) сегмент .data имеет «W (Write) A (Alloc)» разрешения (2) .data загружается в раздел LOAD с помощью «R (Read) W (Write)» , НО: Я не знаю, почему, .data станет исполняемым! – JohnCage