From Tomasz Żok

WprowadzenieDoInformatyki: Asembler

Podstawy teoretyczne

32-bitEAXECXEDXEBXEDIESI
16-bit AX CX DX BX DI SI
8-bit  AHAL  CHCL  DHDL  BHBL        
AXb15b14b13b12b11b10b09b08b07b06b05b04b03b02b01b00
AHb15b14b13b12b11b10b09b08        
AL        b07b06b05b04b03b02b01b00
1234100000010011010010

Instrukcja warunkowa if()

C:

if (n > 4) {
    ...
}

Asembler:

; odpowiednik if
    cmp     eax, 4
    jle     koniec_if
    ...
koniec_if:

Warto zauważyć, że w C programista pisze if() myśląc przy jakim warunku wykonać kod, natomiast w asemblerze programista myśli przy jakim warunku przeskoczyć kod :)

Pętla while()

C:

while (n < 5) {
    ...
    n = n + 1;
}

Asembler:

poczatek_while:
    cmp     eax, 5
    jge     koniec_while
    ...
    add     eax, 1
    jmp     poczatek_while
koniec_while:

Instrukcja jmp to bezwarunkowy skok - zawsze skacze do podanej etykiety, niezależnie od rejestru stanów.

Szablon do własnej pracy

Używany kompilator na zajęciach: http://flatassembler.net/download.php

Przykładowy kod: http://www.cs.put.poznan.pl/tzok/example.asm

format pe console
entry start

include 'win32ax.inc'

section '.import' import data readable
        library msvcrt, 'msvcrt.dll'

        import  msvcrt,\
                printf, 'printf',\
                scanf, 'scanf',\
                system, 'system'

section '.data' data readable writeable
        format_in    db '%d', 0
        format_out   db '%d', 13, 10, 0
        n            dd ?

section '.code' code readable writeable executable
start:
        cinvoke scanf, format_in, n
        mov     eax, [n]
        add     eax, 10
        sub     edx, edx
        mov     ecx, 5
        idiv    ecx
        cinvoke printf, format_out, eax
        cinvoke system, 'pause'
        ret

Komentarz:

Debugowanie

Używany debuger na zajęciach: http://www.ollydbg.de/odbg110.zip

Debugowanie to proces kontrolowanego uruchomienia aplikacji. Oznacza to tyle, że można wykonywać program instrukcja po instrukcji obserwując dokładnie jak zmieniają się wartości w rejestrach i flagi stanu.

Po włączeniu OllyDbg wczytujemy nasz skompilowany program przez opcję File->Open

Legenda:

Aby przejść jedną instrukcję do przodu, naciskamy F8. Po każdym kroku zmienione rejestry oraz flagi zapalają się na czerwono.

Ćwiczenia na laboratorium

Tematy zaawansowane

Retrieved from http://www.cs.put.poznan.pl/tzok/wiki/index.php?n=WprowadzenieDoInformatyki.Asembler
Page last modified on 2013 Nov Mon 4 18:09