Fichier d'objet de l'auto-culture du programmeur 3






  • Manuel de mise à niveau du programmeur
    https://coolshell.cn/articles/4990.html
  • Insérez la description de l'image ici

Fichier ELF

  • ELF et PE sont tous deux des variantes des fichiers COFF, donc .lib et .dll sous windows (bibliothèque statique; dynamicl reliant bibliothèque dynamique) sont très similaires à .a et .so sous Linux (archive archive; objet partagé dynamique)

Le format de fichier objet commun (en anglais: Common Object File Format, abrégé COFF), également connu sous le nom de format de fichier objet commun, est un format de fichier utilisé pour les fichiers exécutables, les codes d'objet et les bibliothèques partagées (bibliothèque partagée), utilisé sur les systèmes de type UNIX .
Insérez la description de l'image ici

Format

Le fichier .o le plus basique ressemble à ceci
Insérez la description de l'image ici

.bss

.bss段存放未初始化的全局变量和局部静态变量
未初始化的静态变量肯定是在这个段里面的,但是未初始化的全局变量不一定放着里面
当静态变量被赋值为0的时候被看作没有初始化,所以优化掉了可以被放在.bss段里面

.Les données

.data段存放存放已初始化的全局变量和局部静态变量

.text / .code

.text段存放代码

En plus de cela, le fichier objet a de nombreuses autres sections


Commande

lire

  • -s symbole
  • -t --section-détails
  • -h --file-header-
    > pas d'option -f

objdump -s (source) -t (table de symboles) -h en-tête de section

commande od


objdump

  • -f en-tête de fichier
  • -h en-tête de section
    Insérez la description de l'image ici
    -h La ligne encadrée est un attribut. Le contenu indique que le contenu de cette section est stocké dans ce fichier. Vous pouvez voir que la section .bss n'est pas stockée dans ce fichier.
  • -d démonter
  • -s contenu complet au format hexadécimal
  • -t imprimer la table des symboles

Taille

Vérifiez la longueur du segment de code, du segment de données, du segment BSS.
Insérez la description de l'image ici
Le nom de segment écrit par vous-même ne peut pas commencer par un point (.)


objcopy

  • Fichier binaire en tant que segment dans le fichier cible
  • Le paramètre -R peut supprimer certains segments

nm

L'abréviation du nom
nm xx.o-> valeur du symbole (heximal) nom du symbole symbol_type
et certains paramètres peuvent être utilisés pour afficher uniquement certains segments


Segment personnalisé




3.4 Description de la structure du fichier

Insérez la description de l'image ici

  • en-tête de fichier
    readelf -h / objdump -f 命令

===== Revoyons-le d'en haut

3,5

  • Signature de fonction

  • c ++ filt

  • Pourquoi p94 définit-il une référence faible pthread_create? Parce que seules les références faibles trouveront des références fortes sinon vous ne chargerez pas même si -lpthread linker. Ensuite, une fois défini, il ne ressemblera pas à -lpthread. La valeur de la référence faible est par défaut 0 (ou une valeur spécifiée par un programme), donc si (faiblesse_référence) peut réaliser le code entre plusieurs versions de fonction différentes Conversion flexible sans écrire plusieurs copies

  • Il y a une différence entre les compilateurs C et C ++: C ne modifiera pas les variables lors de la compilation de C, mais C ++

A publié 177 articles originaux · J'aime 28 · Visites 50 000+

Je suppose que tu aimes

Origine blog.csdn.net/Hesy_H/article/details/100782411
conseillé
Classement