Vad är en “ tillägg ”?

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 en r_addend -fältet och därför lagras tillägget i själva omplaceringsmålet. 64-bitars körbara filer tenderar att använda ElfN_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

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

Beräkningsresultat

Varför speciella termer här?

  • Tja, det är troligt för att add rbi, rax faktiskt kommer att lagra resultatet i rbi. Så att känna till det första argumentet är inte bara ett argument till add utan målet; add rax, rbi lagrar resultatet i rax. Om montering visades med operatörer istället hade vi rbi += rax och rax += 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 typen Elf32_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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *