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_addendpole, a proto je doplněk uložen v samotném cíli přemístění. 64bitové spustitelné soubory mají tendenci používatElfN_Relastruktury, 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
- english.stackexchange.com/search?q=addend
- Addend + addend, minulost-subtrahend, multiplicand * multiplier, dividend / divisor
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
Av 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, Bv tabulce přemístění*(base + A) = base + BNeví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 „ ,
Proč jsou zde speciální výrazy?
- No, je to pravděpodobné, protože v sestavě
add rbi, raxskutečně uloží výsledek dorbi. Znát první argument tedy není jen argumentemadd, ale také cílem;add rax, rbiuloží výsledek dorax. Pokud bylo místo toho zobrazeno sestavení s operátory, měli bychomrbi += raxarax += 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_Relaobsahují explicitní doplněk. Záznamy typuElf32_Relulož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í.