void CHook::WriteJMP_x64( DWORD_PTR dwFrom , DWORD_PTR dwTo )
{
DWORD_PTR dwAdr = dwFrom;
DWORD dwOldP;
VirtualProtect((LPVOID)dwAdr , 0x100 , PAGE_EXECUTE_READWRITE , &dwOldP);
*(BYTE*)dwAdr = 0x68;
dwAdr+=1;
*(DWORD32*)dwAdr = DWORD32(dwTo & 0xffffffff);
dwAdr+=4;
*(DWORD32*)dwAdr = DWORD32(0x042444c7);
dwAdr+=4;
*(DWORD32*)dwAdr = DWORD32(dwTo >> 32);
dwAdr+=4;
*(BYTE*)dwAdr = 0xc3;
//14
bytes
}
void CHook::WriteCall_x64( DWORD_PTR dwFrom , DWORD_PTR dwTo )
{
DWORD_PTR dwAdr = dwFrom;
DWORD dwOldP;
VirtualProtect((LPVOID)dwAdr , 0x100 , PAGE_EXECUTE_READWRITE , &dwOldP);
*(BYTE*)dwAdr = 0xE8;
dwAdr+=1;
*(DWORD*)dwAdr = DWORD32(0);
dwAdr+=4;
*(DWORD32*)dwAdr = DWORD32(0x12240483);
dwAdr+=4;
*(BYTE*)dwAdr = 0x68;
dwAdr+=1;
*(DWORD32*)dwAdr = DWORD32(dwTo & 0xffffffff);
dwAdr+=4;
*(DWORD32*)dwAdr = DWORD32(0x042444c7);
dwAdr+=4;
*(DWORD32*)dwAdr = DWORD32(dwTo >> 32);
dwAdr+=4;
*(BYTE*)dwAdr = 0xc3;
//23
bytes
}