Mikä on “ lisäys ”?

Lähettäjä Linuxin binaarianalyysin oppiminen , kirjoittanut Ryan ”elfmaster” O ”Neill . Kirjoittaja ilmoittaa sivulla 32

32-bittisten ELF-tiedostojen siirtotietueet ovat samat kuin 64-bittisten, mutta käytä 32-bittisiä kokonaislukuja. Seuraava esimerkki objektitiedostokoodista kootaan 32-bittiseksi, jotta voimme osoittaa implisiittisiä lisäyksiä, joita ei käytetä niin yleisesti 64-bittisissä. implisiittinen lisäys tapahtuu, kun siirtotietueet on tallennettu ElfN_Rel -tyyppisiin rakenteisiin, jotka eivät sisällä r_addend -kenttä ja siksi lisäys tallennetaan itse siirtotavoitteeseen. 64-bittiset suoritettavat tiedostot käyttävät yleensä ElfN_Rela -rakenteita, jotka sisältävät nimenomaisen lisäyksen . Mielestäni on syytä ymmärtää molemmat skenaariot, mutta implisiittiset lisäykset ovat hieman hämmentävämpiä, joten on järkevää tuoda valoa tälle alueelle.

Mikä on ”lisäyksen” todellinen määritelmä?

Kommentit

Vastaa

Luulen, että se tarkoittaa vain ”numeroa, joka on lisätty”, ja tässä tapauksessa ”numeroa, joka lisätään peruskuormitusosoitteeseen ( tai segmenttikuormitusosoite) laskeaksesi tämän siirtämisen viimeisen osoittimen ”.

Kuvitellaan, että kun lataamme binaarimme muistiin 0x400000, meillä on osoitin 0x401234, joka osoittaa kohtaan 0x405678. (Jos sen sijaan ladasimme binaarin arvoon 0x800000, niin tämän pitäisi osoittaa 0x805678, joten se tarvitsee uudelleensijoittamista.) En tiedä ELF: ää, mutta luin tästä, että

  • in t hän viittaa implisiittiseen tapaukseen, jolloin siirtotaulukko tallentaa juuri offsetit binaariin, tässä tapauksessa 0x1234, ja binäärissämme offsetissa 0x1234 tallennamme kohdesiirteen 0x5678. Siksi siirtämisestä tulee

    jokaiselle osoitteelle A siirtotaulukossa *(base + A) += base

    (Tämä on se, miten siirtotaulukot toimivat PE-tiedostoissa.)

  • nimenomaisessa tapauksessa siirtotaulukko tallentaa sekä siirtymän binaariin että kohdesiirtoon, eli 0x1234 0x5678. Joten tässä on

    jokainen osoitepari A, B siirtotaulukossa *(base + A) = base + B

    En tiedä mitä binäärissä tapahtuu tässä tapauksessa siirtymässä 0x1234.

Vastaa

  • Augend on termi, joka tarkoittaa numeroa, joka on lisättävä
  • Lisää on numero, jonka lisäät.

Alkaen Dictionary.com ,

Oletko koskaan löytänyt itsesi tuijottavan paperia, jossa on“ 3 + 4 ” ”Kirjoitettu siihen ja miettinyt, mikä on oikea termi kullekin näistä vastaavista määristä? Ei? Ensimmäinen numero on augend ja siihen lisätty numero on lisäys.

Voit nähdä kaavion muista matematiikkatermeistä täältä Wikipedia ”s ” Laskentatulokset ” ,

Laskentatulokset

Miksi tässä olevat erityisehdot?

  • No, se on todennäköistä, koska kokoonpanossa add rbi, rax todella tallentaa tuloksen kansioon rbi. Joten ensimmäisen argumentin tunteminen ei ole vain argumentti add: lle, vaan kohteelle; add rax, rbi tallentaa tuloksen tiedostoon rax. Jos kokoonpano näytettiin sen sijaan operaattoreiden kanssa, meillä ”d on rbi += rax ja rax += rbi.
  • Koska addend ei ole aina offset, eikä korotus ole aina perusta. Vaikka tässä erityisessä esimerkissä ”offset” on paljon sopivampi.
  • Tässä erityistapauksessa termi ”implisiittinen offset” löytyy Tool Interface Standard (TIS) Suoritettava ja linkittävä muoto (ELF) -määrityksen versiosta 1.2 ,

    … vain Elf32_Rela -merkinnät sisältävät nimenomaisen lisäyksen. Tyypit Elf32_Rel tallenna implisiittinen lisäys muokattavaan sijaintiin. Suorittimen arkkitehtuurista riippuen yksi tai toinen muoto voi olla tarpeen tai helpompaa.Näin ollen tietyn koneen toteutus voi käyttää vain yhtä muotoa tai kumpaakin muotoa kontekstista riippuen.

Vastaa

Lisää on yksinkertaisesti ”lisättävä numero toiselle ”, Merian Websterin mukaan .

Kommentit

  • Se oli jo olemassa olevassa vastauksessa. Voit lisätä vastaukseesi hieman enemmän, jotta se olisi informatiivisempi.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *