遍歷程序Heap

2021-05-24 09:19:22 字數 703 閱讀 2117

windows heap管理是細粒度的記憶體管理方式。這樣做可以降低記憶體碎片,提高記憶體的利用率。每個程序在啟動之初都會有乙個預設的heap,這個我們可以通過getprocessheap()返回heap的控制代碼,其實這個控制代碼就是一款buffer。之後進行記憶體申請都是在這個上面進行的。具體的heap的結構不怎麼了解,初步的heap管理在win 95系統設計揭秘中介紹。這裡就不詳述了。

這裡需要介紹一些api,這些api用於遍歷每個程序的heap相關資訊。

_heapwalk()//c 中的本程序heap遍歷,這個地下呼叫的是heapwalk 

heapwalk()//也是本程序的

getprocessheap();//得到本程序預設heap位址

getprocessheaps();//得到本程序所有的heap位址

heap32listfirst();//得到指定程序的heap 資訊

heap32listnext()

heap32first()//得到每個heap stub 資訊,保護位址,大小。。。

heap32next()

toolhelp32readprocessmemory()//讀取指定程序,指定記憶體

還有很多對heap進行操作的api,這裡就不介紹了。

遍歷的方法和遍歷程序、模組的方法一樣。都是使用toolhelp的api。

這裡簡單的寫了列舉程序heap的**。具體的還需要充實一下。

遍歷程序與模組

通過createtoolhelp32snapshot函式可以給系統裡面的所有程序,模組建立乙個快照。然後通過process32first 和process32next就可以遍歷快照中的程序 void enumprocess processentry32 processentry 結構體裡面有程序的p...

程序遍歷和程序間的操作

程序遍歷前先獲取程序快照 例子如下 具體api使用查csdn 建立程序快照 獲取系統正在執行的程序資訊,執行緒資訊等 第二個引數乙個程序id號,用來指定要獲取哪乙個程序的快照,當獲取系統程序列表或獲取當前程序快照時可以設為0 if hprocesssnap invalid handle value ...

heap記憶體模型

測試 直接訪問沒有用malloc申請的空間會報錯 char pp char malloc 1 pp 9 ok char p char 0x00796299 編譯ok p 9 編譯ok,執行時錯誤,vs下提示錯誤碼 為 1073741819 include stdlib.h include stdio...