Ausgabe in Assembler [GNU]

Hallihallo,

ich versuche hier gerade ein Programm zu schreiben, dass den Wert eines Registers ausgeben soll. Zumindest war das der ursprüngliche Gedanke. Auch wenn ich versuche, einen Wert in einer Variablen oder ähnlichem abzuspeichern, funktioniert das leider noch nicht ganz.

Hier mal mein Programm, wo ich versuche, Platz auf dem Stack zu machen, dort einen Wert zu schreiben (C++: int a = 1;) und diesen dann ausgeben:

Code:
.section .data
.section .text
.globl _start

_start:
  # save the old base pointer
  push %ebp
  mov %esp, %ebp
  
  # Make space on the stack
  # should be at least one byte
  sub $0x10, %esp
  
  # Write to Stack
  movl $1, -0x4(%ebp)
  
  # Write something to stdout
  movl $4, %edx
  movl -0x4(%ebp), %ecx
  movl $1, %ebx
  movl $4, %eax
  int $0x80

  # end exit
  movl $0, %ebx
  movl $1, %eax
  int $0x80

Leider funktioniert mein Code nicht so ganz wie ich das möchte. Kann mir jemand vielleicht sagen, woran es liegt?
 
Leider funktioniert mein Code nicht so ganz wie ich das möchte.
Das Bild ist zwar unscharf, aber meine Glaskugel sagt mir, dass folgende Änderungen ausreichen sollten ;)
Code:
  # Write to Stack
  movl $0x574443, -0x4(%ebp) # "printable" Zeichen lassen sich irgendwie besser ausgeben ;)
...
 # Write something to stdout
  movl $4, %edx
  lea -0x4(%ebp), %ecx # wir müssen in ECX die Adresse des Buffer übergeben, nicht den Inhalt
  movl $1, %ebx
  movl $4, %eax
  int $0x80
 
Danke für deine Ausführungen. Mir ist kurz davor auch aufgefallen, dass eine 1 als Wert nicht bedeutet, dass ich auch eine 1 rausbekomme. Als ich dann angefangen habe, den Wert 0x41 oder ähnliches reinzuschreiben, kam dann auch etwas raus, was ich lesen konnte :D:D (ok, ich musste noch ein bisschen frimeln, aber das war so der Knackpunkt).
 
Zurück
Oben