配置好双机调试
DriverEntry设置断点 __asm int 3;
加载驱动 断下
u 查看 汇编
F8 步入
F10 步过
shift+F11 跳出函数 返回到上层call
F5 运行
bp 下CC断点 bp 模块名!函数名
bl 显示断点
bd 禁用断点
bc 清除断点
a 地址 之后 输入指令 之后回车
WINGDBG
SSDT的全称是System Services Descriptor Table,系统服务描述符表 在ntoskrnl.exe导出KeServiceDescriptorTable 这个表
dd poi[KeServiceDescriptorTable]+索引号*4 显示
Kernel Detective v1.4.1工具 查看 索引号
索引号 计算 :
找到什么名称的函数 在WINDBG中 u zw函数 EG: u zwOpenFile
看到mov eax,74h
对指定源代码处下断:
bp `123!main.cpp:23`
最关键的一点,使用"`"而不是"'"
typedef struct ServiceDescriptorTable {
PVOID ServiceTableBase; //System Service Dispatch Table 的基地址
PVOID ServiceCounterTable(0);
//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
}
用windbg 了解