DetectCPU(CPU信息查詢軟件) v2.0 綠色免費(fèi)版
327KB / 06-09
葫蘆俠御熏_懶人內(nèi)存修改CE復(fù)制一鍵生成 V1.0 綠色免費(fèi)版
375KB / 12-27
RyzenTuner(CPU性能調(diào)節(jié)軟件) v1.0.2 免費(fèi)綠色版
2MB / 08-18
酸菜魚-深度清理運(yùn)存 V1.0 綠色免費(fèi)版
731KB / 07-15
Quick CPU(CPU監(jiān)測專業(yè)軟件) v4.8.0.0 免費(fèi)綠色便攜版 64位
30.4MB / 11-06
文件自動(dòng)同步軟件Abelssoft SyncManager 2021 破解免費(fèi)版
6.45MB / 04-12
Ryzen Controller(銳龍?zhí)幚砥鹘怄i功耗) v2.3.0 免費(fèi)安裝版
71.7MB / 03-30
電腦CPU優(yōu)化神器ChrisPC CPU Booster v1.15.15 官方安裝破解版
8.13MB / 03-17
Quick CPU(CPU性能優(yōu)化軟件) v4.4.2.0 免費(fèi)安裝版 64位/32位
34.7MB / 09-19
cpu運(yùn)行頻率檢測工具(CpuFrequenz) v4.21 綠色免費(fèi)版
240KB / 08-17
-
CPU-Z(CPU檢測軟件) v2.12 漢化單文件免費(fèi)版 32位/64位 CPU 相關(guān) / 2.1MB
-
簡單實(shí)用的CPU檢測軟件 Cpu-Z v2.11.2 32bit 綠色漢化版 CPU 相關(guān) / 1.04MB
-
-
CPU-Z (CPU檢測軟件) v2.11.0 64bit 綠色英文版 檢測CPU/主板和 CPU 相關(guān) / 1.9MB
-
SIV(System Information Viewer) V5.74 綠色版 測試主板電壓/CPU CPU 相關(guān) / 4.77MB
-
Quick CPU(CPU監(jiān)測專業(yè)軟件) v4.8.0.0 免費(fèi)綠色便攜版 64位 CPU 相關(guān) / 30.4MB
-
SoftPerfect RAM Disk(創(chuàng)建虛擬內(nèi)存盤)軟件 v4.4.1 多語中文版 CPU 相關(guān) / 3.15MB
-
CPU頻率溫度記錄工具(coretemp) 64位版 V1.18.1 綠色中文免費(fèi)版 CPU 相關(guān) / 392KB
-
Core Temp(CPU數(shù)字溫度傳感器) v1.18.1 官方多語安裝版 CPU 相關(guān) / 1.17MB
-
詳情介紹
今天調(diào)試一個(gè)bug,用pageheap解決,在此記錄一下。
bug癥狀如下:
1:不確定性崩潰,用vs調(diào)試啟動(dòng)每次崩潰地點(diǎn)都在crt分配或者釋放堆的位置
2:崩潰時(shí)vs看到的調(diào)用棧可能不同
3:output輸出HEAP: Free Heap block 388c58 modified at 388c88 after it was freed
問題分析:
根據(jù)vs的輸出,確定問題是在一塊堆上分配的內(nèi)存在釋放后被改寫了。由于CRT只能在下次做堆操作檢查時(shí)才會(huì)暴露出問題,所以程序崩潰的調(diào)用棧是不確定的。
折騰了2個(gè)小時(shí)后,啟用pageheap縮小了程序出錯(cuò)到崩潰之間的距離,解決了問題。過程如下:
1:啟動(dòng)pageheap
pageheap /enable mybug.exe 0x01
2:調(diào)試啟動(dòng)mybug.exe
現(xiàn)在程序崩潰的調(diào)用棧每次都相同,并且都在相同的線程中,根據(jù)調(diào)用棧信息很輕松的鎖定了bug。
由于上面的例子過于復(fù)雜,下面寫了一些小程序分析了pageheap的原理
char* buffer = new char[19]; // 1
buffer[19] = 0; // 2
delete [] buffer; // 3
這是一個(gè)很簡單的堆內(nèi)存越界的例子,在未啟動(dòng)pageheap的情況下,我們來看看buffer的內(nèi)存情況:
buffer = 0x00388C80
第一行執(zhí)行后,buffer的內(nèi)存
0x00388C80 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd ................
0x00388C90 cd cd cd fd fd fd fd ab ab ab ab ab ab ab ab fe ................
簡單說明一下,調(diào)試模式下堆上未初始化的內(nèi)存為cd,并且在內(nèi)存結(jié)束處有4個(gè)fd的邊界,用于debug模式下crt做內(nèi)存檢查,執(zhí)行第2行之后,buffer的內(nèi)存為
0x00388C80 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd ................
0x00388C90 cd cd cd 00 fd fd fd ab ab ab ab ab ab ab ab fe ................
可以看到4個(gè)fd的內(nèi)存邊界中第一個(gè)fd被破壞了。但這個(gè)時(shí)候程序并沒有崩潰,繼續(xù)執(zhí)行第3行,程序崩潰,提示堆錯(cuò)誤,可以看到,如果第2行和第3行之間有很長的代碼邏輯,那么也只能在第3行執(zhí)行之后程序才會(huì)崩潰。這給調(diào)式程序帶來了極大的不便。
如果第2行改為:buffer[24] = 0 程序同樣不會(huì)崩潰
如果啟用了pageheap,再來看看在debug模式下buffer的內(nèi)存分配情況:
第一行分配內(nèi)存后,buffer的內(nèi)存情況:
0x01675FE8 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd ................
0x01675FF8 cd cd cd fd fd fd fd d0 ?? ?? ?? ?? ?? ?? ?? ?? ................
可以看到,和上面一樣,在內(nèi)存結(jié)束加上了4個(gè)fd的邊界,d0是用于填補(bǔ)4字節(jié)對齊,注意buffer后面的地址(第一個(gè)??)為0x01675FF8+8 = 0x01676000,這是一個(gè)4k對齊的PAGE_NOACCESS頁面,這個(gè)時(shí)候我們執(zhí)行第2行代碼
buffer[19] = 0; 同樣不會(huì)崩潰,即使是修改buffer[19-23]的值(4個(gè)fd邊界和1個(gè)對齊d0),和未啟動(dòng)pageheap一樣,程序都只會(huì)在執(zhí)行第3行的時(shí)候崩潰。如果修改buffer[24]則程序會(huì)崩潰。
通過這個(gè)例子,可以得出一個(gè)結(jié)論:啟用pageheap后,堆內(nèi)存分配在頁面的末尾,后面緊跟了一個(gè)4k的PAGE_NOACCESS屬性的頁面,這種情況下,啟用pageheap的好處是能在一定程度上檢查內(nèi)存越界。
再來看一個(gè)例子
char* buffer = new char[20]; // 1
delete [] buffer; // 2
buffer[1] = 1; // 3
這個(gè)例子演示了操作delete釋放后的內(nèi)存,在未啟動(dòng)pageheap的情況下,程序不會(huì)崩潰,原因同上一個(gè)例子,啟用pageheap后,buffer內(nèi)存為:
第一行執(zhí)行后:
0x01675FE8 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd ................
0x01675FF8 cd cd cd cd fd fd fd fd ?? ?? ?? ?? ?? ?? ?? ?? ................
第2行執(zhí)行后:
0x01675FE8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ................
0x01675FF8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ................
可以看到,啟用pageheap后delete內(nèi)存,分配該內(nèi)存的整個(gè)頁面都被設(shè)置為PAGE_NOACCESS屬性,這樣操作delete后的任何內(nèi)存程序馬上就會(huì)崩潰。
結(jié)論2:啟用pageheap很容易檢查操作delete后的內(nèi)存的錯(cuò)誤(包括2次delete)
總結(jié):
1:啟用pageheap后,系統(tǒng)的堆管理器會(huì)把內(nèi)存分配到4k頁面的末尾(注意需要4字節(jié)對齊,debug模式下還存在邊界檢查的4字節(jié)fd)
2:緊隨著的下一個(gè)頁面被設(shè)置為PAGE_NOACCESS屬性
3:啟用pageheap后,釋放內(nèi)存把整個(gè)頁面設(shè)置為PAGE_NOACCESS屬性
4:內(nèi)存越界和非法操作依靠非法訪問PAGE_NOACCESS屬性的頁面暴露問題
5:由于每塊內(nèi)存都至少需要2個(gè)頁面(1個(gè)頁面分配,1個(gè)頁面PAGE_NOACCESS),在內(nèi)存消耗較大的環(huán)境下會(huì)占用極大的內(nèi)存資源。
6:把pageheap和crt的堆檢查函數(shù)結(jié)合起來,能夠更好的暴露堆相關(guān)bug
ps.pageheap的作用是在注冊表位置HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options下生成一個(gè)項(xiàng)
下載地址
人氣軟件
Core Temp(CPU數(shù)字溫度傳感器) v1.18.1 官方多語安裝版
CPU頻率溫度記錄工具(coretemp) 64位版 V1.18.1 綠色中文免費(fèi)版
CPU測試工具(Super PI Mod) v1.5 漢化綠色版
流量礦石軟件 v1.0.109.76 官方版
CPU-Z(CPU檢測軟件) v2.12 漢化單文件免費(fèi)版 32位/64位
cpu 溫度測試軟件工具coretemp V1.18.1 中文綠色版
A-Tuning(華擎主板調(diào)節(jié)工具) 3.0.191 官方中文版
CPUMark(cpu檢測軟件) V2.3 免費(fèi)綠色版
cpucores maximize your fps v1.8.1 免費(fèi)綠色版
HWMonitor(CPU檢測軟件) V1.38.0 綠色免費(fèi)版 32位
相關(guān)文章
-
DetectCPU(CPU信息查詢軟件) v2.0 綠色免費(fèi)版
DetectCPU是一款功能強(qiáng)大的cpu信息查詢工具,通過快速查詢讓用戶了解到電腦CPU的信息,還能從各個(gè)方面分析報(bào)告,直觀的了解自己需要升級(jí)的地方,界面詳細(xì),操作簡單...
-
葫蘆俠御熏_懶人內(nèi)存修改CE復(fù)制一鍵生成 V1.0 綠色免費(fèi)版
葫蘆俠御熏_懶人內(nèi)存修改CE復(fù)制一鍵生成是一款用內(nèi)存機(jī)制直接獲取數(shù)據(jù)修改的生成E代碼工具,它包括16進(jìn)制編輯,反匯編程序,內(nèi)存查找工具,歡迎需要的朋友下載使用...
-
RyzenTuner(CPU性能調(diào)節(jié)軟件) v1.0.2 免費(fèi)綠色版
RyzenTuner是款專門為玩機(jī)大師們打造的CPU性能調(diào)節(jié)工具。用戶可以通過這款軟件輕松設(shè)置CPU的工作模式,提高CPU的工作效率,趕緊看看吧...
-
酸菜魚-深度清理運(yùn)存 V1.0 綠色免費(fèi)版
酸菜魚-深度清理運(yùn)存是一款系統(tǒng)內(nèi)存清理工具,它不是通過殺進(jìn)程實(shí)現(xiàn)的釋放內(nèi)存,所以大家可以放心使用,歡迎需要的朋友下載使用...
-
Quick CPU(CPU監(jiān)測專業(yè)軟件) v4.8.0.0 免費(fèi)綠色便攜版 64位
Quick CPU是一個(gè)安全的專業(yè)CPU實(shí)時(shí)監(jiān)測軟件,易操作,俗稱“CPU的軟渦輪增壓器”,能夠根據(jù)個(gè)人需求,控制需要啟用或禁用的CPU內(nèi)核數(shù)量(或者您可以隨時(shí)啟用所有內(nèi)核),這...
-
文件自動(dòng)同步軟件Abelssoft SyncManager 2021 破解免費(fèi)版
Abelssoft CheckDrive 2021是一款可以對硬盤進(jìn)行查找錯(cuò)誤的硬盤檢測軟件,軟件可以輕松應(yīng)對大小超過1TB的硬盤、外部USB驅(qū)動(dòng)器或超快速SSD磁盤...
下載聲明
☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
☉ 如果這個(gè)軟件總是不能下載的請?jiān)谠u論中留言,我們會(huì)盡快修復(fù),謝謝!
☉ 下載本站資源,如果服務(wù)器暫不能下載請過一段時(shí)間重試!或者多試試幾個(gè)下載地址
☉ 如果遇到什么問題,請?jiān)u論留言,我們定會(huì)解決問題,謝謝大家支持!
☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請購買正版。
☉ 本站提供的PageHeap內(nèi)存分析工具 綠色版資源來源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。