Quest-ce quun “ addend ”?

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 de r_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 structures ElfN_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

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 «  ,

Résultats du calcul

Pourquoi les termes spéciaux ici?

  • Eh bien, cest probablement parce que dans lassembly add rbi, rax stockera en fait le résultat dans rbi. Donc, connaître le premier argument nest pas simplement un argument pour add mais la destination; add rax, rbi stockera le résultat dans rax. Si lassembly était affiché avec des opérateurs à la place, nous « aurions rbi += rax et rax += 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 type Elf32_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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *