Senden eines nicht maskierbaren Interrupts an eine virtuelle Maschine mit VMware Fusion

Senden eines nicht maskierbaren Interrupts an eine virtuelle Maschine mit VMware Fusion

Ich verwende eine virtuelle Maschine zum Kernel-Debuggen unter Mac OS X, da dies günstiger und praktischer ist als ein anderer Computer.

Leider ist es im Gegensatz zum Windows-Äquivalent nicht möglich, den Kernel mit dem Debugger anzuhalten. Um ihn anzuhalten, müssen Sie der Maschine einen nicht maskierbaren Interrupt senden. Auf einer physischen Maschine können Sie das tun, indem Sie beim Booten die richtigen Debug-Flags setzen und dann beide Tasten gedrückt halten, während Sie den Einschaltknopf drücken. Auf einer virtuellen Maschine lässt sich diese Tastenkombination jedoch nicht ganz realisieren.

Ich habe einen ... gefundenschlampiges SkriptDadurch wird die virtuelle Maschine angehalten, der angehaltene Zustand wird bearbeitet, um anzuzeigen, dass ein NMI aussteht, und die Maschine wird dann fortgesetzt. Dies scheint jedoch reine Zeitverschwendung zu sein.

Ist es möglich, mit VMware Fusion einen nicht maskierbaren Interrupt an eine virtuelle Maschine zu senden?

Antwort1

0x4Sie können das Bit-Flag über den Befehl zum debugArgument der boot-argsVariablen setzen/hinzufügen nvram. Hier ist ein Beispiel:

sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"

Wie beschriebenHier, neben den anderen Argumenten debug=0x4ermöglicht Ihnen das Flag, in den Debugger auf NMI zu wechseln. Das bedeutet, dass Sie Command-Option-Control-Shift-Escapeauf Ihrer VM drücken und jederzeit in den Debugger wechseln können (aus irgendeinem Grund müssen Sie möglicherweise auch drücken, fnwenn die oben erwähnte Tastenkombination nicht funktioniert).

Schließlich müssen Sie, nachdem Sie Haltepunkte gesetzt, den Speicher überprüft, einen Backtrace gedruckt usw. haben, etwas eingeben, continuedamit der Kernel die Ausführung fortsetzt.

verwandte Informationen