在这行代码中:
mov eax,dword ptr [eax+8];
eax+8
包含一长串文本,我想找出它最初来自哪里。
在 OllyDbg 或 x32dbg 中,当eax
包含某个单词(例如“haxxor”)时如何中断
谢谢!
在这行代码中:
mov eax,dword ptr [eax+8];
eax+8
包含一长串文本,我想找出它最初来自哪里。
在 OllyDbg 或 x32dbg 中,当eax
包含某个单词(例如“haxxor”)时如何中断
谢谢!
您正在寻找条件断点
OllyDbg 1.01 和 2.00 都可以设置条件断点
条件断点
显示对话框窗口,要求用户设置或修改调试进程内存中一个或多个地址 addr[naddr] 处的简单条件 INT3 断点的参数。[来源:官方文档]
如果要在EAX指向“haxxor”时设置条件断点,按Shift+F2然后输入:UNICODE[EAX] == "haxxor"
条件日志断点
显示对话窗口,要求用户设置或修改调试进程内存中一个或多个地址 addr[naddr] 的条件记录 INT3 断点的参数。日志断点可以有条件地暂停执行、协议表达式、函数参数或返回值等。 [来源:官方文档]
此选项具有更多功能,并允许您在log
窗口 ( Alt+ L)上查看输出
按Shift+F4然后输入:UNICODE[EAX] == "haxxor"
修改对话框设置以最适合您的需要。
目前,据我所知,不支持字符串上的条件断点。该功能已在计划中,我希望我们很快就能看到它。同时,检查您可能会发现有用的cndSteroids插件。
有关 x64dbg 上的条件断点的更多信息,您可以在官方文档中找到。
笔记! 后来我意识到这是关于 Ollydbg 的……无论如何,我坚持我的答案……GDB 很棒!
GDB 是一个很棒的调试器!事实上,只有少数人知道它,它可以访问所有常用的 libc 函数。
例如,在您的情况下,您可能会发现在这样的断点上设置条件很有趣(通过使用strcmp()
):
break *0xdeadbeef if strcmp(*($eax+8), "haxxor") == 0
如果您正在执行位于指令后,该线将停止0xdeadbeef
,并且位于字符串的值$eax+8
就是"haxxor"
。
如果你想在字符串的值为 '"haxxor"' 时中断,那么会有点困难。就个人而言,我会为每个角色设置一个观察点,条件是:
watch *0xdeadbeef if *0xdeadbeef == 'h'
因此,对于字符串的每个字符。