什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号、源文件和代码行号信息的惟一的文本表示方法,它能够在任何地方、任什么时候候使用,不须要有额外的程序进行支持。并且,这是惟一能找出程序崩溃的地方的救星。web
若是要查找代码行号,须要使用下面的公式作一些十六进制的减法运算:post
崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000spa
为何要这样作呢?咱们获得的崩溃地址都是由 偏移地址+ 基地址得来的,因此在计算行号的时候要把基地址减去,通常状况下,基地址的值是 0x00400000 。另外,因为通常的 PE 文件的代码段都是从 0x1000 偏移开始的,因此也必须减去 0x1000 。orm
二 Delphi 下生成MAP文件的方法 blog
project -> options -> Linker -> Map file 选择detailed。 生成的位置在Exe文件所在的目录。ci
三 例子it
代码io
运行时会报错form
这里能够发现出错地址是:$00401A51class
根据: 崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000
=$00401A51 - $00400000 -$1000
=$00000A51
那么,经过在MAP文件里查找小于或等于$00000A51的最大值就是,咱们要获得的崩溃行偏移.
这样获得出错行在, Unit1单元的36行. 正好是这行: p^ := 'A'; // 36行. 这里会报错