結合drwtsn32.log和.Map文件的查看、定位程序錯誤位置

寫下大致步驟方便以後查找

參考內容在兩個鏈接的後半部分

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章