Microsoft windows internals 学习笔记(4)

对象管理器:

windows内部有两种类型的对象:执行体对象和内核对象。执行体对象是指由执行体的各种组件所实现的对象。内核对象是指由windows内核实现的一组更为基本的对象,对用户模式代码不可见。执行体对象包含了一个或多个内核对象。

对象的结构:每个对象都有一个对象头和对象体。对象管理器控制了对象头,而执行体组件控制了由他们创建的对象类型的对象体。每个对象头指向一个进程列表,列表每个进程都打开了此对象。每个对象头也指向了一个被称为类型对象的(type object)特殊对象,该对象包含的信息对于每个实例都是公共的。

实验:查看对象头和类型对象

lkd> !process 0 0                              //找到进程对象
**** NT ACTIVE PROCESS DUMP ****
PROCESS 89d53830 SessionId: none Cid: 0004    Peb: 00000000 ParentCid: 0000
    DirBase: 0a400020 ObjectTable: e1002e40 HandleCount: 1571.
    Image: System

PROCESS 89454a20 SessionId: none Cid: 048c    Peb: 7ffd4000 ParentCid: 0004
    DirBase: 0a400040 ObjectTable: e1473348 HandleCount: 19.
    Image: smss.exe

PROCESS 893f1da0 SessionId: 0 Cid: 04d0    Peb: 7ffd6000 ParentCid: 048c
    DirBase: 0a400060 ObjectTable: e10102a8 HandleCount: 779.
    Image: csrss.exe

PROCESS 8943eb28 SessionId: 0 Cid: 04ec    Peb: 7ffde000 ParentCid: 048c
    DirBase: 0a400080 ObjectTable: e1538268 HandleCount: 466.
    Image: winlogon.exe


用进程对象地址作参数执行!object
lkd> !object 865ad020
Object: 865ad020 Type: (89d53e70) Process
    ObjectHeader: 865ad008 (old version)                   //对象头
    HandleCount: 1 PointerCount: 2

查看对象头:

lkd> dt _Object_Header 865ad008
nt!_OBJECT_HEADER
   +0x000 PointerCount     : 2
   +0x004 HandleCount      : 1
   +0x004 NextToFree       : 0x00000001
   +0x008 Type             : 0x89d53e70 _OBJECT_TYPE
   +0x00c NameInfoOffset   : 0 ''
   +0x00d HandleInfoOffset : 0 ''
   +0x00e QuotaInfoOffset : 0 ''
   +0x00f Flags            : 0x20 ' '
   +0x010 ObjectCreateInfo : 0x88d54678 _OBJECT_CREATE_INFORMATION
   +0x010 QuotaBlockCharged : 0x88d54678
   +0x014 SecurityDescriptor : 0xe25fe9e5
   +0x018 Body             : _QUAD

查看对象类型数据结构:

lkd> dt _OBJECT_TYPE 89d53e70
nt!_OBJECT_TYPE
   +0x000 Mutex            : _ERESOURCE
   +0x038 TypeList         : _LIST_ENTRY [ 0x89d53ea8 - 0x89d53ea8 ]
   +0x040 Name             : _UNICODE_STRING "Process"
   +0x048 DefaultObject    : (null)
   +0x04c Index            : 5
   +0x050 TotalNumberOfObjects : 0x47
   +0x054 TotalNumberOfHandles : 0xaf
   +0x058 HighWaterNumberOfObjects : 0x47
   +0x05c HighWaterNumberOfHandles : 0xb1
   +0x060 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x0ac Key              : 0x636f7250
   +0x0b0 ObjectLocks      : [4] _ERESOURCE

TypeInfo 域保存了一个指针,指向的数据结构对于该对象类型的所有对象都公共的属性以及一组指向该对象类型的方法的指针:

lkd> dt _OBJECT_TYPE_INITIALIZER 89d53e70+60
nt!_OBJECT_TYPE_INITIALIZER
   +0x000 Length           : 0x4c
   +0x002 UseDefaultObject : 0 ''
   +0x003 CaseInsensitive : 0 ''
   +0x004 InvalidAttributes : 0xb0
   +0x008 GenericMapping   : _GENERIC_MAPPING
   +0x018 ValidAccessMask : 0x1f0fff
   +0x01c SecurityRequired : 0x1 ''
   +0x01d MaintainHandleCount : 0 ''
   +0x01e MaintainTypeList : 0 ''
   +0x020 PoolType         : 0 ( NonPagedPool )
   +0x024 DefaultPagedPoolCharge : 0x1000
   +0x028 DefaultNonPagedPoolCharge : 0x290
   +0x02c DumpProcedure    : (null)
   +0x030 OpenProcedure    : (null)
   +0x034 CloseProcedure   : (null)
   +0x038 DeleteProcedure : 0x805d1774     void nt!PspProcessDelete+0
   +0x03c ParseProcedure   : (null)
   +0x040 SecurityProcedure : 0x805f7bbc     long nt!SeDefaultObjectMethod+0
   +0x044 QueryNameProcedure : (null)
   +0x048 OkayToCloseProcedure : (null)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值