x64dbg执行到返回指令无法正常工作
RT,最新版本的x64dbg(snapshot_2023-12-04_17-51)在使用**执行到返回**指令(`ctrl`+`F9`)时经常跑飞,不会停在那个call对应的ret语句处。在命令行使用`StepOut`/`rtr`指令也是一样的结果。
在网上搜了一下好像没人提过类似问题,是我哪里没有设置对吗?还是debugger本身的问题?
**【已解决】**
x64dbg的处理逻辑跟OD的处理逻辑还不太一样
OD的`ctrl`+`F9`处理逻辑是:相当于一直手动执行`F8`(`StepOver`)直到遇见`RET`或`RETN`时停下,这也是我最初理解的处理逻辑。
x64dbg还多了一层判断条件,它会先记录下当前指令处的Stack Pointer,遇见`RET`或`RETN`时,会再判断Stack Pointer是否比当初记录下的值位于更低栈空间上(即位于高地址处),如果不是,则不会在此处停下,这也是会跑飞的原因
**解决方法**
要使x64dbg的处理逻辑跟OD一样,可以使用`TraceOver`,断点条件设置为`byte(XIP) == 0xC3`(只考虑了`RET`短跳转的情况,要满足长跳转和`RETN`还需另加条件)
应该是程序内部的问题,有些call里面有反调试 zishen 发表于 2023-12-17 20:53
应该是程序内部的问题,有些call里面有反调试
我的理解是,`ctrl`+`F9`的效果应该等效于手动一直按`F8`,直到看到第一个`RET`或者`RETN`语句就停下。
我的问题是现在我在x64dbg里面用`ctrl`+`F9`之后并不能停在手动步过时看到的第一个返回语句处。
这跟反调试没什么关系吧 应该是跟反调试的关联
页:
[1]