Доброе утро !
Недавно я прочитал довольно интересные статьи о функциях перехвата, я следовал одному или двум учебникам, но, похоже, они никогда не работают, я использую 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 и простого консольного приложения в качестве манекена для перехвата функции все шаги выполняются успешно (запуск от имени администратора), адрес памяти для функции, которую я хочу перехватить, совпадает, однако строка кода "printf("Test: % д\п", число + 100);" не выполняется, результат не появляется на экране...
Если у кого-то есть идея о том, что происходит, я был бы очень рад услышать это!
Заранее спасибо !