De Apprendre lanalyse binaire Linux par Ryan « elfmaster » O « Neill . À la page 32, lauteur déclare,
Les enregistrements de relocalisation pour les fichiers ELF 32 bits sont les mêmes que pour les fichiers 64 bits, mais utilisez des entiers 32 bits. Lexemple suivant pour le code de fichier objet are sera compilé en 32 bits afin que nous puissions démontrer les ajouts implicites, qui ne sont pas aussi couramment utilisés en 64 bits. Un implicit addend se produit lorsque les enregistrements de relocalisation sont stockés dans des structures de type
ElfN_Rel
qui ne contiennent pas der_addend
et le complément est donc stocké dans la cible de relocalisation elle-même. Les exécutables 64 bits ont tendance à utiliser les structuresElfN_Rela
qui contiennent un addend explicite . Je pense que cela vaut la peine de comprendre les deux scénarios, mais les ajouts implicites sont un peu plus déroutants, il est donc logique de faire la lumière sur ce domaine.
Quest-ce que la définition réelle dun « addend » ?
Commentaires
- english.stackexchange.com/search?q=addend
- Addend + addend, minuend-subtrahend, multiplicand * multiplier, dividende / divisor
Réponse
Je pense que cela signifie simplement « un nombre qui » est ajouté « , et dans ce cas » le nombre qui « est ajouté à ladresse de chargement de base ( ou ladresse de chargement du segment) pour calculer le pointeur final pour cette relocalisation « .
Imaginons que lorsque nous chargeons notre binaire en mémoire à 0x400000, nous avons un pointeur à 0x401234 qui pointe vers 0x405678. (Si à la place nous avons chargé le binaire à 0x800000 alors cela devrait pointer vers 0x805678, donc il doit être déplacé.) Je ne connais pas ELF, mais ma lecture de ceci est que
-
in t e cas implicite, la table de relocalisation stocke juste les décalages dans votre binaire, dans ce cas 0x1234, et dans notre binaire au décalage 0x1234, nous stockons le décalage cible 0x5678. Par conséquent, la relocalisation devient
pour chaque adresse
A
dans la table de relocalisation*(base + A) += base
(Ce est le fonctionnement des tables de relocalisation dans les fichiers PE.)
-
dans le cas explicite, la table de relocation stocke à la fois loffset dans votre binaire et loffset cible, cest-à-dire 0x1234 0x5678. Donc, la relocalisation ici est
pour chaque paire dadresses
A, B
dans le tableau de relocalisation*(base + A) = base + B
Je ne sais pas ce qui se passe dans le binaire au décalage 0x1234 dans ce cas.
Réponse
- Augend est un terme qui désigne un nombre susceptible dêtre ajouté
- Addend est le nombre que vous allez ajouter.
De Dictionary.com ,
Vous êtes-vous déjà retrouvé à regarder un morceau de papier avec » 3 + 4 »Écrit dessus, et je me suis demandé« quel est le terme propre pour chacune de ces deux quantités respectives? »Non? Le premier nombre est laugende et le numéro qui y est ajouté est laddition.
Vous pouvez voir un tableau des autres termes mathématiques ici sur Wikipedia « s » Calculation results « ,
Pourquoi les termes spéciaux ici?
- Eh bien, cest probablement parce que dans lassembly
add rbi, rax
stockera en fait le résultat dansrbi
. Donc, connaître le premier argument nest pas simplement un argument pouradd
mais la destination;add rax, rbi
stockera le résultat dansrax
. Si lassembly était affiché avec des opérateurs à la place, nous « aurionsrbi += rax
etrax += rbi
. - Parce que le addend nest pas toujours un offset, et laugend nest pas toujours la base. Bien que dans cet exemple spécifique, « offset » soit beaucoup plus approprié.
-
Dans ce cas précis, le terme « décalage implicite » se trouve dans la Spécification TIS (Tool Interface Standard) exécutable et ELF (Linking Format) version 1.2 ,
… seules les entrées
Elf32_Rela
contiennent un ajout explicite. Les entrées de typeElf32_Rel
stocke un addend implicite à lemplacement à modifier. Selon larchitecture du processeur, une forme ou une autre peut être nécessaire ou plus pratique.Par conséquent, une implémentation pour une machine particulière peut utiliser une forme exclusivement ou lune ou lautre des formes selon le contexte.
Answer
Addend est simplement « un nombre à ajouter à un autre « , selon Merian Webster .
Commentaires
- Cétait déjà indiqué dans la réponse existante. Vous pouvez ajouter un peu plus à votre réponse pour la rendre plus informative.