Mi az a “ kiegészítés ”?

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 tartalmaznak r_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 olyan ElfN_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

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

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 a rbi fájlban. Tehát az első argumentum ismerete nem csupán a add érv, hanem a cél; A add rax, rbi az eredményt az rax mappában tárolja. Ha az összeállítás az operátorokkal lett megadva, akkor rbi += rax és rax += 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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük