hookjmp.cpp

来自「《Windows应用程序捆绑核心编程》配套源码」· C++ 代码 · 共 48 行

CPP
48
字号
// HookJmp.cpp:使用JMP法进行挂钩.
//
#include "stdafx.h"
#include <afxdllx.h>
#include "HookApi_Jmp.h"

void WINAPI ExampleJmp();
CHookApi_Jmp myJmp;

static AFX_EXTENSION_MODULE HookJmpDLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
	// Remove this if you use lpReserved
	UNREFERENCED_PARAMETER(lpReserved);

	if (dwReason == DLL_PROCESS_ATTACH)
	{
		ExampleJmp();
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
        myJmp.SetHookOff(); 
		TRACE0("HOOKJMP.DLL Terminating!\n");
		// Terminate the library before destructors are called
		AfxTermExtensionModule(HookJmpDLL);
	}
	return 1; 
}

//---------------------------------------------------------------------------
// 首先关闭拦截,然后才能调用被拦截的Api 函数. 
int WINAPI JmpMessageBoxA(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption,UINT uType )
{ 
	int nReturn=0; 
	myJmp.SetHookOff(); 
	nReturn=MessageBoxA(hWnd,"Hooking MessageBox by Jmp",lpCaption,uType); 
	myJmp.SetHookOn();
	return(nReturn); 
} 

//---------------------------------------------------------------------------
void WINAPI ExampleJmp()
{
	myJmp.HookOneAPI("user32.dll","MessageBoxA",(FARPROC)JmpMessageBoxA);
	myJmp.SetHookOn();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?