Quels sont les exécutables dépouillé et non dépouillé dans Unix?

37

Du fichier homme ,

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

Qu'est-ce que le stripping exécutable signifie?

Pourquoi certains des exécutables sont-ils supprimés alors que d'autres ne le sont pas?

Lazer
la source

Réponses:

50

Si vous compilez un exécutable avec l'indicateur -g de gcc, il contient des informations de débogage. Cela signifie que chaque ligne du code source est générée, le nom des variables du code source est conservé et peut être associé à la mémoire correspondante au moment de l'exécution, etc. Strip peut supprimer ces informations de débogage et d'autres données incluses. dans l'exécutable, ce qui n'est pas nécessaire pour l'exécution afin de réduire la taille de l'exécutable.

fschmitt
la source
10
Voir aussi la page de manuel de strip (1) . En règle générale, strip supprime tous les symboles car ils ne sont pas strictement nécessaires; il supprime aussi les informations de débogage, mais les symboles sont ce qu'il y a de
mieux
3
Le concept se généralise à la plupart des formats exécutables, ce n'est pas spécifique à gcc ni même à unix.
Gilles, arrête de faire le mal '
4
J'avais un exécutable de 40 Mo qui, une fois dépouillé, était réduit à 6 Mo - juste pour vous donner une idée du type d'espace occupé par le débogage des données.
Nathan Osman
Alors, effacer un exécutable prog.econstruit avec gcc -g -o prog.e prog.cvous équivaut à compiler gcc -O0 -o prog.e prog.c?
Ysap
1
@ysap non, cela n'a rien à voir avec l'optimisation (-O). Le code d'assembly reste le même, que le fichier soit supprimé ou non. Vous obtenez un exécutable sans les informations de débogage (vous avez donc raison de perdre le "-g") et sans tous les symboles (noms de fonctions, noms de variables globales ...). C'est l'équivalent de "gcc -s -o prog.e prog.c". Lorsqu'un programme est exécuté, les symboles ne font aucune différence. Mais par exemple, les logiciels propriétaires ont toujours des symboles dépouillés, sinon tout le monde pourrait connaître les noms originaux des fonctions et leurs emplacements.
Pikrass