写下大致步骤方便以后查找
参考内容在两个链接的后半部分
http://blog.csdn.net/nokianasty/article/details/8504432
http://blog.chinaunix.net/uid-7186957-id-2677948.html
主要步骤:
1、在drwtsn32.log找到错误位置:错误 ->00458861 ff9098000000 call dword ptr [eax+0x98] ds:0023:bf0500f8=????????,记住其中的addr =00458861。
2、在对应的.map文件中的Address Publics by Value Rva+Base Lib:Object 的Rva+Base列找到刚刚大于00458861一点的行。如下:
0001:000577d7 ?AfxCallWndProc@@YGJPAVCWnd@@PAUHWND__@@IIJ@Z 004587d7 f nafxcw:wincore.obj
0001:000578d4 ?GetCurrentMessage@CWnd@@KGPBUtagMSG@@XZ 004588d4 f nafxcw:wincore.obj
其中第二是我们所要找的行,第一行是需要用到定位的。
3、在第一行中找到nafxcw:wincore.obj位置(一般是xx.obj,这里没找到,只找到相关的nafxcw.lib)如下
Line numbers for D:\应用软件-安装\VC98\MFC\LIB\nafxcw.lib(wincore.cpp) segment .text
35 0001:0005746e 38 0001:00057489 39 0001:000574c7 40 0001:00057505
41 0001:00057543 53 0001:00057577 54 0001:0005757f 55 0001:00057595
58 0001:000575b5 59 0001:000575be 60 0001:000575d1 61 0001:000575da
。。。。。。。。。。。。。。。。。。。。。。
205 0001:00057835 210 0001:0005783c 211 0001:00057840 212 0001:00057848
215 0001:00057856 218 0001:00057867 219 0001:00057872 221 0001:0005787f
223 0001:00057881 224 0001:00057886 226 0001:0005788a 230 0001:0005789e
233 0001:000578a0 235 0001:000578a4 237 0001:000578ac 239 0001:000578b5
240 0001:000578b7 241 0001:000578c3 244 0001:000578d4 247 0001:000578e6
4、要得到行数的地址:0x00458861-0x00400000(程序装载地址)-0x00001000(PE头文件的大小)=0x00057861
5、发现0x00057861在第3行中相应范围行为 211 0001:00057840 212 0001:00057848
215 0001:00057856 218 0001:00057867
说明问题就在wincore.cpp的212行到215行之间