Skip to content

Instantly share code, notes, and snippets.

@thethiny
Created November 14, 2023 00:13
Show Gist options
  • Save thethiny/d0ed383a2d88912effd93fd1a668335d to your computer and use it in GitHub Desktop.
Save thethiny/d0ed383a2d88912effd93fd1a668335d to your computer and use it in GitHub Desktop.
x64 C++ Assembly Hack to insert values into a register
// Remember to extern those in a .h file
namespace RegisterHacks {
MoveFromRCX* MoveToRAX;
MoveFromRCX* MoveToRBX;
MoveFromRCX* MoveToRCX;
MoveFromRCX* MoveToRDX;
MoveFromRCX* MoveToR8;
MoveFromRCX* MoveToR9;
MoveFromRCX* MoveToR10;
MoveFromRCX* MoveToR11;
MoveFromRCX* MoveToR12;
MoveFromRCX* MoveToR13;
MoveFromRCX* MoveToR14;
MoveFromRCX* MoveToR15;
void RegisterHacks::EnableRegisterHacks()
{
uint8_t* CallSpace = new uint8_t[4*12 + 1]; // 12 is registers count, 1 is ret
DWORD oldProtect;
VirtualProtect(CallSpace, 4*12 + 1, PAGE_EXECUTE_READWRITE, &oldProtect);
uint32_t ASMs[] = {
0xC3C88948, // RAX
0xC3CB8948,
0xC3C98948,
0xC3CA8948,
0xC3C88949, // R8
0xC3C98949,
0xC3CA8949,
0xC3CB8949,
0xC3CC8949,
0xC3CD8949,
0xC3CE8949,
0xC3CF8949,
};
MoveFromRCX** Funcs[] = {
&MoveToRAX,
&MoveToRBX,
&MoveToRCX,
&MoveToRDX,
&MoveToR8,
&MoveToR9,
&MoveToR10,
&MoveToR11,
&MoveToR12,
&MoveToR13,
&MoveToR14,
&MoveToR15,
};
for (uint8_t i = 0; i < 12; i++)
{
uint8_t* addr = CallSpace + (i * 4);
memcpy(CallSpace + (i * 4), ASMs + i, 4);
*Funcs[i] = (MoveFromRCX*)addr;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment