Wat is een “ addend ”?

Van Linux binaire analyse leren door Ryan “elfmaster” O “Neill . Op pagina 32 zegt de auteur:

De relocatierecords voor 32-bits ELF-bestanden zijn dezelfde als voor 64-bits, maar gebruik 32-bits gehele getallen. Het volgende voorbeeld voor are objectbestandscode wordt gecompileerd als 32-bits zodat we impliciete toevoegingen kunnen demonstreren, die niet zo vaak worden gebruikt in 64-bits. Een impliciete addend treedt op wanneer de relocatierecords worden opgeslagen in ElfN_Rel type structuren die geen r_addend -veld en daarom wordt de addend opgeslagen in het relocatiedoel zelf. De 64-bits uitvoerbare bestanden gebruiken meestal de ElfN_Rela -structuren die een expliciet addend . Ik denk dat het de moeite waard is om beide scenarios te begrijpen, maar impliciete toevoegingen zijn een beetje meer verwarrend, dus het is logisch om dit gebied te verduidelijken.

Wat is de feitelijke definitie van een “addend” ?

Reacties

Antwoord

Ik denk dat het gewoon betekent “een getal dat” is toegevoegd “, en in dit geval” het getal dat “is toegevoegd aan het basislaadadres ( of segment laadadres) om de laatste pointer voor deze verplaatsing te berekenen “.

Laten we ons voorstellen dat wanneer we ons binaire bestand in het geheugen laden op 0x400000, we een pointer hebben op 0x401234 die naar 0x405678 wijst. we laadden het binaire bestand op 0x800000, dan zou dit moeten verwijzen naar 0x805678, daarom moet het verplaatst worden.) Ik ken ELF niet, maar mijn lezing hiervan is dat

  • in t In het impliciete geval slaat de relocatietabel alleen offsets op in uw binaire bestand, in dit geval 0x1234, en in ons binaire bestand op offset 0x1234 slaan we de doeloffset 0x5678 op. Daarom wordt relocation

    voor elk adres A in de relocation table *(base + A) += base

    (Dit is hoe relocatietabellen werken in PE-bestanden.)

  • in het expliciete geval slaat de relocatietabel zowel de offset op in uw binaire bestand als de doeloffset, dwz 0x1234 0x5678. Dus verplaatsing hier is

    voor elk adrespaar A, B in de verplaatsingstabel *(base + A) = base + B

    Ik weet niet wat er in dit geval in het binaire bestand op offset 0x1234 staat.

Antwoord

  • Augend is een term die een getal betekent dat kan worden toegevoegd
  • Addend is het nummer dat u gaat toevoegen.

Van Dictionary.com ,

Heb je ooit gemerkt dat je naar een vel papier staarde met” 3 + 4 ”Erop geschreven en zich afgevraagd wat is de juiste term voor elk van deze twee respectieve hoeveelheden? Nee? Het eerste getal is de augend en het nummer dat eraan wordt toegevoegd, is de addend.

U kunt hier een diagram met andere wiskundige termen bekijken op Wikipedia “s ” Berekeningsresultaten “ ,

Berekeningsresultaten

Waarom de speciale termen hier?

  • Nou, dat is waarschijnlijk omdat in assembly add rbi, rax het resultaat daadwerkelijk zal opslaan in rbi. Het kennen van het eerste argument is dus niet alleen een argument voor add maar de bestemming; add rax, rbi zal het resultaat opslaan in rax. Als assembly in plaats daarvan werd weergegeven met operators, “d hebben we rbi += rax en rax += rbi.
  • Omdat de addend is niet altijd een offset, en de augend is niet altijd de basis. Hoewel in dit specifieke voorbeeld “offset” veel geschikter is.
  • In dit specifieke geval is de term “impliciete offset” te vinden in de Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 ,

    … alleen Elf32_Rela items bevatten een expliciete toevoeging. Items van het type Elf32_Rel sla een impliciete toevoeging op in de locatie die moet worden gewijzigd. Afhankelijk van de processorarchitectuur kan de ene of de andere vorm nodig of handiger zijn.Bijgevolg kan een implementatie voor een bepaalde machine één formulier exclusief of beide formulieren gebruiken, afhankelijk van de context.

Antwoord

Addend is gewoon “een nummer dat moet worden toegevoegd to another “, volgens Merian Webster .

Reacties

  • Het was al vermeld in het bestaande antwoord. Je zou wat meer aan je antwoord kunnen toevoegen om het informatiever te maken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *