Windows内核对象

进程空间:
 
每一个进程它有自己所谓的虚拟的4G空间 实际上只有2G
 
分区
X86 32位windows
空指针赋值区 64KB
0x00000000 - 0x0000FFFF
用户模式区
0x00010000 - 0x7FFEFFFF
64KB禁入区
0x7FFFF0000- 0x7FFFFFFF
内核
0x80000000 - 0xFFFFFFFF
 
1、什么是内核对象
 
像进程、线程、文件、互斥体、事件等在内核都有一个对应的结构体,这些结构体由系统内核负责管理。
当我们创建这些对象的时候,系统会在内核层高2G为我们单独准备一个结构体,我们管这样的对象叫做内核对象。
创建进程 =》内核会准备一个EPROCESS结构体
创建线程 =》内核会准备一个ETHREAD结构体
创建文件 =》内核会准备一个FILE_OBJECT结构体
 
55.png
 
一般用HANDLE来表示一个内核对象结构体
 
常见的内核对象有
Communications device 
Database 
Database enumeration context 
Event 
File 
File-mapping object 
Mutex 
Process 
Socket 
Thread 
 
2、如何管理内核对象
 
8.png
如 我们一个进程需要使用文件、事件 在创建这些对象的时候,就会在内核层创建对应的结构体,那么我们如何去访问这些结构体,想当然是如果系统把它创建的内核对象地址丢给我们使用就好了,既然是内核层的,那么windows并没有把这些内核对象的地址暴露给我们 而是采用了句柄表 来管理操作这些内核对象
 
 
3、句柄表
14.png
其实句柄表 其实就是一种映射关系
 
每一个进程都有自己私有的一张表,存储了该进程打开或创建的所有内核对象,称为句柄表 操作系统的全局句柄表包含了正在运行的所有的进程与线程
 
如图 当前进程在内核层有一个EPROCESS内核对象,在这内核对象结构中有一个成员存储了一个指针,指向了一张表,存储了该进程打开或创建的所有内核对象的句柄表
 
该进程分别创建了内核对象A,B,C,D 它们的地址通通存放在当前进程的句柄表里面,相当于加了一道防火墙
 
1、我们使用某内核对象的时候,使用的其实就是内核对象在句柄表中对应的编号
2、不是每个内核对象都有一张表,只有进程EPROCESS内核对象会生成句柄表

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《Windows内核对象

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(2)

odaycaogen 4个月前(04-21) 回复
odaycaogen 4个月前(04-21) 回复