Co je “ doplněk ”?

Z Learning Linux Binary Analysis od Ryana „elfmaster“ O „Neilla . Na stránce 32 autor uvádí:

Záznamy o přemístění pro 32bitové soubory ELF jsou stejné jako pro 64bitové, ale použijte 32bitová celá čísla. Následující příklad pro souborový kód objektu bude sestaven jako 32bitový, abychom mohli demonstrovat implicitní doplňky, které se v 64bitových bitech běžně nepoužívají. implicitní přidání nastane, když jsou záznamy o přemístění uloženy ve strukturách typu ElfN_Rel, které neobsahují r_addend pole, a proto je doplněk uložen v samotném cíli přemístění. 64bitové spustitelné soubory mají tendenci používat ElfN_Rela struktury, které obsahují explicitní doplněk . Myslím, že stojí za pochopení obou scénářů, ale implicitní doplňky jsou trochu matoucí, takže má smysl vnést do této oblasti světlo.

Co je skutečná definice „přidání“ ?

Komentáře

Odpověď

Myslím, že to znamená jen „číslo, které je přidáno“, a v tomto případě „číslo, které je přidáno k adrese základního načtení ( nebo adresa adresy načítání segmentu) pro výpočet konečného ukazatele pro toto přemístění „.

Představme si, že když načteme binární soubor do paměti na 0x400000, máme ukazatel na 0x401234, který ukazuje na 0x405678. (Pokud místo toho načetli jsme binární soubor na 0x800000, pak by to mělo ukazovat na 0x805678, a proto je třeba jej přemístit.) Nevím ELF, ale moje čtení je to, že

  • v t V implicitním případě relokační tabulka ukládá právě posuny do vašeho binárního souboru, v tomto případě 0x1234, a v našem binárním souboru s offsetem 0x1234 ukládáme cílový offset 0x5678. Proto se přemístění stává

    pro každou adresu A v tabulce přemístění *(base + A) += base

    (Toto jak fungují relokační tabulky v PE souborech.)

  • v explicitním případě relokační tabulka ukládá offset do vašeho binárního i cílového offsetu, tj. 0x1234 0x5678. Přemístění zde tedy je

    pro každý pár adres A, B v tabulce přemístění *(base + A) = base + B

    Nevím, co se v tomto případě děje v binárním souboru na offsetu 0x1234.

Odpovědět

  • Augend je výraz, který znamená číslo, které je třeba sčítat
  • Přidat je číslo, které přidáte.

Z Dictionary.com ,

Už jste někdy zírali na kousek papíru s„ 3 + 4 ”Napsáno na něm a napadlo ho,„ jaký je správný výraz pro každou z těchto dvou příslušných veličin? “Ne? První číslo je augend a číslo, které je k němu přidáno, je doplněk.

Graf dalších matematických výrazů naleznete zde na Wikipedia „s “ Výsledky výpočtu „ ,

Výsledky výpočtu

Proč jsou zde speciální výrazy?

  • No, je to pravděpodobné, protože v sestavě add rbi, rax skutečně uloží výsledek do rbi. Znát první argument tedy není jen argumentem add, ale také cílem; add rax, rbi uloží výsledek do rax. Pokud bylo místo toho zobrazeno sestavení s operátory, měli bychom rbi += rax a rax += rbi.
  • Protože addend není vždy offset a augend není vždy základ. Ačkoli v tomto konkrétním příkladu je „offset“ mnohem vhodnější.
  • V tomto konkrétním případě lze výraz „implicitní offset“ najít ve specifikaci Tool Interface Standard (TIS) Executable and Linking Format (ELF) verze 1.2 ,

    … pouze položky Elf32_Rela obsahují explicitní doplněk. Záznamy typu Elf32_Rel uložit implicitní doplněk do místa, které má být změněno. V závislosti na architektuře procesoru může být jeden nebo druhý formulář nezbytný nebo pohodlnější.V důsledku toho může implementace pro konkrétní stroj používat výhradně jeden formulář nebo kterýkoli z nich v závislosti na kontextu.

Odpověď

Addend je jednoduše „číslo, které je třeba přidat do jiného „, podle Meriana Webstera .

Komentáře

  • Bylo to již uvedeno v existující odpovědi. K odpovědi můžete přidat ještě něco, aby byla informativní.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *