文档介绍:1介绍 Apihook包括两部分:api调用的截取和api函数的重定向。通过apihook可以修改函数的参数和返回值。关于原理的详细内容参见《windows核心编程》第19章和第22章。 2DetoursAPIhook"-,hroughthetargetpointertothetrampoline."在Detours库中,驱动detours执行的是函数DetourAttach(…).LONGDetourAttach(   PVOID*ppPointer,   PVOIDpDetour   );这个函数的职责是挂接目标API,函数的第一个参数是一个指向将要被挂接函数地址的函数指针,第二个参数是指向实际运行的函数的指针,一般来说是我们定义的替代函数的地址。但是,在挂接开始之前,还有以下几件事需要完成::DetourTransactionBegin()DetourUpdateThread(GetCurrentThread())在这两件事做完以后,detour函数才是真正地附着到目标函数上。在此之后,mit()是detour函数起作用并检查函数的返回值判断是正确还是错误。  hookDLL 中的函数在这个例子中,将要hookwinsock中的函数send(…)和recv(…).在这些函数中,我将会在真正调用send或者recv函数前,把真正说要发送或者接收的消息写到一个日志文件中去。注意:我们自定义的替代函式一定要与被hook的函数具有相同的参数和返回值。例如,send函数的定义是这样的:intsend( __in SOCKETs, __in constchar*buf, __in intlen, __in intflags);因此,指向这个函数的指针看起来应该是这样的:int(WINAPI*pSend)(SOCKET,constchar*,int,int)=send;把函数指针初始化成真正的函数地址是ok的;另外还有一种方式是把函数指针初始化为NULL,然后用函数DetourFindFunction(…)(…)和recv(…)初始化:int(WINAPI*pSend)(SOCKETs,constchar*buf,intlen,intflags)=send;intW