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žívatElfN_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
- 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
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 „ ,
Proč jsou zde speciální výrazy?
- No, je to pravděpodobné, protože v sestavě
add rbi, rax
skutečně uloží výsledek dorbi
. Znát první argument tedy není jen argumentemadd
, ale také cílem;add rax, rbi
uloží výsledek dorax
. Pokud bylo místo toho zobrazeno sestavení s operátory, měli bychomrbi += rax
arax += 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 typuElf32_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í.