zoukankan      html  css  js  c++  java
  • Windows系统调用中的系统服务表

     Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

    Windows系统调用中的系统服务表

      如果这部分不理解,可以查看 Windows内核分析索引目录依次阅读。

      我们在之前讲过系统调用过程中,给予eax一个编号,操作系统通过这个编号来执行某个内核函数。

      这个函数是通过操作系统的系统服务表来查找的。

      现在,我们来探究一下nt!KiFastCallEntry的反汇编代码,看看其如何查看系统服务表找到要执行的函数的。

     

    一、系统服务表结构

      Windows一共有两张表,每张表大小10h,每个成员占4h。

      如图,其中函数地址表每成员四字节,函数参数表每成员一字节。

      参数的数值是以字节为单位。

      

    二、系统服务表在哪里

      在Win7 32位中存于 [KTHREAD+0xbc]

      kd> dt _KTHREAD
        ntdll!_KTHREAD

        +0x000 Header           : _DISPATCHER_HEADER

        ·······

        +0x0bc ServiceTable     : Ptr32 Void

        ····

      该结构地址为第一个表

      

    三、要判断使用哪个表

      传入函数序号的第12位,存储的就是关于使用那个表的标志,如果为0,则调用第一张表,如果为2,则调用第二张表。

      大于12位的值其实全部是忽略的。

      

    四、找到要执行的函数

      如图,通过第0-11位作为序号,找到函数地址表和函数参数表。

      以参数表中的数值作为开辟新的栈的大小,之后开辟新的栈,将参数传入进来,之后根据函数地址表来调用内核函数。

      

     

  • 相关阅读:
    VS 对话框控件的Tab顺序问题
    基于OpenGL三维软件开发
    OpenGL 中的三维纹理操作
    VC 在桌面上绘制一些图形
    VC/MFC如何添加启动界面
    Cordova or Xamarin 用.net开发IOS和Android程序
    ASP.NET Web API
    软件项目如何选型
    CIO的职责、条件及价值
    Oracle日期周详解IW
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11713969.html
Copyright © 2011-2022 走看看