我是靠谱客的博主 眼睛大大炮,这篇文章主要介绍xp与win7中_OBJECT_HEADER的区别,_OBJECT_TYPE获取方法,现在分享给大家,希望可以做个参考。

在win7中 _OBJECT_HEADER变化比较大。不能直接取出_OBJECT_TYPE对象,而是使用对象在ObTypeIndexTable中的索引来引用_OBJECT_TYPE。

下面使用windbg来掩饰xp和win7获取_OBJECT_TYPE的方法。

xp系统获取方法

使用!object查看一个文件对象信息

lkd> !object 8914b2c0
Object: 8914b2c0  Type: (896a9ad0) File
    ObjectHeader: 8914b2a8 (old version)
    HandleCount: 1  PointerCount: 1
    Directory Object: 00000000  Name: WINDOWSWinSxSx86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83 {HarddiskVolume1}

看到ObjectHeader后面显示old version。

下面接着看该文件对象的对象头

lkd> dt nt!_OBJECT_HEADER 8914b2a8 
   +0x000 PointerCount     : 0n1
   +0x004 HandleCount      : 0n1
   +0x004 NextToFree       : 0x00000001 Void
   +0x008 Type             : 0x896a9ad0 _OBJECT_TYPE
   +0x00c NameInfoOffset   : 0 ''
   +0x00d HandleInfoOffset : 0x8 ''
   +0x00e QuotaInfoOffset  : 0 ''
   +0x00f Flags            : 0x40 '@'
   +0x010 ObjectCreateInfo : 0x8928a700 _OBJECT_CREATE_INFORMATION
   +0x010 QuotaBlockCharged : 0x8928a700 Void
   +0x014 SecurityDescriptor : (null) 
   +0x018 Body             : _QUAD

取出Type域看该文件类型结构

lkd> dt nt!_OBJECT_TYPE 0x896a9ad0 
   +0x000 Mutex            : _ERESOURCE
   +0x038 TypeList         : _LIST_ENTRY [ 0x896a9b08 - 0x896a9b08 ]
   +0x040 Name             : _UNICODE_STRING "File"
   +0x048 DefaultObject    : 0x0000005c Void
   +0x04c Index            : 0x1c
   +0x050 TotalNumberOfObjects : 0xfa6
   +0x054 TotalNumberOfHandles : 0x5ca
   +0x058 HighWaterNumberOfObjects : 0xff3
   +0x05c HighWaterNumberOfHandles : 0x66b
   +0x060 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x0ac Key              : 0x656c6946
   +0x0b0 ObjectLocks      : [4] _ERESOURCE

win7获取方法


使用!object查看一个文件内核对象信息

lkd> !object 85e25d98  
Object: 85e25d98  Type: (85ca14c0) File
    ObjectHeader: 85e25d80 (new version)
    HandleCount: 1  PointerCount: 1
    Directory Object: 00000000  Name: WindowsFontsStaticCache.dat {HarddiskVolume1}

看到ObjectHeader后面显示new version。

下面接着看该文件对象的对象头

lkd> dt nt!_object_header 85e25d80 
   +0x000 PointerCount     : 0n1
   +0x004 HandleCount      : 0n1
   +0x004 NextToFree       : 0x00000001 Void
   +0x008 Lock             : _EX_PUSH_LOCK
   +0x00c TypeIndex        : 0x1c ''
   +0x00d TraceFlags       : 0 ''
   +0x00e InfoMask         : 0xc ''
   +0x00f Flags            : 0x40 '@'
   +0x010 ObjectCreateInfo : 0x837d0940 _OBJECT_CREATE_INFORMATION
   +0x010 QuotaBlockCharged : 0x837d0940 Void
   +0x014 SecurityDescriptor : (null) 
   +0x018 Body             : _QUAD

两者的差别很大。xp存在Type域,win7存在TypeIndex域。

这里TypeIndex = 0x1C 该值是一个索引。对象类型数组是ObTypeIndexTable。

下面我们使用该索引获取对象类型指针:

lkd> dt nt!_object_type poi(nt!ObTypeIndexTable+0x1C*4)
   +0x000 TypeList         : _LIST_ENTRY [ 0x85ca14c0 - 0x85ca14c0 ]
   +0x008 Name             : _UNICODE_STRING "File"
   +0x010 DefaultObject    : 0x0000005c Void
   +0x014 Index            : 0x1c ''
   +0x018 TotalNumberOfObjects : 0x183d
   +0x01c TotalNumberOfHandles : 0x498
   +0x020 HighWaterNumberOfObjects : 0x1875
   +0x024 HighWaterNumberOfHandles : 0x6c6
   +0x028 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x078 TypeLock         : _EX_PUSH_LOCK
   +0x07c Key              : 0x656c6946
   +0x080 CallbackList     : _LIST_ENTRY [ 0x85ca1540 - 0x85ca1540 ]


另外,根据文件对象获取文件名方法:

lkd> dt nt!_FILE_OBJECT 85e25d98  
   +0x000 Type             : 0n5
   +0x002 Size             : 0n128
   +0x004 DeviceObject     : 0x86a1ee20 _DEVICE_OBJECT
   +0x008 Vpb              : 0x86a1db00 _VPB
   +0x00c FsContext        : 0x980dd0f8 Void
   +0x010 FsContext2       : 0xaf4e03d0 Void
   +0x014 SectionObjectPointer : 0x88d1ef30 _SECTION_OBJECT_POINTERS
   +0x018 PrivateCacheMap  : 0x885f1be8 Void
   +0x01c FinalStatus      : 0n0
   +0x020 RelatedFileObject : (null) 
   +0x024 LockOperation    : 0 ''
   +0x025 DeletePending    : 0 ''
   +0x026 ReadAccess       : 0x1 ''
   +0x027 WriteAccess      : 0 ''
   +0x028 DeleteAccess     : 0 ''
   +0x029 SharedRead       : 0x1 ''
   +0x02a SharedWrite      : 0 ''
   +0x02b SharedDelete     : 0x1 ''
   +0x02c Flags            : 0xc0042
   +0x030 FileName         : _UNICODE_STRING "WindowsFontsStaticCache.dat"
   +0x038 CurrentByteOffset : _LARGE_INTEGER 0x3c
   +0x040 Waiters          : 0
   +0x044 Busy             : 0
   +0x048 LastLock         : (null) 
   +0x04c Lock             : _KEVENT
   +0x05c Event            : _KEVENT
   +0x06c CompletionContext : (null) 
   +0x070 IrpListLock      : 0
   +0x074 IrpList          : _LIST_ENTRY [ 0x85e25e0c - 0x85e25e0c ]
   +0x07c FileObjectExtension : (null) 

转载请注明出处。ddlx studio。点点灵犀。 http://blog.csdn.net/sunyikuyu

最后

以上就是眼睛大大炮最近收集整理的关于xp与win7中_OBJECT_HEADER的区别,_OBJECT_TYPE获取方法的全部内容,更多相关xp与win7中_OBJECT_HEADER内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部