我有一個代碼可以改變將被調用的函數到我的新函數,但我不想只調用我的新函數,我也想調用舊函數。 這是一個例子,這樣你就可以明白我在說什麼:使用Assembly和C++調用函數兩次
如果我拆開我的.exe文件,我會看這個部分:
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的是該行的地址) 所以,我用這個代碼:
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;
現在,而不是調用SUB_L00999999,它調用MyNewFunction ...
所以...任何想法如何,我可以仍然調用舊功能?
我想這樣的事情(在很多方面),但它崩潰我的應用程序:
int MyNewFunction(int parameter)
{
DWORD oldfunction = 0x00999999;
_asm push parameter
_asm call oldfunction
}
注:我使用Visual Studio C++ 2010和這些代碼是在一個.exe加載一個.dll。
謝謝。
謝謝你,這工作得很好,我不記得我前一段時間使用過... – 2010-07-13 06:02:04