【问题标题】:Why is .data executable?为什么 .data 是可执行的?
【发布时间】: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


【解决方案1】:

但是,根据 GDB,.data 部分中的 shellcode 是可执行的:

GDB 输出确实告诉您.data 部分是可执行的。 GDB 很乐意反汇编您要求它反汇编的任何内存。

试试这个:

(gdb) set $p = (void (*)(void))&bytecode
(gdb) call $p()

这应该会在bytecode 的第一条指令上产生一个SIGSEGV,因为它实际上是可执行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多