【发布时间】:2015-02-06 12:46:39
【问题描述】:
早上好!
我最近阅读了关于挂钩函数的非常有趣的文章,我学习了一两个教程,但它似乎从来没有用过,我正在使用 Detoured,这里是完整的代码,在我看来完全正常:(
#include <stdio.h>
#include <windows.h>
#include "stdafx.h"
#include "detours.h"
#pragma comment(lib, "detours.lib")
int(__stdcall* realFunc)(int) = (int(__stdcall*)(int))(0x004157B0);
void hookedFunc(int num)
{
printf("Test : %d\n", num + 100);
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DetourAttach((PVOID*)(&realFunc), (PVOID)hookedFunc);
break;
case DLL_THREAD_ATTACH:
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach((PVOID*)(&realFunc), (PVOID)hookedFunc);
DetourTransactionCommit();
hookedFunc(100);
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
DetourDetach((PVOID*)0x004157B0, hookedFunc);
break;
}
return TRUE;
}
当使用 RemoteDLL 和一个简单的控制台应用程序作为 dummy 来挂钩函数时,所有步骤都成功完成(以管理员身份运行),我要挂钩的函数的内存地址匹配,但是代码行“printf(”测试:%d\n", num + 100);"没有执行,结果不会出现在屏幕上...
如果有人知道发生了什么,我会很高兴听到它!
提前致谢!
【问题讨论】: