A (z) Ryan Linux elfmaster “O” Neill Linux bináris elemzésének elsajátításából . A 32. oldalon a szerző kijelenti:
A 32 bites ELF fájlok áthelyezési rekordjai megegyeznek a 64 bitesekkel, de használjon 32 bites egész számokat. A következő példa az objektumfájl kódra 32 bites fordításban áll össze, így bebizonyíthatjuk az implicit kiegészítéseket, amelyeket a 64 bitesek nem annyira használnak. Egy implicit kiegészítés akkor fordul elő, amikor az áthelyezési rekordokat olyan
ElfN_Rel
típusú struktúrákban tárolják, amelyek nem tartalmaznakr_addend
mezőbe, és ezért a kiegészítést magában az áttelepítési cél tárolja. A 64 bites futtatható fájlok általában olyanElfN_Rela
struktúrákat használnak, amelyek explicit kiegészítést tartalmaznak . Úgy gondolom, hogy érdemes megérteni mindkét forgatókönyvet, de az implicit kiegészítések kissé zavaróbbak, ezért van értelme fényt deríteni erre a területre.
a “kiegészítés” tényleges meghatározása?
Megjegyzések
- english.stackexchange.com/search?q=addend
- Addend + addend, minuend-subtrahend, multiplicand * szorzó, osztalék / osztó
Válasz
Azt hiszem, ez csak egy “hozzáadott számot” jelent, és ebben az esetben azt a számot, amelyet az alapterhelési címhez adtunk ( vagy a szegmens betöltési címét) ennek az áthelyezésnek a végső mutatójának kiszámításához “.
Képzeljük el, hogy amikor binárisunkat betöltöttük a memóriába 0x400000-nél, akkor egy 0x401234-es mutatónk van, amely 0x405678-ra mutat. 0x800000-re töltöttük a bináris értéket, akkor ennek a 0x805678-ra kell mutatnia, ezért át kell költöznie.) Nem ismerem az ELF-et, de erről azt olvasom, hogy
-
a t-ben implicit esetben az áthelyezési tábla eltárolja a binárisadat, ebben az esetben 0x1234, és a 0x1234 eltolású binárisban a 0x5678 céleltolást tároljuk. Ezért az áthelyezés
lesz minden egyes címre
A
az áthelyezési táblázatban*(base + A) += base
(Ez hogyan működnek az áthelyezési táblák a PE fájlokban.)
-
explicit esetben az áthelyezési tábla eltolja mind az eltolást a bináris, mind a céleltolásban, azaz 0x1234 0x5678. Tehát az áthelyezés itt van:
minden
A, B
címpár számára az áthelyezési táblázatban*(base + A) = base + B
Nem tudom, hogy ebben az esetben mi kerül a binárisba a 0x1234 eltolással.
Válasz
- Augend olyan kifejezés, amely összeadás alá eső számot jelent
- A hozzáadása a hozzáadandó szám.
A következőtől: Dictionary.com ,
Találtad már, hogy bámulsz egy darabot a„ 3 + 4 ”jelzéssel ”, És azon tűnődött, hogy„ mi a megfelelő kifejezés e két megfelelő mennyiség mindegyikére? ”Nem? Az első szám az augend és a hozzáadott szám a kiegészítés.
A többi matematikai kifejezés diagramját itt láthatja: Wikipédia “s ” Számítási eredmények “ ,
Miért itt a speciális kifejezések?
- Nos, ez azért valószínű, mert az összeállításban a
add rbi, rax
az eredményt valóban tárolja az eredményt arbi
fájlban. Tehát az első argumentum ismerete nem csupán aadd
érv, hanem a cél; Aadd rax, rbi
az eredményt azrax
mappában tárolja. Ha az összeállítás az operátorokkal lett megadva, akkorrbi += rax
ésrax += rbi
. - Mivel a Az addend nem mindig offset, és nem mindig az augend az alap. Bár ebben a konkrét példában az “offset” sokkal megfelelőbb.
-
Ebben a konkrét esetben az “implicit ellentételezés” kifejezés megtalálható az eszköz interfész standard (TIS) futtatható és összekapcsolási formátum (ELF) specifikáció 1.2-es verziójában ,
… csak a
Elf32_Rela
bejegyzések tartalmaznak kifejezett kiegészítést. A implicit kiegészítést tárol a módosítandó helyen. A processzor architektúrájától függően egyik vagy másik forma szükséges vagy kényelmesebb lehet.Következésképpen egy adott gép megvalósítása használhat egyetlen űrlapot, vagy a kontextustól függően bármelyik formát.
Válasz
A hozzáadása egyszerűen “hozzáadandó szám” másiknak “, a Merian Webster szerint .
Megjegyzések
- már a meglévő válaszban megfogalmazta. Hozzáadhat még egy kicsit a válaszához, hogy informatívabb legyen.