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

User Tag List

Страница 4 из 10 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 99

Тема: Как правильно дизассемблировать игры ZX Spectrum для изучения :)

  1. #31
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,575
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    404
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    zxlogin, hobeta - это устаревший тип файла, который на сегодняшний день практически не используется. Ему на смену пришли SCL и TRD. К тому же hobeta - это некий контейнер для одиночного файла с дискеты TR-DOS. Между тем TAP и TZX - это образы ленты. Они могут содержать, и почти всегда содержат, более одного блока (файла). Можно сделать, например, переходник с USB на RJ-45 (LAN). Но разве будет прок от такого переходника? Вот так же и с конвертером tap -> hobeta. Сделать можно, и я думаю, что даже такие конвертеры существуют, но большого прока от них не будет. Ну разве что в образе TAP/TZX будет только одна картинка или какой-то другой одинокий кодовый блок. Это я к тому, что прежде чем заниматься дизассемблированием, нужно получить понимание о форматах и прочих базовых вещах.
    С уважением, Станислав.

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32
    Member
    Регистрация
    07.03.2021
    Адрес
    г. Оренбург
    Сообщений
    33
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А как правильно дизассемблировать на ida pro?

  4. #33
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,575
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    404
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zxlogin Посмотреть сообщение
    А как правильно дизассемблировать на ida pro?
    Успешного опыта дизассемблирования в IDA у меня нет, хотя я и пробовал. Однако есть успешный опыт работы со skoolkit. Я не буду писать подробную инструкцию, а поясню лишь суть.

    Любая игра или программа на Спектруме, да и не только на нём, состоит не только из исполняемого кода, но также содержит текстовые сообщения, таблицы, графику и другие данные. Дизассемблеру неведомо где что находится и он пытается дизассеблировать всё подряд, включая текстовые сообщения и т.д. Поэтому, чтобы произошло корректное дизассемблирование поддающееся анализу, дизассемблеру необходимо указать где находится код, а где всё остальное. А как это сделать? А довольно просто! С помощь эмулятора, поддерживающего функцию профайлинга, например FUSE, мы запускаем исследуемую программу и начинаем активно её гонять, стараясь сделать так, чтобы весь код, хотя бы раз выполнился. То есть в случае игры, проходим её до конца, тратим жизни, получаем Game Over, зарабатываем бонусы и т.д. В этот момент эмулятор создаёт некий лог - профайл, в котором помечает все участки программы, которые выполнялись. Далее этот файл и снепшот программы, который мы гоняли, скармливаем пакету skoolkit и на выходе получаем исходный текст, который и начинаем анализировать. Профайл представляет из себя текстовый файл, который можно править руками, указывая вручную какой участок является программой, а какой данными. Очень важно скармливать пакету skoolkit не исходный блок, а именно снепшот работающей программы. Дело в том, что исходный загружаемый блок может быть изначально пожат, закодировал или как-то иначе изменён. Если пытаться дизассемблировать такой блок, то на выходе мы получим белиберду.
    С уважением, Станислав.

  5. Этот пользователь поблагодарил CityAceE за это полезное сообщение:

    Shofer (29.10.2022)

  6. #34
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zxlogin Посмотреть сообщение
    Здравствуйте у меня возникло несколько вопросов про дизассемблеры. Как правильно и на чем сделать hobeta для Spediz и чтобы он выводил не только код но и цифры и текст. Как на skoolkit правильно разметить блоки данных текста и кода. Как правильно дизассемблировать игру на ida pro что нужно делать для этого.

    - - - Добавлено - - -

    И ещё hobeta надо сделать из файла tap tzx.
    хобетные файлы очень удобно доставать из образов trd и scl напрямую в Far Manager с соотв. плугинами (by HalfElf кажется)
    а из tap достается какой-то давней утилиткой с названием ZART
    в Spediz, в текстовичке к нему указано, что нажимать, чтобы дизасмило не только код
    (цифры надо жамкать, разъезжая по памяти )

  7. #35
    Member
    Регистрация
    07.03.2021
    Адрес
    г. Оренбург
    Сообщений
    33
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В скулките когда делаешь АСМ выводит предупреждения что warning no label for address x.

  8. #36
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,488
    Спасибо Благодарностей отдано 
    225
    Спасибо Благодарностей получено 
    150
    Поблагодарили
    116 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zxlogin Посмотреть сообщение
    Как на skoolkit правильно разметить блоки данных текста и кода.
    У скулкита хорошая документация, как раз для начального старта подробно расписано
    Если коротко, то можно так:

    1) Если игрушка не denied, берём rzx игры с https://www.rzxarchive.co.uk/
    2) Открываем файл в эмуле, умеющем проигрывать rzx, и писать карту памяти например SpecEmu
    3) Tools->Memory map->Clear (очищаем)
    4) Запускаем проигрывание rzx на максимальной скорости Z80->CPU speed->50MHz
    5) Ждём, пока будет проиграно до самого конца, возвращаем скорость к обычной
    6) В записях часто отсутствуют смерть и тыканье по главному меню игры, где выбор управления и прочее - проходим этот функционал ручками
    7) Сохраняем карту памяти Tools->Memory map->Save (файл вида хххххх.map)
    8) Сохраняем снапшот игры File->Save snapshot (скулкит умеет работать с Z80 и SNA, не помню чем именно, но сна глючил, поэтому использую Z80)
    9) Далее используем SkoolKit
    10)
    получаем контрольный файл с разметкой где что в памяти
    sna2ctl.py -h -m GAME.map GAME.z80 > GAME.ctl

    получаем скул файл
    sna2skool.py -H -c GAME.ctl GAME.z80 > GAME.skool

    конвертим во что-то асмоподобное
    skool2asm.py --lower --hex --create-labels GAME.skool > GAME.asm

    11) пробуем обернуть полученный дизасм для компиляции, как описано в доках

    сохраняем файлик game_new.asm с таким содержимым:
    device zxspectrum48
    include game.asm
    savebin "game_new.bin",ORG,LENGTH
    или для тестовых экспериментов можно
    savesna "game_new.sna",GAME_START

    12) берём SjAsmPlus (достаточно только бинарника)
    13) компилим наш обёрнутый исходник
    sjasmplus.exe --syntax=abF --nologo --msg=err game_new.asm

    14) Если вываливаются ошибки, смотрим по месту где что нужно поправить
    15) Желательно во время экспериментов производить сверку с оригинальным файлом (который мы сохраняли в пункте 8), и по которому делался дизасм)
    Делать это можно при помощи утилиты, которая умеет побайтовый diff. Мне удобно использовать скрипт на питоне (к примеру, чтобы пропускать сверку экранной области)

    Цитата Сообщение от zxlogin Посмотреть сообщение
    Как правильно дизассемблировать игру на ida pro что нужно делать для этого.
    Для начала, нужно купить иду Либо взять старенькую версию, которую вроде как можно использовать бесплатно. Но придётся найти модуль для Z80.
    В ней по шагам примерно так:
    - новый проект
    - загрузить бинарный файл
    - если это снапшот, то не забыть указать количество байт, которые нужно отрезать в начале файла (для SNA это 49179 - 49152 = 27 байт)
    - выбрать адрес загрузки файла, процессор поменять на Z80, убрать лишние галочки про DLL и сегменты
    - когда файл будет загружен в память, перейти на адрес с которого начинается запуск игрушки, и начать дизассемблирование
    Ида сохраняет проект в файл своего формата, но в добавок можно периодически делать выгрузку в асм, который просто так в SjAsm не засунешь. Но можно конвертить до более-менее сносного состояния, вырезая лишнее.

    P.S.
    Касательно исходников: кому-то нравится один монолитный файл, я в процессе обработки разбиваю на большое количество мелких, по процедурам, типа такого:



    Основной файл в итоге состоит из пачки инклудов:

    INCLUDE "code/_8021-8087___prepare_static_creature.a80"
    INCLUDE "code/_8088-80BA___work_with_room.a80"
    INCLUDE "code/_80BB-8141___draw_console.a80"
    INCLUDE "code/_8142-8150___init_axil.a80"
    INCLUDE "code/_8151-8184___scroll_axil_attributes.a80"
    INCLUDE "code/_8185-81EF___axil_attr_roller.a80"
    INCLUDE "code/_81F0-8246___process_pouch.a80"
    INCLUDE "code/_8247-82B6___reset_obj_monst_axil.a80"
    INCLUDE "code/_82B7-82ED___game_round_init.a80"
    INCLUDE "code/_82EE-8359___process_exits.a80"
    INCLUDE "code/_835A-8376___console_beep.a80"
    INCLUDE "code/_8377-8383___focus_console.a80"
    INCLUDE "code/_8384-83D2___animate_axil.a80"
    INCLUDE "code/_83D3-841D___walk.a80"
    INCLUDE "code/_841E-8438___loop_axil_anim.a80"
    INCLUDE "code/_8439-8453___check_for_halt.a80"
    INCLUDE "data/anims/_8454-845A___ani_what_xxx.a80"
    INCLUDE "code/_845B-8494___say_what.a80"
    INCLUDE "code/_8495-84D5___test_exit.a80"
    Последний раз редактировалось Bedazzle; 29.09.2021 в 16:48.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  9. Этот пользователь поблагодарил Bedazzle за это полезное сообщение:

    CityAceE (29.09.2021)

  10. #37
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,580
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    278
    Спасибо Благодарностей получено 
    234
    Поблагодарили
    183 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    С помощь эмулятора, поддерживающего функцию профайлинга, например FUSE, мы запускаем исследуемую программу и начинаем активно её гонять, стараясь сделать так, чтобы весь код, хотя бы раз выполнился. То есть в случае игры, проходим её до конца, тратим жизни, получаем Game Over, зарабатываем бонусы и т.д.
    это ненадёжно и утомительно, давно вроде есть утилитка для быстрой прогонки снапа (без ввода-вывода, но по ВСЕМ возможным ветвлениям), только я не помню, как называется

    - - - Добавлено - - -

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

  11. #38
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,754
    Спасибо Благодарностей отдано 
    278
    Спасибо Благодарностей получено 
    287
    Поблагодарили
    215 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zxlogin Посмотреть сообщение
    А как правильно дизассемблировать на ida pro?
    загрузить 64к блок
    по возможности найти начало и нажать C
    С уважением,
    Jerri / Red Triangle.

  12. #39
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,488
    Спасибо Благодарностей отдано 
    225
    Спасибо Благодарностей получено 
    150
    Поблагодарили
    116 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а себе я недавно написал спецобработчик полных дизасмов, который помечает подозрительно бессмысленные участки, чтобы можно было быстро почистить ручками
    А поклянчить можно?

    - - - Добавлено - - -

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    вроде есть утилитка для быстрой прогонки снапа (без ввода-вывода, но по ВСЕМ возможным ветвлениям), только я не помню, как называется
    Это? https://github.com/simonowen/snaptrace

    Надо тестить. Вангую, что будет ряд случаев, когда либо большие блоки не будет определять (SMC, или переход по таблицам, или рассчитываемые джампы), или будет тупо лезть в данные, принимая за код.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  13. #40
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,580
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    278
    Спасибо Благодарностей получено 
    234
    Поблагодарили
    183 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    А поклянчить можно?
    вряд ли оно будет тебе полезно, понимает только текст в формате выхлопа zxspin
    правила весьма примитивные - помечает nop, rst, запись в пзу, фигню типа cp+popaf итд
    смотрит только две последних строки

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Это?
    9 лет... может, и оно... хотя мне казалось, код таки выполнялся, то есть эти джампы считались бы... но тут по описанию не похоже
    Прихожу без разрешения, сею смерть и разрушение...

Страница 4 из 10 ПерваяПервая 12345678 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Как правильно вывести AY, бипер и TAPE со Spectrum +2 Black (ISSUE 4) ?
    от ZX_NOVOSIB в разделе Зарубежные модели
    Ответов: 23
    Последнее: 24.06.2014, 08:05
  2. Как правильно очистить плату?
    от Rom111 в разделе Для начинающих
    Ответов: 13
    Последнее: 22.04.2014, 22:56
  3. Отправка видео-сканера для ZX для изучения!
    от ZXFanat в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 11.09.2011, 14:48

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •