Hi,
ich habe mir ein Opferprogramm geschrieben und deren Funktionsadresse mit IDA ermittelt.
Opfer:
Nun wollte ich mit Detours die show Funktion abfangen und den Wert (i) verändern.
Hook:
Das detouren an sich klappt auch wunderbar, mein Problem ist leider nur die Variable "i".
Der Wert ist immer um die 2 Millionen hoch, selbst wenn ich i unverändert an die Originalfunktion weitergebe o0
Mache ich etwas falsch ?
ich habe mir ein Opferprogramm geschrieben und deren Funktionsadresse mit IDA ermittelt.
Opfer:
Code:
void show (int i)
{
cout << i << endl;
}
int main(int argc, char *argv[])
{
int i = 0;
while ( i < 100 )
{
if (kbhit())
{
show (i);
i++;
getch();
}
} return 0;
}
Nun wollte ich mit Detours die show Funktion abfangen und den Wert (i) verändern.
Hook:
Code:
typedef void (__cdecl *ShowType) ( int i );
ShowType show_o = NULL;
void __cdecl show ( int i )
{
i *= 2;
return show_o(i);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
show_o = (ShowType) (DetourFunction((PBYTE)0x00401000, (PBYTE)show ));
break;
case DLL_PROCESS_DETACH:
DetourRemove((PBYTE)0x00401000, (PBYTE)show );
break;
}
return TRUE; // succesful
}
Das detouren an sich klappt auch wunderbar, mein Problem ist leider nur die Variable "i".
Der Wert ist immer um die 2 Millionen hoch, selbst wenn ich i unverändert an die Originalfunktion weitergebe o0
Mache ich etwas falsch ?