J'ai un code qui change la fonction que l'on appelle, à ma nouvelle fonction, mais je ne veux pas appeler seulement ma nouvelle fonction, je veux aussi appeler l'ancienne . Ce est un exemple, afin que vous puissiez comprendre ce que je dis:Appelez une fonction deux fois avec Assembly et C++
Si je démonte mon .exe, je vais regarder cette partie:
L0:
mov eax, [L00654321] //doesn't matter
mov ecx, [eax+1Ch] //doesn't matter
push esi //the only parameter
0x123 call SUB_L00999999 //this is the function I wanna overwrite
//...
(0x123 est l'adresse de cette ligne) donc, j'utilisé ce code:
DWORD old;
DWORD from = 0x123;
DWORD to = MyNewFunction;
VirtualProtect(from, 5, PAGE_EXECUTE_READWRITE, &old);
DWORD disp = to - (from + 5);
*(BYTE *)(from) = 0xE8;
*(DWORD *)(from + 1) = (DWORD)disp;
maintenant, au lieu d'appeler SUB_L00999999, il appelle MyNewFunction ...
Alors ... des idées sur comment puis-je appelle toujours l'ancienne fonction?
J'ai essayé des choses comme ça (à bien des égards), mais il se bloque ma demande:
int MyNewFunction(int parameter)
{
DWORD oldfunction = 0x00999999;
_asm push parameter
_asm call oldfunction
}
Remarques: J'utilise Visual Studio C++ 2010 et ces codes sont dans un .dll chargé dans un fichier .exe.
Merci.
Merci mec, ça a bien fonctionné, je ne me rappelais pas avoir utilisé ça il y a quelque temps ... –