格式是C
#include"ntddk.h"
typedef struct _ServiceDescriptorTable {
unsigned int* ServiceTableBase; //System Service Dispatch Table 的基地址
unsigned int* ServiceCounterTable; //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
unsigned char* ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
}PServiceDescriptorTable;
#pragma pack()
__declspec(dllimport) PServiceDescriptorTable KeServiceDescriptorTable;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////这是导出的SSDT表,= =跳过
/////////////////////////////////////////////
ULONG GETSSDTADD(ULONG uIndex)
{
ULONG addr = (ULONG)(KeServiceDescriptorTable.ServiceTableBase)+ uIndex *sizeof(ULONG);
return addr;
}
这是一个函数,
////////////////
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING RegistryPatch)
{
DbgPrint("DriverloadSuccess");
ULONG addr=GETSSDTADD(0x42);
if(addr)
{
DbgPrint("NtCreateFile:0x%08x",addr);
}
pDriverObj->DriverUnload=MyDriverUnload;
return STATUS_SUCCESS;
}
///////////////////////////////////
New.c(37): error C2275: “ULONG”: 将此类型用作表达式非法
1> C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ntdef.h(577) : 参见“ULONG”的声明
1>New.c(37): error C2146: 语法错误: 缺少“;”(在标识符“addr”的前面)
1>New.c(37): error C2065: “addr”: 未声明的标识符
1>New.c(38): error C2065: “addr”: 未声明的标识符
1>New.c(41): error C2065: “addr”: 未声明的标识符
2>------ 已启动生成: 项目: New Package, 配置: Vista Debug Win32 ------
2>C:\Program Files (x86)\Windows Kits\8.0\build\WindowsDriver8.0.common.targets(1347,5): error MSB3030: 无法复制文件“F:\New\VistaDebug\New.sys”,原因是找不到该文件。
========== 生成: 成功 0 个,失败 2 个,最新 0 个,跳过 0 个 ==========
这是错误,有空的大哥帮忙看看咯
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)