zoukankan      html  css  js  c++  java
  • windows系统的对象管理

    windows中的对象和高级编程语言中所说的对象还欧区别,准确来讲,windows中的对象其实指的是一种数据结构并且是一种带着“对象头(object head)” 的数据结构!

     所以windows中的对象可以基本分为三个部分:对象头、基本对象结构、可选部分!
     对象数据结构 可以如图所示  
    objectheader结构定义
     1 lkd> dt _object_header
     2 nt!_OBJECT_HEADER
     3 +0x000 PointerCount : Int4B
     4 +0x004 HandleCount : Int4B
     5 +0x004 NextToFree : Ptr32 Void
     6 +0x008 Lock : _EX_PUSH_LOCK
     7 +0x00c TypeIndex : UChar
     8 +0x00d TraceFlags : UChar
     9 +0x00e InfoMask : UChar
    10 +0x00f Flags : UChar
    11 +0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION
    12 +0x010 QuotaBlockCharged : Ptr32 Void
    13 +0x014 SecurityDescriptor : Ptr32 Void
    14 +0x018 Body : _QUAD
                                              
    而创建对象后就会返回句柄,相关进程可以通过句柄来使用此对象,所以对象可以有名和可以无名。
    但是大部分情况,对象还是需要名字的,有名对象的组织就成了一个问题!
    在windows中通过OBJECT_DIRECTORY目录对项来管理!
    我们看下OBJECT_DIRECTORY结构:
    1 lkd> dt _object_directory
    2 nt!_OBJECT_DIRECTORY
    3 +0x000 HashBuckets : [37] Ptr32 _OBJECT_DIRECTORY_ENTRY
    4 +0x094 Lock : _EX_PUSH_LOCK
    5 +0x098 DeviceMap : Ptr32 _DEVICE_MAP
    6 +0x09c SessionId : Uint4B
    7 +0x0a0 NamespaceEntry : Ptr32 Void
    8 +0x0a4 Flags : Uint4B
    对象目录是由多个节点连接而成的树状结构(不考虑符号连接),树的根是一个目录对象,且树中的每个节点都是对象。除根节点之外,所有的中间节点都必须是目录对象或者符号链接对象(OBJECT_SYMBOLIC_LINK对象),普通的对象只能成为叶节点
    看OBJECT_DIRECTORY结构中的第一个元素,是一个OBJECT_DIRECTORY_ENTRY结构指针数组,灭个指针用来维系一个目录项结构的队列,注意,除根节点外,每一个对象都需要借助于目录项结构才能插入目录!
    1 lkd> dt nt!_object_directory_entry
    2 +0x000 ChainLink : Ptr32 _OBJECT_DIRECTORY_ENTRY
    3 +0x004 Object : Ptr32 Void
    4 +0x008 HashValue : Uint4B
    第一个元素仍然指向一个object_directory_entry结构,Object是其连接的对象。
                    
    由上图可以看到目录项可以和具体的普通对象结合插入对象目录,也可以和目录节点对象结合又形成一个目录。
    分析下上面的图:
    根节点是一个目录对象,主体是一个HASH表,这里只表现了其中的两个队列,每一个队列上的目录项(对象)具有相同的HASH值,结合具体的文件便可以轻松理解!
  • 相关阅读:
    开发两年!JVM方法调用都玩不明白,你离被炒鱿鱼不远了!
    springboot基本框架搭建零基础教程,对新手极为友好!
    SpingBoot整合Mybatis,这些小技巧你得知道,对你工作有很大的帮助!
    今天我们基于jdk8聊聊JVM-常量池,希望对大家有帮助!
    剑指 Offer 12. 矩阵中的路径
    WUSTCTF2020 funnyre
    2020 DJBCTF RE wp
    黑马c++基础的一个通讯录系统
    elf文件结构解读以及plt节got节的理解
    ubuntu16.04上编译android的可执行文件并调用本地so库
  • 原文地址:https://www.cnblogs.com/ck1020/p/5897473.html
Copyright © 2011-2022 走看看