zoukankan      html  css  js  c++  java
  • #define SYSTEMSERVICE(_func) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1) 这

    这个跟KeServiceDescriptorTable的结构有关
    下面是KeServiceDescriptorTable的结构定义
    KeServiceDescriptorTabletypedef struct _KSERVICE_TABLE_DESCRIPTOR {
     PULONG_PTR Base;
     PULONG Count;
     ULONG Limit;
     PUCHAR Number;
    } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
    KeServiceDescriptorTable.ServiceTableBase就是其中的第一项Base,这里是定义的名字不一样没关系。
    而Base指向的SSDT函数地址表,所以下面的语句就是一个宏用来取得函数地址表中对应序号的函数
    KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1)
    
    *(PULONG)((PUCHAR)_func+1这里要解释下,这个语句是取函数它对应的SSDT上的序号,这个语句之所以能去到,跟ZW 系列SSDT函数有关,ZW系列函数的第二个字节就是序号,所以用上面语句取出序号,然后用这个序号取出函数地址
  • 相关阅读:
    处理火星文重温vchar,char,nvchar,nchar
    删除文件
    js常用正则表达式
    安装iis 配置iis
    无题
    js函数大全
    常用正则表达式
    QQ在线客服
    获取系统文字字体
    无限级删除的存储过程
  • 原文地址:https://www.cnblogs.com/vcerror/p/4289220.html
Copyright © 2011-2022 走看看