2016-08-19 92 views
0

分配如下的利益我堆緩衝區被分配:地址WinDbg的命令說,堆的地址是「REGionUsageIsVAD」,即使它是用HeapAlloc

0:047> !heap -p -a 1d7cd1f0 
    address 1d7cd1f0 found in 
    _DPH_HEAP_ROOT @ 5251000 
    in busy allocation ( DPH_HEAP_BLOCK:   UserAddr   UserSize -   VirtAddr   VirtSize) 
           1cf8f5b0:   1d7cc008    3ff8 -   1d7cb000    6000 
    68448e89 verifier!AVrfDebugPageHeapAllocate+0x00000229 
    76e465ee ntdll!RtlDebugAllocateHeap+0x00000030 
    76e0a793 ntdll!RtlpAllocateHeap+0x000000c4 
    76dd5dd0 ntdll!RtlAllocateHeap+0x0000023a 
    000ca342 TEST+0x0002a342 
    000be639 TEST+0x0001e639 

正如你所看到的,它是使用HeapAlloc分配()。當我在這個堆的指針運行!address命令我得到:

ProcessParametrs 01699928 in range 01699000 0169a000 
Environment 016976e8 in range 01697000 01698000 
    1d790000 : 1d7cb000 - 00005000 
        Type  00020000 MEM_PRIVATE 
        Protect 00000004 PAGE_READWRITE 
        State 00001000 MEM_COMMIT 
        Usage RegionUsageIsVAD 

它自稱是RegionUsageIsVAD。根據this計算器答案,RegionUsageIsVAD通常意味着兩兩件事:

  1. 這是一個.NET應用程序在這種情況下,CLR分配存儲器這個 塊。
  2. 該應用程序調用VirtualAlloc來分配 內存塊。

我的方案不適合這些情況之一。我證實,CLR沒有使用運行.cordll -ve -u -l到我:

CLR DLL status: No load attempts 

是什麼意思RegionUsageIsVAD在這種情況下?

+0

「我**堆的興趣**類似產品具有以下分配** **堆棧跟蹤「 - 堆和堆是非常不同的內存分配機制。堆沒有堆棧跟蹤(實際上堆棧也沒有)。你什麼意思? – Olaf

+1

「分配堆棧跟蹤」我的意思是堆緩衝區分配時的堆棧跟蹤。您可以在windbg中使用'!heap -p -a'命令來查看此堆棧跟蹤。 – SivaDotRender

+2

Iirc在heapalloc使用虛擬分配之後,大小會有一些限制,如果我發現我的舊帖子 – blabb

回答

0

我重讀你的問題的思考,我會更新我的評論
但仔細看似乎有很多小孔
看來你複製的東西,並沒有貼權
哪裏是在堆中的指針? WinDbg的版本是您使用
因爲我無法確定我在GFLAGS炮製啓用簡單的程序 HPA和執行下下面的WinDbg的 EXE這
01699928是屏幕截圖
除非你粘貼爲isregionvad什麼(這條線是在內核輸出!地址不在用戶!地址),否則每一件事情似乎是在截圖

enter image description here

相關問題