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

Вопрос по работе с Stack View.


elrione

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

Допустим, мы работаем с GameMarker, где на одной инстуркций у нас может лежать чуть ли не вся игра, это нормально для движка. Допустим, мы хотим создавая скрипт ассемблера, создать еще и фильтр через cmp, поскольку нам нужно фильтровать поток проходящий через инструкцию и срабатывать только в нужным нам момент, иначе мы попросту запишем "что-то" не туда. Для этого у нас есть инструмент "Stack view", он нам покажет что было в стеке по условному "ebp", находим что в стеке в смещений "-38", были данные "00019A16", их и будем сравнивать. Вызовем любой не занятый регист, запишем в него ebp+48 и будем сравнивать, когда сравнение было удачным - выполнем нужные нам махинации с памятью. 
Собсвтенно как это выглядит: 

Спойлер
newmem:
  push edx
  mov edx, [ebp-38]
  pushf
  cmp edx,19A16
  je Crit
  jmp code

Crit:
  popf
  pop edx
  fstp st(0)
  fld qword ptr [CritValue]
  fstp qword ptr [esi]
  pop esi
  jmp return

CritValue:
  dq (double)205

code:
  popf
  pop edx
  movsd [esi],xmm0
  pop esi
  jmp return

 

Теперь к сути вопроса, как я могу найти все вариации в смещений "ebp-38"? Ну или узнать к чему они привязаны.

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

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

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

Посмотрел я её. Версия  39 GOG

Не чего там в стеке крутить не надо.

Просто трейсиш с условием и поднимаешься вверх.  Смотришь за регистрами.

В условие трейса ставишь то что выдаёт сработавшая инструкция на адресе.

На жизни и патроны получилось так сделать.

 

найти все вариации в смещений "ebp-38"?

ищи выше по коду что пишет в ebp-38

 

UPDATE: Способом который я описывал выше получилось только на оружие сделать.

Остальное пришлось сравнивать по стеку.

 

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

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

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

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