Игровые моды: когда я должен использовать хук для исправления памяти?

Я учился делать игровые моды, и я дошел до того, что успешно сделал внешние и внутренние трейнеры, и следующим шагом будет научиться использовать хуки.

До сих пор я использовал

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 и тому подобного.

Я собираюсь предположить, что это могут быть хуки, а если нет, то что они? В чем смысл разных хуков, например, зачем мне использовать батутный хук, чтобы получить значение адреса памяти? Это просто для целей обнаружения или они быстрее/эффективнее?

Я не слишком знаком с этим, но разве хуки не для функций? Не для переменных, которыми являются здоровье и должности.

HolyBlackCat 16.02.2023 13:55

Да, но то, как я видел использование хуков, заключается в том, что вы подключаетесь к функции, чтобы записать/сохранить переменную. Поправьте меня, если я ошибаюсь, но я не слишком уверен. Например, функция получения урона: здоровье -1, и вы можете изменить переменную здоровья внутри функции. Но на самом деле это мой вопрос, зачем перехватывать функцию для изменения здоровья, когда я могу писать в нее напрямую, как упоминалось выше.

emil9873 16.02.2023 14:25
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 и решите не выполнять тело метода, игрок фактически невосприимчив к урону.

Спасибо, это помогает мне понять причину перехвата и когда его использовать. Ценить это!

emil9873 16.02.2023 14:45

Другие вопросы по теме