Annuaire d'articles
- Manuel de mise à niveau du programmeur
https://coolshell.cn/articles/4990.html
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 .
Format
Le fichier .o le plus basique ressemble à ceci
.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
-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.
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
- 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 ++