日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过崩溃地址找错误行数之Delphi版 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

通過崩潰地址找錯誤行數(shù)之Delphi版
2009-5-11 17:42:35 來源: 轉載 作者:網(wǎng)絡 訪問:360 次 被頂:2 次 字號:【大 中 小】
核心提示:什么是 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地址錯誤....我們這里就是要讓它崩潰,讓我讓你崩潰 ^_^
然后執(zhí)行 點擊 然后出錯 我的機器上 崩潰地址為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

38 0001:0004C946??? 就是它了。。。unit1.pas的第38行!!去代碼里看一下 果然就是38行

總結

以上是生活随笔為你收集整理的通过崩溃地址找错误行数之Delphi版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。