遵循http://www.fuzzysecurity.com/tutorials/expDev/2.html 上关于缓冲区溢出的教程。我能够成功执行shellcode。使用 'jmp esp' 而不是 'pop esp; retn' 如教程中所示。
问题是,当我在覆盖的 EIP 地址处设置断点(我使用 ntdll.dll 中的“jmp esp”)并尝试进入(连续按 F7)时,我在 0x00443B46 处遇到了访问冲突。如果我尝试查看此内存地址中的内容,则免疫无法找到任何内容。
如果到达断点后,我执行程序(按 F9),或者根本不使用断点,则一切正常。
步进时免疫会改变什么,从而导致此错误?
更新(2016 年 4 月 23 日):我只是具体说明了我的步骤,因为使用这两条指令,我可以让程序跳转到我的 NOP 雪橇,然后是 shellcode。问题是,当我尝试逐步遍历 shellcode(使用 F7)时,我遇到了“写入 0x00443B46 时出现访问冲突”的问题。
我要么使用'jmp esp'或'pop esp; retn',没关系,问题与此无关,因为无论如何,两条指令都正确执行并且程序继续进行。
唯一的区别是,设置断点并一步一步进行会导致这个问题,没有断点就没有问题。