SSDT,System Services Descriptor Table,系统服务描述符表。
见此
    https://blog.csdn.net/bcbobo21cn/article/details/52083557

这个表就是一个把ring3的Win32 API和ring0的内核函数联系起来。SSDT包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。

SSDT定义为下面结构体;
    typedef struct _SYSTEM_SERVICE_TABLE{};

进入Windbg,使用如下的命令,即可查看到SSDT表;

lkd> dd KeServiceDescriptorTable
    8055ab80  804e3d20 00000000 0000011c 804d9f48
    8055ab90  00000000 00000000 00000000 00000000
    8055aba0  00000000 00000000 00000000 00000000
    8055abb0  00000000 00000000 00000000 00000000

为什么输入 dd KeServiceDescriptorTable 可以查看到SSDT表?

d命令是查看某地址所储存的数据;
db/dw/dd/dq/dD/df
不同在于所显示的数据长度;

db显示一字节的长度;
dw显示两字节的长度;
dd显示四字节的长度;
dq显示八字节的长度;
dD 显示double实数(8字节的长度);
df 显示float实数(4字节的长度);

dd后面跟的应该是个地址;此处跟的是 KeServiceDescriptorTable ,那么就是Windbg自己转换了;

在windbg.exe中就看得比较清楚,KeServiceDescriptorTable中就只有第一项有数据,其他都是0。
其中804e3d20是KeServiceDescriptorTable.ntoskrnel.ServiceTableBase,服务函数个数为0x11c个。

再看804e3d20地址里是什么东西:
    lkd> dd 804e3d20
    804e3d20  80587691 805716ef 8057ab71 80581b5c
    804e3d30  80599ff7 80637b80 80639d05 80639d4e
    804e3d40  8057741c 8064855b 80637347 80599539
    804e3d50  8062f4ec 8057a98c 8059155e 8062661f
    如上,80587691 805716ef 8057ab71 80581b5c 这些就是系统服务函数的地址了。

Win32 进程4GB的虚拟地址空间结构如下;00000000-7FFFFFFF为用户空间,80000000-FFFFFFFF为系统空间;

显示的系统服务函数地址在80000000之上,这就对了;

那么目前看来,dd KeServiceDescriptorTable 此命令,并非直接看到内核中的SSDT,看到的是映射到进程虚拟地址空间中的SSDT;

windbg查看SSDT表相关推荐

  1. x86下windbg查看SSDT表与SHDOWSSDT

    x64下这两个表是未导出的,不能用这种 首先系统符号要加载 SSDT表: x nt!kes*des*table* kd> x nt!KeServiceDes* 83f74a00 nt!KeSer ...

  2. Windbg 查看SSDT表

      SSDT HOOK 的原理其实非常简单,我们先实际看看KeServiceDescriptorTable是什么样的.         lkd> dd KeServiceDescriptorTa ...

  3. 使用WinDbg获取SSDT 系统服务描述表的函数服务号(索引)

    今天研究了一下午SSDT的东东,最尴尬的是起初我不知道如何获取到SSDT的函数服务号,而这个玩意儿在不同版本的windows是不一样的,后面经过研究还是找到了正确的方法.这里简单的分享一下. ·    ...

  4. ssdt 表结构及hook的一般理解

    1       Ssdt表的基本结构 KeServiceDescriptorTable 首地址:8055D700 0: kd> dd KeServiceDescriptorTable 8055d ...

  5. Win7 64位的SSDTHOOK(1)---SSDT表的寻找

    最近在学习64位驱动,涉及到了SSDT的知识,结果发现64位下的SSDT和32位下的SSDT有所不同. 开始发现64位下的KeServiceDescriptorTable是未导出的函数.首先要找到Ke ...

  6. 通过Windbg查看DataTable的值

    使用Windbg查看内存中DataTable的值时,其实方法和查看普通对象是一样的,唯一要注意的时,DataTable对象中值的存储方式有些特别,DataRow中的值是存存放在DataTable的co ...

  7. windbg查看设备栈设备树学习总结

    用windbg寻找设备树根节点 http://blog.csdn.net/lixiangminghate/article/details/51729945 用ReactOS上明确说过,Pnp管理器对每 ...

  8. 驱动开发:如何枚举所有SSDT表地址

    在前面的博文<驱动开发:Win10内核枚举SSDT表基址>中已经教大家如何寻找SSDT表基地址了,找到后我们可根据序号获取到指定SSDT函数的原始地址,而如果需要输出所有SSDT表信息,则 ...

  9. 杀毒软件智能主动防御的软肋——无驱恢复系统SSDT表

    8.3 杀毒软件智能主动防御的软肋--无驱恢复系统SSDT表 大部分的杀毒软件其内置的主动防御功能,通常考虑到用户易用性的问题,都是采用的智能HIPS拦截,也就是说内置一些HIPS拦截规则,智能判断未 ...

最新文章

  1. 在 Ubuntu 14.04 Chrome中安装Flash Player(转)
  2. 强烈推荐几个好玩的深度学习github项目分享!
  3. VSS、RSS、PSS、USS
  4. C# Java间进行RSA加密解密交互
  5. 离散信号与系统分析(上)
  6. IT-标准化-系列-6.关闭事件跟踪程序
  7. linux根据pid查看进程,linux根据pid获取进程名和获取进程pid(c语言获取pid)
  8. Bootstrap组件_媒体对象,列表组
  9. redis持久化存储AOF与RDB
  10. unity 飞机 残骸模型_训练残骸模式– Java 8中的改进实现
  11. java分析dump文件_干货分享丨jvm系列:dump文件深度分析
  12. regnam r语言_求助:R语言进行增加值分解的一部分代码看不懂,求大神过目
  13. 计算机驱动空间的c盘不足怎么办,C盘磁盘空间不足怎么解决
  14. 期货及衍生品基础 - 概述总结
  15. 华为鸿蒙系统操作教程_鸿蒙OS Beta版怎么使用
  16. 在野外面对熊应该怎么办?
  17. 网络拓扑中,什么是核心层?什么是汇聚层?
  18. 悲观锁和乐观锁的区别,怎么实现
  19. getActionCommand()用法
  20. html5道歉模板,给朋友的道歉信模板5篇2020

热门文章

  1. 安装MySQL示例   docker pull mysql
  2. Python 技术篇-python生成html源码功能实现演示,html代码自动生成技巧,列表生成式的灵活应用
  3. VBS转化为exe可执行文件实例演示,vbs转exe工具推荐
  4. CC2541对AT24CXX系列存储器的支持
  5. poj2420 A Star not a Tree? 【模拟退火】
  6. 1.5 matlab常量与变量
  7. linspace--创建线性等分向量
  8. 判断N!中二进制中最低位1的位置
  9. 人眼中亮斑的检测、定位和去除(2)
  10. (深度卷积生成对抗神经网络)DCGANs论文阅读与实现pytorch