我正在按照本教程进行ROP开发。当我检索易受攻击的程序存储器映射时,我得到< __ data_start>是在0x0000201c,这是本教程所期望的更多的爱好者。要在此位置书写,我使用以下小工具在eax中准备地址
xor eax, eax;; ; eax = 0
add eax, 0xd;; ; eax = 0x0000000d
mov ah, 0x13;; ; eax = 0x0000130d
add ah, al;; ; eax = 0x0000200d
add eax, 0xf;; ; eax = 0x0000201c
最后我使用mov [eax] ecx指令写入应该是RW的.data,但是我得到了一个SINSEGV分段错误。我也尝试从该地址的gdb读取,但是我收到类似“无法读取0x201c的内存”的消息。 由于.data应该在进程的地址空间中,我感到困惑...我认为它必须是gcc或操作系统的某种保护,但我不明白哪一个。任何的想法?如果是这样,你能解释它是如何工作的,是否可以禁用它?
我已禁用ASLR,我正在使用gcc版本7.3.0(Debian 7.3.0-11)执行kali 32bit(Debian 4.14.12-2kali1(2018-01-08))。