PDA

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



stepmotor
22.12.2019, 19:45
Как правильно дизассемблировать игры ZX Spectrum для изучения на современных ПК из под WIN или Linux :)
Кто какие способы использует, очень интересен данный вопрос.

MetalliC
22.12.2019, 19:54
для статического анализа выбор удобных "способов" небольшой - IDA Pro или Ghidra

Lethargeek
22.12.2019, 20:07
меня сейчас в основном интересуют только графпроцедуры
ломаю в своём же эмуле, где наглядно видно, какая что рисует
форматированный дизасм выгоняю в txt из отладчика zxspin
структуру буферов и спрайты смотрю в xpeccy
там же иногда немножечко трассирую

nzeemin
22.12.2019, 20:25
Как правильно дизассемблировать игры ZX Spectrum для изучения на современных ПК из под WIN или Linux :)
Кто какие способы использует, очень интересен данный вопрос.

Highway Encounter разбирал с помощью Skoolkit https://skoolkit.ca/
Он хорош для случая когда хочется потом поделиться результатом - получается куча HTML на выходе.
Но у меня была цель портирования на другую платформу, для этого этот инструмент не очень хорош.

Bedazzle
23.12.2019, 13:49
1. Получаем карту использования памяти (обычно взяв и прогнав готовый rzx, где ещё нужно дополнительно поумирать по-всякому, потыкать в меню разные редефайны клавиш, и прочее)
2. Карту и снап (можно выгрузить из rzx, или вручную из оригинальной тапки чистый бинарник получить) кормим в SkoolKit, на выходе получаем достаточно приличный дизасм, где уже определены блоки кода/данных.
3. Далее этот файл можно править по-всякому и компилить.
4. Полученный в результате компиляции бинарник (или снап) сверяется с эталоном на предмет различий. Если найдены - то править косяк, и снова компилить.

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

ivagor
23.12.2019, 13:56
IDA, но прямого метода выгрузить оттуда текст для компиляции, да ещё и с нужными комментариями не нашёл.
Может я не совсем понял, имеется в виду какой-то альтернативный вариант вместо Alt-F10 (File->Produce file->Create ASM file)?

Bedazzle
23.12.2019, 14:09
Может я не совсем понял, имеется в виду какой-то альтернативный вариант вместо Alt-F10 (File->Produce file->Create ASM file)?

И как его тем же SjASM компилить?
Кроме этого, я делаю различные IFDEF и макросы к примеру.

Позволяет сильно упростить исходник, и сделать повторное использование блоков.
Типа как тут
https://github.com/Bedazzle/EATF/blob/master/code/82A4-84DD__main_menu.asm

ivagor
23.12.2019, 14:35
И как его тем же SjASM компилить?
Ну т.е. все же проблема не в том, что нет

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

Bedazzle
23.12.2019, 14:51
Ну т.е. все же проблема не в том, что нет
а в совместимости с конкретным ассемблером.

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

stepmotor
23.12.2019, 17:13
Интересно, где эмуляторы или реальный zx в файлах .tap .tzx и.т.д читают "точку входа" стартовый адрес для запуска игры. ?? Если в загрузчике нет ничего подобного RANDOMIZE USR ....

Titus
23.12.2019, 18:20
Интересно, где эмуляторы или реальный zx в файлах .tap .tzx и.т.д читают "точку входа" стартовый адрес для запуска игры. ?? Если в загрузчике нет ничего подобного RANDOMIZE USR ....
Вообще-то в начале каждого .tap'а находится бейсик-файл. А в бейсик-файле прописано, с какой строчки запускать бейсик.

Spectramine
23.12.2019, 18:44
Если в загрузчике нет ничего подобного RANDOMIZE USR ....
В загрузчике всегда есть что-то подобное RANDOMIZE USR, но оно может быть скрыто за управляющими кодами печати.

Lethargeek
23.12.2019, 19:24
В загрузчике всегда есть что-то подобное RANDOMIZE USR, но оно может быть скрыто за управляющими кодами печати.
может и не быть в принципе, если в стек перезапишется загрузкой адрес возврата

stepmotor
23.12.2019, 20:03
В Eric & the floaters какой стартовый адрес ?

Я попробовал дизассемблировать простенькую игру SIEGE .. одна из любимых в детстве :) Получилось с лету скомпилировать при помощи sjasm в .sna
Немного проанализировав исходник, добавил управление через kemston джойстик :)
Использовал дизассемблер yazd (https://github.com/toptensoftware/yazd/blob/master/yazd.md) запускать через .bat файл.

yazd.exe --addr:32722 --entry:37178 -xref 1111.z80 eric.asm
pause 0

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

Lethargeek
23.12.2019, 20:16
В Eric & the floaters какой стартовый адрес ?
не, так дело не пойдёт - нужно спрашивать всегда для конкретной версии

вообще же - в крайнем случае трассировкой всегда находится (для ускорения процесса - бряки на адреса из стека)

goodboy
23.12.2019, 20:49
В Eric & the floaters какой стартовый адрес ?
там старт сделан через переполнение стека.
данные загружаясь накладываются на его область и подменяют адрес возврата.

Bedazzle
23.12.2019, 20:52
В загрузчике всегда есть что-то подобное RANDOMIZE USR, но оно может быть скрыто за управляющими кодами печати.

Не всегда. :)
Вот пример
https://www.worldofspectrum.org/infoseekid.cgi?id=0001639

А, уже сказали, ага. :)

Shadow Maker
24.12.2019, 05:07
И как его тем же SjASM компилить?
Кроме этого, я делаю различные IFDEF и макросы к примеру.

Позволяет сильно упростить исходник, и сделать повторное использование блоков.
Типа как тут
https://github.com/Bedazzle/EATF/blob/master/code/82A4-84DD__main_menu.asm

В смысле? Берёшь и компилишь тот asm, который она тебе нагенерила. Только масс реплейс .ascii на db предварительно сделай. Макросы можно делать уже в конце, когда все работы по дизассму закончены и в иду больше не пойдёшь.

Поглядел твой исходник, ад какой-то :) У нас разное понимание слова "упростить".

Spectramine
24.12.2019, 14:06
может и не быть в принципе, если в стек перезапишется загрузкой адрес возврата
Да, забыл про этот способ. Некоторые игры вообще грузятся через LOAD "" CODE таким макаром. Ещё могут подменяться адреса процедур вывода каналов/потоков в системных переменных, и вывод "OK" приведет к старту программы.

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

Или адрес процедуры обработки ошибок в системных переменных.

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

Забыл, потому что привык к машкодовым загрузчикам после REM)

Bedazzle
24.12.2019, 18:17
В смысле? Берёшь и компилишь тот asm, который она тебе нагенерила. Только масс реплейс .ascii на db предварительно сделай. Макросы можно делать уже в конце, когда все работы по дизассму закончены и в иду больше не пойдёшь.

Ну вот они получаются не в конце, а там, где разобрал, и сразу впилил.


Поглядел твой исходник, ад какой-то :) У нас разное понимание слова "упростить".


Оно логично, все же люди разные. :)

MetalliC
25.12.2019, 17:48
. Так и пользуюсь. Если кто-то может показать как лучше - с удовольствием поглядел бы, и перенял.
приблизительно так
https://www.youtube.com/watch?v=IBUNEZLlQYk
вот так
https://www.youtube.com/watch?v=aNJtvdeVllA
или так
https://www.youtube.com/watch?v=p8K8B5_P7Wc

на выхлопе эти ребята получают компилябельный исходный код, и что самое главное, идентифицированные переменные и структуры игры.
в данных видео идёт работа с кодом 6502 или M68000, в случае Z80 процесс будет тот же только сбоку.

OrionExt
25.12.2019, 19:45
IDA – лучше нет (прибывал те что тут упоминали, и д.р.). Разобрали. Далее скриптами – самописными из коробки.

Тут проблема не оформить, а осознать что там происходит. Если старые игрушки, то все более менее понятно (условно).

А вот если какой хитрый код к примеру, HI-TECH Z80 C Compiler. То в начале все очень просто. Cишная структура компилятора восстанавливается на 99% (это где-то 50% кода), а далее начинается мрак (надо не одну умную книгу прочитать).

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

Да, скрипты очень полезны еще на пред разборке (при загрузке исходника). Как загрузишь, так и поплывешь (требуются некие знания о объекте интереса).

jerri
25.12.2019, 21:20
приблизительно так
https://www.youtube.com/watch?v=IBUNEZLlQYk
вот так
https://www.youtube.com/watch?v=aNJtvdeVllA
или так
https://www.youtube.com/watch?v=p8K8B5_P7Wc

на выхлопе эти ребята получают компилябельный исходный код, и что самое главное, идентифицированные переменные и структуры игры.
в данных видео идёт работа с кодом 6502 или M68000, в случае Z80 процесс будет тот же только сбоку.

а где вот это вот все взять?

OrionExt
25.12.2019, 22:08
а где вот это вот все взять?Не вопрос взять. Где партонуть голову, которая все разжует для 1000 игр ZX (что не игра то находка, то так. То так кодируют, тырят, конвертят с автомата, другой платформы – 90%).

Экранчик в 6кбайт все позволял.

MetalliC
25.12.2019, 22:32
а где вот это вот все взять?
что именно, результаты работы или инструменты ?
если первое - у обоих авторов роликов есть репозитории на жидхабе, там всё добро и выкладывается.
если второе - IDA от известного рассового татарина стоит слишком денег, потому придется пиратить, то ли дело халявная Ghidra от злобного американского АНБ, правда жителям РФ напрямую скачать не дают, придется искать зеркала или через прокси.

Shadow Maker
25.12.2019, 22:47
что именно, результаты работы или инструменты ?
если первое - у обоих авторов роликов есть репозитории на жидхабе, там всё добро и выкладывается.
если второе - IDA от известного рассового татарина стоит слишком денег, потому придется пиратить, то ли дело халявная Ghidra от злобного американского АНБ, правда жителям РФ напрямую скачать не дают, придется искать зеркала или через прокси.
Мог бы линки дать на репы тогда, их в описании нету. Попытки угадать вида https://github.com/eduardbeluha ни к чему не привели. Так что ждем от тебя ссылок все же.

У линуксоедов типа меня гидра прямо в репозитории :) yaourt ghidra и вот она уже стоит.
Но гидра мне показалась сильно неудобнее для именно асм-z80 реверсинга. Она хорошо под декомпилятор, там почти отлично.

MetalliC
25.12.2019, 22:58
Мог бы линки дать на репы тогда, их в описании нету. Попытки угадать вида https://github.com/eduardbeluha ни к чему не привели. Так что ждем от тебя ссылок все же.
блин, а в описании разве нету ? CaH4e3 - https://github.com/g0me3 , Мефисто - https://github.com/lab313ru

OrionExt
25.12.2019, 23:16
Ребятки вот новость=)

Да гидра, прикольное творение. Но я чую задней пяткой, оно не заработает. Как и любое творонение с накрученным счетчиком, как KiCad. Ждем коммерциализации.


По делу. Для ламеров ZX скрипты там написали? Есть там прикольные скрипты?

Shadow Maker
25.12.2019, 23:23
блин, а в описании разве нету ? CaH4e3 - https://github.com/g0me3 , Мефисто - https://github.com/lab313ru
Ну я не вижу... А этих товарище я знаю, однако вот те скрипты, которые в первом видео, я что-то не заметил. У мефисто я заметил только лоадеры для генса - но его видео я не смотрел целиком, может там и не требуются скрипты другие.

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

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

И ещё hobeta надо сделать из файла tap tzx.

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

zxlogin
29.09.2021, 10:16
А как правильно дизассемблировать на ida pro?

CityAceE
29.09.2021, 11:39
А как правильно дизассемблировать на ida pro?
Успешного опыта дизассемблирования в IDA у меня нет, хотя я и пробовал. Однако есть успешный опыт (https://zx-pk.ru/threads/31932-dizassemblirovanie-igry-batty.html) работы со skoolkit. Я не буду писать подробную инструкцию, а поясню лишь суть.

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

char
29.09.2021, 12:12
Здравствуйте у меня возникло несколько вопросов про дизассемблеры. Как правильно и на чем сделать hobeta для Spediz и чтобы он выводил не только код но и цифры и текст. Как на skoolkit правильно разметить блоки данных текста и кода. Как правильно дизассемблировать игру на ida pro что нужно делать для этого.

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

И ещё hobeta надо сделать из файла tap tzx.

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

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

Bedazzle
29.09.2021, 16:08
Как на skoolkit правильно разметить блоки данных текста и кода.

У скулкита хорошая документация, как раз для начального старта подробно расписано (https://skoolkit.ca/docs/skoolkit/diy.html)
Если коротко, то можно так:

1) Если игрушка не denied, берём rzx игры с https://www.rzxarchive.co.uk/
2) Открываем файл в эмуле, умеющем проигрывать rzx, и писать карту памяти например SpecEmu (https://keybase.pub/woodywoodster/specemu/specemu-3.1.b170921.zip)
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 (https://skoolkit.ca/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) пробуем обернуть полученный дизасм для компиляции, как описано в доках (https://skoolkit.ca/docs/skoolkit/assemblers.html)

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

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

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


Как правильно дизассемблировать игру на ida pro что нужно делать для этого.

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

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

https://i.imgur.com/q6CXyMD.png

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

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"

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

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

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

jerri
29.09.2021, 19:29
А как правильно дизассемблировать на ida pro?

загрузить 64к блок
по возможности найти начало и нажать C

Bedazzle
29.09.2021, 22:52
а себе я недавно написал спецобработчик полных дизасмов, который помечает подозрительно бессмысленные участки, чтобы можно было быстро почистить ручками

А поклянчить можно?

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


вроде есть утилитка для быстрой прогонки снапа (без ввода-вывода, но по ВСЕМ возможным ветвлениям), только я не помню, как называется :(

Это? https://github.com/simonowen/snaptrace

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

Lethargeek
29.09.2021, 23:27
А поклянчить можно?
вряд ли оно будет тебе полезно, понимает только текст в формате выхлопа zxspin
правила весьма примитивные - помечает nop, rst, запись в пзу, фигню типа cp+popaf итд
смотрит только две последних строки


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

zxlogin
30.09.2021, 13:41
А как правильно указать место начала игры? Я навёл стрелочку и нажал shift+c но ничего не происходит. Если просто нажать c то говорит переделать участок в код.

LW
30.09.2021, 14:18
А как правильно указать место начала игры?
Разобрать загрузчик игры, и посмотреть что и куда он грузит и куда передается управление после загрузки.

то говорит переделать участок в код
жмем ок и получаем дизасм

Eltaron
30.09.2021, 14:43
Если просто нажать c то говорит переделать участок в код.
Так это и надо. Надо посмотреть в загрузчике, RANDOMIZE USR сколько там написано. Перейти на этот адрес и "переделать участок в код". Он пройдет по всем явным переходами и довольно большую часть программы распознает.

Bedazzle
30.09.2021, 16:26
Так это и надо. Надо посмотреть в загрузчике, RANDOMIZE USR сколько там написано. Перейти на этот адрес и "переделать участок в код". Он пройдет по всем явным переходами и довольно большую часть программы распознает.

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

P.S.
Как альтернативу для IDA можно попробовать бесплатную Ghidra (https://ghidra-sre.org/).

Есть книга на русском:

https://dmkpress.com/images/cms/thumbs/a5b0aeaa3fa7d6e58d75710c18673bd7ec6d5f6d/978-5-97060-942-2_270_369_jpg__100.jpg

zxlogin
24.12.2021, 11:49
А как в spediz правильно находить где цифры, буквы и прочее.

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

И где нужно указать entry point в ida pro

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

Как в ассемблере находить где что?

zxlogin
24.12.2021, 15:51
Что такое db [ 7 ], 0 и на что исправить для sjasm. Почему не хватает меток в ida pro

jerri
24.12.2021, 16:03
Что такое db [ 7 ], 0 и на что исправить для sjasm. Почему не хватает меток в ida pro

вероятно аналог db 0,0,0,0,0,0,0

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


Как альтернативу для IDA можно попробовать бесплатную Ghidra (https://ghidra-sre.org/).



403 ERROR
The request could not be satisfied.
Request blocked. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.

Generated by cloudfront (CloudFront)
Request ID: Jz2GzowgQZOktDMQCqcpbR_FhBnlzdBQfayioKH4NaxxnkSAEH WoGQ==


Ы?

LW
24.12.2021, 16:04
Что такое db [ 7 ], 0
7 байт, каждый равен 0
аналог: db 0,0,0,0,0,0,0 либо ds 7,0


Почему не хватает меток в ida pro
В каком смысле не хватает?

krt17
24.12.2021, 16:43
В иде у меток настраивается максимальная длина в символах. Для любителей подлиннее всегда можно увеличить в настройках.

char
24.12.2021, 21:40
А как в spediz правильно находить где цифры, буквы и прочее.


копить опыт ))
начинать с 5-ки, ездить, тыкать в подозрительных местах 0 и назад удалять, если белиберда ;)

Bedazzle
25.12.2021, 01:19
Ы?

Сайт без проблем открывается. Может, провайдер лочит, или какой роскомнадзор постарался?

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


Как в ассемблере находить где что?

Сначала в эмуль загружаешь игру, которую хочешь исследовать.
Находишь где находятся шрифт, спрайты, тексты - с этого уже можно начать.
Далее в IDA/Ghidra размечаешь эти регионы, и потихоньку раскручиваешь что с чем связано.

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

Если звуки бипер/AY, по записи в нужные порты (смена бордюра сюда же).

В главном меню часто либо играет музыка, либо по кругу показывают таблицу рекордов или ещё что - тут можно тормознуть эмуль (мне нравится SpecEmu для этого), в менюшке очистить карту памяти, отжать паузу, и подождать некоторое время, после чего сохранить карту памяти в файл - это поможет понять, где находится код и данные для главного меню.

Если игра аркада (т.е. двигается на экране человечек/машинка/корабль), то можно пробовать раскручивать где находятся переменные, отвечающие за объект (главный герой или враги) - либо в анриле, либо делая несколько снапшотов всей памяти спека, и находя отличающиеся байты. Так легко найти где лежат жизни, энергия, текущие координаты, и прочее.

После game over идёт либо на главное меню, либо сначала на инициализацию переменных, и потом на меню. Тут тоже можно найти очень важные ячейки. Если игра содержит уровни-экраны, то при переходе на другой происходит чтение куска памяти, откуда отрисовываются объекты - проставив бессмертие (и используя сохранение карты памяти), можно пробежаться по разным экранам, и выяснить, где что лежит, и понемногу раскурить, каким именно образом хранится (могут быть варианты с разной степенью сложности упаковки для экономии места).

zxlogin
10.01.2022, 13:44
Почему то в ассемблерном коде который создаёт Ида не хватает меток. То есть в коде есть переход на метки а меток этих нету.

LW
10.01.2022, 13:58
Чудес не бывает. Если в команде перехода указана метка, то она в любом случае есть в листинге.
Сделайте двойной клик на метке в команде перехода и посмотрите на какой адрес перейдет курсор.

Bedazzle
10.01.2022, 15:12
Почему то в ассемблерном коде который создаёт Ида не хватает меток. То есть в коде есть переход на метки а меток этих нету.

Речь про экспорт в текстовик, или то, что на экране показывается?

В любом случае, метки можно вписывать вручную - хоть на блоки данных, хоть на отдельные ячейки, хоть на процедуры.
Потом по этим меткам можно прыгать щелчком мышью или вписав название в окошке goto (Ctrl+G вроде вызывыается, там же можно и просто адрес указать).

Shadow Maker
10.01.2022, 16:00
Ы?
Это декомпилер американской АНБ. Ты заходишь с русского IP. Действительно, и чего это америкосы не хотят делиться с русскими своими наработками... Короче скачай в другом месте или через прокси.

Bedazzle
10.01.2022, 18:19
Это декомпилер американской АНБ. Ты заходишь с русского IP. Действительно, и чего это америкосы не хотят делиться с русскими своими наработками... Короче скачай в другом месте или через прокси.

https://github.com/NationalSecurityAgency/ghidra/releases

Shadow Maker
11.01.2022, 08:28
Туториал что ли написать как гидрой пользоваться для дизассма спектрум-кода... Хотя кому это надо, опять же.

Bedazzle
11.01.2022, 11:14
Туториал что ли написать как гидрой пользоваться для дизассма спектрум-кода... Хотя кому это надо, опять же.

Так Спектрум никому не нужен, но почему-то народ его использует. Кто - набегами, кто - не переставал с 90х.
Туториал - дело полезное.

zxlogin
24.01.2022, 13:05
Напишите пожалуйста как пользоваться гидрой для дизассма кода спектрум

vlad-kras
07.03.2022, 18:16
Так Спектрум никому не нужен, но почему-то народ его использует. Кто - набегами, кто - не переставал с 90х.
Туториал - дело полезное.

Я тоже считаю туториал полезной штукой.

zxlogin
24.07.2022, 16:42
Спасибо. Не знаете ли вы про игру phantomas какие цифры что значат про экраны?

goodboy
25.07.2022, 12:41
https://pic.maxiol.com/images2/1658741573.3645247806.phantomas.gif

zxlogin
28.08.2022, 11:48
Спасибо. А в игре panama joe? Где цифры про предметы?

izzx
28.08.2022, 16:56
Советы в этой теме и для 128к подходят, или только для 48?
Эти IDA/Ghidra в банках памяти не запутаются?

zxlogin
08.05.2023, 14:15
Здравствуйте.
Как правильно находить где код а где данные?
Как пользоваться утилитой snaptrace?

Bedazzle
08.05.2023, 17:56
Здравствуйте.
Как правильно находить где код а где данные?
Как пользоваться утилитой snaptrace?

Если под виндой, то можно сделать как здесь (https://p2ptv.ru/w/2HQFTduFwwNHrzrVHn6XVe)

zxlogin
05.12.2023, 15:47
Дизассемблировал игру comeme через skoolkit. Нашел точку входа и сделал снапшот. В asm файле начинается с адреса 4000h. Но почему-то не запускается. В некоторых эмуляторах запускается играет только музыка.

CityAceE
06.12.2023, 11:52
Нашел точку входа и сделал снапшот.
А профайл в каком-нибудь эмуляторе (каком?) перед этим был сделан?


В asm файле начинается с адреса 4000h.
0x4000 - это адрес начала экранной области. До 0x5b00 можно смело обрезать.

zxlogin
06.12.2023, 14:33
Профайл был сделан в эмуляторе fuse.

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

Обрезал до адреса 5840h. Просит метку по этому адресу. Но почему то игра не запускается. В некоторых эмуляторах играет музыка и квадрат на экране.

Bedazzle
12.12.2023, 23:48
Обрезал до адреса 5840h. Просит метку по этому адресу. Но почему то игра не запускается.

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

Кстати, чистый снапшот почти к любой игрушке можно получить при помощи https://github.com/skoolkid/t2sfiles
И уже этот снап потрошить при помощи скулкита.

zxlogin
15.12.2023, 10:31
Архив и в нем два файла один обрезанный а другой не обрезанный.

zxlogin
25.12.2023, 16:09
Скачал disassembly monty mole на skoolkite. Получилось сделать html. Как сделать работающий ассемблерный код?

zxlogin
25.12.2023, 21:06
Как сравнивать снапшоты? Каким скриптом?

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

Как правильно дизассемблировать в skoolkit чтобы игры запускались?

CityAceE
26.12.2023, 08:28
Как сравнивать снапшоты? Каким скриптом?
Например, командой fc. Справка по команде (Windows):


fc /?



Как правильно дизассемблировать в skoolkit чтобы игры запускались?
Тут вся тема про это :(

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

А дальше уже руками...

zxlogin
27.12.2023, 11:14
Нашел различия в снапшотах. Как исправить в ассемблере. Как найти что исправить?

Bedazzle
27.12.2023, 22:02
Нашел различия в снапшотах. Как исправить в ассемблере. Как найти что исправить?

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

zxlogin
28.12.2023, 13:42
Нашел и исправил две ошибки. Но остались различия на расстоянии от 00000005 до 0000001c. Не могу найти их в эмуляторе. Снапшот ещё не запускается.

Bedazzle
28.12.2023, 15:36
Нашел и исправил две ошибки. Но остались различия на расстоянии от 00000005 до 0000001c. Не могу найти их в эмуляторе. Снапшот ещё не запускается.

По такому описанию вряд ли получится помочь.

zxlogin
28.12.2023, 17:58
Исправил программой biew. Снапшот запускается. Почитал про снапшоты. Это случайно не заголовок где что то хранится?

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

Скриншот окна где сравнение файлов.

CityAceE
28.12.2023, 19:25
Это случайно не заголовок где что то хранится?
Ну, конечно, это заголовок SNA!! Сами данные идут дальше.

zxlogin
29.12.2023, 08:20
А как сделать заголовок через ассемблер?

Bedazzle
30.12.2023, 15:32
А как сделать заголовок через ассемблер?

Мне кажется, есть некоторая путаница.
Давайте по шагам. Что вы хотите сделать?

CityAceE
30.12.2023, 16:18
А как сделать заголовок через ассемблер?
Если в качестве компилятора использовать SjASMPlus, то директива savesna сама сформирует нужный заголовок. Но перед этим необходимо указать директиву device. Вот здесь (https://youtu.be/rmewRsTr4tw) я, правда по другому поводу, наглядно показал, как это делается.

zxlogin
31.12.2023, 11:26
Заголовок у снапшота другой. Не как у снапшота с игрой. Как сделать такой же.

CityAceE
31.12.2023, 12:03
Есть описание заголовка. Там написано какой байт что хранит. И так можно понять, что там не так. Но если делать правильно, то нужно искать адрес запуска всей игры. В ассемблере указывать его в качестве запуска. И тогда вообще будет неважно какие остальные данные прописаны в заголовке - главное адрес запуска.

Bedazzle
31.12.2023, 14:07
И тогда вообще будет неважно какие остальные данные прописаны в заголовке

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

goodboy
31.12.2023, 15:35
встречаются и более замысловатые подвохи.
например где-то в дебрях загрузчика устанавливается седьмой бит регистра R,
а потом (например в середине игрового процесса) он проверяется.

AndyFox
15.01.2024, 01:10
Прочитал про Z80 to 8086 Translator на Old-DOS.
Интересно, возможно ли с помощью сабжа из исходников на ассемблере для ZX делать исходники на ассемблере для 8086?

Oleg N. Cher
15.01.2024, 02:28
Такой транслятор как бы уже давно был - небезызвестный Tramplin от С.Веремеенко. Но что-то целой кучи портов ZX-игр для PC не наблюдаем ;)

Он на макросах сделан.

80105
80106

zxlogin
16.02.2024, 14:42
Файл map из эмулятора specemu почему то не идёт процент загрузки когда вставляешь в skoolkit. И разметка не правильная.

Bedazzle
17.02.2024, 12:13
Файл map из эмулятора specemu почему то не идёт процент загрузки когда вставляешь в skoolkit. И разметка не правильная.

Очень интересно, только вот без деталей - совершенно непонятно.

zxlogin
17.02.2024, 14:26
Когда загружаешь карту памяти из эмулятора specemu в skoolkit не идёт процент загрузки файла. Разметка не правильная.

Bedazzle
17.02.2024, 18:45
Когда загружаешь карту памяти из эмулятора specemu в skoolkit не идёт процент загрузки файла. Разметка не правильная.

Какая версия скулкита? Размер карты памяти в байтах какой?
И не припомню, чтобы там шёл процент загрузки файла при дизассемблировании. :/

По шагам можно, что именно вы делаете?

zxlogin
18.02.2024, 12:11
Версия skoolkitа 9. Размер в байтах 65536. Когда загружаешь карту из эмулятора fuse идёт процент. А из эмулятора specemu не идёт.

Bedazzle
18.02.2024, 15:02
Версия skoolkitа 9. Размер в байтах 65536. Когда загружаешь карту из эмулятора fuse идёт процент. А из эмулятора specemu не идёт.

Как в скулкит загружаете? Что в командной строке передаётся?

zxlogin
18.02.2024, 16:56
sna2ctl.py -h -m game.map game.z80 > game.ctl Как было написано на форуме.

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

Можно ли сделать на skoolkit игру 128к?

Bedazzle
18.02.2024, 23:57
sna2ctl.py -h -m game.map game.z80 > game.ctl

Да, по идее, так и нужно. Но чтоб при этом бежали проценты - не видел. :\
Что за игра-то?


Можно ли сделать на skoolkit игру 128к?

В последнее время автор делает активные шаги в сторону поддержки 128К.
Но я пока не пробовал в таком виде разбирать.

zxlogin
19.02.2024, 10:51
Игра metalarmy.

zxlogin
19.02.2024, 16:47
В эмуляторе fuse при проигрывании rzx с сайта rzxarchive выходит ошибка.

zxlogin
19.05.2024, 09:44
Скажите пожалуйста как вы дизассемблируете на гидре. Я вставил снапшот игры в проект а гидра вывела вместо ассемблера знаки вопроса.

Shiny
19.05.2024, 09:57
IDA 5. Если поискать, то найдутся Free версии
https://archive.org/details/idafree

zxlogin
19.05.2024, 12:49
Поставил ida5 но там нет процессора z80.

Shiny
19.05.2024, 13:04
Может, плохо искал?

zxlogin
19.05.2024, 14:12
А какой файл вы скачивали?

Shiny
19.05.2024, 14:56
А какой файл вы скачивали?

просто сбросил бинарь на окно.

глянул - версия 5.5

А вообще есть ida3.7 для msdos, 4.1/4.7 точно с поддержкой z80.

Serg6845
19.05.2024, 16:03
Скажите пожалуйста как вы дизассемблируете на гидре. Я вставил снапшот игры в проект а гидра вывела вместо ассемблера знаки вопроса.

да вроде ничего такого... создать проект, импортировать файл, сказать что оно Z80 - и все вроде. хотя бывает что код не опознается - тогда выделить код и нажать D, оно его дизассемблирует.

Chwe
19.05.2024, 18:31
Кстати, ещё есть Spectrum Analyser (https://colourclash.co.uk/spectrum-analyser/), автор присутствует на SC и вполне адекватен.

Shiny
19.05.2024, 18:39
Кстати, ещё есть Spectrum Analyser (https://colourclash.co.uk/spectrum-analyser/), автор присутствует на SC и вполне адекватен.
64bit в топку

Bedazzle
20.05.2024, 14:27
Кстати, ещё есть Spectrum Analyser (https://colourclash.co.uk/spectrum-analyser/)

Уточним, что требует Win 10 и выше.

Chwe
20.05.2024, 19:59
Уточним, что требует Win 10 и выше.

Я признаюсь честно, в этих ваших виндах, ну, совсем ничего не понимаю. Но, сдаётся мне, что вот это


$ file bin/SpectrumAnalyser.exe
bin/SpectrumAnalyser.exe: PE32 executable (console) Intel 80386, for MS Windows


если и вдруг почему-то и не совсем то, что нужно, то как минимум максимально близко. Dependency Walker говорит, что "Subsystem ver" = 4.0.

Shiny
20.05.2024, 20:36
Я признаюсь честно, в этих ваших виндах, ну, совсем ничего не понимаю. Но, сдаётся мне, что вот это


$ file bin/SpectrumAnalyser.exe
bin/SpectrumAnalyser.exe: PE32 executable (console) Intel 80386, for MS Windows


если и вдруг почему-то и не совсем то, что нужно, то как минимум максимально близко. Dependency Walker говорит, что "Subsystem ver" = 4.0.

Плагин Total Commander говорит, что формат PE4. В 7ке 32бит не запустится, ругнется на несовместимость. Были б исподники, можно было б собрать совместными усилиями.

А теперь все ретро-тулзы собираются на 64бит. Нафига?

Chwe
20.05.2024, 20:57
Были б исподники, можно было б собрать совместными усилиями.

Ага, стойте. Кажется, я понял. Последняя ссылка на страничке: https://github.com/TheGoodDoktor/8BitAnalysers

Я это, на что file натравил, собирал для win32, уж версией венды не интересовался. Того, кому собирал, моя сборка полностью устроила. Было это ещё в том году, поэтому поделиться могу, но она древняя. Поновее не уверен, что соберу до выходных. Собирал под Linux обычным mingw64, без каких-либо заумных прыжков, я их просто не знаю :)

Вот моя сборка (https://mega.nz/file/xScmySZK#6qZSTLd4AzgtSk2tJk-a82p7Q29bqs7QC-nz9dCNuNg), я её пересобрал для надёжности. Но она древняя, пол года точно тому как.

Shiny
20.05.2024, 21:12
Спасибо, гляну

Bedazzle
23.05.2024, 00:33
В 7ке 32бит не запустится, ругнется на несовместимость.

У меня вин 7, на 64 бит ругается про ряд отсутствующих библиотек. Пытался подсовывать, потом плюнул, возни много, а толку - мало.

Shiny
08.06.2024, 12:32
На варезнике мелькнула Ghidra 11.1