-
-
SSDT代码编译问题
-
发表于:
2014-3-22 18:46
3785
-
最近看了一套天道酬勤过驱动保护的视频教程,其中里面有一段是关于SSDT的,但是代码却编译不通过。编译环境为Win7 64bits VS2008
代码如下:
driver.h文件
................
(省略。。。)
..................
extern "C" LONG KeServiceDescriptorTable;
................
.........
.cpp文件
................
(省略。。。)
..................
extern "C" NTSTATUS DriverEntry (
IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegPath )
{
NTSTATUS status;
//ULONG SSDT_NtOpenProcess_Addr;
//ULONG Cur,Old;
KdPrint(("Enter DriverEntry\n"));
//读取SSDT中NTOpenProcess地址
_asm
{
int 3
push eax
push ebx
move eax,KeServiceDescriptorTable
move eax,[eax]
move ebx,0xBE
shl ebx,2
add eax,ebx
move eax,[eax]
pop ebx
pop eax
}
//KdPrint(("读取SSDT _NtOpenProcess address:%x\n",SSDT_NtOpenProcess_Addr));
//////////////////////////
//注册回调函数入口
pDriverObject->DriverUnload = DriverUnload;
pDriverObject->MajorFunction[IRP_MJ_CREATE] = DriverDispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = DriverDispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_WRITE] = DriverDispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_READ] = DriverDispatchRoutine;
//创建设备对象
status = CreateDevice(pDriverObject);
KdPrint(("Leave DriverEntry\n"));
return status;
}
其中红色的编译,会出现如下的错误
error C2400: inline assembler syntax error in 'opcode'; found 'eax'
希望有知道原因的,给指导下,谢谢
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)