【发布时间】:2015-03-24 14:51:22
【问题描述】:
根据readelf:
----------------------------------------------------------------------
[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(写入)和A(分配)权限,.data 被加载到带有R(读取)W(写入)的LOAD 部分中)。
但是,根据 GDB,.data 部分中的 shellcode 是可执行的:
0x601060 <bytecode>: xor rax,rax
=> 0x601063 <bytecode+3>: xor rdi,rdi
我不知道为什么。这个对吗?我错过了什么?
【问题讨论】:
-
也许我对 readelf 输出的解释是错误的?
-
也许
readelf的用户通常只是理解这个输出,但提供一些额外的上下文可能对您有好处; 具体让你觉得奇怪的是什么,你希望看到什么等等。由于你没有说出你的解释是什么,所以很难有人确认它。 -
事实上,正如我们在上面看到的那样: (1) .data 段具有“W(Write) A(Alloc)”权限 (2) .data 被加载到带有“R(读)W(写)”。但是:我不知道为什么,.data 将成为可执行文件!
-
GDB 输出是什么让您认为该部分是可执行的?
-
请注意,您可以编辑您的帖子并内联添加其他信息,而不是将它们发布在容易错过的 cmets 中。我在问题中添加了您所说的内容,但对我来说,您似乎仍然没有提供足够的信息让某人能够帮助您。
标签: linux executable elf