Перейти к содержанию

Darksiders 2 Как Сделать Правильное Вычитание


Рекомендуемые сообщения

Есть инструкция которая срабатывает на запись, я хочу что бы при каждом ударе отнималось 150. То есть как загрузить в FPU стек свое значение чтобы оно корректно отнималось? Сам скрипт 

[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(subst)label(exit)newmem:subst:dd (float)150originalcode:fsub dword ptr [subst] //так не работаетfstp dword ptr [eax] //инструкция срабатывающая на запись жизней противника push esi //оригинальный кодmov ecx,edi //оригинальный кодexit:jmp returnhere"Darksiders2.exe"+3B7857:jmp newmemreturnhere: [DISABLE]dealloc(newmem)"Darksiders2.exe"+3B7857:fstp dword ptr [eax]push esimov ecx,edi

Вот так отнимает единицу, а как сделать свое произвольное значение?

[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)abel(exit)newmem:originalcode:fstp ST(0) fld dword ptr [eax] fld1 fsubp fstp dword ptr [eax]push esimov ecx,ediexit:jmp returnhere"Darksiders2.exe"+3B7857:jmp newmemreturnhere: [DISABLE]dealloc(newmem)"Darksiders2.exe"+3B7857:fstp dword ptr [eax]push esimov ecx,edi

Если просто написать

fstp dword ptr [eax] 

sub dword ptr [eax] ,(float)150

то жизни противников превращаются в  2.54846917E-35.

Изменено пользователем lamalamaz
Ссылка на комментарий
Поделиться на другие сайты

Как минимум

dd (float)150

находится в исполняемом коде. Нужно вынести, например так

newmem:originalcode:fsub dword ptr [subst] fstp dword ptr [eax] push esimov ecx,ediexit:jmp returnheresubst:dd (float)150"Darksiders2.exe"+3B7857:jmp newmemreturnhere:
Ссылка на комментарий
Поделиться на другие сайты

  В 20.10.2014 в 18:56, A1t0r сказал:

 

Как минимум

dd (float)150

находится в исполняемом коде. Нужно вынести, например так

newmem:originalcode:fsub dword ptr [subst] fstp dword ptr [eax] push esimov ecx,ediexit:jmp returnheresubst:dd (float)150"Darksiders2.exe"+3B7857:jmp newmemreturnhere:

 

 

Спасибо, так вроде работает. Не знаете ли где можно почитать подробнее про операции с FPU регистрами и командами на примере игр. Просто все что находится в Гугле очень обширно и мало интересно. А вот конкретные примеры с играми очень пригодились бы для полного понимания как правильно использовать команды сопроцессора.

Ссылка на комментарий
Поделиться на другие сайты

>>Не знаете ли где можно почитать подробнее про операции с FPU регистрами и командами на примере игр
 
Я думаю, что нигде. Приложив усилий надо немного понять ассемблер по работе с fpu числами. Найти в Интернете справочник по FPU инструкциям, найти базовые объяснения как и что. Сложение, вычитание, умножение, деление, запись, чтение, выталкивание из стека fpu, добавление в стек fpu, преобразования из одного типа в другой, понимание смены состояния флагов при операциях с fpu (иногда флаги меняются, а игра это может неправильно понять). Вот и все.
 
Один из туторов по асму из справки по Cheat Engine с некоторыми инструкциями FPU (в разделе туторов по асму):

 

  Показать контент


 

Ссылка на комментарий
Поделиться на другие сайты

Спасибо MasterGH! Замечательный тутор, все понятно и доступно рассказано. Про справку в самом Cheat engine как раз и забыл....

Изменено пользователем lamalamaz
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.