通过崩溃地址找错误行数之Delphi版


本文整理自网络,侵删。

 什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号、

源文件和代码行号信息的唯一的文本表示方法,

它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。

而且,这是唯一能找出程序崩溃的地方的救星。

DELPHI下生成MAP文件的方法:偶只知道两种,如果谁知道其他的方法 敬请告知 多谢
生成详细的MAP信息的方法
1. project -> options -> Linker -> Map file 选择detailed.
2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>dcc32 -GD project1.dpr

我们的代码为:
unit Unit1;

//{$D+,L+}

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
I, J: Integer;
p: PChar;
begin
I := 10;
J := 0;
//I := I div J; // 32
//ShowMessage(IntToStr(I));
p := nil;
p^ := 'A'; // 38
end;

end.
// 想必大家看到了 会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃 ^_^
然后执行 点击 然后出错 我的机器上 崩溃地址为0044d946

如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算:
崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000
减去后得到 0004c946 然后查找 0004c946
0044d946 - 00400000 = 0004d946 - 00001000 = 0004c946 <= 后面列出的
0004C946 就是它了 我们用ultraedit32之类的工具打开 .map文件 搜索 0004C94,找到了,然后就找
<= 0004c946的那个地址 然后看到了
Line numbers for Unit1(Unit1.pas) segment .text

37 0001:0004C944 38 0001:0004C946 39 0001:0004C949 41 0001:0004C97C
41 0001:0004C983

o yeah..<星际里面注射兴奋剂的声音 ^_^>.. 38 0001:0004C946

就是它了。。。unit1.pas的第38行!!

去代码里看一下 果然就是38行 ^_^.....

共享ing...如果有不妥之处 敬请之处 多谢....

一般情况下,基地址的值是 0x00400000 。另外,由于一般的 PE 文件的代码段都是从 0x1000

偏移开始的,所以也必须减去 0x1000 。

大家可以看到DELPHI 的设置
点击
project -> Linker -> Memory size 的Image base 默认为$00400000

这就是pe loader加载的时候默认加载到的基址。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/suton/archive/2008/04/21/2312191.aspx

相关阅读 >>

Delphi 域名转ip并判断ip是否可以联通 复制代码

Delphi 屏幕截屏

Delphi用邻域平均法对图像进行平滑处理

Delphi 处理以逗号分隔的长字符串

Delphi idhttp post 提交 json

Delphi 创建应用程序的快捷方式

Delphi中显示gif动画

Delphi rest客户端程序

Delphi 查找某函数在某个单元

Delphi使用cef4Delphi制作chromium谷歌内核浏览器

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...