Från Learning Linux Binary Analysis av Ryan ”elfmaster” O ”Neill . På sidan 32 säger författaren,
Omplaceringsposterna för 32-bitars ELF-filer är desamma som för 64-bitars, men använd 32-bitars heltal. Följande exempel för objektfilkod kommer att sammanställas som 32-bitars så att vi kan visa implicita tillägg, som inte är lika vanliga i 64-bitars. En implicit tillägg inträffar när omplaceringsposter lagras i
ElfN_Rel
typstrukturer som inte innehåller enr_addend
-fältet och därför lagras tillägget i själva omplaceringsmålet. 64-bitars körbara filer tenderar att användaElfN_Rela
structts som innehåller en explicit tillägg . Jag tycker att det är värt att förstå båda scenarierna, men implicita tillägg är lite mer förvirrande, så det är vettigt att föra ljus till detta område.
Vad är den faktiska definitionen av en ”addend” ?
Kommentarer
- english.stackexchange.com/search?q=addend
- Addend + addend, minuend-subtrahend, multiplicand * multiplier, dividend / divisor
Svar
Jag tror att det bara betyder ”ett nummer som” har lagts till ”, och i det här fallet” det nummer som ”har lagt till baslastadressen ( eller segmentbelastningsadress) för att beräkna den slutliga pekaren för denna omplacering ”.
Låt oss föreställa oss att när vi laddar vårt binära minne i minnet vid 0x400000 har vi en pekare vid 0x401234 som pekar på 0x405678. (Om istället vi laddade binärminnet vid 0x800000 då borde detta peka på 0x805678, därför måste det flyttas om.) Jag vet inte ELF, men min läsning av detta är att
-
in t han implicit fall omplaceringstabellen lagrar bara förskjutningar i din binära, i det här fallet 0x1234, och i vår binära vid offset 0x1234 lagrar vi måloffset 0x5678. Därför blir omplacering
för varje adress
A
i omplaceringstabellen*(base + A) += base
(Detta är hur omplaceringstabeller fungerar i PE-filer.)
-
i det explicita fallet lagrar omplaceringstabellen både offset i din binära och måloffset, dvs. 0x1234 0x5678. Så omplacering här är
för varje adresspar
A, B
i omplaceringstabellen*(base + A) = base + B
Jag vet inte vad som händer i binären vid offset 0x1234 i det här fallet.
Svar
- Augend är en term som betyder ett tal som är föremål för tillägg
- Addend är det nummer du ska lägga till.
Från Dictionary.com ,
Har du någonsin funnit att du stirrar på ett papper med“ 3 + 4 ”Skrev på den och undrade” vad är den rätta termen för var och en av dessa två respektive kvantiteter? ”Nej? Den första siffran är augend och numret som läggs till det är tillägget.
Du kan se ett diagram över andra matematiska termer här på Wikipedia ”s ” Beräkningsresultat ” ,
Varför speciella termer här?
- Tja, det är troligt för att
add rbi, rax
faktiskt kommer att lagra resultatet irbi
. Så att känna till det första argumentet är inte bara ett argument tilladd
utan målet;add rax, rbi
lagrar resultatet irax
. Om montering visades med operatörer istället hade virbi += rax
ochrax += rbi
. - Eftersom addend är inte alltid en förskjutning, och augend är inte alltid basen. Men i detta specifika exempel är ”offset” mycket mer lämpligt.
-
I detta specifika fall finns termen ”implicit offset” i Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 ,
… endast
Elf32_Rela
poster innehåller ett uttryckligt tillägg. Inlägg av typenElf32_Rel
lagra en implicit tillägg på den plats som ska ändras. Beroende på processorarkitekturen kan en eller annan form vara nödvändig eller bekvämare.Följaktligen kan en implementering för en viss maskin endast använda en form eller endera formen beroende på sammanhang.
Svar
Addend är helt enkelt ”ett nummer som ska läggas till till en annan ”, enligt Merian Webster .
Kommentarer
- Det var redan anges i det befintliga svaret. Du kan lägga till lite mer i ditt svar för att göra det mer informativt.