对于我的硬件作业,我试图利用溢出的c文件。我无法编辑原始文件,也无法重新编译它。
我已经回到了我预定的地址。但是在它执行代码一段时间后,我得到这个:
0xffffcc38 pop %eax
0xffffcc39 push %eax
0xffffcc3a pop %ecx
→ 0xffffcc3b xor 0x30(%ebp), %eax
0xffffcc3e xor %eax, 0x30(%ebp)
0xffffcc41 xor %esi, 0x30(%ebp)
0xffffcc44 xor 0x30(%ebp), %esi
0xffffcc47 pop %ax
0xffffcc49 push $0x68736538
0xffffcc3b in ?? ()
gef➤
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
它从0xfffcc30->0xffffcc3a执行得很好,但突然停在了0xffffcc3b处。我能知道为什么会这样吗?
我能知道为什么会这样吗?
如果此指令产生了SIGSEGV
:
0xffffcc3b xor 0x30(%ebp), %eax
那么可以肯定的是,$EBP + 0x30
指向无法访问的内存。
很可能您在漏洞利用的早期"踩"$EBP
。