Я учился делать игровые моды, и я дошел до того, что успешно сделал внешние и внутренние трейнеры, и следующим шагом будет научиться использовать хуки.
До сих пор я использовал
ReadProcessMemory / WriteProcessMemory
И внутренне писать на такие адреса
uintptr_t ammoAddr = mem::FindDMAAddy(moduleBase + 0x10F4F4, { 0x374, 0x14, 0x0 });
int* ammo = (int*)ammoAddr;
*ammo = 1337;
or
*(int*)mem::FindDMAAddy(moduleBase + 0x10F4F4, { 0x374, 0x14, 0x0 }) = 1337;
Я использовал их, чтобы просто получить здоровье и позиции объекта, поэтому просто использовал их значения. Стоит ли делать крючок для них? На данный момент я вижу цель только в подключении DirectX и тому подобного.
Я собираюсь предположить, что это могут быть хуки, а если нет, то что они? В чем смысл разных хуков, например, зачем мне использовать батутный хук, чтобы получить значение адреса памяти? Это просто для целей обнаружения или они быстрее/эффективнее?
Да, но то, как я видел использование хуков, заключается в том, что вы подключаетесь к функции, чтобы записать/сохранить переменную. Поправьте меня, если я ошибаюсь, но я не слишком уверен. Например, функция получения урона: здоровье -1, и вы можете изменить переменную здоровья внутри функции. Но на самом деле это мой вопрос, зачем перехватывать функцию для изменения здоровья, когда я могу писать в нее напрямую, как упоминалось выше.
Предположим, существует такой упрощенный игровой код:
void Player::takeDamage(int dmg) {
this->health -= dmg;
if (this->health <= 0)
youDied();
}
Постоянно писать «100» по адресу Player::health означает «гонку» кода игры, чтобы убедиться, что проверка никогда не сработает. Более того, компилятор может решить реструктурировать код следующим образом:
void Player::takeDamage(int dmg) {
int newHealth = this->health - dmg;
this->health = newHealth;
if (newHealth <= 0)
youDied();
}
В обоих случаях, как бы часто вы ни писали в Player::health, случай youDied все равно может сработать.
Напротив, если вы перехватите Player::takeDamage и решите не выполнять тело метода, игрок фактически невосприимчив к урону.
Спасибо, это помогает мне понять причину перехвата и когда его использовать. Ценить это!
Я не слишком знаком с этим, но разве хуки не для функций? Не для переменных, которыми являются здоровье и должности.