호출 할 함수를 새 함수로 변경하는 코드가 있지만 새 함수 만 호출하고 싶지는 않습니다. 이전 함수도 호출하고 싶습니다. . 이것은 예입니다, 그래서 당신은 무슨 말인지 이해할 수 : 내 .EXE를 분해하면Assembly 및 C++로 함수를 두 번 호출합니다.
, 나는이 부분에서 볼 것이다 :
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 그 라인의 주소입니다) 에 어떤 아이디어를 어떻게 할 수 ...이 ... MyNewFunction
호출 그래서, 대신 SUB_L00999999를 호출, 이제
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;
: 그래서,이 코드를 사용 여전히 오래된 함수를 호출합니까?
나는 (여러면에서)이 같은 것들을 시도했지만 내 응용 프로그램 충돌 :int MyNewFunction(int parameter)
{
DWORD oldfunction = 0x00999999;
_asm push parameter
_asm call oldfunction
}
노트 : 나는 2010 비주얼 스튜디오 C++ 사용이 코드가 .exe로로드 된 .DLL에 있습니다.
감사합니다.
감사합니다.이 사람은 괜찮 았는데, 나는 이것을 얼마 전에 사용했다는 것을 기억하지 못했습니다 ... –