很好的问题,早就想聊一下这个问题,写了篇博客:
http://advdbg.org/blogs/advdbg_system/articles/5152.aspx
非常感谢Raymond 的解答 受益匪浅啊
还有一个疑问
0:002> dt _heap_entryntdll!_HEAP_ENTRY +0x000 Size : Uint2B +0x002 Flags : UChar +0x003 SmallTagIndex : UChar +0x000 SubSegmentCode : Ptr32 Void +0x004 PreviousSize : Uint2B +0x006 SegmentOffset : UChar +0x006 LFHFlags : UChar +0x007 UnusedBytes : UChar +0x000 FunctionIndex : Uint2B +0x002 ContextValue : Uint2B +0x000 InterceptorValue : Uint4B +0x004 UnusedBytesLength : Uint2B +0x006 EntryOffset : UChar +0x007 ExtendedBlockSignature : UChar +0x000 Code1 : Uint4B +0x004 Code2 : Uint2B +0x006 Code3 : UChar +0x007 Code4 : UChar +0x000 AgregateCode : Uint8B我查看了 ntdll!_HEAP_ENTRY 的定义 sizeof是24字节啊 怎么堆头大小才8呢?
哪里执行的sizeof?在WinDBG里看是8啊:
0:000> ?? sizeof(_HEAP_ENTRY)unsigned int 8