[系统底层] x86和x64下ssdt的差别
番茄系统家园 · 2021-08-14 23:50:13
![[系统底层] x86和x64下ssdt的差别 [系统底层] x86和x64下ssdt的差别](https://www.nndssk.com/zb_users/upload/4f9171b198df90b913859034e1358450.jpg)
X86和x64下ssdt的差别函数
首先介绍一下SSDT相关的结构体指针
无类型指针,x86下32位,x64下64位blog
结构体索引
{ip
;im
;call
;d3
;数据
},*;db
看一下对应关系
在XP32位下
位下
红黄蓝绿分别代码结构体中的四个成员。第三项为函数个数
这里用dp命令,以指针大小显示数据
dpKeServiceDescriptorTable
XP下
直接是函数的地址
Win7下
计算公式以下:
Ssdt为KeServiceDescriptorTable地址,Index为索引值
FunAddr=ssdt+(ssdt+4*Index)4
以ntdll!NtOpenProcess为例计算验证一下
ntdll!NtOpenProcess索引值为23h
Ufntdll!NtOpenProcess以下:
ntdll!ZwOpenProcess:
00000000`76df15104c8bd1movr10,rcx
00000000`76df1513b****moveax,23h
00000000`76df15180f05syscall
00000000`76df151ac3ret
索引值为23h,ssdt地址为fffff800`03ecd800
fffff800`03ecd800+4*23h=fffff800`03ECD88C
fffff800`03ECD88C地址处的值为02d0bd00
右移四位002d0bd0
加上基址fffff800`03ecd800+002d0bd0=fffff800`0419E3D0
看一下ufffff800`0419E3D0
确实是内核函数NtOpenProcess的地址。
总之,x86下的ssdt中的内核函数地址能够直接得到,x64下须要进行计算。
免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/post/33648.html。猜你喜欢
最新应用
热门应用

