Malheureusement, j'ai perdu mon code source et j'ai juste le fichier de sortie créé avec gcc sous linux et je n'ai plus accès à mon pc maintenant.y a-t-il un moyen de convertir le fichier de sortie en fichier source (en c sous linux)?
Malheureusement, j'ai perdu mon code source et j'ai juste le fichier de sortie créé avec gcc sous linux et je n'ai plus accès à mon pc maintenant.y a-t-il un moyen de convertir le fichier de sortie en fichier source (en c sous linux)?
Réponses:
Vous aviez donc une vache, mais vous l'avez par inadvertance convertie en hamburger, et maintenant vous voulez que votre vache revienne.
Désolé, cela ne fonctionne tout simplement pas de cette façon.
Restaurez simplement le fichier source à partir de vos sauvegardes.
Ah, vous n'aviez pas de sauvegardes. Malheureusement, l'univers ne vous donne pas de pause pour cela.
Vous pouvez décompiler le binaire. Cela ne vous donnera pas votre code source, mais il vous donnera un certain code source avec le même comportement. Vous n'obtiendrez pas les noms de variables à moins qu'il ne s'agisse d'un binaire de débogage. Vous n'obtiendrez pas exactement la même logique à moins d'avoir compilé sans optimisations. De toute évidence, vous n'obtiendrez pas de commentaires.
J'ai utilisé Boomerang pour décompiler certains programmes, et le résultat était plus lisible que le code machine. Je ne sais pas si c'est le meilleur outil sur le marché. Quoi qu'il en soit, ne vous attendez pas à des miracles.
Plusieurs outils sont courants dans la rétro-ingénierie d'un exécutable.
Dans la plupart des cas, j'ai vu que le code devait être réécrit à partir de zéro, maintenu en tant que programme en langage assembleur ou reconstitué en réappliquant les demandes de changement à une version plus ancienne.
Ce que vous voulez faire est appelé "décompilation". Il existe de nombreux décompilateurs et il n'est pas pratique de les couvrir tous ici.
Cependant, comme remarque générale: la conversion du code source C en code machine exécutable est avec perte. Par exemple:
Il est rare que le code soit compilé tel qu'il est écrit. La plupart des compilateurs de nos jours changeront radicalement votre code pour l'optimiser. Ainsi, lorsque vous décompilez, le compilateur ne peut que deviner à quoi devait ressembler le code source, il n'a aucun moyen de savoir quel était votre code, car il a disparu. Si le décompilateur est bon, le code que vous obtenez sera au moins compilable en un exécutable équivalent, puis vous pourrez commencer à le refactoriser lentement pour qu'il soit lisible. Mais le décompilateur produira très probablement du code de spaghetti absolument illisible, et ce sera un énorme casse-tête de le déchiffrer. Parfois, cela peut finir par être moins de travail de simplement réécrire le programme à partir de zéro.