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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
簡(jiǎn)單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
使用PageHeap.EXE或GFlags.EXE檢查內(nèi)存越界錯(cuò)誤
2008年07月31日 星期四 19:35

我推薦使用PageHeap.Exe和Gflags.Exe,主要的原因還是因?yàn)楫?dāng)有人問內(nèi)存越界的錯(cuò)誤如何查出來的時(shí)候,國(guó)外的朋友經(jīng)常會(huì)推薦這兩個(gè)工具(highly recommend)。我用過之后,也覺得有些時(shí)候用用還是有好處的。

PageHeap.Exe將針對(duì)某個(gè)指定的應(yīng)用程序啟用Page Heap標(biāo)志,從而自動(dòng)監(jiān)視所有的malloc、new和heapAlloc的內(nèi)存分配,找出內(nèi)存錯(cuò)誤。

PageHeap.Exe的下載地點(diǎn):

http://download.microsoft.com/download/vc60pro/utility/6.0/win98/en-us/pageheap1.exe

下面我們簡(jiǎn)單地給出PageHeap使用步驟:

第一步:

在命令行中運(yùn)行PageHeap.Exe。如果你以前設(shè)置過啟用Global Page Heap標(biāo)志,那么你將看到一個(gè)列表,給出所有已經(jīng)啟用了的應(yīng)用程序的名字,不含路徑。

如下所示:

C:\>pageheap

pgh.exe????????????????????????????????? enabled

testSplit.exe??????????????????????????? enabled


第二步:

編譯一個(gè)小程序,其中有如下代碼:

void main()
{
int m_len = 5;
char *m_p = (char *)HeapAlloc (GetProcessHeap (),??? HEAP_ZERO_MEMORY, m_len);
m_p[m_len] = 0;
HeapFree (GetProcessHeap (),0, m_p);
}

Build出一個(gè)Debug版本。運(yùn)行之,你看不到有任何異常的報(bào)告。

但其實(shí)m_p[m_len]=0這句話就是越界寫了,因?yàn)橹环峙涞搅薽_p[m_len-1]!這種情況就叫Dynamic memory overrun。用BoundsChecker是可以查到的。

這時(shí),表面上看不出任何問題,但是一顆定時(shí)炸彈已經(jīng)埋下了。


第三步:

在命令行中運(yùn)行PageHeap /enable YourApplicationName.exe 0x01。

再運(yùn)行一次不帶參數(shù)的PageHeap,察看上面的命令是否生效。你的應(yīng)用程序應(yīng)該在啟用的列表中。

注意:千萬不要在YourApplication.Exe前面加上路徑?。?/font>

0x01的含義在后面說明。


第四步:

再次運(yùn)行你的程序。

你將會(huì)注意到在Output窗口的加載各種DLL之前,多了幾句話:

Loaded exports for 'C:\WINNT\System32\ntdll.dll'
Page heap: process 0x57C created heap @ 00130000 (00230000, flags 0x1)
Loaded 'C:\WINNT\system32\MFC42D.DLL', no matching symbolic information found.
..
Loaded 'C:\WINNT\system32\MSVCP60D.DLL', no matching symbolic information found.
Page heap: process 0x57C created heap @ 00470000 (00570000, flags 0x1)
Loaded exports for 'C:\WINNT\system32\imm32.dll'

這就是Page Heap的監(jiān)視機(jī)制在發(fā)揮作用!他告訴你你的堆00470000被創(chuàng)建出來了。

然后程序退出后,Output窗口有這么幾句話表明一定有什么錯(cuò)誤發(fā)生了:

Page heap: block @ 0015AFF8 is corrupted (reason 10)
Page heap: reason: corrupted suffix pattern
Page heap: process 0x57C destroyed heap @ 00471000 (00570000)
The thread 0x8A8 has exited with code 0 (0x0).

這說明在銷毀堆00470000時(shí)遇到了麻煩,就是數(shù)據(jù)塊0015AFF8被誤用了,原因是誤用了下標(biāo)語法。看,說得多么清楚!也節(jié)省了許多翻來覆去查代碼的工作!


PageHeap的使用中有幾點(diǎn)值得注意:

1:啟用PageHeap不能夠影響正在運(yùn)行中的應(yīng)用程序。如果你需要啟用一些正在運(yùn)行且不能重啟的程序的PageHeap,那請(qǐng)運(yùn)行PageHeap啟用后,重新啟動(dòng)機(jī)器。

2:要想查看PageHeap把信息放到哪里了,請(qǐng)打開你的注冊(cè)表,來到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

你將會(huì)看到你的應(yīng)用程序也在這個(gè)項(xiàng)下面。你的應(yīng)用程序的GlobalFlag被設(shè)置為了0x02000000,PageHeapFlags被設(shè)置為了0x01。

3:PageHeap的原理是這樣,它在已分配的內(nèi)存的后面放上幾個(gè)守護(hù)字節(jié)(Guard Bytes),再跟上一個(gè)標(biāo)記為PAGE_NOACCESS的內(nèi)存頁(yè)。這樣,已分配內(nèi)存的后面如果被重寫了,那么守護(hù)字節(jié)就會(huì)被改變,于是當(dāng)內(nèi)存被釋放時(shí),PageHeap就會(huì)引發(fā)一個(gè)AV(Access Violation)。大體上就是這樣。所以只有最后釋放這塊問題內(nèi)存時(shí),才會(huì)有PageHeap的報(bào)告!這就是PageHeap的局限性吧。

參數(shù)0x01的含義:

FLAGS hex value (0x...) has the following structure:

??? B7-B0?? Bit flags??? 1 - enable page heap

??? 01 - enable page heap. If zero normal heap is used. In 99% of the cases you will want this to be set.
??? 02 - collect stack traces (default on checked builds)
??? 04 - minimize memory impact
??? 08 - minimize randomly(1)/based on size range(0)
??? 10 - catch backward overruns

看到了嗎?你還可以設(shè)置參數(shù)為0x10,從而可以檢查內(nèi)存向前的越界寫!

Gflags.Exe是微軟的Debugging Tools里面的工具。在Windows 2000的Resource Kit中也可以找得到。我們也可以用它來完成和PageHeap相同的任務(wù)。當(dāng)然,Gflags.EXE還能做許許多多其他的事情。這里我們就不介紹了,總之物超所值。

具體的使用辦法是:

1)???? 運(yùn)行Gflags.Exe;

2) 你將看到一個(gè)對(duì)話框。在”Image File”的編輯框中寫下你的應(yīng)用程序的名字,如YourApp.Exe。注意不要路徑!

3) 選擇”Image File Options”的單選鈕;

4) 這時(shí),你會(huì)看到對(duì)話框的內(nèi)容突然一變。選中“Place heap
allocations at ends of pages”前的復(fù)選框。

5) 點(diǎn)擊Apply按鈕。

這樣,就達(dá)到了PageHeap的效果?,F(xiàn)在運(yùn)行你的程序,overwrite你的堆,就應(yīng)該生成一個(gè)AV了!


(請(qǐng)結(jié)合查看微軟KB:SAMPLE: PageHeap1.exe Finds Heap Corruption and Memory Errors (Q264471))

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美精品在线观看播放| 欧美日本一道本在线视频| 欧美一级专区免费大片| 午夜精品久久久久久久男人的天堂 | 午夜在线视频一区二区区别 | 亚洲视频精品| 亚洲女性裸体视频| 欧美在线关看| 蜜桃av一区二区| 亚洲高清成人| 亚洲精品午夜精品| 亚洲影院免费| 久久精品国产一区二区三区免费看 | 夜夜嗨av一区二区三区网页| 一区二区三区欧美| 先锋影音一区二区三区| 久久久亚洲影院你懂的| 欧美激情一区二区| 国产精品激情偷乱一区二区∴| 国产女主播一区二区三区| 国模 一区 二区 三区| 亚洲国产色一区| 亚洲图片欧洲图片日韩av| 欧美有码在线视频| 免费人成网站在线观看欧美高清| 亚洲高清电影| 亚洲中午字幕| 老司机免费视频久久| 欧美日韩一区二区在线观看视频 | 欧美r片在线| 999亚洲国产精| 欧美一区二区在线免费播放| 美女诱惑一区| 国产精品天天看| 亚洲国产精品久久久久婷婷884| 一区二区三区视频在线观看| 久久成人国产| 亚洲精品国产精品乱码不99| 亚洲欧美影音先锋| 欧美国产1区2区| 国产三级欧美三级日产三级99| 亚洲精华国产欧美| 欧美一区二区精品在线| 亚洲国产另类久久久精品极度| 亚洲免费人成在线视频观看| 欧美成人一区二区三区在线观看 | 樱花yy私人影院亚洲| 中文日韩电影网站| 裸体女人亚洲精品一区| 亚洲最快最全在线视频| 久久综合色播五月| 国产精品视频一区二区三区| 亚洲精品美女在线观看播放| 久久久久久久999精品视频| 亚洲日本乱码在线观看| 久久久久国色av免费观看性色| 欧美视频一区在线| 亚洲欧洲一区二区三区久久| 久久久国产一区二区三区| 日韩视频在线观看| 美日韩精品免费观看视频| 国产亚洲精品久| 亚洲先锋成人| 亚洲精品久久在线| 老司机午夜精品视频在线观看| 国产欧美日韩一区| 亚洲一区二区三区四区中文| 亚洲国产免费看| 看片网站欧美日韩| 国产有码一区二区| 欧美影院午夜播放| 亚洲一级二级在线| 欧美日韩国产综合在线| 亚洲国产免费| 免费不卡中文字幕视频| 欧美一区二区日韩| 国产精品任我爽爆在线播放| 中文网丁香综合网| 亚洲欧洲日本在线| 欧美高清在线一区| 亚洲日本中文字幕区| 欧美成人久久| 毛片一区二区三区| 亚洲国产精品高清久久久| 久久综合久久综合久久综合| 新狼窝色av性久久久久久| 国产精品视频网址| 性色av一区二区三区在线观看| 夜夜爽www精品| 欧美亚男人的天堂| 亚洲欧美一区二区三区久久| 一本色道久久88亚洲综合88| 欧美日韩性视频在线| 一区二区国产日产| 亚洲精选视频免费看| 欧美日韩福利在线观看| aa级大片欧美三级| 日韩一级免费| 国产精品免费aⅴ片在线观看| 亚洲欧美乱综合| 亚洲欧美日韩第一区| 国产伦精品一区二区| 久久激情婷婷| 久久精品动漫| 亚洲国产精品一区二区第一页 | 久久天堂国产精品| 久久精品国亚洲| 韩国久久久久| 欧美福利一区| 欧美日韩国产在线播放| 亚洲性xxxx| 亚洲欧美资源在线| 激情丁香综合| 亚洲国产精品日韩| 国产精品福利网| 久久精品免视看| 久久综合久久久久88| a91a精品视频在线观看| 在线一区二区视频| 国产在线一区二区三区四区 | 黄色资源网久久资源365| 牛牛影视久久网| 欧美片在线播放| 欧美在线观看一区二区| 久久综合色8888| 一区二区三区高清在线观看| 亚洲一区视频在线| 伊人久久综合| 亚洲伦理精品| 国产一区二区在线观看免费播放| 免播放器亚洲一区| 欧美日本韩国一区二区三区| 新片速递亚洲合集欧美合集| 久久亚洲综合色一区二区三区| 亚洲毛片一区二区| 亚洲欧美国产精品va在线观看 | 欧美一区二区在线| 久久综合免费视频影院| 亚洲一区二区在线观看视频| 久久精品女人的天堂av| 9l国产精品久久久久麻豆| 亚洲欧美三级在线| 亚洲理论在线观看| 欧美一区在线看| 一区二区三区视频在线看| 久久国产精品72免费观看| 99在线精品视频| 久久国产欧美日韩精品| 在线中文字幕日韩| 久久免费精品视频| 午夜激情久久久| 欧美激情视频在线播放 | 中日韩视频在线观看| 久久精品久久99精品久久| 一区二区三区国产盗摄| 久久久久久久一区| 午夜精品久久久久久久白皮肤| 免费成人网www| 欧美中文在线观看| 欧美日韩免费在线观看| 欧美成人午夜视频| 国产亚洲精品bt天堂精选| 一本一本久久a久久精品综合麻豆| 精品91在线| 午夜在线播放视频欧美| 亚洲一区在线观看免费观看电影高清| 久久免费国产精品| 久久精品女人的天堂av| 国产精品jvid在线观看蜜臀| 亚洲国产日韩欧美| 伊人久久综合97精品| 亚洲欧美另类综合偷拍| 亚洲香蕉伊综合在人在线视看| 免费日韩av| 免费影视亚洲| 国内精品一区二区| 亚洲综合三区| 亚洲女女女同性video| 欧美日韩视频一区二区三区| 欧美国产一区二区三区激情无套| 国内在线观看一区二区三区| 亚洲一区二区在线播放| 亚洲综合色噜噜狠狠| 欧美日韩伦理在线| 亚洲精品一区二区三区樱花| 亚洲精品国产精品国自产观看浪潮| 久久精品99无色码中文字幕| 久久九九久久九九| 国产日韩av在线播放| 亚洲欧美综合v| 欧美一区二区三区在线视频| 国产精品日韩欧美一区二区| 一本久久综合亚洲鲁鲁| 亚洲天堂成人在线观看| 欧美日本中文字幕| 99在线热播精品免费| 亚洲一区在线直播| 国产精品久久国产精品99gif| 亚洲天堂第二页| 亚洲欧美一区二区原创|