我将Ollydbg附加到进程,然后尝试在CreateWindowExW上设置断点。我在命令行中键入了

bpx CreateWindowExW


。然后我检查了Breakpoints窗口,发现它完全是空的。

同样的事情在IDA pro中可以顺利进行-我将IDA pro附加到我要调试的过程中,然后在“模块”窗口中,我选择user32.dll,然后右键单击CreateWindowExW,然后选择“添加断点”。

实际上,我发现在Ollydbg中的Win32 API上设置断点非常难用。根据我从Google获得的所有信息,我只需要运行bpx xxxxx来设置这种断点,但是实际上,它很少成功。大多数时候,没有设置断点。

我错过了什么吗?

BTW:我调试的进程动态地加载了许多DLL。这是问题吗?

#1 楼

输入焦点位于CPU窗口的反汇编窗格中,按Ctrl + G,然后键入CreateWindowExW以导航到该功能的第一条指令。然后按F2在该函数的第一条指令上设置一个断点。

所有这些都在OllyDbg的帮助文件中非常清楚地记录了。

评论


感谢您的回答。您的方法确实有效。但是,在问这个问题之前,我已尽力搜索并阅读了包括此FAQ页面在内的相关材料。在第3节中,它准确地描述了我上面提到的方法,但没有描述您的方法。请告诉我这两种方法之间的区别,您提到的帮助文件在哪里?

–熊灵峰
2013年12月29日17:12



FAQ中描述的BPX方法似乎将所有静态CALL上的断点设置为由当前模块生成的目标函数,这是设置断点的一种非常糟糕的方法。您应该忽略FAQ的这一部分(无论如何,Alt + F1在OllyDbg 2.0中什么也不做)。 ollydbg.de/odbg110.zip中的帮助文件是OLLYDBG.HLP。 ollydbg.de/odbg200.zip中的帮助文件是help.pdf。

–詹森·格夫纳(Jason Geffner)
2013年12月29日21:16



我只是注意到以下@blabb关于BPX与BP的帖子。即使这样,最好还是只使用OllyDbg 2.0并跳过命令行界面。

–詹森·格夫纳(Jason Geffner)
13年12月29日在21:28

谢谢你的帮助。我只能使用Ollydbg 1.10,因为每次我将Ollydbg 2.0附加到正在调试的进程时,都会挂起Ollydbg和目标进程(在分析该进程使用的某些模块(例如user32.dll)时,Ollydbg不会响应)。另外,Ollydbg 1.10只能附加到目标进程一次-当我重新启动调试的进程时,我也需要重新启动Ollydbg或附加到目标进程会挂起它,尽管Ollydbg表示它正在运行。也许是个错误.. :-(

–熊灵峰
2013年12月30日0:44



#2 楼

ollydbg命令行插件接受BP for AddressBPX for labels

,因此,如果您要求在地址中设置断点,请使用bp CreateWindowExW

(如果您使用bpx且不存在调用)插件将打开搜索互模调用窗口,供您手动搜索感兴趣的api

如果您有这样的调用

010020ED FF15 A4110001   CALL    NEAR DWORD PTR DS:[<&USER32.CreateWindow>; USER32.CreateWindowExW


插件将设置中断对于BP样式,此调用具有BPX样式
,您需要使用bp 10020ED