VC6之MAP檔案生成及格式
阿新 • • 發佈:2019-02-07
寫一個程式,編譯出來:
#include <stdio.h>
int main(){
int i = 2;
int j ;
scanf("%d",&j);
i = 2;
i = 3;
i = 4;
i = 5;
i = 6;
printf("%d",i/j);
return 0 ;
}
然後開啟MAP檔案.
裡面有各種全域性符號,大概在檔案的中間位置,有這樣的東西:
Line numbers for ./Debug/4.obj(E:/pro/4/4.cpp) segment .text
3 0001:00000010 4 0001:00000024 6 0001:0000002b 7 0001:0000003c
8 0001:00000043 9 0001:0000004a 10 0001:00000051 11 0001:00000058
可以直接Ctrl+F找到程式檔名,我這裡是4.cpp
這些就是程式碼偏移和對應的行號.
三.除錯
就剛才的程式,執行,輸個0,過一下出錯框就來了,
我是VISTA,下面的詳細資訊是:
問題簽名:
問題事件名稱: APPCRASH
應用程式名: 4.exe
應用程式版本: 0.0.0.0
應用程式時間戳: 499d5ade
故障模組名稱: 4.exe
故障模組版本: 0.0.0.0
故障模組時間戳: 499d5ade
異常程式碼: c0000094
異常偏移量: 00001063
OS 版本: 6.0.6001.2.1.0.768.3
區域設定 ID: 2052
其他資訊 1: 38fc
其他資訊 2: db4f9c1c160faa4608f429ddffa01d6f
其他資訊 3: cb3b
其他資訊 4: e8ffb2a21d4a9ed7b258f1866c9d3db8
這個偏移就是要看的了。減去1000的程式碼段偏移。
就是63,再對照上面的行號和地址的列表
11 0001:00000058
這個是VC翻譯的時候,第11行顯然會對應多條指令。
這一指令群的開始地址是58.
這個是最接近63且比63小的地址,所以問題應該出在這一行上。
再看程式碼:
printf("%d",i/j);
發現這裡有個除0錯誤。
#include <stdio.h>
int main(){
int i = 2;
int j ;
scanf("%d",&j);
i = 2;
i = 3;
i = 4;
i = 5;
i = 6;
printf("%d",i/j);
return 0 ;
}
然後開啟MAP檔案.
裡面有各種全域性符號,大概在檔案的中間位置,有這樣的東西:
Line numbers for ./Debug/4.obj(E:/pro/4/4.cpp) segment .text
3 0001:00000010 4 0001:00000024 6 0001:0000002b 7 0001:0000003c
8 0001:00000043 9 0001:0000004a 10 0001:00000051 11 0001:00000058
可以直接Ctrl+F找到程式檔名,我這裡是4.cpp
這些就是程式碼偏移和對應的行號.
三.除錯
就剛才的程式,執行,輸個0,過一下出錯框就來了,
我是VISTA,下面的詳細資訊是:
問題簽名:
問題事件名稱: APPCRASH
應用程式名: 4.exe
應用程式版本: 0.0.0.0
應用程式時間戳: 499d5ade
故障模組名稱: 4.exe
故障模組版本: 0.0.0.0
故障模組時間戳: 499d5ade
異常程式碼: c0000094
異常偏移量: 00001063
OS 版本: 6.0.6001.2.1.0.768.3
區域設定 ID: 2052
其他資訊 1: 38fc
其他資訊 2: db4f9c1c160faa4608f429ddffa01d6f
其他資訊 3: cb3b
其他資訊 4: e8ffb2a21d4a9ed7b258f1866c9d3db8
這個偏移就是要看的了。減去1000的程式碼段偏移。
就是63,再對照上面的行號和地址的列表
11 0001:00000058
這個是VC翻譯的時候,第11行顯然會對應多條指令。
這一指令群的開始地址是58.
這個是最接近63且比63小的地址,所以問題應該出在這一行上。
再看程式碼:
發現這裡有個除0錯誤。