Конечно, это называется процесс:
Вы можете глянуть
эту статью.
Суть заключается в следующем , у нас есть функция, которая делает подмену на свою, это путем того что в память игры, где расположена функция разработчиков записываем, прыжок jmp с адресов на свою:
void injectFunction (DWORD address, DWORD function) {
DWORD _old;
VirtualProtect((LPVOID)address,4, PAGE_READWRITE, &_old);
BYTE * patch = (BYTE *)address;
*patch = 0xE9; // JMP
*(DWORD *)(patch+1) = (function-(address+5));
VirtualProtect((LPVOID)address,4, _old, &_old);
}
Для примера мы объявляем такую функцию:
void Update() {
//Тут наш любой код, который будет постоянно вызываться...
}
//Заменяем функцию на нашу
//по адресу 0x043E490, располагается свободная функция, которая в холостую вызываться в процессе, оно же как и от рисовка.
//С первым параметров все ясно, второй параметр это адрес уже нашей функции, в результате мы сделаем подмену.
injectFunction(0x043E490, (DWORD)Update);
Вот собственно и все, более подробно вы можете глянуть эти участки использую программу IDA pro, введя адрес используя кнопку G.