项目介绍:https://bbs.kanxue.com/thread-286868.htm
借用windows使用的int 2e异常劫持控制流。
Hook的目的是劫持控制流,引导其执行预定义的操作,因此需要使用者自定义Hook函数。
上图中使用HOOKENTRY宏,注册自定义的Hook函数;注意,不需要在Hook函数中再次调用被Hook的函数,因为在Hook函数执行完毕后,会自动恢复原函数的执行流。
hook.c文件,用于存储用户自定的Hook函数,其参数是全体通用寄存器组成的栈帧。
最后,使用InstallHook,指定函数所在模块、函数地址、自定义Hook的wrapper函数地址,就可以将控制流转移到自定义Hook函数,建议使用KeGenericCallDpc在多核间同步Hook。
Hook注册流程如下:
- 用户定义
INT64 __stdcall (*)(PREGContext pushedAqs)类型的Hook函数。 - 使用
HOOKENTRY宏,在hooks.asm中进行记录。 - 使用
InstallHook函数,在trapHook.c文件KeGenericCallDpc回调例程InitAndInstallHook,正式注册Hook。



