Ich habe QEMU mit gdb debugged.gdb stoppt nicht bei gegebenem Hardware Watchpoint mit x86 cpu
Um unerwartete Speicherzugriffe zu verfolgen, habe ich einen Hardware-Watchpoint auf eine bestimmte Adresse eingestellt. Gdb stoppt jedoch nicht, während der Wert in der Adresse geändert wird. Dies ist das erste Mal, dass ich die Hardware-Watchpoint-Funktion in gdb benutzt habe.
Ich weiß nicht, warum das passiert ist, und möchte dieses Problem lösen.
Das Folgen ist der gdb Konsolenausgang.
$ gdb --args ./qemu-system-x86_64 -m 512 -hda linux-0.2.img
...
(gdb) x 0x7fffbbe8e000
0x7fffbbe8e000: 0x00000000
(gdb) watch *(int *)0x7fffbbe8e000
Hardware watchpoint 1: *(int *)0x7fffbbe8e000
(gdb) c
Continuing.
[Thread 0x7fffc2dad700 (LWP 3162) exited]
[New Thread 0x7fffc2dad700 (LWP 3169)]
[Thread 0x7fffc2dad700 (LWP 3169) exited]
[New Thread 0x7fffc2dad700 (LWP 3173)]
qemu: /home/nutsman/git_repo/M-QEMU/qemu-2.3.1/exec.c:3007: ldl_phys_internal: Assertion `val1 == val' failed.
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffc23ca700 (LWP 3163)]
0x00007ffff61f4cc9 in __GI_raise ([email protected]=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: no such a file or directory
(gdb) x 0x7fffbbe8e000
0x7fffbbe8e000: 0x6c7cebfa
Danke, Russisch beschäftigt. Der Speicher ist User-Space und wird mit MAP_PRIVATE zugewiesen, so dass andere Programme möglicherweise den Inhalt nicht ändern. Können Sie mir alternative Tools mitteilen, um den Teil des QEMU zu finden, der den Wert ändert, oder Systemaufrufe, die in den Speicher des Benutzerspeichers schreiben können?
Ich löse dieses Problem mit der Antwort von Angestellter Russisch. Vielen Dank – nutsman