AV 地址错误 map 文件 根据地址报错,查 Delphi 代码

1. 首先需要设置程序生成 map 文件。
Project -> Options -> Linker -> Map file , Detailed

2. 计算公式
Edit2.Text := IntToHex(StrToInt(‘$‘+ Edit1.Text) - StrToInt(‘$00400000‘) - StrToInt(‘$00001000‘), 8) ;
将看到的地址错误,输入到 Edit1 中。

3. 从 Map 文件中查这个地址。
一般直接查是找不到的。根据获得的 Edit2 中的值。删掉最后 1 位,或者 2 位,查。
得到的第一个不大于 Edit2 中值的地方,就是我们要的。
如果能找到函数名,根据这个函数名对应的“完整”的地址,再查一次,可以得到代码行数。

4. 这种方法并非非常靠谱。找不到,或者直接找到更底层的代码位置。也是很正常的。

----------------------------------------------
详解二

什么是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);
      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行 ^_^.....

另外,map文件不是唯一的,dcu本身就可以,要不然Delphi IDE也没法找到发生异常的行了,
还有如果编译的时候带上turbo debug info,也可以从本身的tds找到行号
也有一些工具能够间接从map文件生成符号信息然后附加到目标模块(或者成为独立的一个文件)

大家可以看到DELPHI 的设置
点击
project -> Linker -> Memory size 的Image base 默认为$00400000 这就是pe loader加载的时候默认加载到的基址。

参考:http://www.cnblogs.com/key-ok/p/3394328.html

时间: 2024-11-09 17:07:53

AV 地址错误 map 文件 根据地址报错,查 Delphi 代码的相关文章

文件上传报错:Unknown: file created in the system&#39;s temporary directory

nginx+php下文件上传成功,但会有错误提示如下: <b>Notice</b>:  Unknown: file created in the system's temporary directory in <b>Unknown</b> on line <b>0</b><br /> 网上搜索相关资料发现可能和php下临时文件存放目录配置有关,查看进入php.ini配置文件 配置文件搜索upload_tmp_dir,默认/

pom文件第一行报错(unknown)

问题: Eclipse导入maven项目时,或者新建一个springboot项目时,pom.xml文件第一行报错,没有错误信息提示,就一个Unknown,但是项目可以正常运行. 如下图: 原因: 因为版本升级了(2.2.6.RELEASE),开发工具不兼容导致. 解决: 在pom.xml 文件中的 properties 加入maven jar 插件的版本号.如下图: 然后maven --> update project 就可以发现万恶的小红叉消失了. 注意:这里的3.1.1版本不是自己用的mav

Struts2实现文件上传报错(四)

1.具体错误如下 2014-5-2 21:38:29 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error 严重: Exception occurred during processing request: null java.lang.NullPointerException at com.you.file.upload.action.FileUploadAction.execute(FileUploadAction.java:56)

Struts2实现文件上传报错(一)

1.具体报错如下 2014-5-1 23:02:38 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [jsp] in context with path [/UploadFile] threw exception [An exception occurred processing JSP page /file.jsp at line 28 25: <table> 26

Struts2实现文件上传报错(二)

编译Lua时,出现这样的错误: gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX -c -o lua.o lua.clua.c:67:31: error: 查阅了一下,centOS上需要安装readline-devel ncurses-devel yum install readline-devel ncurses-devel 测试平台成功. [[email protected] lua-5.2.3]# make linux test cd src &

Struts2实现文件上传报错(三)

1.具体错误如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help | start | stop } 2014-5-1 23:17:23 org.apache.catalina.core.AprLifecycleListener init 信息: Loaded APR based Apache Tomcat Native library 1.1.27 usin

MyEclipse导入Maven项目pom文件第一行报错,运行Tomcat报Log4j错误--解决方法

问题描述: 前一段时间电脑第一次导入Maven项目,又是pom文件错,改好后又是运行Tomcat报Log4j错误,一直倒腾了近一个月程序才成功跑起来,太不容易. 也上网查了很长时间,没一个方法能解决我的问题的.特记下解决方法,希望能帮到像我这样的web刚入门者. (刚入门,肯定有说的不对的地方,有错也希望能指出来,我改正) 前期操作:导入项目后clean,install,update,中会报错(因为我已经解决了,所以没有×). 两问题对应解决方法: 1.pom文件第一行大红叉,说明是项目的文件指

【微信】微信小程序 微信开发工具中新创建的json文件,编译报错VM1781:2 pages/module/module.json 文件解析错误 SyntaxError: Unexpected end of JSON input

如果新创建报错:编译报错VM1781:2 pages/module/module.json 文件解析错误  SyntaxError: Unexpected end of JSON input 解决方法: 在JSON文件中添加 即可解决 { } 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/9076271.html

更换仓库地址后,git fetch origin master报错

1.问题描述: 今天服务器迁移了下git,于是就直接根据拷贝后的git repo创建了远程仓库,本来一切都很顺利. 服务器端执行命令报错.记录下解决过程 2.执行命令报错 $ git fetch origin master @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@@@@@@@@@@@@@