Existe-t-il le moindre espoir d'un décompilateur qui convertit un programme exécutable en C / C + + code?

FAQ Cette réponse est un extrait de Snippets par Bob Stout.

Ne retenez pas votre souffle. Think about it ... Pour un décompilateur pour fonctionner correctement, soit 1) chaque compilateur aurait sensiblement identiques pour générer du code, même avec plein d'optimisation activé, ou 2) il aurait à reconnaître les résultats individuels de chaque compilateur du générateur de code.

Si le premier cas, devaient être correct, il n'y aurait plus besoin de repères car chaque compilateur on aurait le même travail. Pour le deuxième cas, pour être vrai, il faudrait au programme extrêmement complexe qui a dû changer à chaque nouveau compilateur libération.

Alors, que sur des decompilers pour des compilateurs - dire decompiler conçu pour que les travaux sur le code généré par, disons, BC + + 4.5? Cela nous droit à l'optimisation question. Code écrit pour la clarté et l'intelligibilité est souvent inefficace. Code écrit pour un maximum de performances (vitesse ou la taille) est souvent cryptiques (au mieux!) Ajouter à cela le fait que tous les compilateurs modernes ont une multitude de commutateurs à l'optimisation des techniques d'optimisation qui contrôle afin de permettre et qui à éviter. L'essentiel est que, pour un assez grand, complexe de module, vous pouvez obtenir le compilateur pour produire un certain nombre de modules en changeant simplement votre optimisation interrupteurs, de sorte que votre decompiler devra aussi être un deoptimizer qui peut automatiquement reconnaître les stratégies d'optimisation ont été activés au moment de la compilation.

Let's simplifier davantage et de préciser que vous ne voulez soutenir un compilateur spécifique et que vous voulez décompiler le code source de plus logique, sans essayer d'interpréter l'optimisation. Quoi donc? Un bon optimiseur peut réécrire de manière substantielle et les entrailles de votre code, de sorte que vous obtenez de votre decompiler sera, non seulement crypté, mais dans de nombreux cas, criblé de goto et autres non-non de la codification des bonnes pratiques. À ce stade, vous avez décompilé source, mais à quoi sert-il?

Il convient également de noter soigneusement ma référence à la source des modules. Une caractéristique de C, c'est qu'elle devient illisible à moins largement divisée en modules facilement maintenable source (. Fichiers C). Comment le decompiler face à cela? Elle peut soit essayer de décompiler le programme entier en une gigantesque fonction main (), la modularité de perdre tout, ou il pourrait essayer de placer chaque fonction appelée dans son propre fichier. La première façon serait inutilisable générer le chaos et la seconde se heurterait à des problèmes où la source d'origine Hade dossiers avec de multiples fonctions en utilisant des données statiques et / ou une ou plusieurs fonctions d'appel d'une ou de plusieurs fonctions. Un decompiler pourrait rendre les données statiques et / ou fonctions global, mais seulement à la charge ou de lisibilité (ce qui serait déjà inacceptable).

Enfin, n'oubliez pas que souvent, les applications commerciales les plus difficiles de code ou de temps les fonctions critiques en assembleur qui peut s'avérer presque impossible à décompiler en C équivalent.

Comme je l'ai dit, ne retenez pas votre souffle. A mesure que la technologie de mai où decompilers plus possible, optimiseurs et langages (C + +, par exemple, sera beaucoup plus difficile que la langue de décompiler C) conspirent également afin de les rendre moins probable.

Pendant des années, les applications Unix ont été distribués en source enveloppé forme (machine, mais pas lisible par l'homme - tous les commentaires et les espaces enlevés, tous les noms de variables dans la forme OOIIOIOI, etc), qui a été un moyen tout à fait adéquat de la protection des droits de l'auteur. Il est très peu probable que decompiler sortie serait même en lisible comme enveloppé source.

Mise à jour: Decompiler technologie est encore très difficile, mais des progrès significatifs ont été réalisés depuis, il a écrit.

Lire Qu'est-ce qu'un décompilateur? Pour des informations à jour sur les projets de decompiler.



Top 5 Free Networking Tools

Bookmark Existe-t-il le moindre espoir d'un décompilateur qui convertit un programme exécutable en C / C + + code?

Latest Blog Posts


Anglais Anglais Allemand Allemand Espagnol Espagnol Français Français Italien Italien Portugais Portugais Russe Russe Néerlandais Néerlandais
Grec Grec Hindi Hindi Japonais Japonais Coréen Coréen Chinois Chinois Chinois (simplifié) Chinois (simplifié) Arabe Arabe

Copyright 2009 Tech-FAQ. Tous droits réservés. Politique de confidentialité.