je tentais de comprendre la table de symbole à l'intérieur ELF, donc je devais:Pourquoi le fichier ELF contient des sections symtab avec size = 0?
$ cat a.c
int i=0;
int j;
static int l=4;
void k();
void d(){
k();
}
Compile et vérifiez sa symtab à l'intérieur du ELF:
$ gcc -g a.c -c -m32 && readelf -s a.o
Symbol table '.symtab' contains 18 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS a.c # Confused
2: 00000000 0 SECTION LOCAL DEFAULT 1
3: 00000000 0 SECTION LOCAL DEFAULT 3
4: 00000000 0 SECTION LOCAL DEFAULT 4
5: 00000000 4 OBJECT LOCAL DEFAULT 3 l
6: 00000000 0 SECTION LOCAL DEFAULT 5
7: 00000000 0 SECTION LOCAL DEFAULT 7
8: 00000000 0 SECTION LOCAL DEFAULT 8
9: 00000000 0 SECTION LOCAL DEFAULT 10
10: 00000000 0 SECTION LOCAL DEFAULT 12
11: 00000000 0 SECTION LOCAL DEFAULT 14
12: 00000000 0 SECTION LOCAL DEFAULT 15
13: 00000000 0 SECTION LOCAL DEFAULT 13
14: 00000000 4 OBJECT GLOBAL DEFAULT 4 i
15: 00000004 4 OBJECT GLOBAL DEFAULT COM j
16: 00000000 13 FUNC GLOBAL DEFAULT 1 d
17: 00000000 0 NOTYPE GLOBAL DEFAULT UND k
Ce qui m'a vraiment confus été: Il dit (à partir d'Internet), "Valeur" signifie le décalage de chaque section et "taille" signifie la taille de la cible. Pourquoi sont-ils tous affectés 00000000 et certains d'entre eux taille = 0?
Question:
Je suppose que si la taille = 0 alors il ne devrait pas exister, et dénué de sens d'avoir des informations à l'intérieur ELF. Par exemple, pour la ligne "1" qui contient le nom de fichier source "ac" (j'ai marqué "# confus), il contient des informations de Ndx = ABS et Name = ac, si cette section est de taille 0, alors comment Je suppose qu'il devrait y avoir au moins 3 octets pour enregistrer le nom de fichier "ac", donc la taille devrait être> = 3. droite?