table de symboles et de déménagement de table de fichier de l'objet
De ce que je comprends, les instructions et les données dans un fichier de l'objet ont tous des adresses. Les premières données de début de l'élément à l'adresse 0 et la première instruction à l'adresse 0.
Pour la relocalisation de la table contient des informations sur les instructions qui doivent être mis à jour si les adresses dans le fichier modifier, par exemple si le fichier est lié à un autre. Ligne A, dans l'exemple ci-dessous, serait dans le déménagement de table. Je ne pense pas que B serait dans le déménagement de table, car l'adresse du label "égalité" est par rapport à B. Sont ces hypothèses correctes?
Je sais que la table des symboles à afficher les étiquettes le fichier a et aussi des étiquettes qui n'ont pas été résolus. Mais quelles sont les autres informations de la table des symboles contiennent?
Aussi, lorsque l'assembleur traduit les instructions en binaire, ce qui est placé dans les instructions qui ont non résolus références?. B dans cet exemple.
.data
TEXT: .asciiz "Foo"
.text
.global main
main:
li t0, 1
beq t0, 1, equal #B
equal:
la a0, TEXT
jal printf #A
OriginalL'auteur Carlj901 | 2013-05-25
Vous devez vous connecter pour publier un commentaire.
Oui, vos hypothèses sont correctes. Il existe différents types de déménagements, ce que l'assembleur émet dans l'instruction dépend du type. C'est en général un décalage à ajouter. Vous pouvez utiliser
objdump -dr
pour voir les délocalisations. Pour une meilleure illustration que j'ai changé de code un peu:Sortie de objdump:
Comme vous l'avez dit, il n'y a pas de réinstallation pour le
beq
puisque c'est une adresse relative à l'intérieur de ce fichier objet.La
bne
j'ai ajouté (ligne marquée avecC
) fait référence à un symbole externe, de sorte que même si l'adresse est relative à une réinstallation d'entrée est nécessaire. Il sera de typeR_MIPS_PC16
pour produire un 16 bits mot signé de décalage du symbolefoo
. Comme le codage d'instruction nécessite décalage à partir du mot suivant et non pas de laPC
que la réinstallation utilise,1
doit être soustrait, et c'est codée en tant que complément de 2ffff
dans l'instruction elle-même.La
la
pseudoinstruction a été traduit par l'assembleur dans unlui
/addiu
paire (ce dernier dans le délai fente de lajal
). Pour lelui
unR_MIPS_HI16
de la réinstallation, est créé à l'encontre de la.data
section à remplir dans le top 16 bits. Depuis le symboleTEXT
est à l'adresse4
dans le.data
section, les 16 premiers bits de décalage sont0
. Cela signifie que l'instruction contient0
décalage. De même, pour le bas de 16 bits, sauf qu'il n'y l'instruction contient un décalage de4
.Enfin, la
jal printf
est en utilisant encore un autre type de déplacement qui est adapté pour le codage requis par l'instruction. Le décalage est nul parce que le saut est directement référencé dans la symbole de. Notez que objdump est d'essayer d'être utile par décodage, mais il n'a pas procédé à la réinstallation de sorte que le<main>
sorties il est bien sûr absurde.Avis j'ai ajouté un entier au début de la section de données qui est pourquoi
TEXT
a l'adresse 4.Ah, je comprends maintenant. Quelles seront les informations de la table des symboles pour contenir ce fichier?
Depuis seulement
main
est mondial, qui devrait être la seule exporté entrée dans la table des symboles, avec adresse0
dans le.text
section. Le tableau répertorie également les 2 signes extérieursprintf
etfoo
, ainsi que tous les habitants s'ils ne sont pas supprimés. Les adresses doivent être évident à partir de la liste que j'ai fournis.OriginalL'auteur Jester