在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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复