Hva er et “ tillegg ”?

Fra Learning Linux Binary Analysis av Ryan «elfmaster» O «Neill . På side 32 sier forfatteren,

Flyttingspostene for 32-bit ELF-filer er de samme som for 64-bit, men bruk 32-biters heltall. Følgende eksempel for er objektfilkode vil bli kompilert som 32-bit slik at vi kan demonstrere implisitte tillegg, som ikke er like vanlig i 64-bit. En implisitt tillegg oppstår når omplasseringsposter er lagret i ElfN_Rel typestrukturer som ikke inneholder en r_addend -feltet, og derfor lagres tillegget i selve flyttemålet. 64-bit-kjørbare filer bruker en tendens til å bruke ElfN_Rela -strukturene som inneholder et eksplisitt tillegg . Jeg synes det er verdt å forstå begge scenariene, men implisitte tillegg er litt mer forvirrende, så det er fornuftig å bringe lys til dette området.

Hva er den faktiske definisjonen av et «addend» ?

Kommentarer

Svar

Jeg tror det bare betyr «et tall som er lagt til», og i dette tilfellet «tallet som er lagt til grunnlastadressen ( eller segmentadressadresse) for å beregne den endelige pekeren for denne flyttingen «.

La oss forestille oss at når vi laster inn vårt binære minne i 0x400000, har vi en peker på 0x401234 som peker til 0x405678. (Hvis i stedet vi lastet binærbasen på 0x800000, så dette skal peke på 0x805678, derfor må den flyttes.) Jeg vet ikke ELF, men jeg leser dette er at

  • in t Han implisitt tilfeller flyttetabellen lagrer bare forskyvninger i binærfilen din, i dette tilfellet 0x1234, og i vår binære ved offset 0x1234 lagrer vi måloffset 0x5678. Derfor blir flytting

    for hver adresse A i flyttetabellen *(base + A) += base

    (Dette er hvordan omplasseringstabeller fungerer i PE-filer.)

  • i det eksplisitte tilfellet lagrer flyttetabellen både forskyvningen i din binære og måloffset, dvs. 0x1234 0x5678. Så flytting her er

    for hvert adressepar A, B i flyttetabellen *(base + A) = base + B

    Jeg vet ikke hva som går i binærfasen ved utligning 0x1234 i dette tilfellet.

Svar

  • Augend er et begrep som betyr et tall som er underlagt tillegg
  • Addend er tallet du skal legge til.

Fra Dictionary.com ,

Har du noen gang funnet at du stirrer på et papir med“ 3 + 4 ”Skrevet på den, og lurte på“ hva er riktig ord for hver av disse to respektive størrelsene? ”Nei? Det første tallet er augend og tallet som legges til er addend.

Du kan se et diagram over andre matematiske termer her på Wikipedia «s » Beregningsresultater « ,

Beregningsresultater

Hvorfor spesielle vilkår her?

  • Vel, det er sannsynlig fordi add rbi, rax faktisk vil lagre resultatet i rbi. Så å kjenne det første argumentet er ikke bare et argument til add, men målet; add rax, rbi lagrer resultatet i rax. Hvis montering ble vist med operatører i stedet, ville vi ha rbi += rax og rax += rbi.
  • Fordi addend er ikke alltid en forskyvning, og augend er ikke alltid basen. Selv om «offset» i dette spesifikke eksemplet er langt mer passende.
  • I dette spesifikke tilfellet kan begrepet «implisitt forskyvning» bli funnet i Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 ,

    … bare Elf32_Rela oppføringer inneholder et eksplisitt tillegg. Oppføringer av typen Elf32_Rel lagre et implisitt tillegg på stedet som skal endres. Avhengig av prosessorarkitekturen, kan det ene eller det andre skjemaet være nødvendig eller mer praktisk.Derfor kan en implementering for en bestemt maskin bruke ett skjema eksklusivt eller en eller annen form avhengig av kontekst.

Svar

Addend er ganske enkelt «et tall som skal legges til til en annen «, ifølge Merian Webster .

Kommentarer

  • Det var allerede oppgitt i det eksisterende svaret. Du kan legge til litt mer i svaret ditt for å gjøre det mer informativt.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *