Ich treffe Program received signal SIGSEGV
Fehler beim Versuch, Adresse der Aufrufanweisung zu überschreiben.
Ich speichere Adresse des Anrufarguments (Adresse 0x8048579) in eax und neuen Wert in edx (0xb7fb773a). Pro mein Verständnis Anweisung mov %edx,(%eax)
sollte das tun, aber es schlägt fehl.
Was mache ich falsch?
Dies ist Teil meiner Universität Aufgabe, also kein echtes System schaden :-)Programm empfangen Signal SIGSEGV beim Schreiben in Code-Abschnitt
-Code wird:
0x08048566 <+35>: mov -0x8(%ebp),%edx
0x08048569 <+38>: mov -0x4(%ebp),%eax
=> 0x0804856c <+41>: mov %edx,(%eax) // Fails here.
0x0804856e <+43>: movl $0x0,(%esp)
0x08048575 <+50>: call 0x8048370 <[email protected]>
Register:
eax 0x8048579 134514041
edx 0xb7fb773a -1208256710
Fehler:
Program received signal SIGSEGV, Segmentation fault.
0x0804856c in foo (argv=0x58575655) at my_code.c:34
// Update 1: CPU-Info:
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 69
Stepping: 1
CPU MHz: 2306.609
BogoMIPS: 4613.21
L1d cache: 32K
L1d cache: 32K
L2d cache: 6144K
Gibt es eine Möglichkeit, das überprüfen? – Tigran