Sektiot ja symbolit
Sektiot ja symbolit
NASM-lähdetiedoston runko jakaantuu osioihin (sections). Linkkeri (linker) sijoittaa kunkin osion lopulliseen binääriin omaan paikkaansa, omilla muistioikeuksillaan.
| Sektio | Käyttö | Oikeudet |
|---|---|---|
.text | suoritettava koodi | luku + suoritus |
.data | alustetut globaalit muuttujat | luku + kirjoitus |
.bss | alustamattomat globaalit (varataan tilaa, ei ladata levyltä) | luku + kirjoitus |
.rodata | vakiot, merkkijonoliteraalit | luku |
NASM-syntaksi on suora:
1section .data
2greeting: db "Moi!", 0
3
4section .bss
5buffer: resb 256
6
7section .text
8global _start
9_start:
10 ; ...Datadirektiivit
Vakioarvoja lisätään d_-perheellä:
| Direktiivi | Koko | Esimerkki |
|---|---|---|
db | 1 tavu | db 0x41, 'B', 0x43 |
dw | 2 tavua (word) | dw 0x1234 |
dd | 4 tavua (dword) | dd 0xDEADBEEF |
dq | 8 tavua (qword) | dq 0x0123456789ABCDEF |
.bss:ssa käytetään res_-perhettä, joka VARAA mutta ei alusta: resb, resw, resd, resq.
Symbolit ja niiden näkyvyys
Jokainen nimiö (label) on symboli (symbol). Symboli kuvaa osoitteen, ei arvoa. Symbolit ovat oletuksena paikallisia käännösyksikölle, eli vain saman .asm-tiedoston sisältä näkyviä. Jos haluat että toinen tiedosto näkee symbolin, merkitse se globaaliksi:
1global my_func
2extern other_funcglobal julistaa: "tämä symboli on muiden saatavilla". extern: "tämän symbolin määrittelee joku muu, älä yritä resolvoida sitä täällä".
Linkkerin tehtävä on yhdistää global ja extern: niin syntyy yksi binääri kahdesta tai useammasta objektitiedostosta.
Symbolitaulukko binäärissä
Kun NASM kääntää lähteen objektitiedostoksi (.o), kaikki nimet päätyvät symbolitaulukkoon (symbol table). nm symbols listaa ne. objdump -t näyttää tarkemmin sektion + tyypin. Tämä taulu jää binääriin myös käännöksen jälkeen, paitsi jos strip poistaa sen erikseen.
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.