Есть ли надежда на декомпилятор, что бы преобразовать исполняемый на C / C + + код?
Это часто задаваемые вопросы ответ один отрывок из фрагментов Боб Стаут.
Не задержать дыхание. Подумайте об этом ... Для декомпилятор работать должным образом, либо 1) Каждый компилятор будет генерировать код практически одинаковые, даже при полной оптимизации включена, или 2) он должен признать индивидуального производства каждого компилятора код генератора.
Если в первом случае было бы правильно, не будет больше необходимости в компилятор показателей, поскольку каждый будет работать в том же. Для второго случая, чтобы быть правдой потребует в чрезвычайно сложных программ, которые меняются с каждым новым компилятором релизе.
Так что о конкретных decompilers для конкретных компиляторов - сказать декомпилятор предназначена для работы только на код, скажем, BC + + 4.5? Это становится нам право вернуться к вопросу оптимизации. Код написан на ясность и понятность зачастую неэффективны. Код написан для максимальной производительности (скорость или размер) зачастую загадочным (в лучшем случае!) Добавьте к этому тот факт, что все современные компиляторы имеют множество переключателей для оптимизации контроля, оптимизации методов и которые позволят избежать. Суть состоит в том, что для достаточно больших, сложных источник модуля, вы можете получить компилятор для получения целого ряда различных объектов модулей просто изменив настройки оптимизации выключатели, поэтому декомпилятор будет также должны быть deoptimizer, которая может автоматически, которые признают Оптимизация стратегии были включены во время компиляции.
Давайте упрощать дальше и определить, что вы только хотите, чтобы поддержать одного конкретного компилятора и вы хотите декомпилировать к наиболее логичным исходный код, не пытаясь интерпретировать оптимизации. Что тогда? Хороший оптимизатор может и будет существенно переработать внутрикорпусные кода, так что вы получаете от вашей декомпилятор будет не только загадочным, но во многих случаях, изрешеченные Гото заявлений и других нет-нет хорошей практики кодирования. На данный момент, у вас есть decompiled источник, но что хорошего это?
Также обратите внимание, тщательно мою ссылку на источник модулей. Одной из характерных черт C состоит в том, что он становится нечитаемым, если в основном взломаны легко обновлять систему источник модули (. C-файлы). Как будет декомпилятор дело с этим? Он может либо пытаться декомпилировать всю программу в некоторые основные мамонта () функция, потеряв все модульность, или она может попытаться поставить каждому призвал функции в свои собственные файлы. Первый путь приведет к хаосу непригодным, а второй будет идти с проблемами, когда угол падения исходного файлов с несколькими функциями, используя статические данные и / или одну или несколько функций призыв одного или нескольких статических функций. А декомпилятор может делать статические данные и / или глобальных функций, но только на счет или удобочитаемости (который уже будет неприемлемо).
Наконец, следует помнить о том, что коммерческое применение часто код наиболее трудным или времени критически важных функций в ассемблере, которая может оказаться практически невозможным декомпилировать в C эквивалента.
Как я уже сказал, не следует задержать дыхание. Поскольку технология улучшает где decompilers может стать более реальным, оптимизаторы и языков (C + +, например, было бы значительно сложнее, языка, чем декомпилировать C) также сговор с целью сделать их менее вероятными.
За годы Unix заявок были распространены в покрыто источник форме (машины, но не удобном для человека - все комментарии и пробелы удалены, все имена переменных в форме OOIIOIOI и т.д.), который был вполне адекватным средством защиты авторских прав. Очень маловероятно, что декомпилятор выходе бы даже быть читаемым как покрыто источник.
Обновление: декомпилятор технология все еще остается очень трудным, но были достигнуты значительные успехи, поскольку это было написано.
Читать Что такое декомпилятор? За обновленную информацию о декомпилятор проектов.
|
Закладка Есть ли надежда на декомпилятор, что бы преобразовать исполняемый на C / C + + код?
Последние сообщения блога
- SourceForge против Freshmeat

