什麼是 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行. 這裏會報錯