Bonjours, une petite question idiote:
Est-ce que tous les langages sont dé compilable?
Je sais que pour beaucoup le sont (haut niveau), mais il y en a t'il quelque un qui ne le soient pas? Avec la programmation bas niveau?![]()
Bonjours, une petite question idiote:
Est-ce que tous les langages sont dé compilable?
Je sais que pour beaucoup le sont (haut niveau), mais il y en a t'il quelque un qui ne le soient pas? Avec la programmation bas niveau?![]()
Bonjour.
Tout est décompilable, simplement c'est plus ou moins difficile selon la nature du flux d'instructions dont on dispose.
* Ainsi un exécutable natif contient des instructions assembleur primitives (par exemple "charger le contenu de l'adresse du registre a dans registre b"). C'est ardu à décompiler car on peut difficilement savoir à quoi correspondent ces adresses: charge t-on l'adresse d'une instance, d'une fonction, etc?
* Un exécutable généré par un langage dotnet ou java est en revanche très différent : il contient un court lanceur natif (instructions assembleur) suivi d'un flux d'instructions intermédiaires (bytecode) qui seront interprétées et compilées à la volée. Ces instructions sont de plus haut niveau (appeler méthode M, instancier type T) et facilitent grandement la décompilation.
Alors que le flux bytecode préserve l'information sur les types et méthodes, cette information a été détruite lors de la compilation en assembleur. Décompiler c'est reconstruire l'information. Note enfin que l'on ne peut pas en général reconstruire à l'identique l'information supprimée, et que plus il manque d'informations plus le résultat final sera différent de la source.
Je dirais surtout que c'est ardu à déchiffrer/comprendre/utiliser
@vb159753 :
Quand tu as "décompilé", tu as une suite d'instructions assembleur, où les références aux variables sont simplement R1, R2, etc, les noms des registres.. Tu n'as plus aucun commentaire, pas de noms de variables, les nom des "fonctons" sont tronqués à X caractères, quand ils ne sont aps simplement des adresses, les opérations sont juste MOV, ADD, SUB, DIV, JMP, etc...
Alors sur un "petit progr" ou "pette bibliothèque" ça peut à la limite se récupérer (en général si c'est < 500 lignes). mais si tu as 5000 ou plus lignes c'est déjà relativement incompréhensible, et alors au-dessus de 10000 c'est pratiquement infaisable..
Merci beaucoup,
Je me doute bien que la décompilation est une "reconstruction pas terrible" du code source.
Du coups, les langages plus difficilement dé-compilable, serait plus le C,C++?,
sans "langage intermédiaire" .
Non..
TOUS les langages compilés seront au même niveau de complexité une fois décompilés. Les langages objets sans doute encore plus au vu de la duplication des méthodes....
Maintenant, comme l'a dit DonQuiche, les langages s'exécutant via du bytecode, des scripts, etc, seront plus "facilement" lisibles (en partie) une fois dé-compilés..
Mais en ce qui concerne les langages compilés, ils seront tous au même niveau d'incompréhensibilité, en gros..
Ha d'accord, je vois, merci à vous
Je met tout de suite en résolut![]()
Bonjour,
Emmanuel Delahaye fait souvent le parallele suivant a propos de la "decompilation" : "avec 500 Kg de viande hachee, on ne fait pas une vache en etat de marche".
C'est tres vrai : tu perds beaucoup de choses lors de la compilation (plus ou moins), choses que tu peux ensuite essayer de deviner, mais sur un vrai programme, il te sera toujours impossible de retrouver le code source d'origine.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager