关闭

结合drwtsn32.log和.Map文件的查看、定位程序错误位置

488人阅读 评论(0) 收藏 举报
分类:

写下大致步骤方便以后查找

参考内容在两个链接的后半部分

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行之间

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44453次
    • 积分:619
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:54篇
    • 译文:0篇
    • 评论:4条
    最新评论