对于这个问题,困惑了许久,也许是应为很久没弄这个方面的东西了,曾经看过关于Native API 和 SSDT都忘得差不多了。吸取教训,今天把知识记录下来,并时常温故而知新。

系统服务描述符表,SystemService Dispatch Table,SSDT

KeServiceDescriptorTable是由内核导出的表。该表拥有一个指针(其实仅有ntoskrnel一项,没有包含win32k),指向SSDT中包含由Ntoskrnl.exe实现的核心系统服务的相应部分,它是内核的主要组成部分。

typedef struct _SystemServiceDescriptorTable

{

PVOID ServiceTableBase;

PULONG ServiceCounterTableBase;

ULONG NumberOfService;

ULONG ParamTableBase;

}SystemServiceDescriptorTable,*PSystemServiceDescriptorTable;

其中SSDT包含了所有内核导出函数的地址。每个地址长度为4个字节。所以要获得某个函数在SSDT中的偏移量,可以用:KeServiceDescriptorTable->ServiceTableBase + 函数ID* 4获取。

那么怎么获取函数ID呢?

其实很简单,ntoskrnl.exe导出的Zw*函数和Nt*函数,大家肯定都注意到了很多函数都是同名的,只是前缀不同。其实是这样的,Nt*函数是私有函数,其地址列于SSDT中。Zw*函数是由内核为使用设备驱动程序和其他内核组件而导出的函数,目的就在于同过Zw*函数去调用内核的Nt函数。(SSDT中的每一项和每个Zw*函数之间不存在一对一的对应关系)

内核中的所有Zw*函数都以操作码mov eax, ULONG起始,其中ULONG是系统调用在SSDT中的索引号。

说的具体点,就是每个Zw*号函数的第一行中的 ULONG值 就是其所对应的Nt*函数在SSDT中的索引号。

举个例子,如果我现在想获取 NtOpenProcess的ID号,那么就可以在Windbg中运行 u ZwOpenProcess

u ZwOpenProcess

nt!ZwOpenProcess:

805016c4 b87a000000      mov     eax,7Ah805016c9 8d542404        lea     edx,[esp+4]

805016cd 9c              pushfd

805016ce 6a08            push    8

805016d0 e88c0d0400      call    nt!KiSystemService (80542461)

805016d5 c21000          ret     10h

获取到的0x7A就是NtOpenProcess在SSDT中的ID号了。

ssdt函数索引号_【转】SSDT索引号的获取相关推荐

  1. mysql or走索引吗_加了索引,mysql查询就一定会用吗?

    小白白跑去鹅厂面试,面试官提出了一个很实际的问题: mysql增加索引,那些情况会失效呢?谈一下实际工作中遇到的情况.我们的小白白又抛出了白氏秘籍:用不用索引,找DBA小姐姐!啊?这是你面试哈,还是D ...

  2. mysql group 索引失效_介绍mysql索引失效的情况

    mysql视频教程栏目索引失效的情况. 索引对于MySQL而言,是非常重要的篇章.索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效. 图片总结版 相关免费 ...

  3. mysql的覆盖索引原理_「Mysql索引原理(七)」覆盖索引

    通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面.设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分.索引确实是一种查找数据的高效方式,但是MySQL也可 ...

  4. mysql设置索引长度_修改Mysql索引长度限制

    mysql 索引过长1071-max key length is 767 byte 问题 create table: Specified key was too long; max key lengt ...

  5. Mysql 唯一索引长度_关于mysql索引长度的相关内容总结

    MySQL优化之-索引具体代码分析:索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存 ...

  6. datagridview选中获取行号_请问c# 的winform 怎么获取 datagridview选中的行数和列数啊...

    展开全部 获取62616964757a686964616fe59b9ee7ad9431333431373332总行数:dataGridView1.Rows.Count; 获取当前选中行索引:int i ...

  7. ssdt函数索引号_【NT】一行代码获取SSDT服务索引号

    注:本文是以32位的windows7为实例. 今天在研究SSDT的过程中看到了一个大神写的教程,其中还附了一些代码,代码主要讲解的是SSDT hook过程,我在他的代码中没有看到任何有关服务函数的索引 ...

  8. mysql索引失效_导致MySQL索引失效的几种常见写法

    最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用的易于 ...

  9. like左匹配索引失效_导致MySQL索引失效的一些常见写法总结

    前言 最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用 ...

  10. sql server 创建唯一性非聚集索引语句_数据库专题—索引原理

    深入浅出数据库索引原理 参见:https://www.cnblogs.com/aspwebchh/p/6652855.html 1.为什么给表加上主键? 1.平时创建表的时候,都会给表加上主键.如果没 ...

最新文章

  1. android android:process=,Android app启动流程
  2. 跨域问题的前后端解决方案
  3. 售前笔记(四)——呈现沟通(PPT交流)
  4. C语言中低位存放,C语言 大端小端存储解析以及判断方法
  5. 【2021.01.01】人生中很重要的一个十年,差强人意
  6. 课时3.浏览器访问网页原理(理解)
  7. android arm 寄存器,ARM汇编
  8. vs使用未初始化的内存怎么解决_遇到C语言内存错误怎么办?一定要找准这六个原因...
  9. 刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)
  10. find 命令_除了 find,还有这些文件查找命令
  11. Python数据分析处理库——Pandas
  12. 【GPS模组】移远EC20 基于Arduino的GPS流速仪
  13. NAT技术及NAT ALG
  14. 移动硬盘打不开,千万别轻易格式化
  15. 身份认证协议攻击:黑客不希望你了解的事情
  16. C#/.NET 系统优化专题(搜索引擎Lucene的使用)
  17. RealSense D435深度相机开发(一)---- 基础介绍
  18. 【软件应用】福昕pdf阅读器回退到上次阅读的位置
  19. kindle出现电池感叹号,充电黄灯亮,怎么解决?按AWZ客服的回复弄好了。
  20. 尊贤、谦虚、谨慎、交友、有恒、微渐、慎始终、因果

热门文章

  1. 84键键盘没有insert键
  2. OSChina 周五乱弹 ——妹子一不小心就被拖到小巷子里
  3. 怎么关闭苹果Mac桌面出现麦克风图案?
  4. [转载]程序员去面试的梗!面试官:“哦了,明天来上班吧”
  5. 会声会影2020试用版如何激活序列号正式版及快速零基础剪辑教程
  6. New Phy: 中科院城环所朱永官等综述全球变化对叶际微生物组的影响
  7. 创客思维在高等教育中的启迪作用
  8. PMP考试必备-常见翻译问题(三)
  9. 2022腾讯QQ春节红包活动 虎跃星辰玩法总攻略
  10. java抽象类重载_012 JAVA 抽象类、接口、String类的基础了解