Вы уверены, что функция, которую вы перехватываете, использует соглашение о вызовах __fastcall
?
Чтобы перехватить функцию, экспортированную из DLL, вам нужно будет либо исправить таблицы импорта всех модулей (dll /exe), которые вызывают его или , переписывают точку входа функции во время выполнения.Достойную статью по исправлению таблицы импорта можно найти в CodeProject здесь .Хороший учебник по использованию MS Detours можно найти здесь .
Вам необходимо указать адрес функции, которую вы хотите подключить при вызове DetourFunction.Эти значения не должны быть жестко запрограммированы, поскольку в вашей DLL не гарантируется загрузка по определенному адресу.Это можно сделать довольно легко с помощью следующего кода:
// Get the module containing the function to hook
HMODULE targetModule = GetModuleHandle("otherDll.dll");
// Get the address of the function to hook
FARPROC targetFunction = GetProcAddress(targetModule, "cry");
// Go hook it.
Real_cry = (def_cry)DetourFunction((PBYTE)targetFunction,(PBYTE)&custom_cry);