
#include "mydetours.h"
#define JMP_OPCODE 0xE9
#define POP_EBP_OPCODE 0x5D
#define ADD_ESP_OPCODE_1 0x83
#define ADD_ESP_OPCODE_2 0xC4
void *DetourFunc(BYTE *src, BYTE *dst, const int len)
{
BYTE* first = (BYTE*)malloc(9);
BYTE* jmp = (BYTE*)malloc(len + 5);
DWORD dwback;
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwback);
memcpy(jmp, src, len);
jmp += len;
jmp[0] = JMP_OPCODE;
*(DWORD*)(jmp+1) = (DWORD)((src+len) - jmp - 5);
src[7] = JMP_OPCODE;
*(DWORD*)(src+8) = (DWORD)(first - (src+7) - 5);
first[0] = ADD_ESP_OPCODE_1;
first[1] = ADD_ESP_OPCODE_2;
first[2] = 0x04;
first[3] = POP_EBP_OPCODE;
first[4] = JMP_OPCODE;
*(DWORD*)(first+5) = (DWORD)(dst - (first+4) - 5);
return (jmp-len);
}
pEndScene = ( EndScene_t )DetourFunc((PBYTE)endsceneaddy, (PBYTE)hkEndScene, 12);

