thumb|Exemple d'écran d'un décompilateur Java Un décompilateur est un outil servant à reconstituer, partiellement ou totalement, le code source d’un logiciel à partir d’un programme exécutable alors dans un format binaire. La décompilation est une technique de rétro-ingénierie ou d'ingénierie inverse. Elle peut servir au portage et à l'adaptation d'une application dont le code source n'est pas disponible, à la réalisation de l'interopérabilité, à la traduction, à l'analyse et la vérification du fonctionnement d'un programme, et encore au débogage du programme. Le principe du décompilateur est donc d'étudier ou tester le fonctionnement de ce logiciel afin de déterminer les idées et principes qui sont à la base de n'importe quel élément du logiciel lorsqu'on effectue toute opération de chargement, d'affichage, d'exécution, de transmission ou de stockage du logiciel. Les logiciels dont le code source est disponible ne nécessitent pas l'utilisation d'un décompilateur. La décompilation est un problème difficile, et d'un strict point de vue théorique, impossible. La décompilation correspond à la fonction réciproque de la fonction de compilation (généralement) d'un langage de haut niveau vers un langage machine. Le problème de la décompilation est de pouvoir associer un code machine à une forme sémantiquement équivalente dans un langage de haut niveau. L'impossibilité mathématique du problème dépend du langage choisi. Dans le langage assembleur des machines x86, on dispose d'une instruction permettant de décider si un dépassement de tampon s'est produit. En langage C dans lequel on a retiré les appels assembleur, il est impossible d'avoir une instruction équivalente. Il faudrait alors écrire un code spécifique mais cela revient alors à changer le fonctionnement du programme. Pour la plupart des langages de programmation, il est cependant possible de retrouver un certain nombre d'informations sur le code source initial à partir du code compilé. La décompilation est un outil assisté d'aide à la rétro-ingénierie.
Martin Odersky, Olivier Eric Paul Blanvillain
Martin Odersky, Olivier Eric Paul Blanvillain, Jonathan Immanuel Brachthäuser
Blagovesta Hristova Kostova, Wei Dai