Здравствуйте, я олдскульный ассемблерщик, и у меня всегда была мечта декомпилировать игру F-19 и что-то там поменять, доделать, прикрутить OpenGL, портировать на Linux. http://www.old-games.ru/game/screenshots/972.html http://www.old-games.ru/game/972.html Подскажите, пожалуйста, как проще это сделать. DOS 16-bit, сегменты, прерывания... 1) У меня есть IDA. 2) Главный файл я нашел, распаковал VGAME.exe 3) Допустим я получил нормальный asm исходник в IDA. Как мне его теперь скомпилировать? синтаксис у выхода IDA TASM и не могу подобрать ассемблер с таким синтаксисом TASM и TASMX 4.0 пишет "недостаточно памяти", т.к. файл большой. (Может TASM пропатчить надо?) Нашел траслятор TASM -> NASM, но там руками много надо доправлять. 4) Будет перекомпилированный файл уже половина дела Вижу еще один способ: нужно взять DOSBOX и модифицировать, чтобы он каждую исполненную инструкцию записывал в БД Также пробовал доводить до ума вот этот декомпилятор http://itee.uq.edu.au/~cristina/dcc.html (какая-то неподъемная задача) Как потом сделать исходник на asm портабельным? Написать макрос языка С эмулирующий каждую инструкцию? Да кстати нашел в сети C++ исходники Battle Of Britain 1 (Down Patrol, Air Power) Новый план: 1) Декомпиляция в IDA приведение в нормальный вид 2) Компиляция используя родной TASM возможно с разбиением исходника на части. Отладка, доведение до рабочего состояния DOS exe файла. 3) Портирование используя tasmrecover и SDL
А оно может DOS 16-bit? Borg 2.27: 148Kb, The latest version of my interactive disassembler, Borg. It is a disassembler for Win32 PE files, although other files will load up the support for other file types is not complete yet (most notably NE/LE/LX files are not properly supported). Suggestions and requests and ideas are welcome for future Borg development. IDA насколько я знаю лучший для этого дела. Ну есть еще Sourcer. Основной вопрос: чем скомпилировать вывод IDA или как его настроить?
А вот ИДА у меня не было поэтому не знаю, т.к досовские проги я не декомпилил, а виндовозные через онлидбг он меня устраивает и мне больше не надо... Ну если игра не очень большая то вручную...(по крайней мере я так и делаю. хоть и дольше но зато надёжно)
xor2003, а не пробовал воспользоваться тулзой Hex-Rays после иды которая из её листинга генерит рабочий С код? Его потом можно вылизать, скомпилировать и будет тебе щассье
В 90-х годах делал нечто подобное для Prince of Persia. Использовал SOURCER и MASM/LINK. Исходник компилировал по частям, причем сначала очень сурово чистил - вплоть до того, что писал на Yacc перекодировщик исходника.
И как оно в итоге? Заработало? Что-нибудь осталось? Мои результаты TASMX v4.1 компилирует успешно исходники только меньше 70КБ MASM v6.0 тоже большие не может
Оно даже запустилось и выдало заставку. Потом подвисло. Там дело было в том, что мой вариант получился другой длины, чем оригинал - почему-то оригинал содержал разные формы регистровых команд, и короткие и длинные. Наверное, писалось и на каком-то языке высокого уровня, и на ассемблере. Соответственно, кое-где поползли смещения и т.п. На этом я закончил, получив, тем не менее, массу удовольствия и опыт реверсинга. Ессно, ничего не осталось. А по частям? Разбить на блоки, содержащие законченные процедуры и не зыбыть вписать для линковки директивы extrn/public и всякие прочие group. У меня была хорошая книжка про MASM, в зеленой обложке, кажется вот эта: http://biblus.ru/Default.aspx?book=79p07b4e6. З.Ы. Мелкие утилтки от Димы Гуртяка, а еще Волков Командир, а еще всякие эмуляторы саундбластера и пр. декомпилились и повторно компилились на ура.
Да - точно, горы удовольствия. Оно всегда уползает - это надо лечить отладкой и исправить все "волшебные числа" на смещения/метки, и вообще разобраться в смысле цифр. На части разбирать что-то не охота ))) но возможно придется Точно, у меня был набор декомпилированных и переделанных программ, кусков кода (проигрыватель MOD файлов), классные шрифты, парковщик...) и я потом сделал из всего этого игру питон )))
Принципиально невозможно. Игра же все-таки под DOS со всеми вытекающими последствиями: 16-битный код, обращение к железу напрямую и т.д. Этот код не заработает под современными ОС. Собственно, остается следующий вариант. Игра - это что? Данные + игровой движок (логика работы с этими данными). Путь такой: 1. Reverse engineering формата данных. Вполне возможно, что это уже проделано кем-то до тебя и можно использовать существующие наработки. 2. Написание движка с нуля. Игра у тебя есть, в общих чертах логика тебе известна, а какие-то специфичные вещи вроде мат. формул и сложных алгоритмов получаешь из анализа дизассемблированного игрового кода.
Конвертер из асма в С: https://github.com/scummvm/scummvm/tree/master/devtools/tasmrecover Результат: https://github.com/scummvm/scummvm/blob/master/engines/dreamweb/dreamgen.cpp
похоже - то что нужно )) Т.е. план теперь такой: 1) Декомпиляция в IDA приведение в нормальный вид 2) Компиляция используя родной TASM возможно с разбиением исходника на части. Отладка, доведение до рабочего состояния DOS exe файла. 3) Портирование используя tasmrecover и SDL
Реализация: https://github.com/xor2003/masm2c https://github.com/xor2003/libdosbox https://www.linux.org.ru/news/development/16888444 P.S. Интересно, а чего нибудь более автоматизированного с меньшим числом телодвижений нет?
После этого можно дальше не читать. Есть. Поскольку вся эта порнография - написанный на цэ интерпретатор х86 инструкций, прямой его конкурент dosbox, который сам не делает ненужных телодвижений и от пользователя этого не требует.