HAKATEMIA
06Hands-on

Rekisterit ja niiden käyttö

Keskitaso20MIN

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). x86-yleisrekisterit ja niiden 16/8-bittiset osat (EAX/AX/AH/AL ...), sekä ESI/EDI/ESP/EBP. 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:EAX 64-bittisenä parina).

Indeksi- ja osoitinrekisterit (pointterit)

  • ESI (Source Index) ja EDI (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.

X86
1MOV EAX, 10
2MOV EBX, 10
3MOV ECX, EBX
4MOV EAX, ECX

MOV-komento tarkoittaa, että siirretään tietoa paikasta toiseen. Käytössä oleva syntaksi on Intel-pohjaista ja se luetaan seuraavalla tavalla.

X86
1MOV KOHDE, LÄHDE

Toinen tapa siirtää tietoa MOV-komennolla on kun sitä käytetään seuraavan esimerkin mukaisesti.

X86
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).

Koodi
Konsoli
Rekisterit
EAX0
EBX0
ECX0
EDX0
EIP0
ESP256
ESI0
EDI0
EFLAGS
ZF0
SF0
OF0
CF0
DF0
PF0
Muisti
0000
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0010
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0020
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0030
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0040
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0050
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0060
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0070
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0080
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0090
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00a0
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00b0
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00c0
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00d0
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00e0
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00f0
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
1 / 2
Hakatemia Pro

Hakkeroinnin oppiminen alkaa tästä

Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.