Un exécutable ELF minimal nécessite uniquement l'en-tête ELF et au moins un en-tête de programme pour être fonctionnel. Cependant, lorsque j'exécute strip sur un exécutable court, il décide de ne pas jeter la table d'en-tête de section ou la section des chaînes de section, en les conservant bien qu'elles n'aient aucun but (pour autant que je sache) pour l'exécution du programme.
Y a-t-il une raison pour laquelle ceux-ci ne sont pas supprimés par bande? Existe-t-il un autre utilitaire qui supprime tout ce qui n'est pas requis pour que l'exécutable s'exécute? J'ai essayé de modifier manuellement l'exécutable de golf de code que je faisais pour supprimer les en-têtes de section, et il semble fonctionner correctement et être beaucoup plus petit.
la source
Réponses:
La documentation de GNU binutils
strip
fait allusion à la raison, mais n'est pas explicite, mentionnant dans la description de--only-keep-debug
cetteAutrement dit, sauf indication contraire explicite via l'
-R
option,strip
conservera les en-têtes de section pour aider d'autres programmes (y comprisgdb
) à faire leur travail.La page Utilisation correcte de la commande strip (partie de la rétro-ingénierie utilisant le système d'exploitation Linux ) notes
et continue en énumérant plusieurs choses utiles qui pourraient être laissées pour compte - pour l'analyse d'un exécutable "dépouillé".
Dans Learning Linux Binary Analysis , cela est réitéré, commentant que les en-têtes de section ne sont normalement manquants que lorsque quelqu'un les a délibérément supprimés, et cela sans en-têtes de section,
gdb
etobjdump
sont presque inutiles.la source