window下程序崩潰調試步驟(map文件+cod文件)備忘

實現步驟:函數

一、從客戶那裏獲得崩潰程序偏移地址工具

    異常問題詳細描述裏面——> 異常偏移:    0x00001028編碼

二、查看文件(exe或者dll)的PE格式,獲得PE信息(PE查看工具)spa

     優先裝載地址: 0x00400000 和 段對齊大小:0x00001000開發

     主要就這2個信息。源碼

三、根據獲得的PE信息,到MAP文件裏面去找函數地址(相近地址選擇)編譯

         查找地址: Rva+Base 下面的配置

         偏移地址+優先裝載地址 = 異常地址map

           0x00001028+ 0x00400000 =  0x00401028(異常地址)程序

       查找異常地址所在函數(Rva+Base)中,挨着大於異常地址,可是又小於異常地址那個地址即爲函數地址。

       例:

    Address                        Publics by Value                               Rva+Base       Lib:Object

    ............
     0001:00000000       ?Crash@@YAHXZ                                   00401000 f   TestDump.obj
     0001:00000040       _main                                                       00401040 f   TestDump.obj
    ............

    獲得函數 Crash.

四、獲得函數地址,去cod文件裏面找彙編代碼

      彙編代碼裏面的函數內代碼,是根據函數地址作偏移的。

     因此查找地址要換算一下:

     函數內地址 = 異常地址 - 函數地址 - 段對齊大小

     0x00401028 - 0x00401000 - 0x1000 = 0x28

     例:

    ..........

    ; 9    :     *p = 100;

      00025    8b 45 f8     mov     eax, DWORD PTR _p$[ebp]
      
00028    c6 00 64     mov     BYTE PTR [eax], 100    ; 00000064H

    ...........

    找到了,這裏出問題了。快去修復!

五、運氣好的話,cod文件裏面帶有源碼行號或者直接源碼(生成文件的時候設置所得)。

    這裏生成cod文件的時候有些選擇,如 機器碼,源碼等等,若是彙編語言學得好,沒源碼也知道怎麼回事。

    能看源碼,爲何不呢。

PS: 最後,怎麼獲得 map 文件 和 cod 文件,就根據本身所用開發環境配置編譯便可(注意文件編碼問題√,這絕對是個坑)。

相關文章
相關標籤/搜索