ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
沪ICP备05041459号
About AdvDbg Consult Train Services Products Tools Community Contact   登录 | 注册

Object Types

从北京回来后的这几天晚上,心血来潮地跟踪了一下 Ob 模块自 ObInitSystem() 开始的近 10 余个函数,有心得,反汇编总结以后再详细的写。

整个对象管理器在从无到有的过程中,第一个被创建的单元是 Type Object Type,之后 Object Types 们被陆续创建,终而形成了一条双向循环链表。链表的长度是 31+1(Win-XP),对应于 31 种对象类型。

在 InitializationPhase0 完全结束以后,ObInitSystem() 开始第二阶段初始化:Root Directory、\KernelObjects、\ObjectTypes、DosDevices(SymbolicLink) 对象被先后创建,同时 Phase0 时形成的对象类型链表被 ObpInsertDirectoryEntry() 顺次插入到 \ObjectTypes 目录中。在第 0 阶段,共有 4 个模块 / 函数创建了 8 个对象类型,如下(按诞生顺序):

nt!ObInitSystem() :
    1. "Type" object
    2. "Directory" object
    3. "SymbolicLink" object

nt!SepTokenInitialization() :
    4. "Token" object

nt!PspInitPhase0() :
    5. "Process" object
    6. "Thread" object
    7. "Job" object

nt!DbgkInitialize() :
    8. "DebugObject" object


随着跟踪的深入,我发现有许多方法可以定位 / 遍历 Object Types 们 —— "链表法(ObpTypeObjectType  etc.)" 和 "数组法(ObpObjectTypes[48])",遂把这几种情况的代码都写了一遍。

So,写一个类似于 WinObj 的程序是不难的~

 

posted on Friday, March 21, 2008 12:04 PM 由 WANGyu

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2005 Advanced Debugging Ltd. All Rights Reserved.