Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: Trianon   (21.01.2007 в 20:39)
Обычно дизассемблер пишут по тому же двупроходному принципу, что и ассемблер.
На первом проходе для каждой команды выполняется анализ кодового потока, выделение кода операции, режимов адресации, и определение явно заданных адресов и смещений. Адреса и смещения добавляются в таблицу символов. На втором проходе помимо этих этапов выполняется собственно генерация кода, т.е. построение мнемонического вида команды с использованием данных, накопленных в таблице символов.
Если данные и код в исходном потоке идут внавал (что для современного кода не специфично), а не по секциям, то добавляется еще и анализ перекрестных ссылок и устранение данных из потока кода.

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

В любом случае практически для любого реального процессора дизассемблер всяко простейшим не будет. А уж декомпилятор и подавно.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: