Декомпиляторы не могут полностью воспроизвести исходный код по нескольким причинам:
- Оптимизации компилятора. 1 Они не всегда отражаются в сгенерированном файле. 1 Например, если тело функции встраивается в точку вызова, её автоматическое выделение затруднительно. 2
- Отображение «многие к одному». 2 При компиляции программы из языка высокого уровня в язык ассемблера концепции языка высокого уровня отображаются «многие к одному», и однозначное восстановление программы на языке высокого уровня становится невозможным. 2
- Оптимизирующие преобразования. 2 Они приводят к появлению в машинном коде конструкций, принципиально невозможных в языках высокого уровня. 2
Полностью автоматический декомпилятор реализовать принципиально невозможно, поэтому системы декомпиляции программ должны работать во взаимодействии с аналитиком, который управляет процессом декомпиляции методом проб и ошибок. 2