前一段时间在去除QQ国际版的弹窗的时候就发现了这个问题,在Windows 7 64位系统下无法正常使用OD进行调试,载入之后会直接提示无法处理的异常。
就像下面的鸟样子:
连程序都没法载入,就更不用说调试了。当时也没继续研究这个鸟东西,转到虚拟机下进行调试,去掉了那个鸟窗口。刚才从看雪学院上看到一篇文章,【转帖】IDA Pro And COFF Debug Info 。于是就发现了文章作者的博客,在上面随便溜达了一下就发现了一个更有意思的东西,《OllyDbg v1.10 And Wow64》,当然作者比我牛逼,花了几个小时深入的研究了一下这个问题,并且找到了解决方法。
If you have ever used OllyDbg v1.10 on Window 7 64-bit version (Wow64), then you must have seen the annoying single-step breaks that frequently interrupt your debug session. I spent a couple of hours to find the reason behind this and finally came out with this small plugin, “OllyWow64”, to fix this bug.
You can find OllyWow64 here.
Version 0.2 can be found here.The fix is as easy as what you see in the image below.
_declspec(dllexport) int __cdecl ODBG_Plugininit(int ollydbgversion,HWND hw,ulong *features) { //real fix goes here unsigned long old; unsigned long addr=0x4311C2; VirtualProtect((void*)0x4311C2,0x1,PAGE_EXECUTE_READWRITE,&old); *(unsigned char*)(addr)=0xEB; VirtualProtect((void*)0x4311C2,0x1,old,&old); //----------------------------------------------------- mainWnd=hw; Addtolist(0,0,"OllyWow64"); Addtolist(0,-1,"started successfully"); return 0; }Here you can find the source code.
Here you can find the source code of version 0.2.Update:
Version 0.2 of OllyWow64 has been released.
原文链接:http://waleedassar.blogspot.tw/2012/03/ollydbg-v110-and-wow64.html
19 comments
作者的部分补充:
奇怪了……直接丢这个PLUGIN到目录下面以后运行直接崩溃……
是不是配置还不对- -? 对PLUGIN不熟悉还是说要配置以下的?
这个是64位win7 下用的,如果放到32位的机器上会直接崩溃,你的系统是64位的么?
BZ回复很快啊^^
确定是WIN7 64的,因为刚好想修改以下程序,每次一用OD都会经常意外的提示崩溃,旁边的X86 WIN7从来都很OK,所以确定至少这个是因为X64和X86的区别……
尝试看了以下代码,插件作者直接写死保护属性作用范围是004XXXXX的地址,但是放进去一个普通的EXE程序,基地址是在011XXXXX的……是不是这个做法不适合某- -??
这个和加载的程序是没关系的,补丁的是OD的地址,你确定你的OD是加载到了011XXXXX?这个地方么?启动OD之后挂载调试器看看吧,用OD附加OD。另外你的OD崩溃也有可能是其他插件的兼容性,建议你先删除其他的插件或者用个没有修改的OD用我的插件试试?
这边的情况应该是经常会有离谱的崩溃发生,这么说起来应该是某个插件本身的问题了
不过对插件的配置还不太清楚,下载的是一个打包好的1.1版本,是通过INI配置文件移除,还是直接删掉插件就好了呢^^?
再去仔细看了一下,把所有的插件都手动移动到别的目录下面去了,然后再运行OD(设置在系统断点上,否则立即出错),F4后发现就挂在
77E810B4 MOV DWORD PTR SS:[ESP+4],EAX
77E810B8 MOV DWORD PTR SS:[ESP+4],EAX <—-停止在这里,状态:调试的程序无法处理意外
77E810BC JMP 77EA9EAA
同一个被调试的EXE,同一个OD,在32位WIN7下一切正常
打算重新找一个别的OLLYDBG1.1试试看……其他也不知道怎么弄了
手误了……
77E810B4 MOV DWORD PTR SS:[ESP+4],EAX
77E810B8 MOV DWORD PTR SS:[ESP+8],EBX <—-停止在这里,状态:调试的程序无法处理意外
77E810BC JMP 77EA9EAA
发现问题了:Wow64这个和OllyDump共存就会崩溃异常了,具体没有进一步分析,直接把OllyDump去掉了(基本也不怎么用到他)
很高兴=w=,总算不用老找别的机器调试程序了=w=
晕啊,你都成了轰炸机了,上来你看都是你的评论啊。看起来貌似最终是可以了啊。另外你上面说的无法处理的异常的原因我已经说过啦,具体可以看文章的内容。
水水比较喜欢在人不多的地方活跃,=w=存在感么- -
嗯,“挂掉”的问题的话的确应该就是本文的话题了,其实之前是因为没很好理解OD的“忽略异常”,以为是碰到这些问题不询问自动跳过,实际上是不询问直接提交给原程序,自然就异常且无法继续了……之后用了WOW64也都正常,尝试比对了下,有些会中断的地方,在挂载了WOW64插件后就没有问题了,说明的确是发生效果的。
再谢^^
嗯嗯,好歹你最后还是搞定了,要不对么对不起观众啊。
如果有X64正常的话,一般都应该是其他方向的问题了。
之前没去追究- -看到这个总觉得希望来了就努力一把了呗^^
喔,理解不对,现在有点明白了,的确还没调试过OD的情况…………开始理解以为是被调试的主程序的位置……
崩溃的地方都在NTDLL里面,具体的也没研究过了……
的确不排除是其他插件的关系,不过这个WOW64插件放进去一定会崩溃,拿掉就不会崩溃了这个是事实……
看来得在研究研究-w-+
水水很有意思啊,可以命为水水大闹火星。
其实我感觉水水童鞋是个诗人,嘿嘿
差远了,勉强算打油词吧,美其名曰“散体诗”=v=
生活也是很有趣的,不过还是希望更多在二次元世界里头玩^^
有时候回的多了也会有BZ懊恼而删帖的情况=w=+
不过OD确实很重要,很多时候会派上大用场或者小用场=w=~