asm registers behouden (in C++)

Status
Niet open voor verdere reacties.

badboyR

Gebruiker
Lid geworden
11 apr 2012
Berichten
28
Ik heb een call van een programma omgeleidt naar mijn eigen functie (naked). In die functie wil ik meerdere functies gaan uitvoeren, maar de register waardes (esp) moeten hetzelfde blijven, hoe moet ik dit doen? Anders crasht het programma.

Eerst voer ik mijn functie in (in naked):
Code:
if (start == 0)
	{
		RequestModel(400, 0);
		start = 1;
	}

	ASM
	{
                // Orginele functie die moest worden uitgevoerd
		mov eax,	0x442AD0 
                jmp eax   
	}


_declspec(naked) void RequestModel(DWORD id, DWORD unknown)
{
	__asm
	{
		push		ebp
		mov		ebp, esp
		sub		esp, 20 

		push		unknown
		push		id
		mov		eax, 0x4087E0
		call		eax
		pop		id
		pop		unknown

		mov		esp, ebp
		pop		ebp
		ret
	}
}
 
Je zou daarvoor 'pushad' en 'popad' kunnen gebruiken.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan