Rekisterit ja niiden käyttö
Mitä rekisterit ovat?
Nykyaikaiset tietokoneet tarvitsevat fyysisen muistin lisäksi muutakin toimiakseen. Prosessorin sisällä on pieni muistiosa nimeltään rekisterit, jotka ovat erittäin nopeita, koska prosessori voi käyttää niitä suoraan.
Näillä rekistereillä on kaikilla oma erityinen käyttötarkoituksensa. Alla oleva kuva sisältää yleisrekisterit sekä stack- ja base-rekisterit (näistä lisää myöhemmin).
Näiden rekistereiden tyypilliset käyttötarkoitukset ovat seuraavanlaiset.
Yleisrekisterit
EAX: Akkumulaattori: laskutoimitusten oletustulosrekisteri ja paluuarvon rekisteri funktiokutsuissa.EBX: Base: historiallisesti muistiosoitteiden kantarekisteri, käytännössä yleisrekisteri joka säilyy funktiokutsujen yli (callee-saved).ECX: Counter: silmukkalaskuri (LOOP-käsky käyttää suoraan tätä) ja siirto-käskyjen siirtomäärä.EDX: Data:MUL/DIV-käskyjen ylimmät 32 bittiä (EDX:EAX64-bittisenä parina).
Indeksi- ja osoitinrekisterit (pointterit)
ESI(Source Index) jaEDI(Destination Index): Käytetään usein merkkijono-operaatioissa.EBP(Base Pointer): Käytetään stack kehyksien hallintaan funktiokutsujen aikana.ESP(Stack Pointer): Osoittaa nykyiseen stackin huippuun, jota käytetään funktiokutsujen ja keskeytysten aikana.
Muita olennaisia rekistereitä
Näitä rekistereitä ei käsitellä kuvassa, mutta ne ovat olennaisia x86-arkkitehtuurissa.
EIP(Instruction Pointer): Osoittaa seuraavaan suoritettavaan käskyyn.EFLAGS: Sisältää erilaisia lippuja, jotka osoittavat prosessorin tilan, kuten nollalippu, kantolippu ja keskeytyksen mahdollistavat liput.
Rekisterien käyttö
Abstrakti jää konkreettiseksi vasta kun kokeilet. Avaa moduulin simulaattori ja aja seuraavat rivit askel kerrallaan: vaihda rekistereitä ja katso miten data liikkuu MOV:lla.
1MOV EAX, 10
2MOV EBX, 10
3MOV ECX, EBX
4MOV EAX, ECXMOV-komento tarkoittaa, että siirretään tietoa paikasta toiseen. Käytössä oleva syntaksi on Intel-pohjaista ja se luetaan seuraavalla tavalla.
1MOV KOHDE, LÄHDEToinen tapa siirtää tietoa MOV-komennolla on kun sitä käytetään seuraavan esimerkin mukaisesti.
1MOV EAX, [EBX]Rekisterit sisältävät usein osoittimia tai pointtereita, jossa rekisterin sisältämä arvo ei ole tieto itsessään vaan sijainti, missä tieto sijaitsee. Tämä saattaa olla tuttu konsepti esimerkiksi C-ohjelmointia harrastaneille. Kun assemblyssä rekisteri asetetaan esimerkin tavoin hakasten väliin, se tarkoittaa, että tieto siirretään rekisterin osoittamasta paikasta, ei rekisterin arvoa itsessään. Voit kokeilla tätä seuraavalla koodilla (älä välitä, jos et ymmärrä kaikkia komentoja vielä tässä vaiheessa).
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.