Blatt 9 Aufgabe 5

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Blatt 9 Aufgabe 5
Hi,
ich frage mich bei der 5a), ob wir auch immer den alten Wert des %ebp mit auf den Stack speichern sollen.
Tendiere mal zu ja, wollte aber mal nachfragen. Und wenn dem so ist, einfach die alte Adresse auf den Stack pushen? Oder reicht es wenn man old %ebp in den Stack schreibt?

Gruß


Der Basepointer ist auf x86 ein reines Konzept des Programms. Die CPU hat damit nichts zu tun. Wenn es keine Instruktionen gibt, die den [m]%ebp[/m] auf den Stack pushen, dann passiert da auch nichts.

Beim [m]call[/m] wird nur die Rücksprungadresse auf den Stack gepushed und an die angegebene Adresse gesprungen. Mehr passiert da nicht.

Wenn man sich bei sowas nicht sicher ist, einfach mal den Code in nem Debugger ausführen.

$ cat calls.s
a:
	call b
	push $0x42
	call c
	add  $0x4, %esp
	ret

b:
	ret
c:
	ret

main:
	call a
	push $0x43
	call c
	add  $0x4, %esp
	mov  $0x0, %eax
	ret

.globl _start
_start:
	jmp main

Assemblieren:

$ as --32 -o calls.o calls.s

Linken:

$ ld -m elf_i386 calls.o

Und dann mit gdb ausführen und testen:

$ gdb ./a.out
[...]
(gdb) b _start 
Breakpoint 1 at 0x804807b
(gdb) set disassemble-next-line yes
(gdb) r
Starting program: /home/rudis/a.out 

Breakpoint 1, 0x0804807b in _start ()
=> 0x0804807b <_start+0>:       eb e9   jmp    0x8048066 <main>
(gdb) si
0x08048066 in main ()
=> 0x08048066 <main+0>: e8 e9 ff ff ff  call   0x8048054 <a>
(gdb) 
0x08048054 in a ()
=> 0x08048054 <a+0>:    e8 0b 00 00 00  call   0x8048064 <b>
(gdb) x/10x $esp
0xffffd8fc:     0x0804806b      0x00000001      0xffffda93      0x00000000
0xffffd90c:     0xffffdaa5      0xffffdac3      0xffffdada      0xffffdaed
0xffffd91c:     0xffffdb09      0xffffdb24

Damit kann man sich dann bequem den Stack anschauen und etwas experimentieren.

Die Stackadressen passen nicht, für die Aufgabe muss man sich das also noch selbst überlegen. Aber es hilft wenn man sich nicht sicher ist was passiert.


dem ist nichts mehr hinzuzuügen. Daumen hoch.


Vielen dank rudis