32Loppu
Yhteenveto ja jatkopolku
Helppo10MIN
Yhteenveto ja jatkopolku
Olet käynyt läpi x86-assemblyn perusteet: konekielestä rekistereihin, hypyistä ja silmukoista funktioihin ja kutsupinoon, idiomien lukemisesta puskurin ylivuodon (buffer overflow) mekaniikkaan. Lopuksi siirryit selaimesta oikeaan ympäristöön: nasm, ld ja oikeat Linux-syscallit. Tämä on iso pala matalan tason ymmärrystä. Kerrataan, mitä reppuun jäi.

Mitä opimme
- Konekieli ja assembly: prosessori suorittaa numeroita; assembly on niiden ihmisystävällinen muoto, jonka assembleri kääntää konekieleksi.
- Numerojärjestelmät, datatyypit, endianness, two's complement: sama bittikuvio voidaan tulkita monella tavalla; tulkinta on aina ohjelman vastuulla.
- Rekisterit (register) ja
MOV: 32-bittisetEAX-EDXja osoitin- ja indeksirekisterit; 64-bittisetRAX-R15, ja miksiMOV EAX, XnollaaRAX:n ylemmän puoliskon. - Aritmetiikka:
ADD,SUB,INC,DEC;EFLAGS-liput;MUL/IMULjaDIV/IDIVkäyttävätEDX:EAX-paria. - Bittioperaatiot ja siirrot:
AND(maskaus),OR(asettaminen),XOR(kääntäminen, nollaus, XOR-cipher),SHL/SHR/SARkahden potenssin kerto- tai jakolaskuna,ROL/ROR. LEA: kompakti aritmetiikan ja osoitelaskennan oikotie, joka ei sotke lippuja.- Vertailu ja hypyt:
CMPjaTESTpäivittävät liput; ehdolliset hypyt (JE/JNE/JL/JG/...) rakentavat if/else-rakenteet;JMPon ehdoton. - Silmukat: nimiö ja ehdollinen hyppy taaksepäin;
LOOPyhdistääDEC ECX+JNZ. - Muisti ja
.data-osio:db/dw/dd, hakasulkeet, osoitteenmuodostus[kanta + indeksi*skaalaus + poikkeama], taulukoiden läpikäynti. - Funktiot ja kutsupino:
CALL/RET,ENTER/LEAVE, pinokehys (stack frame), parametrit[EBP + 8]:sta eteenpäin, paluuarvoEAX/RAX:ssä, cdecl-siivous. - Kutsutavat: cdecl, stdcall ja fastcall 32-bittisesti; System V AMD64 64-bittisesti (parametrit
RDI,RSI,RDX,RCX,R8,R9); kutsujan tallentamat vs. kutsutun tallentamat rekisterit, pinon kohdistus ja red zone. - Merkkijono- ja muistioperaatiot:
MOVS/STOS/LODS/SCASjaREP-prefiksi; miltämemcpy,memsetjastrlennäyttävät kääntäjän tulosteessa. - NASM käytännössä:
section .textjasection .data, globaalit symbolit, output-formaatit (-f elf32,-f elf64,-f bin), linkitysld:llä, C-bridgeextern/global-paria käyttäen, makrot, ja capstone-harjoitus jossa kirjoititstrlen-toteutuksen alusta loppuun. - x86-64-siirtyminen ja ABI (Application Binary Interface): REX-prefix, nollalaajennus 32-bittisistä operaatioista, RIP-suhteellinen osoitus, PIE (Position Independent Executable), syscall-ABI (
syscallvs.int 0x80) ja pinon 16-tavun kohdistusCALL-hetkellä. - Stack-pohjainen puskurin ylivuoto: miten paluuosoite ylikirjoittuu pinossa ja miksi modernit suojaukset (stack canary, ASLR, NX) tekevät klassisesta hyökkäyksestä vaikean. Käsiteltiin osiossa "Lue ja ymmärrä konekoodia".
1 / 5
Hakatemia Pro
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.