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

Изменить скорость передвижения персонажа (инструкция изм. координаты)


DarkPower2

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

Игра: Command and Conquer 3.

Указатель на координаты: найден. 

Там 3 адреса  на 1 координату которые зависят друг от друга...

В итоге я дошел до такой команды: movss [eax+0C],xmm1

В xmm1 и содержится координата. Полистав выше, в поисках кто и что пишет в xmm1, я нашел только: movss xmm1,[ebp-30]

Регистр ebp вроде бы негде не менялся, я взял регистр ebp, отнял от него 30 по хексу и добавил его в СЕ.

Получил в итоге статический адрес значение которого не совпадает с координатой (при попытки его заморозить игра вылетает, при просмотре что пишет туда игра зависает, так как много команд пишут туда...)

 

Помогите найти инструкцию изменения координаты, вот листинг от movss [eax+0C],xmm1 и выше...

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

 

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

  В 06.04.2016 в 20:23, DarkPower2 сказал:

Помогите найти инструкцию изменения координаты

Показать  

Скорее всего вот они все три координаты:

movss [eax+1C],xmm0
movss [eax+0C],xmm1
movss [eax+2C],xmm2

 

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

  В 06.04.2016 в 21:10, Garik66 сказал:

Скорее всего вот они все три координаты:

movss [eax+1C],xmm0
movss [eax+0C],xmm1
movss [eax+2C],xmm2

 

Показать  

Да, это они, но где они изменяются, это меня интересует. То есть где меняется xmm1 к примеру.

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

  В 06.04.2016 в 21:11, DarkPower2 сказал:

Да, это они, но где они изменяются, это меня интересует.

Показать  

Именно этими инструкциями и  меняются координаты, которые находятся в [eax+1C], [eax+0C] и [eax+2C]. А в xmm0 (и соответственно в других) лежит новое значение координат.

А что ты пишешь? Для чего искал координаты? Телепорт?

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

  В 06.04.2016 в 21:15, Garik66 сказал:

Именно этими инструкциями и  меняются координаты, которые находятся в [eax+1C], [eax+0C] и [eax+2C]. А в xmm0 (и соответственно в других) лежит новое значение координат.

А что ты пишешь? Для чего искал координаты? Телепорт?

Показать  

Да я понимаю... Вот я и хочу как раз узнать где меняются новые координаты... Хочу ускорить моего персонажа.

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

  В 06.04.2016 в 21:16, DarkPower2 сказал:

Хочу ускорить моего персонажа.

Показать  

Если в игре, есть замедители (например в воде ГГ идёт медленнее) или ускорители, которые ускоряют скорость, то можно поискать коэффициент.

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

movss xmm1,[ebp-30]
movss xmm0,[ebp-2C]

Потому что здесь идёт просто пересылка координат, но не их расчёт. Т.е. тебе нужно искать инструкция откуда в [ebp-30] и т.д. попадают значения, причём не по еbp, а по конкретному адресу, так как регистр может и поменяться.

Короче попробуй сделать "Анализ структуры" например из этой инструкции:

 

movss xmm0,[ebp-2C]

Скорее всего в ней и будет лежать коэффициент ускорения. 

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

  В 06.04.2016 в 21:28, Garik66 сказал:

Короче попробуй сделать "Анализ структуры" например из этой инструкции:

 

movss xmm0,[ebp-2C]

Скорее всего в ней и будет лежать коэффициент ускорения. 

Показать  

Спасибо, попробую. Я обновил пост из другой темы (про чтение из несуществующего адреса).

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

  В 06.04.2016 в 21:28, Garik66 сказал:

отому что здесь идёт просто пересылка координат, но не их расчёт. Т.е. тебе нужно искать инструкция откуда в [ebp-30] и т.д. попадают значения, причём не по еbp, а по конкретному адресу, так как регистр может и поменяться.

Показать  

Вот только, почему в xmm1 (то что сверху) не совпадают координатами xmm1 (то что снизу)?

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

  В 06.04.2016 в 21:39, DarkPower2 сказал:

Вот только, почему в xmm1 (то что сверху) не совпадают координатами xmm1 (то что снизу)?

Показать  

По выложенному тобой участку кода, это не понятно.

ЗЫ: Хотя может здесь происходит какое-то изменение:

lea edi,[ebx+000001B4]
lea esi,[ebp-20]
movsd 
movsd 
movsd 

Что такое - 386+ MOVSD Пересылка двойного слова из строки в строку
Команда аналогична командам МП 86 movsb и movsw, но позволяет скопировать двойное слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через регистры ES:EDI.

3 MOVSD = 3 координаты. Наверное здесь.

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

  В 06.04.2016 в 21:44, Garik66 сказал:

По выложенному тобой участку кода, это не понятно.

Показать  

Ну вот побольше сделал.

 

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

 

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

  В 06.04.2016 в 21:59, DarkPower2 сказал:

Ну вот побольше сделал.

Показать  

Прячь в спойлер, слишком большой код. На сегодня попрощаюсь - у меня уже 1.03 ночи.

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

  В 06.04.2016 в 21:44, Garik66 сказал:

 

lea edi,[ebx+000001B4]
lea esi,[ebp-20]
movsd 
movsd 
movsd 

позволяет скопировать двойное слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через регистры ES:EDI.

3 MOVSD = 3 координаты. Наверное здесь.

Показать  

Как то странно, 3 раза копирует одно и тоже в edi.

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

  В 07.04.2016 в 07:30, DarkPower2 сказал:

Как то странно, 3 раза копирует одно и тоже в edi.

Показать  

Не одно и тоже и не в одно и тоже место, а в edi и esi лежат указатели и запись происходит так:

lea edi,[ebx+000001B4]
lea esi,[ebp-20]
movsd 
// значение из [esi] переписывается в [edi]
movsd 
// значение из [esi+04] переписывается в [edi+04]
movsd 
// значение из [esi+08] переписывается в [edi+08]

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

 

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

  В 07.04.2016 в 08:04, DarkPower2 сказал:

Вот оно как, не понятное описанее было.

Показать  

Я только предполагаю что 

movsd 

работает именно так. Для того, чтобы убедиться в этом, нужно написать скрипт и проверить работу этого опкода. (Могу написать, представляю как это сделать, но времени нет).

  В 07.04.2016 в 08:04, DarkPower2 сказал:

Вот только они же не влияют на  xmm1, или же я ошибкюсь?

Показать  

Я тоже этого не знаю, но предполагаю, что влияет, это тоже нужно исследовать, посмотреть, что произойдёт с регистрами FPU при выполнении опкода  

movsd 

Как отслеживать регистры FPU немного есть на видео в этом сообщении

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

  В 07.04.2016 в 08:30, Garik66 сказал:

Я только предполагаю что 

Показать  

так и есть

  В 07.04.2016 в 08:30, Garik66 сказал:

Я тоже этого не знаю, но предполагаю, что влияет, это тоже нужно исследовать, посмотреть, что произойдёт с регистрами FPU при выполнении опкода  

Показать  

xmm это sse, не влияет

 

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

  В 07.04.2016 в 09:19, gmz сказал:

так и есть

Показать  

Да уже убедился - написал скрипт, проверил, что это так и записал видео.

Скрипт:

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

Видео (странно вроде уже обработано, наверное идёт какая-нибудь промодерация):

 

 

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

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

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

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