A、引用KeServiceDescriptorTable表
B、通过ServiceTableBase+偏移读出当前函数地址
C、用windbg测试读取的值
系统服务描述符表 在ntoskrnl.exe导出KeServiceDescriptorTable 这个表
typedef struct _ServiceDescriptorTable {
PVOID ServiceTableBase; //System Service Dispatch Table 的基地址
PVOID ServiceCounterTable;
//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
}*PServiceDescriptorTable;
//由SSDT索引号获取当前函数地址
//NtOpenProcess [[KeServiceDescriptorTable]+0x7A*4]
//导出系统服务描述符表SSDT的指针
extern PServiceDescriptorTable KeServiceDescriptorTable;
方法1 纯汇编读取
ULONG SSDT_NtOpenProcess_Addr;
//[[KeServiceDescriptorTable]+0x7A*4]
__asm
{
push eax