另一个程序加载dll并SetHookdll代码#include <windows.h>extern"C"
{
HANDLE h;
HHOOK hhk;LRESULT __stdcall hproc(int code,WPARAM wParam,LPARAM lParam)
{
return CallNextHookEx(hhk,code,wParam,lParam);
}__declspec(dllexport) void __stdcall SetHook()
{
hhk = SetWindowsHookEx(WH_GETMESSAGE,hproc, (HINSTANCE)h,0 );
}__declspec(dllexport) void __stdcall HookP(int p)
{
//接管API
char *str = (char*) (*( (&p) + 4));//TextOutA 第4个参数
*str = 'A';
}BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
){ if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
h = hModule;
//hook TextOutA
void *pp =(void *) GetProcAddress( GetModuleHandle("gdi32.dll"),"TextOutA" );
DWORD oldp;
VirtualProtect(pp,200,PAGE_EXECUTE_READWRITE ,&oldp);
int a = (int) GetProcAddress( (HINSTANCE) hModule,"Hookp" )
-(int) pp - 5;
__int64 w= *((__int64* )pp) ;
*( (char*)pp ) = (char)0xe8; //call
* ( (int*)((char*)pp+1) ) = a;
* ( (__int64*)((char*)pp+5) ) = w; VirtualProtect(pp,200,oldp ,&oldp);
}
return TRUE;
}}
{
HANDLE h;
HHOOK hhk;LRESULT __stdcall hproc(int code,WPARAM wParam,LPARAM lParam)
{
return CallNextHookEx(hhk,code,wParam,lParam);
}__declspec(dllexport) void __stdcall SetHook()
{
hhk = SetWindowsHookEx(WH_GETMESSAGE,hproc, (HINSTANCE)h,0 );
}__declspec(dllexport) void __stdcall HookP(int p)
{
//接管API
char *str = (char*) (*( (&p) + 4));//TextOutA 第4个参数
*str = 'A';
}BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
){ if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
h = hModule;
//hook TextOutA
void *pp =(void *) GetProcAddress( GetModuleHandle("gdi32.dll"),"TextOutA" );
DWORD oldp;
VirtualProtect(pp,200,PAGE_EXECUTE_READWRITE ,&oldp);
int a = (int) GetProcAddress( (HINSTANCE) hModule,"Hookp" )
-(int) pp - 5;
__int64 w= *((__int64* )pp) ;
*( (char*)pp ) = (char)0xe8; //call
* ( (int*)((char*)pp+1) ) = a;
* ( (__int64*)((char*)pp+5) ) = w; VirtualProtect(pp,200,oldp ,&oldp);
}
return TRUE;
}}
解决方案 »
- 如何从CBCGPPropList中获取每一项的值?
- VC6下的Enable profiling功能很好用,可以记录每个函数的运行时间,请问VC7下有没有?
- 用VC++如何实现并口编程?
- 怎样编写 windows窗口界面程序?
- DLL调用出错,请高手帮我看看下面的代码。。。。。。我在热切的期盼您的帮助
- 挑战:关于调用UpdateAllViews出现的奇怪错误以及其它一些奇特问题?(高分求解?)
- 多文档窗口中每个VIEW怎么才能实现VC中OUTPUT的那种标签窗口?
- 求教:请问如何在PWS下调试ISAPI过滤器?
- 奇怪的问题~~~
- #pragma pack的问题。 H
- 怎样获得本机所有网卡的信息啊?有api函数吗?
- 双缓冲绘图的疑问
好像还有一个别的错:应该每个进程调用一次dllmain,但是为什么dllmain执行的次数没有上限?
这句话为什么会出来0,不应该是0啊