zoukankan      html  css  js  c++  java
  • DELPHI之崩溃地址排错代码查看 转

    http://www.cnblogs.com/enli/archive/2009/01/15/1376540.html

    最近研究了一下HOOK技术,想抓取某些游戏的包,因此需要注入DLL,结果老是有异常崩溃。因此找了找解决方法,记录如下:

    首先做一个有异常崩溃的控制台程序:

    program Project1;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils;
    
    function Crash():extended;
    var i,j:extended;
    begin
       i:=1;
       j:=0;
      result:= i / j;
    end;
    
    var rc : extended;
    begin
     rc := Crash;
    end.

    这代码里面是一个除0的异常。然后来看运行结果:

    异常CODE:0X000008e  ADDRESS:0x0000000000407C8F

    查看异常代码的位置,首先要生产MAP文件:Projects->Options->Linker->Map file->Detailed选上,然后生成EXE和MAP文件,例如:/Files/enli/Project1.rar

    根据公式:崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000 ,一般情况下,基地址的值是 0x00400000 。另外,由于一般的 PE 文件的代码段都是从 0x1000 偏移开始的,所以也必须减去 0x1000 。得到是6C8F。

    根据MAP文件,我们看到,在6C8F前最靠近的函数是 :0001:00006C60       Crash,这样就可以定位到函数Crash,接着根据MAP文件最后的:

        10 0001:00006C60    11 0001:00006C63    12 0001:00006C78    13 0001:00006C87
        14 0001:00006C98    17 0001:00006D04    18 0001:00006D1C    19 0001:00006D23

    发现小于6C8F的最靠近的代码是:13 0001:00006C87,由此知道应该是第13行代码出错,也就是 result:= i / j;,简单吧,呵呵!

  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/6874458.html
Copyright © 2011-2022 走看看