2014-01-14 66 views
2

查找堆或堆塊或段我一直在調試軟件中的堆損壞。我可以將數據寫入堆並獲得對某些指針的控制權。我可以在不知道這一點的情況下實現我的代碼執行目標,但它讓我困惑了一下。從地址

問題是,我無法找到在哪個堆中寫入的塊,也沒有堆段。

我用:!heap -x [address] and !heap -x -v [address]在Windbg下,他們沒有給我任何結果。 我知道一些堆可能會保留另一個堆段,當第一個堆棧中沒有未提交的空間可用時。但是,我已經拋棄了所有堆段,並且找不到與我正在查找的基地址類似的任何人。

對我來說這似乎有點奇怪,沒有具有這些塊的進程或應用程序特定的堆!

+0

什麼使得你確定地址在堆上而不是在堆棧上(或者在多線程程序的情況下是堆棧之一)? – NPE

+1

我剛剛檢查過那個頁面的訪問權限,它沒有被「守護」,堆棧應該被守護。另外,主線程(我感興趣的是)在堆塊中編輯內存。 – JohnnyCat

+0

夠公平的,只是檢查... :) – NPE

回答

4

如果堆已損壞,該!堆-x命令可能無法正常工作,

試試!堆-s -v來確定。 示例:Windbg !heap

做!地址,你應該看看內存是堆棧還是堆。

+0

感謝您的信息,我能夠確定分配的來源,!地址幫助我獲得分配的基地址(我在WinXP下看到分配地址始終是靜態的)。很明顯,應用程序將被迫分配一定的空間,所以我在所有Allocations API中設置了斷點,我驚訝地發現應用程序使用VirtualAlloc分配的空間不是「堆」,而是來自過程虛擬空間的大量內存。現在很清楚爲什麼堆沒有提供任何細節。謝謝您的幫助。 – JohnnyCat