青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

尋找崩潰的真相

我們來演示一下如何制造一起崩潰事件:

我把這個(gè)試驗(yàn)的源代碼列出來:

const int x =10000;

int main(int argc, char* argv[])

{

       int *y=0;

       y=(int*)&x;

       *y=10;

       return 0;

}

 

我們用Microsoft Visual C++ 6.0(SP5)編譯出一個(gè)Debug版本的EXE。雙擊運(yùn)行它。在Windows 2000 Server下,你將會(huì)得到這樣一個(gè)對(duì)話框:

標(biāo)題:Pointer.exe ? 應(yīng)用程序錯(cuò)誤;

正文:”0x00401279”指令引用的”0x0043101c內(nèi)存。該內(nèi)存不能為”written”

要終止程序,請單擊確定

要調(diào)試程序,請單擊取消。

   知道了這些信息后,如何找到錯(cuò)誤發(fā)生策源地呢?

   請記住這個(gè)地址“0x00401279”,它是崩潰發(fā)生地。

如何找到崩潰的源頭:

   有兩種情況:

μ        一是我們擁有源代碼,可以現(xiàn)場調(diào)試;

μ        二是現(xiàn)場絕對(duì)不可以安裝VC,無法調(diào)試,但是我們有它的MAP文件。

   第一種情況,有源代碼,這被叫做事后調(diào)試”:

首先我們用VC IDE裝載這個(gè)工程,按F11執(zhí)行它,切換至反匯編窗口(Disassembly)

   按下Ctrl+G熱鍵。

   你就會(huì)得到一個(gè)“Go To”的窗口。默認(rèn)選擇是“Address”。在“Enter address expression”編輯框中輸入崩潰發(fā)生地0x00401279。然后點(diǎn)擊“Go To”按鈕。你就來到了這個(gè)地方:

00401279   mov         dword ptr [eax],0Ah

好了,我們看到了發(fā)生崩潰時(shí)執(zhí)行的是這行反匯編代碼,但是為什么會(huì)崩潰呢?

我們在這里設(shè)置一個(gè)斷點(diǎn),按F5來到這里。

Watch窗口中鍵入“@EAX”察看EAX寄存器,得到的數(shù)值是“0xcccccccc”。顯然這是因?yàn)橄蛞粋€(gè)空指針指向的地址復(fù)制一個(gè)數(shù)據(jù),從而造成了崩潰。

好了,針對(duì)這個(gè)問題,你已經(jīng)調(diào)試成功了。

還有一個(gè)問題,對(duì)于Release版本的EXE,也可以這么調(diào)試嗎?

當(dāng)然可以。同樣是這個(gè)例子,運(yùn)行它的Release版本,得到的崩潰地址是0x0040108a。

我們在VC中裝載這個(gè)工程的Release版本,按F11運(yùn)行它。

來到它的反匯編代碼的0x004018a處,我們看到:

0040108A   mov         dword ptr ds:[40B0D0h],0Ah

 

第二種情況,有映射文件Pointer.map:

值得注意的是,如果你只在VC Project Setting對(duì)話框中打開Generate mapfile,還是不夠的。因?yàn)槟阋欢ㄟ€要輸出程序代碼地址和源代碼行號(hào)?。∵@非常的重要!

要得到這些信息,請?jiān)?/span>Project Options對(duì)話框中鍵入“/mapinfo:lines /mapinfo:exports”。請你一定要養(yǎng)成這種習(xí)慣!因?yàn)檫@不是默認(rèn)設(shè)置。

我們得到的map文件大致如下,我刪節(jié)了大多數(shù)輸出:

Pointer

(應(yīng)用程序名)

Timestamp is 3d4407a7 (Sun Jul 28 23:03:03 2002)

(時(shí)間戳)

Preferred load address is 00400000

(最佳裝載基地址。非常重要的一個(gè)數(shù)據(jù)。不過一般都是這個(gè)數(shù)。)

 

Address         Publics by Value              Rva+Base     Lib:Object

 

0001:00000250       _main                      00401250 f   Pointer.obj

(_main的虛地址)

 

Line numbers for .\Debug\Pointer.obj(E:\ Pointer\Pointer.cpp) segment .text

 

12 0001:00000250    14 0001:00000268    15 0001:0000026f    16 0001:00000276

18 0001:0000027f    20 0001:00000291    23 0001:000002a4    24 0001:000002a6

(這就是我們的Pointer.cpp所對(duì)應(yīng)的程序代碼行號(hào)和相對(duì)虛擬地址的對(duì)應(yīng)表)

我們可以從中看到,最佳裝載基地址是0x00400000,_main的虛地址是0x00401250,而0001:00000250又是什么意思呢?

0x00000250就是_main的相對(duì)虛擬地址(RVA)

0x00010000就是PE頭文件的大小,一般都是這個(gè)數(shù)。

所以虛地址就是這么算出來的:

0x00401250 = 0x00400000     + 0x00010000     +  0x00000250

虛地址      = 最佳裝載基地址 + PE頭文件的大小 + 相對(duì)虛擬地址(RVA)

通過_mainRVA的計(jì)算,我們也就知道了怎么計(jì)算崩潰地址0x00401279RVA,0x00000279,對(duì)吧?

然后,在這個(gè)MAP映射文件的“Line numbers for .\Debug\Pointer.obj(E:\ Pointer\Pointer.cpp) segment .text”這個(gè)行號(hào)段中查找這個(gè)地址。如你所看到的,只有16行對(duì)應(yīng)的0000027618行對(duì)應(yīng)的0000027F,沒有00000279呀?

沒有17行的對(duì)應(yīng)關(guān)系,說明17行是空行。

那么00000279就一定是16行的了!這樣你不用看那個(gè)程序員的代碼,就可以通知他:崩潰發(fā)生在你的Pointer.cpp的第16行了!很酷吧!

 

posted on 2009-10-19 13:12 肥仔 閱讀(1731) 評(píng)論(0)  編輯 收藏 引用 所屬分類: VC 存檔

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩午夜电影在线观看| 一本色道久久综合亚洲精品婷婷 | 久久精品一区二区三区中文字幕| 一本色道久久综合亚洲91| 免费在线日韩av| 麻豆精品国产91久久久久久| 国产亚洲网站| 亚洲高清一区二| 久久先锋影音| 91久久精品美女高潮| 欧美美女视频| 99热在这里有精品免费| 久久久久综合网| 伊人婷婷欧美激情| 欧美日韩国产系列| 欧美在线观看一二区| 欧美成人69| 亚洲视频在线观看免费| 国产欧美精品xxxx另类| 老色鬼久久亚洲一区二区| 一本色道精品久久一区二区三区 | 91久久综合| 亚洲高清毛片| 正在播放日韩| 一区在线影院| 欧美日韩高清在线播放| 欧美性视频网站| 久久精品免费观看| 欧美精品久久久久久久免费观看 | 亚洲一区二区三区精品在线| 老司机午夜精品| 亚洲激情综合| 亚洲欧美日韩网| 亚洲茄子视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美亚洲一区二区三区| 在线国产精品一区| 国产一区二区三区四区hd| 最新日韩av| 欧美一区日韩一区| 亚洲欧美成人一区二区在线电影 | 中文一区字幕| 欧美成人午夜激情| 久久亚洲精品视频| av不卡在线看| 你懂的视频一区二区| 国内精品伊人久久久久av影院| 国产午夜一区二区三区| 国产日韩欧美电影在线观看| 一本大道av伊人久久综合| 久久亚洲捆绑美女| 欧美一级视频精品观看| 亚洲综合色丁香婷婷六月图片| 狠狠色丁香婷婷综合久久片| 亚洲午夜影视影院在线观看| 亚洲人成网在线播放| 午夜精品久久久久| 欧美视频在线观看 亚洲欧| 欧美日韩精品久久久| 尤物九九久久国产精品的特点| 久久精品一区二区| 一区二区电影免费在线观看| 美女国产一区| 欧美激情一区二区| 欧美好吊妞视频| 久久久久久夜| 欧美日韩1区2区| 亚洲精品日韩综合观看成人91| 在线免费观看日本一区| 久久深夜福利| 久久久91精品国产| 在线观看av一区| 免费观看日韩av| 久久亚洲综合| 欧美精品久久久久久久久老牛影院| 亚洲高清三级视频| 亚洲激情二区| 欧美三级视频| 欧美一区二区三区视频在线| 性欧美18~19sex高清播放| 久久成人这里只有精品| 久久综合中文| 亚洲欧洲日产国码二区| 91久久中文字幕| 国产精品理论片| 在线成人免费视频| 欧美成人激情在线| 美日韩精品免费| 国产精品午夜国产小视频| 在线精品视频免费观看| 欧美黄在线观看| 欧美激情精品久久久久| 国产欧美日韩亚州综合| 久久久青草青青国产亚洲免观| 美女免费视频一区| 亚洲欧美在线播放| 亚洲大片在线观看| 国产精品爱久久久久久久| 久久精品国亚洲| 亚洲精品美女免费| 国产欧美一区二区三区久久| 久久久久久久综合狠狠综合| 亚洲精品中文字幕有码专区| 欧美在线国产精品| 亚洲精品日韩综合观看成人91| 亚洲视频一区| 欧美日韩国产一区| 久久香蕉国产线看观看网| 欧美日韩一区二区三区四区在线观看 | 亚洲精品日韩在线观看| 亚洲免费高清视频| 欧美黄色网络| 亚洲欧洲日韩女同| 亚洲免费视频观看| 一区二区激情| 老司机一区二区| 欧美在线亚洲一区| 日韩午夜电影| 尤物yw午夜国产精品视频明星| 91久久精品一区| 国产一区深夜福利| 亚洲一区二区在线播放| 日韩一二三在线视频播| 你懂的网址国产 欧美| 国产精品国产三级国产专播精品人 | 黄色成人免费网站| 一区二区三区视频免费在线观看| 亚洲国产一区二区a毛片| 久久亚洲免费| 国产乱码精品一区二区三区忘忧草 | 国产精品vip| 亚洲国产你懂的| 久久亚洲午夜电影| 午夜在线观看欧美| 欧美日韩亚洲不卡| 亚洲精品视频在线看| 亚洲美女精品久久| 欧美成人高清视频| 一区二区三区四区五区精品| 久久精品亚洲精品国产欧美kt∨| 午夜视频在线观看一区| 国产精品福利网| 中日韩美女免费视频网站在线观看| 99综合视频| 欧美日韩精品免费观看视频| 亚洲欧美另类在线| 好吊一区二区三区| 亚洲欧洲av一区二区| 亚洲欧美日韩在线| 国产麻豆一精品一av一免费| 亚洲欧美成人一区二区三区| 欧美在线观看一区二区| 国产午夜亚洲精品羞羞网站| 久久久亚洲国产美女国产盗摄| 国产精品一区久久久久| 午夜在线视频一区二区区别| 久久久久国产精品麻豆ai换脸| 国模一区二区三区| 久久夜色精品国产欧美乱极品| 欧美韩日高清| 在线视频精品| 国产精品久久| 欧美在线观看一二区| 欧美成在线视频| 夜夜嗨av一区二区三区中文字幕 | 国产精品国产亚洲精品看不卡15 | 久久精品亚洲乱码伦伦中文| 欧美成人午夜| 亚洲日本成人女熟在线观看| 欧美黄色免费网站| 一区二区三区免费观看| 久久精品99久久香蕉国产色戒| 激情欧美一区二区三区| 欧美片网站免费| 性感少妇一区| 亚洲美女av黄| 久久嫩草精品久久久精品一| 亚洲每日更新| 国产精品天天看| 久久在精品线影院精品国产| 亚洲美女黄网| 麻豆精品传媒视频| 中国成人亚色综合网站| 韩日欧美一区二区三区| 欧美日韩系列| 美女诱惑一区| 久久激情五月婷婷| 一区二区动漫| 亚洲国产欧美日韩另类综合| 欧美在线视频免费| 99精品视频免费| 黄色成人av网站| 国产日韩在线看| 亚洲午夜久久久| 国产精品海角社区在线观看| 久久精品欧美| 一区二区三区色| 亚洲精品日韩欧美| 女人色偷偷aa久久天堂| 欧美在线观看你懂的|