Я перехватываю функции во внешнем процессе через их смещение функции.Это хорошо работает для функций, которые я до сих пор перехватываю - однако я нашел функцию "debugLog (char ...)", которая все еще существует в двоичном файле, но не выполняет никакой печати - она выглядит так
debugMessage proc near ;
xor eax, eax ; Logical Exclusive OR
retn ; Return Near from Procedure
debugMessage endp
это называется так
push offset debugString ; "This is a debug message"...
call debugMessage ; Call Procedure
Теперь отладочное сообщение, очевидно, отключено, я хотел подключиться к нему, так как я уже мог просто подключиться к аналогичному func (char ..) в двоичном файле.
Это код:
typedef void (__stdcall* DebugLog)(const char*);
DebugLog Real_DebugLog = (DebugLog)(0xCAFEBABE);
extern "C"
{
static void __stdcall Hook_DebugLog(const char*);
}
void __stdcall Hook_DebugLog(const char* text) {
MessageBox(NULL, text, "MyDebugLog", MB_OK);
return Real_DebugLog(text);
}
// in dll main attach..
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_DebugLog, (PVOID)Hook_DebugLog);
Аналогичный подход работает для всех других функций, которые я до сих пор подключал к этому двоичному файлу.Я также убедился, что debugMessage даже вызывается с помощью отладчика.
Есть идеи, почему этот хук вообще не работает?Может быть, потому что функция может иметь аргументы var?я уже пробовал с const char *, ...).