2016-10-09 2 views
0

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?

Répondre

0

vous devriez remarquer que le type du symbole est STT_FILE de ce que je suis familier signifie que les symboles sont liés au fichier oject de que les symboles sont extraits avec un de toute façon vous avez raison, value marque généralement l'index du symbole dans la section qui le contient et size représentant la taille du symbole

dans le symbole que vous êtes à la recherche à l'index est ABS et le type est STT_FILE ce sont des informations qui doivent être utilisées lors de la liaison statique des fichiers objets et permettre linker de savoir quels symboles provenaient de la source, par conséquent, il s'agit d'un symbole abstrait qui n'est pas réellement stocké dans le fichier objet, donc il n'a aucune valeur et n'a pas de taille .... espérons que cela vous a aidé