window下程序崩溃调试步骤(map文件+cod文件)备忘

实现步骤:

1、从客户那里得到崩溃程序偏移地址

    异常问题详细描述里面——> 异常偏移:    0x00001028

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

     优先装载地址: 0x00400000 和 段对齐大小:0x00001000

     主要就这2个信息。

3、根据得到的PE信息,到MAP文件里面去找函数地址(相近地址选择)

         查找地址: Rva+Base 下面的

         偏移地址+优先装载地址 = 异常地址

           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.

4、得到函数地址,去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

    ...........

    找到了,这里出问题了。快去修复!

5、运气好的话,cod文件里面带有源码行号或者直接源码(生成文件的时候设置所得)。

    这里生成cod文件的时候有些选择,如 机器码,源码等等,如果汇编语言学得好,没源码也知道怎么回事。

    能看源码,为什么不呢。

PS: 最后,怎么得到 map 文件 和 cod 文件,就根据自己所用开发环境配置编译即可(注意文件编码问题√,这绝对是个坑)。

 

 

转载于:https://my.oschina.net/u/2430809/blog/2979062

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值