Funzioni di aggancio in un processo esterno tramite il loro offset di funzione. Che funziona bene per le funzioni im aggancio finora - tuttavia ho trovato un "(char ...) DebugLog" funzione che ancora esistono nel binario, ma pretende molto fare qualsiasi stampa - sembra che questoDeviazioni Gancio in processo esterno per la funzione "vuoto" non funziona
debugMessage proc near ;
xor eax, eax ; Logical Exclusive OR
retn ; Return Near from Procedure
debugMessage endp
esso è chiamato in questo modo
push offset debugString ; "This is a debug message"...
call debugMessage ; Call Procedure
Ora il messaggio di debug ha ovviamente stato disabilitato, ho voluto collegare in questo come mi è stato in grado di collegare semplicemente in func simile (char ..) nel binario già.
Questo è il codice:
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);
Un approccio simile funziona per tutte le altre funzioni che ho finora agganciati in questo binario. Mi sono anche assicurato che il debugMessage fosse anche chiamato con un debugger.
Qualche idea sul perché questo hook non funziona affatto? Forse perché la funzione potrebbe avere var args? ho già provato con const char *, ...).
grazie - c'è un'altra soluzione? – Steve
altro modo è quello di deviare tutti i siti di chiamata invece – paulm