gpt4 book ai didi

linux - 为什么.data可执行?

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:10 26 4
gpt4 key购买 nike

根据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

我也不知道为什么。它是否正确?我错过了什么?

最佳答案

However, the shellcode in the .data section is executable, according to GDB:

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

试试这个:

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

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

关于linux - 为什么.data可执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com