什么是句柄表?
先要了解什么是内核对象,像线程、进程、文件、互斥体、事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们管这样的对象叫做内核对象。
比如你创建进程、线程、和文件,在内核层会有对应的结构体,对进程有疑问的可以看看我前面两篇文章,线程和文件我后面会写文章。
拿进程举例,我们知道创建进程的时候会在内核层生成结构体,那我们要如何去操作或者管理内核层的结构体呢?
如下图,我们创建进程、线程、和文件,在内核层有结构体被创建,那我们要管理或操作内核层的结构体的话,最简单的办法是不是让内核层的结构体把地址返回给应用层,那我们是不是就可以直接进行操作了,同样的,这样的话就会引发出一个安全问题,如果直接把内核层的地址返回回来给到应用层,那要是在内核层被恶意篡改,那麻烦就大了,那就不同于应用层只是简单的出现无法访问的错误了,所以为了避免这个安全问题,也就延伸出我们的主题,句柄表。
我们可以把句柄表理解成下面这个例图
重点提一下。句柄表是每一个进程都有一个句柄表,而不是每一个内核层的资源都有一个句柄表。而句柄表的作用是什么呢?就是为了解决我们上面提到的安全问题,有了句柄表了之后,我们就不需要让应用层直接访问内核结构体,而是通过句柄表,当你想要用哪个内核层的资源时(内核层结构体)。你就把句柄表里的编号返回回去,比如1这个索引编号对应的就是进程在内核层中的结构体、