Отправка немаскируемого прерывания на виртуальную машину с помощью VMware Fusion

Отправка немаскируемого прерывания на виртуальную машину с помощью VMware Fusion

Я использую виртуальную машину для отладки ядра на Mac OS X, потому что это дешевле и удобнее, чем другой компьютер.

К сожалению, в отличие от эквивалента Windows, невозможно использовать отладчик для остановки ядра. Чтобы остановить его, нужно отправить машине немаскируемое прерывание. На физической машине это можно сделать с помощью правильных флагов отладки при загрузке, а затем удерживая обе клавиши при нажатии кнопки питания. Однако эта комбинация клавиш не может быть реализована на виртуальной машине.

Я нашелнеряшливый сценарийкоторый приостанавливает работу виртуальной машины, редактирует состояние приостановки, чтобы указать, что NMI находится в состоянии ожидания, и возобновляет ее, но это выглядит как пустая трата времени.

Можно ли отправить немаскируемое прерывание на виртуальную машину с помощью VMware Fusion?

решение1

Вы можете установить/добавить 0x4битовый флаг к debugаргументу переменной boot-argsчерез nvramкоманду. Вот пример:

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

Как описаноздесь, среди прочих аргументов, debug=0x4флаг позволяет вам перейти в отладчик на NMI. Это означает, что вы можете нажать Command-Option-Control-Shift-Escapeна вашей виртуальной машине и перейти в отладчик в любое время (по какой-то причине вам также может потребоваться нажать , fnесли комбинация клавиш, указанная выше, не работает).

В конце концов, после установки точек останова, проверки памяти, вывода обратной трассировки и т. д., вам нужно будет ввести команду, continueчтобы ядро ​​возобновило выполнение.

Связанный контент