首页 > 其他分享 >全局句柄表

全局句柄表

时间:2024-05-18 17:32:40浏览次数:18  
标签:00000000 句柄 地址 进程 全局 id

1.全局句柄表

句柄介绍

句柄一共有3种

  1. 全局句柄表 进程 线程 句柄表
  2. 私有句柄表 进程私有的
  3. 窗口句柄

全局句柄表

在全局句柄表种只有进程线程对象

OpenProcess/OpenThread 权限 是否继承和 id

获取创建进程的handle的流程:

获取到进程id 取全局句柄表种找到进程对象,把进程对象插到进程的私有句柄表中,从而返回一个索引号,返回3环,这就是三环获得的句柄

无论是线程id还是进程id都是全局句柄表的索引号

在windows只有进程和线程有id,其他的只有对象名字

当全局句柄表地址后面是0,那么代表的是句柄表,3096一个页的大小,每一项8个字节,也就是一个id索引号就是8字节,当空间耗尽后,会把表里面的数据移到一个新的申请的内存,将原来的表清空,这时候全局句柄表地址后面是1,4个字节1项,再满了后就存放到新的开辟的内存中

句柄表地址后面的0,1,2代表层级

地址分成两部分,高字节存放属性低字节存放地址和几个小属性

举例

拿DebugView举例,进程pid是2792

在ida中可以看到名字是PspCidtable交叉引用查看一下,注意这个函数不是导出函数

可以看到都是和线程和进程有关的

可以看到PsLookupProcessByProcessId函数在这个位置使用了这个函数,俺么就可以通过这个函数定位到这个PspCidtable函数的运行地址

也就是说我们要获取到这个地址就是PspCidtable函数的地址

windbg中dd一下就可以看到全局句柄表

DT一下就可以看到对应的结构

kd> dt _HANDLE_TABLE 8d2010a0 
ntdll!_HANDLE_TABLE
   +0x000 TableCode        : 0xa7982001//这个尾数代表有几层0是1层,1是2层
   +0x004 QuotaProcess     : (null) 
   +0x008 UniqueProcessId  : (null) 
   +0x00c HandleLock       : _EX_PUSH_LOCK
   +0x010 HandleTableList  : _LIST_ENTRY [ 0x8d2010b0 - 0x8d2010b0 ]
   +0x018 HandleContentionEvent : _EX_PUSH_LOCK
   +0x01c DebugInfo        : (null) 
   +0x020 ExtraInfoPages   : 0n0
   +0x024 Flags            : 1
   +0x024 StrictFIFO       : 0y1
   +0x028 FirstFreeHandle  : 0xf48
   +0x02c LastFreeHandleEntry : 0xa7980d40 _HANDLE_TABLE_ENTRY
   +0x030 HandleCount      : 0x1ed
   +0x034 NextHandleNeedingPool : 0x1000
   +0x038 HandleCountHighWatermark : 0x29b

dd一下查看一下哦表中的值(注意把TableCode尾数改成0)

kd> dd 0xa7982000
a7982000  8d205000 a7980000 00000000 00000000
a7982010  00000000 00000000 00000000 00000000
a7982020  00000000 00000000 00000000 00000000
a7982030  00000000 00000000 00000000 00000000
a7982040  00000000 00000000 00000000 00000000
a7982050  00000000 00000000 00000000 00000000
a7982060  00000000 00000000 00000000 00000000
a7982070  00000000 00000000 00000000 00000000

这里每一项代表了一张表

这里我们DebugView的pid是2792需要除以4,因为步长是4,也就是698(注意是10进制)

每一张表中有512个元素

所以用之前获得的698除以512可以知道在哪张表,这里就在第1张表,也就是编号为0

也就是上图中的那张表

之后再拿698取模余512(就是%),也就是186取出表中的索引号

接下来用windbg查看

但是因为windbg自动是16进制的,所以我们上面取到的索引号要转成16进制,也就是BA,最后还要*8(因为8字节)才可以获取到句柄表中的地址

kd> DQ 8d205000+BA*8
8d2055d0  00000000`88d736b9 00000000`88aae751
8d2055e0  00000000`88aa3a81 00000000`88aaf541
8d2055f0  00000000`88aa51f1 00000f64`00000000
8d205600  00000000`88aadd21 00000000`88ac7d49
8d205610  00000000`88ab8a59 00000000`88ac3591
8d205620  00000000`88102341 00000000`88ac9031
8d205630  000007a4`00000000 00000000`881029d9
8d205640  00000000`88aca2a9 00000000`88ace639

可以发现有些地址尾号仍然有一个1这个1是一把

标签:00000000,句柄,地址,进程,全局,id
From: https://www.cnblogs.com/murkuo/p/18199531

相关文章

  • django-drf 全局封装
    封装全局异常common_exceptions.pyfromrest_framework.viewsimportexception_handlerfromrest_framework.responseimportResponsedefcommon_exception_handler(exc,context):#记录日志request=context.get('request')view=context.get(�......
  • 全局异常处理和jwt介绍与使用
    全局异常处理和jwt介绍与使用1.全局异常处理#APIView的dispatch的时候--》三大认证,视图类的方法中--》出了异常--》被异常捕获--》都会执行一个函数:#只要出了异常,都会执行dispatch中的这句,这个函数response=self.handle_exception(exc)#handle_exception源码分析d......
  • ASP.NET Core的全局拦截器(在页面回发时,如果判断当前请求不合法,不执行OnPost处理器)
    ASP.NETCoreRazorPages中,我们可以在页面模型基类中重载OnPageHandlerExecuting方法。下面的例子中,BaseModel继承自PageModel,是所有页面模型的基类。推荐方案:在BaseModel.cs中,重载OnPageHandlerExecuting方法(看下面代码中的注释):publicoverridevoidOnPageHandlerExecuting......
  • H5 新增的全局属性
    属性名功能contenteditable表示元素可否被用户编辑,可选值:true、falsedraggable表示元素可以拖动,可选值:true、falsehidden隐藏元素和CSSdisplaynone的是一样的spelicheck拼写检查,可选值:true、falsecontextmenu规定元素上下文菜单,在用户点击元素时显示......
  • 全局变量和局部变量以及静态修饰作用
    1,全局变量和全局静态变量a、全局变量:全局变量存放在静态存储区,作用域是全局(对比下面添加static),整个声明周期都可以使用,其他文件如需要使用,需要添加externb、全局静态变量(static):分配的内存与全局变量一样,也是在静态存储内存上,其生命周期也是与整个程序同在的,从程序开始到结束一......
  • nginx常用全局变量
    nginx常用全局变量$args请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2$content_lengthHTTP请求信息里的"Content-Length"$conten_typeHTTP请求信息里的"Content-Type"$document_rootnginx虚拟主机配置文件中的root参数对应的值$document_uri当前请求......
  • 在 Linux 中将可执行文件设为全局可用
    一、将可执行文件复制到/usr/local/bin/目录:sudocp<binary-name>/usr/local/bin/或生成链接:sudoln-s/absolute/path/to/binary/usr/local/bin/<binary-name>二、echo"exportPATH=/home/wzy/go/bin:$PATH">>~/.profile&&source~/.pr......
  • springboot seata 全局捕获异常失效
    问题:Springboot使用@ControllerAdvice或@RestControllerAdvice全局捕获异常时,捕获不到自己抛出的相应异常首先看一下全局异常组件有么有被扫描到如何查看,很简单只需要写一段类加载打印代码,如下 如果启动时,打印了你写的字符串就说明时烧苗到了 这就说明是其他的问题了,那就......
  • .gitignore 全局忽略提交特定文件夹,不限路径递归忽略
    创建或修改全局.gitignore文件:在命令行中执行以下命令来创建或修改全局的.gitignore文件gitconfig--globalcore.excludesfile~/.gitignore_global如果文件已存在,则此命令会确保Git使用正确的文件。接下来,编辑这个文件(如果它不存在,这一步骤也会创建它):touch~/.gitig......
  • javaScript之局部变量,全局变量与局部作用域,全局作用域
    前端开发工作者,最需要学习的一门语言就是JavaScript了吧,其实学习大部分编程语言都是从基本的语法知识开始人门的。什么语句、变量、数据类型、对象、函数...今天本文就简单说明javaScript变量中的一个小小的知识点,其实在后面的最开始工作编程中我也是常常容易出现bug的一个点。......