Здравствуйте.
Как правильно находить где код а где данные?
Как пользоваться утилитой snaptrace?
Здравствуйте.
Как правильно находить где код а где данные?
Как пользоваться утилитой snaptrace?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Аналогичная ранее созданная тема https://zx-pk.ru/threads/31179-kak-p...cheniya-).html
лучше туда и писать
В старые добрые времена, когда мне приходилось часто это делать, и из инструментов был монитор, срабатывающий по кнопке NMI, я поступал так:
1) Запускал программу, нажимал во время ее работы NMI.
2) Если меня интересовала прерванная часть программы (например, "переход между экранами" в игре Batman The Movie) - то я смотрел сразу дизассемблером в точку, где произошло NMI. Там находился прерванный код. Пробуя дизассмблировать выше точки прерывания, иногда удавалось (по интуиции) найти, откуда начинается интересующая подпрограмма. Можно было еще посмотреть в стек адресов возврата, откуда она была вызвана. Посмотреть туда - и становится видно, по какому адресу ее вызвали.
3) Если посмотреть дизассемблером в произвольное место памяти - то обычно сразу видно, код там лежит или данные. Если результаты дизассемблирования более-менее осмыслены - то, скорее всего, код. В противном случае - данные. Конечно, бывают трудные случаи, когда первичный осмотр дает неверный результат. Но это встречается редко.
4) При дизассемблировании всей программы, например с помощью IDA, ключевой момент - это знание точки входа, откуда запускается программа. IDA сама прогоняет код с этого места и размечает те части памяти, которые исполнялись, кодом, а остальные - данными. Конечно, при этом исполнение программы не полное, и еще IDA не видит мест косвенных переходов, переходов по таблицам, самоизменяющегося кода и т.д. Поэтому многое приходится доразмечать вручную. Лучший помощник здесь - интуиция. Попробовал отметить кусок памяти кодом, если абракадабра получается - откатить и продолжать анализ программы.
Зачем IDA? Есть же мегарульный STS, в нём можно изучить, отладить и отреверсить 99% спектрумовского софта.
Heavy on the disasm
Eric and the disasm
Mask 3: Venom strikes disasm
Bard's disasm
А я предпочитаю IDA DOS версии (3.xx).
Как правильно - не знаю, могу сказать как это делаю сам. Сначала нужно выяснить, упакован файл или нет, если он упакован - нужно распаковать, как - ну это не здесь. Далее просмотр содержимого с ручкой и блокнотом. В комплект ZAsm'а входит оверлей "helpbeta", им можно посмотреть где данные, например шрифт, спрайты иногда и экран, где собственно код программы. Ну и потом ZX Turbo Disassembler Иноземцева с моими правками. И дальше все там. Здесь лучше почитать оригинальное руководство к программе от автора.
Все программы можно найти здесь же, каждую в соответствующей ветке. Но получение текстов это далеко не все, а в случае игр это только начало. Далее нужно пытаться понять, что выполняет та или иная подпрограмма, здесь конечно поможет STS.
Главный враг здесь спешка, мелкими шагами, подпрограмма за подпрограммой, процедура за процедурой и в какой то момент начинаешь понимать, как тут все устроено.
Barmaley_m (22.05.2023)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)