IAT hook一般来说没有问题,ntoskrnl比较不一样,它的输入表在.INIT节,但是被加载之后这个节就补丢弃了,以至于想在内存中解析PE获取IAT将全部失效。但是文件中IAT的RVA跟内存中是一样的,当然这里指的是FirstThunk,面不是OriginalFirstThunk
比如ntoskrnl输入表的KDCOM.DLL的KdSendPacket函数如下
lkd> u KdSendPacket nt!KdSendPacket: 8053fc3e ff2544914d80 jmp dword ptr [nt!_imp__KdSendPacket (804d9144)] ;ntoskrnl基址为804d8000h,则rva为1144h 8053fc44 cc int 3 8053fc45 cc int 3 8053fc46 cc int 3 8053fc47 cc int 3 8053fc48 cc int 3 8053fc49 cc int 3
下图的本地文件中这个函数的FirstThunkRVA也是1144h
自此,.INIT节被丢弃没关系