Ich bin neu zu Qemu und ich habe gelesen, dass es für eine SingleStep-Modus-Emulation ermöglicht. Dies ist hilfreich, da ich versuche, in jedem Zyklus einige Adressen des physischen RAMs auszugeben. Leider ist die qemu-Dokumentation sehr schlecht. Ich weiß, wie man den Singlestep-Modus vom Qemu-Monitor aus aktiviert, aber ich habe keine Ahnung, wohin ich den Code setzen soll, den ich bei jedem Schritt ausführen möchte. Hat jemand irgendwelche Informationen darüber?Wie wird der Einzelschrittmodus in QEMU verwendet?
Antwort
können Sie gdb verwenden, um mit dem
--gdb tcp dem Gast zu befestigen ::
Option Qemu und dann
$ gdb <binary>
(gdb) symbol-file <sym file>
(gdb) target remote <host>:<port number>
(gdb) b <function>
(gdb) c
'b' setzt einen Breakpoint verwenden. 'n' 's' 'i' kann verwendet werden, um den Code zu durchlaufen. „Info“ in GDB-Modus eingeben, werden weitere Informationen zeigen
Und nun gibt es -sylestep Modus - nicht sicher, wie das funktioniert - vielleicht wird bei jedem schritt ein bruchpunkt für gdb ausgelöst? –
Hier ist ein detaillierterer QEMU GDB Setup-Leitfaden: https://stackoverflow.com/a/33203642/895245 –
http://www.xenproject.org/help/questions-and-answers/problem-with-vga-passthrough.html
Von Link oben ist die Befehlszeilenoption für Singlestep-Modi für QEMU eingeben. Als nächstes ist der Quellcode für QEMU (http://wiki.qemu.org/Download)
Die Funktion monitor.c zu erhalten: do_singlestep (Monitor * mon, Konst QDict * QDict)
nur einfach ein Flag "Singlestep". Beachten Sie, dass dies nicht mit dem "singlestep_enabled" übereinstimmt, bei dem die Hardware-Einzelschrittemulation emuliert wird.
(globale Variable ist in vl.c deklariert).
Nun schauen in alle Funktionen in targt-i386/translate.c - wobei „Singlestep“ Flagge getestet sind:
if (singlestep) {
gen_jmp_im(pc_ptr - dc->cs_base);
gen_eob(dc);
break;
}
Dies ist der Ort, an dem die Binärdateien entweder ausgeführt werden (oder „übersetzt“ um genauer zu sein), oder sonst Hardware-Ausnahme ausgelöst und Handler (zum Beispiel). Wenn es irgendein Verhalten gibt, das du ändern möchtest, kannst du es vielleicht hier versuchen?
Hat Ihnen die Antwort von @peter geholfen? – stackoverflowwww
Related: https://reverseengineering.stackexchange.com/questions/4738/using-qemu-monitor-interface-to-extract-execution-traces-from-a-binary –