web-dev-qa-db-fra.com

Comment extraire le code source C du fichier .so?

Je travaille sur des logiciels précédemment développés et le code source est compilé en tant que bibliothèques partagées Linux (.so) et le code source n'est pas présent. Existe-t-il un outil qui peut extraire le code source des bibliothèques partagées Linux?

Merci Ravi

17
Ravi

Il n'y en a pas. Une fois que vous compilez votre code, il ne reste aucune trace de celui-ci dans le binaire, seulement du code machine.

Certains peuvent mentionner des décompilateurs mais ceux-ci n'extraient pas la source, ils analysent l'exécutable et produisent une source qui devrait avoir le même effet que l'original.

16
cnicutar

Vous pouvez essayer de désassembler le code objet et obtenir les mnémoniques du code machine.

objdump -D --disassembler-options intel sjt.o pour obtenir l'assemblage de la syntaxe Intel

objdump -D --disassembler-options att sjt.o ou objdump -D sjt.o pour obtenir l'assembly de syntaxe AT&T

Mais le code source original n'a jamais pu être trouvé. Vous pouvez essayer d'inverser le processus en étudiant et en reconstruisant les sections. Ce serait une douleur d'enfer.

2
phoxis

Clause de non-responsabilité: Je travaille pour Hex-Rays SA.

Le décompilateur Hex-Rays est le seul décompilateur disponible dans le commerce que je connaisse qui fonctionne bien avec la vie réelle x86 et ARM) = code. Il est vrai que vous n'obtenez pas la source d'origine, mais vous obtenez quelque chose qui lui est équivalent. Si vous n'avez pas supprimé votre binaire, vous pourriez même obtenir les noms des fonctions, ou, avec un peu de chance, même les taper et les variables locales. Cependant, même si vous n'avez pas d'informations sur les symboles, vous n'êtes pas obligé de vous en tenir au premier cycle de décompilation. Le décompilateur Hex-Rays est interactif - vous pouvez renommer n'importe quelle variable ou fonction, changez les types de variables, créez des types de structure pour représenter les structures dans le code original, ajoutez des commentaires et ainsi de suite. Avec un peu de travail, vous pouvez récupérer beaucoup. Et bien souvent, ce dont vous avez besoin n'est pas le fichier original complet, mais un algorithme ou une fonction critique - et ce Hex-Rays peut généralement vous fournir.

Jetez un œil à démovidéos et comparaisonpages . Vous pensez toujours que "regarder l'Assemblée" est la même chose?

2
Igor Skochinsky

Non. En général, c'est impossible. La source n'est pas intégrée dans des objets compilés ou des bibliothèques.

0
Stephen Canon