Изменение инструкций ассемблера
-
В этой статье описывается процесс изменения инструкций автоассемблера на другие
В статье использованы инструкции найденные в предыдущей статье:
Загрузите сохранённую таблицу Cheat Engine и подключите его к игре. Если инструкции в вашей игре статичные и не изменились, то вам не нужно искать их снова. Откройте code list и проверьте инструкции, заменив их нопами и восстановив.
Для того что бы изменять инструкции, нужно открыть их в окне отладчика, сделать это можно через контекстное меню, или дважды кликнув по ним:После этого появится окно отладчика с подробностями:
Вы можете заметить что сверху и слева в этой игре Cheat Engine распознал адрес функции и смещение до текущей инструкции от начала функции. Если вы хотите сохранить этот адрес для дальнейшего использования, нажмите на нужную инструкцию второй кнопкой мыши для вызова контекстного меню и выберите там:
После этого в буфере обмена окажется
Terraria.Player::Hurt+1201
, вы можете записать это в удобное место и в дальнейшем перейти на этот адрес в окне отладчика нажавCtrl+G
, или через контекстное меню.Для изменения инструкции дважды кликните на неё, откроется окно редактирования:
Если вы читали статью о командах ассемблера, то скорее всего понимаете что делает эта инструкция, она вычитает из значения здоровья персонажа число находящееся в регистре eax, то есть в eax находится урон нанесённый персонажу.
Если вы измените sub на add, тогда персонаж будет лечиться вместо получения урона, для наглядности попробуйте изменить её на mov, тогда персонаж будет получать здоровье равное значению полученного урона:Перейдите в игру и посмотрите на результат:
Получив 1 урона, персонаж получил 1 здоровье:
Восстановите оригинальную инструкцию заменив mov на sub.
Таким образом вы можете изменять одну линию в коде, если создаваемый вами код больше чем оригинальная инструкция, он займёт место следующей и Cheat Engine спросит, заменить ли оставшуюся часть от инструкции nop, если вы не замените, то скорее всего получите ошибку игры, из за неправильных инструкций. Если ваш код меньше - тогда выбирайте замену нопами, если вы восстанавливаете оригинальную инструкцию из меньшей и дальше уже есть нопы, отказывайтесь от замены нопами, что бы код восстановился полностью.