内核——全局句柄表

实验环境:win7 x32

首先引入一段基础概念;

  • 1.在windows下所有的资源都是用对象的方式进行管理的(文件、进程、设备等都是对象),当要访问一个对象时,如打开一个文件,系统就会创建一个对象句柄,通过这个句柄可以对这个文件进行各种操作。
  • 2.句柄和对象的联系是通过句柄表来进行的,准确来说一个句柄就是它所对应的对象在句柄表中的索引。
  • 3.通过句柄可以在句柄表中找到对象的指针,通过指针就可以对,对象进行操作。

PspCidTable 就是这样的一种表(内核句柄表),表的内部存放的是进程EPROCESS线程ETHREAD的内核对象,并通过进程PID线程TID进行索引,ID号以4递增。

首先第一步先要得到PspCidTable内存地址,在windbg中输入dp PspCidTable即可得到,如果在程序中则是调用MmGetSystemRoutineAddress取PsLookupProcessByProcessId函数里面的PspCidTable

PspCidTable是一个_HANDLE_TALBE结构,当新建一个进程时,对应的会在PspCidTable存在一个该进程和线程对应的HANDLE_TABLE_ENTRY项。在windows10中依然采用动态扩展的方法,当句柄数少的时候就采用下层表,多的时候才启用中层表或上层表。 

最重要的字段是:TableCode,当这个字段值的低2位,决定了有几层表,如果0x9c29c001,低2位是0,就代表只有一层,0x9c29c000指向的就是最终的全局句柄表,如果0x9c29c001,低2位是1,就代表只有两层,0x9c29c000指向下一层表,然后下一层表才指向最终的全局句柄表,那么0x9c29c002同理,最多只能有3层表

需要注意的是,每次层表的大小是4k(4096),除了最终的全局句柄表的每一项是8字节,其他上层表每项都是4字节大小,假如只有一层,那么可以存放的句柄:4096 / 8 = 512项,而一般我们的PC不可能只有512个句柄,所以基本但是两层以上,即:(4096 / 4)*(4096 / 8) = 524288项。比如我的物理机就是69000多项。

根据TableCode的值,可以推断有两层,Windbg查看下一层:dp 0x9c29c000

可以看到这个上层表(1024项),只用到了2项(虚拟机Win7 x32),我们以“x32dbg”为例,pid:3636,3636 / 4 = 909(全局句柄表索引),通过上图,我们知道有2张表(每张表512项),而909项明显在第二张表里面,那么它在第二张表的具体索引是:909 - 512 = 397(0x18D),

那么dt _handle_table_entry 9c2a0000 +0x18D*8,其中最重要的字段:Object,同样该字段的最低位是属性位(去掉)。因为我们前面是找的x32dbg的pid,所以这里可以直接用EPROCESS结构解释。

 

如果,我们不知道这个id到底是进程的还是线程的怎么办?

其实,dt _handle_table_entry 9c2a0000 +0x18D*8,其中最重要的字段:Object,其真实结构是指向_OBJECT_HEADER的Body字段,但这个结构里面TypeIndex字段描述着这个Object究竟是进程还是线程。

 所以,dt _OBJECT_HEADER 0x8766d030 - 0x18 ,就指向了_OBJECT_HEADER的首地址

 可以看到TypeIndex字段的值是0x7,它其实也是一个表的索引,这个表就表示这个值是进程还是线程还是其他,我们 dp ObTypeIndexTable

继续用 dt _object_type  86ad8e38,解析它,可以看到name字段指明它是进程还是线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows系统类似于linux的nohup命令后台启动jar服务

一、首先新建一个后缀名为.bat文件 二、将jar包放在与jar包同一个路径下 三、编写.bat文件 echo off start javaw -Xms512m -Xmx1024m -XX:PermSize256m -XX:MaxPermSize512m -XX:MaxNewSize512m -jar xxxxx-22900.jar >> StartupLog.log 2>&1 & exit 四…

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 云直播服务-》鉴权直播 -》播放 ,左键单击可以拉取矩形框,放大选中…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后,没关闭应用的情况下,再次使用deeplink会失效的问题,是系统bug导致的。此bug仅在某些设备(Nexus 5X)上重现,launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

【java】以<内存图>的形式理解数组的增删

数组 数组在内存里地址连续 定义一个数组,数组中的数据类型一样(二进制串位数相同),故可以直接通过下标获取数组中的内容。 基本类型存的是值,引用类型存的是地址 数组的下标从0开始。 初始值: Int :0 char &am…

时代变了!Megabit兆比特英伟达纳入道琼斯指数,英特尔被取代

△英特尔VS英伟达市值对比(截至今年2月) 最新消息,英伟达将在2024年11月8日替代英特尔成为道琼斯工业平均指数的组成成员。 Megabit兆比特自成立以来,Megabit凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 这是历史最悠久的美…

算法竞赛(Python)-大事化小,小事化了(分治)

文章目录 前言一、数乘型分治1 疯狂的细胞分裂 二 矩阵乘法的分治1 神秘数字 三 、线性结构问题的分治1 自助餐厅(1)2 自助餐厅(2) 四 、树形结构的分治1 二叉树的最大深度 前言 分治思想:将一个大问题分词几个小问题&…

使用Jupyter Notebook进行数据科学项目

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Jupyter Notebook进行数据科学项目 Jupyter Notebook 简介 安装 Jupyter Notebook 创建和管理 Notebook 编写和运行代码 示例…

21、基于AT89C52的电子密码锁proteus仿真设计

一、仿真原理图: 二、仿真效果: 三、相关代码: 1、定时中断: void Time0(void ) interrupt 1 using 1 { count++; if(count == 50) { count = 0; buffer = keyScan(); if(buffer < 16) { value[index++…

【HarmonyOS】鸿蒙应用设置控件通用样式AttributeModifier, @Styles

【HarmonyOS】鸿蒙应用设置控件通用样式AttributeModifier&#xff0c; Styles 前言 在鸿蒙中UI开发经常需要对控件样式进行统一的封装&#xff0c;在API早前版本&#xff0c;一般是通过 Styles进行样式封装复用&#xff1a; Entry Component struct Index {build() {Column(…

【MySQL】可重复读级别下基于Next Key Lock解决幻读

昨天读到了一篇文章[1]&#xff0c;里面讲&#xff0c;面试官说mysql的可重复读级别下有解决幻读的方式&#xff0c;最后公布了答案&#xff0c;是在sql后面加for update。这么说倒是没错&#xff0c;但是这种问法给我一种奇怪的感觉&#xff0c;因为for update无论在哪个隔离级…

Mybatis学习笔记(三)

十、MyBatis的逆向工程 (一)逆向工程介绍 MyBatis的一个主要的特点就是需要程序员自己编写sql&#xff0c;那么如果表太多的话&#xff0c;难免会很麻烦&#xff0c;所以mybatis官方提供了一个逆向工程&#xff0c;可以针对单表自动生成mybatis执行所需要的代码&#xff08;包…

dns构建

&#xff08;1&#xff09;用户输入域名发起域名查询请求。 &#xff08;2&#xff09;计算机操作系统先查找本地hosts文件中是否有这个域名与IP的对应关系&#xff0c;有就返回结果给用户&#xff0c;没有就进入下一步。 &#xff08;3&#xff09;hosts文件找那个没有此域名…

<项目代码>YOLOv8 pcb板缺陷检测<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式

FET113i-S核心板是飞凌嵌入式基于全志T113-i处理器设计的国产工业级核心板&#xff0c;凭借卓越的稳定性和超高性价比&#xff0c;FET113i-S核心板得到了客户朋友们的广泛关注。作为一款拥有A7核RISC-V核DSP核的多核异构架构芯片&#xff0c;全志科技于近期释放了T113-i的RISC-…

打印速度与精度难兼顾,动态界面打印能否破解?

大家好&#xff01;在科技飞速发展的今天&#xff0c;3D 打印技术已深入众多领域。然而&#xff0c;传统打印技术面临着速度、材料、精度等诸多挑战。在此背景下&#xff0c;一种名为动态界面打印&#xff08;DIP&#xff09;的新技术应运而生——《Dynamic interface printing…

IMS 注册慢问题分析

1、问题描述 VOLTE长时间没注册上。 2、Log分析 10-04 15:49:04.745089 2118 3531 D ImsService: enableIms, phoneId 1 10-04 15:49:04.757739 1423 1498 D RmcImsCtlReqHdl: [1] requestSetImsCfg volte:1, vilte:1, vowifi:0, viwifi:0, sms:1, imsTe…

【网络】套接字编程——TCP通信

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;TCP网络服务器简单模拟实现。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;…

Django Form 实现多层(嵌套)模型表单

在 Django 中&#xff0c;可以通过使用 ModelForm 和 InlineFormSet 来实现多层&#xff08;嵌套&#xff09;模型表单。这样可以在一个表单中同时编辑主模型及其相关的子模型。下面是一个示例&#xff0c;演示如何实现这种多层嵌套的表单。 1、问题背景 如何使用 Django 的 F…

Linux - grep的正则用法

新建u.txt&#xff0c;文本内容如图&#xff1a; 搜寻特定字符串 利用中括号[]搜寻集合字符 行首与行位字符^$ 任意一个字符.与重复字符*限定连续RE字符范围{} 总结:

落地灯选什么光源最好?五款值得入手的大路灯护眼灯推荐

落地灯选什么光源最好&#xff1f;落地灯是既适合日常人群使用&#xff0c;又适合长时间用眼的学生党、码字党使用的一种照明神器&#xff0c;因此热度一直都很高。但是该行业内的产品也很复杂&#xff0c;其中还有一些劣质不专业的产品掺杂在其中&#xff0c;不但灯光效果不明…