HAKATEMIA
20NASM käytännössä

Sektiot ja symbolit

Keskitaso25MIN

Sektiot ja symbolit

NASM-lähdetiedoston runko jakaantuu osioihin (sections). Linkkeri (linker) sijoittaa kunkin osion lopulliseen binääriin omaan paikkaansa, omilla muistioikeuksillaan.

SektioKäyttöOikeudet
.textsuoritettava koodiluku + suoritus
.dataalustetut globaalit muuttujatluku + kirjoitus
.bssalustamattomat globaalit (varataan tilaa, ei ladata levyltä)luku + kirjoitus
.rodatavakiot, merkkijonoliteraalitluku

NASM-syntaksi on suora:

NASM
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ä:

DirektiiviKokoEsimerkki
db1 tavudb 0x41, 'B', 0x43
dw2 tavua (word)dw 0x1234
dd4 tavua (dword)dd 0xDEADBEEF
dq8 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:

NASM
1global   my_func
2extern   other_func

global 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.

TERMINALASCIINEMA

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.

1 / 2
Hakatemia Pro

Hakkeroinnin oppiminen alkaa tästä

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