Ceylon 发表于 2023-12-17 19:08

x64dbg执行到返回指令无法正常工作

RT,最新版本的x64dbg(snapshot_2023-12-04_17-51)

在使用**执行到返回**指令(`ctrl`+`F9`)时经常跑飞,不会停在那个call对应的ret语句处。在命令行使用`StepOut`/`rtr`指令也是一样的结果。

在网上搜了一下好像没人提过类似问题,是我哪里没有设置对吗?还是debugger本身的问题?

Ceylon 发表于 2023-12-18 01:42


**【已解决】**

x64dbg的处理逻辑跟OD的处理逻辑还不太一样

OD的`ctrl`+`F9`处理逻辑是:相当于一直手动执行`F8`(`StepOver`)直到遇见`RET`或`RETN`时停下,这也是我最初理解的处理逻辑。

x64dbg还多了一层判断条件,它会先记录下当前指令处的Stack Pointer,遇见`RET`或`RETN`时,会再判断Stack Pointer是否比当初记录下的值位于更低栈空间上(即位于高地址处),如果不是,则不会在此处停下,这也是会跑飞的原因

**解决方法**

要使x64dbg的处理逻辑跟OD一样,可以使用`TraceOver`,断点条件设置为`byte(XIP) == 0xC3`(只考虑了`RET`短跳转的情况,要满足长跳转和`RETN`还需另加条件)

zishen 发表于 2023-12-17 20:53

应该是程序内部的问题,有些call里面有反调试

Ceylon 发表于 2023-12-17 21:24

zishen 发表于 2023-12-17 20:53
应该是程序内部的问题,有些call里面有反调试

我的理解是,`ctrl`+`F9`的效果应该等效于手动一直按`F8`,直到看到第一个`RET`或者`RETN`语句就停下。

我的问题是现在我在x64dbg里面用`ctrl`+`F9`之后并不能停在手动步过时看到的第一个返回语句处。

这跟反调试没什么关系吧

ias想 发表于 2023-12-18 00:22

应该是跟反调试的关联
页: [1]
查看完整版本: x64dbg执行到返回指令无法正常工作