2016-08-19 65 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

相关问题