İşlevleri dışsal işlemlerde işlev ofsetleri aracılığıyla ayarlamıyorum. Hala ikili var ancak herhangi bir baskı yapmak doesnt i "DebugLog (Char ...)" fonksiyonunu bulduk ancak - - Bu im bugüne kadar çengel fonksiyonları için iyi çalışıyor buDetours "boş" işlev için harici işlemde kanca çalışmıyor
debugMessage proc near ;
xor eax, eax ; Logical Exclusive OR
retn ; Return Near from Procedure
debugMessage endp
benziyor o i basitçe zaten ikili benzer fonk (Char ..) içine kanca başardı olarak Şimdi ayıklama mesajı açıkça devre dışı bırakıldığı bu
push offset debugString ; "This is a debug message"...
call debugMessage ; Call Procedure
gibi denir, ben bu işe kanca istedi.
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);
Benzer bir yaklaşım ı şimdiye kadar bu ikili girdiklerini diğer tüm fonksiyonlar için çalışır:
Bu
kodudur. Ayrıca debugMessage'ın bir hata ayıklayıcı ile çağrıldığından emin oldum.Bu kanca neden hiç çalışmıyor? Belki de fonksiyonun değişkenleri olabilir mi? Ben zaten const char * ile çalıştı, ...).
Teşekkürler - başka bir çözüm var mı? – Steve
sadece başka bir şekilde tüm çağrı sitelerini dolaştırmak yerine – paulm