Вот тут ещё интересный подход к "портированию" DOS игрушек -
https://github.com/xor2003/masm2c
https://github.com/xor2003/libdosbox
0iStalker
> Вот тут ещё интересный подход к "портированию" DOS игрушек -
Цитата из треда на Лор от автора проекта по разъяснению механик представленого ПО.
Сейчас для первичного анализа используется IDA. В будущем вероятно перееду на Ghidra. IDA находит переменные и дает им названия. Эмулятор libdosbox собирает потерянную информацию в процессе выполнения: значения сегментных регистров, размеры и расположение переменных, самомодифицирующийся код. А так же самое главное - эмулятор запускает каждую инструкцию под интерпретатором и сравнивает ее с С-шным кодом, чтобы обнаружить неточности трансляции. Это компенсирует кривизну того что выдает IDA и транслятор. Это основная фишка проекта, дает точность трансляции и за пару дней. А еще IDA не декомпилирует 16 битный код. Я сейчас планирую переделать транслятор чтобы он выдавал более высокоуровневый код. Например используя SMT. Можно странслированный код компилировать в 32/64 бита x86 либо .NET и потом декомпилировать, чтобы удалить лишний код (работу с флагами) и получить высокоуровневый код.
Так что мы получаем тоже самое что дает IDA + проверку исполнением. А еще сгенерированный код можно исполнять, отлаживать в gdb, вставлять трассировки, легко заменять код
IDA используется чтобы получить .lst файл
masm2c - транслятор из .lst в .cpp (транслировать 32битный код не проблема). Т.е. тулкит - что-то среднее между дизассемблером и декомпилятором.
libdosbox - эмулятор, пока не умеет проверять транслированный 32 битный код, если надо - присоединяйтесь и добавьте.
Зато под 32 бита много готовых декомпиляторов.
Классы и структуры - это мечта пока. Есть идеи как их связать? По идее поможет сбор run-time информации эмулятором…
IDA тупеет с каждым выпуском. В плане реверса старых DOS-игрушек. Платформы i8086 и i80386 выкорчёвывают на корню.
KPG
> Классы и структуры - это мечта пока. Есть идеи как их связать?
ChatGPT