web-dev-qa-db-fra.com

Comment dépouiller complètement les exécutables

Je voudrais dépouiller autant que je peux - sur Linux: un ELF. Je veux seulement là-dedans les trucs dont j'ai besoin pour le faire fonctionner.

J'ai essayé d'utiliser strip:

strip --strip-all elf

Mais cela ne semble pas faire du bon travail: nm affiche toujours beaucoup de choses, et le binaire est toujours gros.

Que devrais-je faire?

36
peoro

Si tout le reste échoue, vous pouvez lire la documentation, en commençant par man strip.

Sérieusement, votre application contient peut-être beaucoup de symboles et de code. À un extrême, la plus grande réduction de taille serait rm elf mais votre programme ne fonctionnera plus. Tout dépend de votre programme et de ce que vous y avez codé.

Comme exemple concret, j'ai récemment travaillé avec une grande bibliothèque C++ où strip sans autres arguments a réduit la taille de 400 + mb à environ 28 mb. Mais alors vous ne pouviez plus vous lier contre lui (dans le contexte d'autres bibliothèques partagées), le rendant quelque peu inutile.

Mais lorsque vous utilisez strip --strip-unneeded, il a changé la taille de 400+ Mo à 55 Mo, ce qui est encore considérable, tout en permettant l'accès à la bibliothèque à partir d'autres bibliothèques partagées.

En bref, je ferais confiance à strip. Peut-être que votre application ne peut pas être réduite davantage sans changements de code.

36
Dirk Eddelbuettel

En utilisant l'option -R pour supprimer, vous pouvez supprimer toutes les sections dont vous n'avez pas besoin. Regardez également this concernant les exécutables ELF minimaux.

15
yorick

Je voudrais consulter cet excellent article qui explique en détail comment rendre un exécutable ELF aussi petit que possible. Peut-être qu'il contient des informations qui pourraient vous aider!

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

7
ossys
strip -R .comment
gcc -Os elf.c

Ces deux pourraient aider.

1
krzysz00