Je voulais savoir comment Linker résout le symbole Printf dans le code d'assemblage suivant.
#include<stdio.h>
void main()
{
printf("Hello ");
}
.file "test.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "Hello \0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
movl $LC0, (%esp)
**call _printf**
leave
ret
.def **_printf**; .scl 3; .type 32; .endef
4 Réponses :
Assumer le format de fichier ELF, l'assembleur générera une référence de symbole non définie dans le fichier d'objet. Cela ressemblera à ceci:
$ readelf -r test.o Relocation section '.rel.text' at offset 0x358 contains 3 entries: Offset Info Type Sym.Value Sym. Name 0000001f 00000501 R_386_32 00000000 .rodata 00000024 00000902 R_386_PC32 00000000 printf 00000030 00000a02 R_386_PC32 00000000 exit
Réponse impressionnante Dave. Très clairement délimité. Merci beaucoup. Ce serait très complet pour vous si vous pouviez vous rappeler et laissez-moi aussi bien :)
Pour un excellent livre sur le processus de liaison, voir les liens et les chargeurs de John Levine. Vous pouvez obtenir les chapitres manuscrits au format HTML ici . < / p>
Un papier qui pourrait vous aider est Comment écrire des bibliothèques partagées par ulrich Drepper . Ulritch The Linux Glibc Mainteneur et il est une autorité sur elfe. p>
Même si cet article montre comment écrire des bibliothèques partagées et comment exporter ou non pour exporter des symboles, il explique comment ces symboles sont résolus de manière dynamique à l'intérieur d'un exefile au format ELF. p>
Je suppose que cela pourrait répondre à votre question. p>
Merci pour le lien :). Cela semble bon.
Une autre bonne ressource sur les likers est cette série d'articles: http://www.google.fr/search?q=site%3awww.airs.com%2fblog%2Farchives+%22Linkers+Part%22 . P>
Une excellente question n'est pas suffisamment posée et entraînant des charges de "symboles non résolus" sur les questions!