LINUX.ORG.RU

Хочу недодекокомпилятор в сишечку

 , , ,


2

1

В попытках поиска смысла жизни, захотелось перепройти/отреверсить все игры. Скажем, на входе у нас есть байткод от 6502/Z80 или чего-то такого. Сделать самодельный дизассемблер не представляет проблем, благо даташитов полно, а вот разбираться с джампами кто и куда - несколько сложно, хотелось бы какие-то конструкции вида if/while для удобочитаемости и более приятной медитации. Да, я в курсе, что в общем виде это не возможно, но у меня нету работы и я никому не нужен. В принципе это умеет ИДА и подобные штуки. Но подобные штуки не умеют в декомпиляцию 6502/Z80.

Можно было бы попробовать составить граф переходов, это относительно несложно, но что дальше? Была идея оттранслировать байткод в некий абстрактный код (хоть JVM) и поверх этого прицепить свой «абстрактный декомпилятор» (так как процессоры разные и может быть будут другие), но нехватает грамотности. Была идея прицепить сверху Процион, но у него и так порой рвет крышу от некорректных графов. Фернфловер, насколько мне известно, так и остался закрытым изделием, хотя именно эту задачу он решал.

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

Игры для 6502/Z80 писались изначально на ассемблере. Там структурным программированием и не пахнет. Там хак на хаке. Сомневаюсь, что результат декомпиляции (если она у тебя и получится) будет иметь хоть какой-либо смысл. Думаешь просто было на 4МГц гонять игры с 30-60FPS? Нужно в ассемблере колупаться, чтобы понять как код работает.

rupert ★★★★★
()
Ответ на: про PL/M от anonymous

журнал «Downgrade»

Целый журнал для ретрогиков!

rupert ★★★★★
()
Ответ на: комментарий от Deleted

Надо freeze'нуть/заморозить эти участки памяти для изменений.

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

ruzisufaka
() автор топика
Ответ на: комментарий от anonymous

знак поменять. пусть не снимает, а добавляет хелсу :-)

Для этого надо найти значение хелсы и тот код, который к ней обращается. В принципе, в конкретно этой игрушке это наверное сделать не так уж и сложно, в ней нету экстендеров, но я не знаю подходящих инструментов для поиска адреса. Можно было бы использовать что-то вроде Cheat Engine, но когда сношаешь игру через dosbox, то найденные адреса не имеют смысла. Кроме того, совсем не факт, что в след за снятием хелсы там нету особого бранча (а он там есть, ведь показывают ролик с прилетающим в лоб ножиком), так что даже после смены знака, игра может перейти в начало, пусть и с 200% хелсы.

ruzisufaka
() автор топика
Ответ на: комментарий от rupert

Нужно в ассемблере колупаться, чтобы понять как код работает.

Я это и собираюсь делать, только хочу сделать его чуток читаемее, чтобы медитировать было удобнее.

ruzisufaka
() автор топика
Ответ на: комментарий от ruzisufaka

Я не помню деталей, но помню что прошел несколько частей. И для этого сканеров хватило с лихвой.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.