The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз эмулятора DOSBox Staging 0.81, opennews (??), 15-Фев-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


36. "Релиз эмулятора DOSBox Staging 0.81"  +/
Сообщение от Xor2003 (?), 15-Фев-24, 13:25 
А вот и нет: Я использую эмулятор чтобы конвертировать бинарные коды в c++. Смотри переделанный эмулятор libdosbox
Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

44. "Релиз эмулятора DOSBox Staging 0.81"  +/
Сообщение от Аноним (59), 15-Фев-24, 13:55 
Оно, на лету работает?
Ответить | Правка | Наверх | Cообщить модератору

65. "Релиз эмулятора DOSBox Staging 0.81"  +1 +/
Сообщение от Аноним (31), 15-Фев-24, 16:21 
>конвертировать бинарные коды в c++

А теперь по-русски пожалуйста. Ты дизассемблированием занимаешься?

Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

109. "Релиз эмулятора DOSBox Staging 0.81"  +1 +/
Сообщение от n00by (ok), 16-Фев-24, 14:12 
>>конвертировать бинарные коды в c++
> А теперь по-русски пожалуйста. Ты дизассемблированием занимаешься?

Сначала переводит каждую машинную инструкцию с Си-код с аналогичным побочным эффектом и собирает результат это си-транслятором. Потом занимается эмуляцией и трассировкой со сверкой потоков данных (поскольку трансляция не гарантирует, что итог заработает). https://github.com/xor2003/libdosbox есть описание, осталось его перевести на понятный язык:

You just play the game and the code is checked at run-time for wrong translation.

Libdosbox is a library that executes each instruction twice:

    First, it emulates the instruction using the dosbox interpreter.
    Second, it emulates the instruction using a fake-asm C++ function that emulates this instruction (native code).
    Libdosbox compares the changes made by both (to registers, flags, memory) at the instruction level. This helps identify where IDA failed to disassemble.

The toolkit helps to create working fake-assembler C++ code with real variables.

(If you want real C code you will have to rewrite by hand or ...

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

Ответить | Правка | Наверх | Cообщить модератору

111. "Релиз эмулятора DOSBox Staging 0.81"  +/
Сообщение от Аноним (31), 16-Фев-24, 14:29 
>A reverse engineering toolkit that enables the precise conversion of 16-bit DOS binary code into working C++ code.

Звучит конечно фантастически. И что неужели нормальный читаемый код?

Ответить | Правка | Наверх | Cообщить модератору

149. "Релиз эмулятора DOSBox Staging 0.81"  +/
Сообщение от n00by (ok), 17-Фев-24, 08:20 
Читаемость кода - понятие весьма растяжимое. Реверсер читает и листинг дизассемблера, переписывая его в более понятную остальным форму. При этом возникает проблема: при переписывании всего 1 в 1 времени уходит столько, что игра обычно не стоит свеч. Классическое решение - типовые части пишутся с нуля (т.н. "clean room desing" - это в первую очередь ускорение процесса, а не обход лицензионных ограничений).

Бывает, что некоторым вообще не важно понимать, как оно работает, тогда "рипают" код, чистят листинг IDA Pro и приводят его к виду, собираемому ассемблером. Похоже, тут автор пошёл еще дальше и приводит к виду, собираемому компилятором [*]. Можно собрать под другой процессор, но читаемость от этого лучше не становится. Да ещё и теряется изоморфность, то есть результат может работать отлично от оригинала. Именно поэтому потом запускаются оба варианта и сравниваются.

Не стоит ругать автора за якобы мартышкин труд, это всё не просто даже в теории. Главный вопрос тут: как так получилось, что очередной самородок вместо создания чего-то полезного занят "Looking for job in EU, Ca".

[*]
start:
    R(STI); // 12 sti
    R(CLD); // 13 cld
    R(PUSH(seg_offset(_data))); // 14 push _data
    R(POP(ds)); // 15 pop ds
    R(ah = 9;); // 16 mov ah,9
    R(dx = offset(_data,_msg););    // 17 mov dx,offset _msg
    R(_INT(0x21));  // 18 int 21h
    R(ax = 0x4c00;);    // 20 mov ax,4c00h
    R(_INT(0x21));  // 21 int 21h

struct Memory m = {
{0}, // padding
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, // segment _data
{'H','e','l','l','o',' ','W','o','r','l','d','!','\n','\r','$'}, // _msg

Ответить | Правка | Наверх | Cообщить модератору

66. "Релиз эмулятора DOSBox Staging 0.81"  +/
Сообщение от Аноним (31), 15-Фев-24, 16:22 
Сколько движков старых игр уже написал путем дизассемблирования?
Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру