Можете ли вы помочь с этим кодом на языке ассемблера?

StackOverflow https://stackoverflow.com/questions/1500122

  •  19-09-2019
  •  | 
  •  

Вопрос

Я просматривал фрагмент кода компьютерной игры, который пытаюсь "улучшить".(ладно, может быть, я и отстой в этой игре, но я все еще хочу в нее поиграть).Не могли бы вы, пожалуйста, ознакомиться со следующим кодом:

fld dword ptr[ebp+00007B1C]
fsub dword ptr[esp+64]
fst dword ptr[ebp+00007B1C]
call 004A2E48

Этот код вызывается каждую секунду для таймера обратного отсчета уровня.Мне нужно задержаться на определенном уровне на несколько минут.Если я смогу изменить приведенный выше код так, чтобы значение, введенное в адрес [ebp + 00007B1C], было равно 0, то время ожидания игрового уровня всегда будет истекать, и это избавит меня от участия в этих сумасшедших мини-играх на выживание.

Я объясню, что я понял из этого кода. Не волнуйся, тебе не нужно углубляться в это. В первая строка мы получаем значение таймера.Например, если осталось 97 секунд, то именно здесь загружается это значение.
В вторая линия значение (1 секунда) вычитается из 97.
В третья линия 96 снова перемещается в память.И, наконец, у нас есть вызов функции, которая будет выполнять другую обработку в зависимости от оставшегося времени.

Теперь все, что мне нужно сделать, это каким-то образом исправить этот фрагмент кода, чтобы вводимое значение было равно 0 (на третьем шаге).
Не могли бы вы, пожалуйста, помочь мне с этим?

Это было полезно?

Решение

Заменить

fld dword ptr[ebp+00007B1C]
fsub dword ptr[esp+64]

с

fldz ; Push zero on to top of floating point stack
nop ; From the end of the fldz to the beginning of the store instruction

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

Еще один патч:
заменить

fld dword ptr[ebp+00007B1C]

с

fld dword ptr[esp+64]
NOP
NOP

Просто отмените вторую команду.То есть выясните, сколько байт занимает команда fsub, и перезапишите ее таким количеством байт-кодов без операций (0x90).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top