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 geenr_addend
-veld en daarom wordt de addend opgeslagen in het relocatiedoel zelf. De 64-bits uitvoerbare bestanden gebruiken meestal deElfN_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
- english.stackexchange.com/search?q=addend
- Addend + addend, minuend-subtrahend, multiplicand * multiplier, dividend / deler
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 “ ,
Waarom de speciale termen hier?
- Nou, dat is waarschijnlijk omdat in assembly
add rbi, rax
het resultaat daadwerkelijk zal opslaan inrbi
. Het kennen van het eerste argument is dus niet alleen een argument vooradd
maar de bestemming;add rax, rbi
zal het resultaat opslaan inrax
. Als assembly in plaats daarvan werd weergegeven met operators, “d hebben werbi += rax
enrax += 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 typeElf32_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.