Un décompilateur est un compilateur fonctionnant à l'envers. Il analyse (parse) le binaire, dans un premier temps. Il doit également transformer les instructions de saut conditionnel en éléments de programmation structurée switch, while et for. La dernière étape consiste à écrire les fichiers de source.
Le code est toutefois généralement peu lisible, car il ne suit plus les règles appliquées en développement logiciel, les commentaires d'origine sont en particulier manquants.