例子: [ \chapter09\StartIOTest ]
本例子的核心代码是HelloDDKStartIO处理过程。
初学驱动逆向,逆向函数还原代码,无壳无花,流程也很简单。
IDA反汇编代码:
void __stdcall HelloDDKStartIO(_DEVICE_OBJECT *DeviceObject, _IRP *Irp)
event= _KEVENT ptr -1Ch
timeout= _LARGE_INTEGER ptr -0Ch
oldirql= byte ptr -4
DeviceObject= dword ptr 8
Irp= dword ptr 0Ch
push ebp
mov ebp, esp
sub esp, 1Ch
push offset Format // "Enter HelloDDKStartIO\n"
call _DbgPrint // KdPrint(("Enter HelloDDKStartIO\n"));
add esp, 4 // 申请空间
lea eax, [ebp+oldirql] // 取地址
push eax // Irql
call ds:__imp__IoAcquireCancelSpinLock@4 // IoAcquireCancelSpinLock(oldirql);
mov ecx, [ebp