首页
社区
课程
招聘
[求助]如何通过!object命令得到当前的地址是什么对象?
发表于: 2009-3-12 18:44 6405

[求助]如何通过!object命令得到当前的地址是什么对象?

2009-3-12 18:44
6405
lkd> !object ffbcbc80
Object: ffbcbc80  Type: (70794300)
    ObjectHeader: ffbcbc68 (old version)
    HandleCount: 1635020389  PointerCount: 1967325294
    Directory Object: 6e616943  Name: (*** Name not accessible ***)
根据!object命令如果是合法的对象的话,是应当可以得到相应的信息的。OBJECT_TYPE中包含
对象类型信息。可是我确不能得到,这是为什么?为什么没有指向合法的OBJECT_TYPE?

lkd> dt !_OBJECT_TYPE 70794300
nt!_OBJECT_TYPE
  +0x000 Mutex            : _ERESOURCE
  +0x038 TypeList        : _LIST_ENTRY
  +0x040 Name            : _UNICODE_STRING
  +0x048 DefaultObject    : ????
  +0x04c Index            : ??
  +0x050 TotalNumberOfObjects : ??
  +0x054 TotalNumberOfHandles : ??
  +0x058 HighWaterNumberOfObjects : ??
  +0x05c HighWaterNumberOfHandles : ??
  +0x060 TypeInfo        : _OBJECT_TYPE_INITIALIZER
  +0x0ac Key              : ??
  +0x0b0 ObjectLocks      : [4] _ERESOURCE
Memory read error 707943ac
此外,怎么根据!object命令知道,现在查询的地址是指向 的什么样子的对象?
lkd> dt !_SUBSECTION ffbcbc80
nt!_SUBSECTION
  +0x000 ControlArea      : 0x426c6962 _CONTROL_AREA
  +0x004 u                : __unnamed
  +0x008 StartingSector  : 0x69626544
  +0x00c NumberOfFullSectors : 0x7b007a6c
  +0x010 SubsectionBase  : 0x7d4f2c4c _MMPTE
  +0x014 UnusedPtes      : 0x766f4c00
  +0x018 PtesInSubsection : 0x796c65
  +0x01c NextSubsection  : 0x72636341 _SUBSECTION

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
2
,一般对象指针就是指向对象的对象体,如果得到一个对象体,想访问对象头的话.可以使用OBJECT_TO_OBJECT_HEADER(),这是一个宏,也就是说可以由对象体得到对象头.
lkd> dt _OBJECT_HEADER 84ae2f58
nt!_OBJECT_HEADER
   +0x000 PointerCount     : 3
   +0x004 HandleCount      : 1
   +0x004 NextToFree       : 0x00000001
   +0x008 Type             : 0x862562f8 _OBJECT_TYPE
   +0x00c NameInfoOffset   : 0x10 ''
   +0x00d HandleInfoOffset : 0 ''
   +0x00e QuotaInfoOffset : 0 ''
   +0x00f Flags            : 0x20 ' '
   +0x010 ObjectCreateInfo : 0x80563860 _OBJECT_CREATE_INFORMATION
   +0x010 QuotaBlockCharged : 0x80563860
   +0x014 SecurityDescriptor : 0xe2b22257
   +0x018 Body             : _QUAD
lkd> dt _OBJECT_TYPE 0x862562f8
nt!_OBJECT_TYPE
   +0x000 Mutex            : _ERESOURCE
   +0x038 TypeList         : _LIST_ENTRY [ 0x86256330 - 0x86256330 ]
   +0x040 Name             : _UNICODE_STRING "Event"
   +0x048 DefaultObject    : (null)
   +0x04c Index            : 9
   +0x050 TotalNumberOfObjects : 0x14c4
   +0x054 TotalNumberOfHandles : 0x1531
   +0x058 HighWaterNumberOfObjects : 0x15a8
   +0x05c HighWaterNumberOfHandles : 0x1613
   +0x060 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x0ac Key              : 0x6e657645
   +0x0b0 ObjectLocks      : [4] _ERESOURCE
这样就知道了对象的类型是 Event, Index == 9
2009-3-12 19:09
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先谢谢,没想到这么快就回帖了
我明白你说的什么意思。但是好像这种方法在有些情况下不适用。如:
lkd> dt !_CONTROL_AREA 0x85af60e0
nt!_CONTROL_AREA
   +0x000 Segment          : 0xe3344008 _SEGMENT
   +0x004 DereferenceList  : _LIST_ENTRY [ 0x0 - 0x0 ]
   +0x00c NumberOfSectionReferences : 1
   +0x010 NumberOfPfnReferences : 1
   +0x014 NumberOfMappedViews : 1
   +0x018 NumberOfSubsections : 1
   +0x01a FlushInProgressCount : 0
   +0x01c NumberOfUserReferences : 0
   +0x020 u                : __unnamed
   +0x024 FilePointer      : 0x825fc6c0 _FILE_OBJECT
   +0x028 WaitingForDeletion : (null)
   +0x02c ModifiedWriteCount : 0
   +0x02e NumberOfSystemCacheViews : 1
lkd> !object 0x85af60e0 +30
Object: 85af6110  Type: (00008080)
    ObjectHeader: 85af60f8 (old version)
    HandleCount: 0  PointerCount: 1
    Directory Object: 00000001  Name:
上面可以知道紧接着在CONTROL_AREA结束后,又是一个对象。
lkd> dd 0x85af6110 l 1
85af6110  85af60e0
可以看见这个对象的首四个字节是指向CONTROL_AREA的。
可是,使用_OBJECT_HEADER查看如下:


lkd> dt !_OBJECT_HEADER 85af60f8
nt!_OBJECT_HEADER
   +0x000 PointerCount     : 1
   +0x004 HandleCount      : 0
   +0x004 NextToFree       : (null)
   +0x008 Type             : 0x00008080 _OBJECT_TYPE
   +0x00c NameInfoOffset   : 0xc0 ''
   +0x00d HandleInfoOffset : 0xc6 ''
   +0x00e QuotaInfoOffset  : 0x5f '_'
   +0x00f Flags            : 0x82 ''
   +0x010 ObjectCreateInfo : (null)
   +0x010 QuotaBlockCharged : (null)
   +0x014 SecurityDescriptor : 0x00010000
   +0x018 Body             : _QUAD
指向_OBJECT_TYPE的是0x00008080 明显不正确(处于无效断点区)。
不知道有没有办法查到这个对象的类型,或者这个对象是尚未公开的(哦~~,额是瞎猜的,猜错了大家不要笑)?
2009-3-12 20:12
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
lkd> !object 0x85af60e0 +30
Object: 85af6110  Type: (00008080)
    ObjectHeader: 85af60f8 (old version)
    HandleCount: 0  PointerCount: 1
    Directory Object: 00000001  Name:

===
这就不是个对象
2009-3-12 20:30
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
lkd> !object 0x85af60e0 +30
Object: 85af6110  Type: (00008080)
    ObjectHeader: 85af60f8 (old version)
    HandleCount: 0  PointerCount: 1
    Directory Object: 00000001  Name:

为什么说着就不是个对象?
2009-3-12 20:49
0
游客
登录 | 注册 方可回帖
返回