Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему невозможно декомпилировать машинный язык обратно в исходный код который содержался в файле до компиляции?

ФермаКактусов Высший разум (184068), закрыт 1 месяц назад
Лучший ответ
G Мыслитель (5854) 1 месяц назад
Потому что в машинном языке нет таких абстракций, какие есть в нашем. Вот его и восстанавливают до его машинных примитивов декомпиляцией/дизассемблированием.
Весь так называемый "синтаксический сахар" исчезает.
К тому же есть необратимость у некоторых процессов.
10 + 2 = 12. А попробуй потом угадать, из чего было 12 получено.
Остальные ответы
Иванов Мудрец (11134) 1 месяц назад
Потому что фарш невозможно провернуть назад и мясо из котлет не восстановишь
ФермаКактусовВысший разум (184068) 1 месяц назад
почему тогда асм инструкции можно
обратно?
ФермаКактусов, нельзя даже инструкции. Потому что если взять какую-нибудь середину бинарного файла и случайный байт оттуда - то в общем случае невозможно без полного анализа сказать, начало это машинной инструкции, середина ли многобайтовой инструкции, просто данные или какой-нибудь мусор, оставшийся из-за выравнивания. Чтобы определить, что какой-то байт исполняемого файла является именно инструкцией и именно ее началом - нужно пройти весь путь от точки старта до этого байта по всем путям, либо найти ссылки на блок с этим байтом и показать, что данный байт где-то читается как данные, т.е. провести анализ, выполнив, де-факто код на виртуальной машине (и не по одной ветке в каждом ветвлении, а по всем)
ПапаВысший разум (123701) 1 месяц назад
Хотел то же самое написать, но уже есть... :-/
Похожие вопросы