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位作为序号,找到函数地址表和函数参数表。

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

      

     

  • 相关阅读:
    laravel5.5源码笔记(二、服务提供者provider)
    laravel5.5源码笔记(一、入口应用的初始化)
    laravel5.5源码阅读草稿——路由
    laravel5.5源码阅读草稿——application
    NOIP2018提高组爆炸记
    复习3-数据结构模板
    复习2-数论模板
    复习1-图论模板
    洛谷P3960 列队
    poj3159 Candies
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11713969.html
Copyright © 2011-2022 走看看