Eigenes Programm detouren

06/03/2009 18:06 volchok#1
Hi,

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 ?
06/04/2009 16:19 volchok#2
Hat niemand eine Idee ? :/
06/04/2009 18:52 RDTSC#3
Gib mal die Binaries, damit... ich sie in den Papierkorb werfen kann.
06/05/2009 07:21 volchok#4
:|