HSG

Aktuelle Seite: HSG/Fächer/Informatik/Assembler

Beispiel

Es soll folgendes Programm div.asm mit dem Debugger gdb untersucht werden.

# einfache Division
.section .data
a: .byte 142
b: .byte 17
q: .byte 0
r: .byte 0
.section .text
.globl _start
_start:
    movb (a), %al
    divb (b)  # (a) == (b) * %al + %ah
    mov %ah, (r)
    mov %al, (q)

    movl $1, %eax
    movl (r), %ebx
    int $0x80

Zunächst sollte man beim Assemblieren mit dem Schalter -g die Symboltabelle anhängen. Es kann auch interessant sein, sich mit dem Schalter -a das erzeugte Listing ausgeben zu lassen.

as -a div.asm -o div.o -g

Listing

Das Programm ist noch nicht gelinkt, daher beginnen die Speicheradressen im Daten- und und im Code-Segment bei 0000. Nach dem Linken kann man das Programm ausf�hren.

ld div.o -o div

Nach dem Ausführen der Datei div ermittelt man den Rückgabewert des Programms. Er beträgt 6, das ist der Rest der Division 142:17. Wie kommt man an den Quotienten ran?

Linker

Der Debugger wird nun mit

gdb div

gestartet. Er meldet sich mit dem Prompt (gdb). Zuerst soll der Speicher untersucht werden. Das geht mit dem Befehl examine, abgekürzt x.

gdb0

Wie ist das alles zu interpretieren? Was bewirkt &, was /b? Hier hilft (hier fehlt ein link).

Nun soll das Programm schrittweise durchgegangen werden und dabei die Register- und Speicherinhalte beobachtet werden.

gdb1

Was bewirkt list, b 11, p/x $eax, si, x/b &r ? b kürzt break ab, p print.

Links