Декомпилятор

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Декомпиляция»)
Перейти к навигации Перейти к поиску

Декомпиля́тор— это программа, транслирующаяисполняемый модуль(полученный на выходекомпилятора) в эквивалентныйисходный коднаязыке программированиявысокого уровня.

Декомпиля́ция— процесс воссоздания исходного кода декомпилятором.

Декомпиляция, в частности, используется приобратной разработкепрограмм.

Удачность декомпиляции зависит от объема информации, представленной в декомпилируемом коде.Байт-код,используемый большинством виртуальных машин (таких какJava Virtual Machineили.NET FrameworkCommon Language Runtime) часто содержит обширные метаданные, делающие декомпиляцию вполне выполнимой, в то время какмашинный кодболее скуден и сложен в декомпиляции. В частности трудночитаемыми представляются вызовы подпрограмм или функций с косвенной адресацией вызовов (в терминах языков программирования высокого уровня — вызовы через указатели на функции/процедуры).

Если известно на каком языке была написана декомпилируемая программа, то в первую очередьдизассемблируютсяи анализируютсябиблиотеки времени исполнения(RTL — runtime library) компилятора с этого языка, так как в основном компиляция программы сводится к вызовам с различными параметрами процедур из этих библиотек. Кроме того, многие компиляторы позволяют увидеть, в какой ассемблерный код превращаются операторы программы после компиляции. Эти конструкции становятся шаблонами для декомпилятора, поэтому процесс декомпиляции в некотором смысле похож на распознавание в машинном коде конечного набора подобных шаблонов. Легче всего распознаются вызовы процедур и возвраты из них. Они служат границами для восстановления операторов процедуры.

Некоторые компиляторы и инструменты, используемые после компиляции, подвергают программный кодобфускациис целью затруднить декомпиляцию.

Декомпиляторы можно рассматривать как состоящие из ряда фаз, каждая из которых вносит свой вклад в определенные аспекты общего процесса декомпиляции.

Примеры декомпиляторов

[править|править код]
  • FernFlower
  • .NET Reflector,dotPeek— для декомпиляции сборок.NET
  • ILSpy
  • Delphi Decompiler
  • JAD— JAva Decompiler
  • В СССР декомпиляторы с языков PL/M-80 и Фортран-80 разрабатывались Н. А. Надольским в лаборатории Э. М. Пройдакова в ИПУ АН (1983—1984 гг).