Pourquoi je ne peux pas obtenir directement le contenu de la section `.bss`?

Le test est sur Linux 32 bits.

Jutilise cette commande pour obtenir le contexte de .text .rodata et .data section:

objdump -s -j .text elf_binary objdump -s -j .rodata elf_binary objdump -s -j .data elf_binary 

Mais fondamentalement quand jessaye de lutiliser pour obtenir le contenu de la section .bss, jobtiens toujours lerreur ci-dessous:

objdump -s -j .bss elf_binary objdump: section ".bss" mentioned in a -j option, but not found in any input file 

En gros, comment puis-je obtenir le contenu de la section .bss à partir du binaire ELF?

Réponse

Le .bss na pas de contenu. Cest simplement une astuce pour le chargeur de préallouer de lespace lors du démarrage du programme. Ce sera tous les 0 à lexécution et ne contiendra aucune information utile tant que le programme naura pas écrit dessus. Après cela, vous pouvez utiliser un débogueur pour vider la mémoire et explorer son contenu.

Consultez la page Wikipedia pour plus dinformations.

Réponse

Le bloc .bss commencé par le symbole ( également appelé segment de données non initialisé – bss est une ancienne instruction dassemblage sur une ancienne puce IBM) La section est censée contenir global variables et static variables non initialisé ou initialisé à 0 ou NULL. La section .bss est généralement inexistante jusquà ce que votre programme commence à sexécuter, cest pourquoi vous ne pouvez pas « récupérer son contenu de manière statique. Il est assez important de noter que cette section permet de réduire le programme » s taille & le rend plus rapide à charger.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *