|
|
|
| Про то, какие функции они выполняют, я знаю, но не имею примеров этих программ.
И расскажите, как написать свой простейший дессамблер. | |
|
|
|
|
|
|
|
для: pini-pini
(21.01.2007 в 20:19)
| | Обычно дизассемблер пишут по тому же двупроходному принципу, что и ассемблер.
На первом проходе для каждой команды выполняется анализ кодового потока, выделение кода операции, режимов адресации, и определение явно заданных адресов и смещений. Адреса и смещения добавляются в таблицу символов. На втором проходе помимо этих этапов выполняется собственно генерация кода, т.е. построение мнемонического вида команды с использованием данных, накопленных в таблице символов.
Если данные и код в исходном потоке идут внавал (что для современного кода не специфично), а не по секциям, то добавляется еще и анализ перекрестных ссылок и устранение данных из потока кода.
Декомпиляторы пишут обычно не с машинного кода а с промежуточных байт-кодовых языков.
В принципе, суть та же. Разве что вложенные структуры кода оформляются составными операторами, а не командами условнго.безусловного переходов....
В любом случае практически для любого реального процессора дизассемблер всяко простейшим не будет. А уж декомпилятор и подавно. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2007 в 20:39)
| | Спасибо.
Да, приведите пример программы-дизассемблера и декомпилятора | |
|
|
|
|
|
|
|
для: pini-pini
(21.01.2007 в 20:57)
| | Наиболее известным дизассемблером считается IDA Pro. | |
|
|
|
|
|
|
|
для: cheops
(21.01.2007 в 21:47)
| | Точно.
Сей монументальный труд Ильфака Гильфанова не просто дизассемблер, а интегрированная среда с возможностью как пакетной обработки так и диалоговой разметки кода/данных . | |
|
|
|
|
|
|
|
для: pini-pini
(21.01.2007 в 20:19)
| | >И расскажите, как написать свой простейший дессамблер.
Для начала следует очень хорошо знать ассемблер желательно нескольких процессоров, а за одно и архитектуру процессоров. Кроме того, потребуются серьёзные знания по внутреннему устройству исполняемых файлов, а также тому, как наиболее известные компиляторы их предпочитают формировать. Это за собой влечёт архитектуру операционных систем. | |
|
|
|