Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人:    发起时间: 2011-11-10 15:08 下午   回复: 3

Print Search
帖子排序:    
   2011-11-10, 15:08 下午
wdbxm 离线,最后访问时间: 2010/3/9 16:55:43

发帖数前500位
注册: 2009-09-23
发 贴: 4
堆内存数据结构的疑问
Reply Quote
0:000> !heap -p -a 0425BEE8
    address 0425bee8 found in
    _HEAP @ 4200000
      HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state
        0425bee0 0009 0000  [00]   0425bee8    0003c - (busy)

0:000> !heap -x 0425BEE8
Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags
-----------------------------------------------------------------------------
0425bee0  0425bee8  04200000  19e981a8        48      -            c  LFH;busy

0:000> dt _HEAP_ENTRY 0425bee0
ntdll!_HEAP_ENTRY
   +0x000 Size             : 0xe755
   +0x002 Flags            : 0x7a 'z'
   +0x003 SmallTagIndex    : 0x13 ''
   +0x000 SubSegmentCode   : 0x137ae755 Void
   +0x004 PreviousSize     : 0x6b
   +0x006 SegmentOffset    : 0 ''
   +0x006 LFHFlags         : 0 ''
   +0x007 UnusedBytes      : 0x8c ''
   +0x000 FunctionIndex    : 0xe755
   +0x002 ContextValue     : 0x137a
   +0x000 InterceptorValue : 0x137ae755
   +0x004 UnusedBytesLength : 0x6b
   +0x006 EntryOffset      : 0 ''
   +0x007 ExtendedBlockSignature : 0x8c ''
   +0x000 Code1            : 0x137ae755
   +0x004 Code2            : 0x6b
   +0x006 Code3            : 0 ''
   +0x007 Code4            : 0x8c ''
   +0x000 AgregateCode     : 0x8c00006b`137ae755
命令显示的堆块地址是0425bee0   大于几个大小 怎么不对啊 
UserSize 是 3c
Size 是 9

下面的大小又是48 

de显示的又是+0x000 Size             : 0xe755

到底怎么回事啊?
谢谢~
IP 地址: 已记录   报告
   2011-11-10, 22:44 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 堆内存数据结构的疑问
Reply Quote

很好的问题,早就想聊一下这个问题,写了篇博客: 

http://advdbg.org/blogs/advdbg_system/articles/5152.aspx

 

 


IP 地址: 已记录   报告
   2011-11-11, 10:13 上午
wdbxm 离线,最后访问时间: 2010/3/9 16:55:43

发帖数前500位
注册: 2009-09-23
发 贴: 4
Re: 堆内存数据结构的疑问
Reply Quote

非常感谢Raymond 的解答 受益匪浅啊

还有一个疑问 

0:002> dt _heap_entry
ntdll!_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呢?


IP 地址: 已记录   报告
   2011-11-11, 20:54 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 堆内存数据结构的疑问
Reply Quote

哪里执行的sizeof?在WinDBG里看是8啊:

0:000> ?? sizeof(_HEAP_ENTRY)
unsigned int 8


IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » 堆内存数据结构的疑问

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.