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的帮助文件中非常清楚地记录了。
#2 楼
ollydbg命令行插件接受BP for Address
和BPX for labels
,因此,如果您要求在地址中设置断点,请使用
bp CreateWindowExW
(如果您使用bpx且不存在调用)插件将打开搜索互模调用窗口,供您手动搜索感兴趣的api
如果您有这样的调用
010020ED FF15 A4110001 CALL NEAR DWORD PTR DS:[<&USER32.CreateWindow>; USER32.CreateWindowExW
插件将设置中断对于BP样式,此调用具有BPX样式
,您需要使用
bp 10020ED
评论
感谢您的回答。您的方法确实有效。但是,在问这个问题之前,我已尽力搜索并阅读了包括此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