Автор Тема: Вопросы по замене ассемблерных инструкций в asi.  (Прочитано 12623 раз)

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #30 : Апрель 01, 2014, 07:42:00 pm »
Я имею ввиду строки команд, которые создает IDA PRO. Я смогу заменить например 1-байтовую команду 5-байтовой? Cоответственно вторая команда у меня начнется уже с 6-го байта, а не со 2-го как в оригинале, остальное подкорректирую нупами. Или нужно менять только один к одному 1 на 1, 5 на 5 и никакой сдвиг не допустим внутри законченного блока?

Вобщем мне нужно понять, эти варианты замены идентичны или один из них ошибочный?

Замена команд такой же длины

Код: ASM
  1.                                байты
  2.          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
  3. оригинал |___|_________|___|_________|_________|_|_____|___|_____|
  4. замена   |x x|_________|x x|_________|x x x x x|_|x x x|___|x x x|   // работает

Последовательная замена

Код: ASM
  1.                                байты
  2.          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
  3. оригинал |___|_________|___|_________|_________|_|_____|___|_____|
  4. замена   |_________|_________|_|___|x x x x x x x x x x x x x x x|   // не работает
« Последнее редактирование: Апрель 01, 2014, 08:29:27 pm от xanser »

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #31 : Апрель 01, 2014, 09:39:15 pm »
Один вопрос. Это все дело статичного патчинга или опять через плагин?

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #32 : Апрель 02, 2014, 05:14:47 am »
Через плагин, а есть разница? Так-то я пробовал оба способа, результат одинаковый

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #33 : Апрель 02, 2014, 06:26:53 am »
Тогда все просто:

выделаем строку выше

Код: C++
  1. char str[] = "тут пишем что угодно";

а далее получаем адрес str, и записываем заместо того.

.text:00601A57 68 F8 3E 78 00      push    userdir_path
F8 3E 78 00 - эти байты, просто патчим на свой адрес строки та что в памяти.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #34 : Апрель 02, 2014, 07:38:43 am »
Мы о разных вещах говорим, менять значения, менять адреса это действительно просто. Как правильно писать команды ассемблера в очищенном блоке. Туда можно писать произвольный асм-код подряд? потом сделать jmp куда нужно? У меня сложилось впечатление, что подряд нельзя, а только в определенные места с сохранением длины команд, несмотря на то, что весь блок уже очищен.

Наверное я не могу правильно объяснить, что мне нужно
« Последнее редактирование: Апрель 02, 2014, 07:59:48 am от xanser »

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #35 : Апрель 05, 2014, 11:41:44 pm »
xanser, это делается асм-вставкой.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #36 : Апрель 06, 2014, 12:37:59 am »
Цитировать
это делается асм-вставкой.
Ты имеешь введу ему, голый код юзать? Т.е __declspec(naked) ?

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Вопросы по замене ассемблерных инструкций в asi.
« Ответ #37 : Апрель 06, 2014, 12:52:02 am »
Зависит от того, что надо менять и где.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн graveman

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +3/-0
  • Its cool! Man
    • Просмотр профиля
Пытался поменять инструкцию ассемблера и даже просто заменить функцию. Обычно был вылет. Но несколько удивляло, что когда изменение прокатывало, измененная функция (в ней был вывод сообщения в лог) не вызывалась. Стал проверять значения ячеек, которые заменяю. Обнаружил, что вместо тех значений, которые должны быть судя по базе Alien'а, там смещенные на 0x20. То есть, чтобы поменять в exe значение ячейки, нужно к адресу в базе Alien прибавить 0x20. Может это уже известно, не знаю. Я только вчера обнаружил.
Вопрос еще такой. Инструкция call принимает разность между адресом функции, которая вызывается и адресом следующей за call инструкцией (где об этом почитать)?


Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Пытался поменять инструкцию ассемблера и даже просто заменить функцию. Обычно был вылет...
У меня пока все инструкции получилось поменять, но при условии, что длина байт в строке остается такой же (я этот вопрос так и не прояснил, иначе у меня вылет)

Цитировать
Стал проверять значения ячеек, которые заменяю. Обнаружил, что вместо тех значений, которые должны быть судя по базе Alien'а, там смещенные на 0x20

Очень похоже на версию exe 1.1, там многое сдвинуто на 0x20, база для 1.0.

Цитировать
Инструкция call принимает разность между адресом функции, которая вызывается и адресом следующей за call инструкцией...
Именно так, если функция впереди, но она может быть и до, тогда там обратное смещение.

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
xanser, можно заменять участки любой длины.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv