Enviando uma interrupção não mascarável para uma máquina virtual com o VMware Fusion

3

Estou usando uma máquina virtual para depurar o kernel no Mac OS X porque é mais barato e mais conveniente do que outro computador.

Infelizmente, ao contrário do equivalente no Windows, não é possível usar o depurador para parar o kernel. Para pará-lo, você tem que enviar a máquina uma interrupção não-mascarável. Em uma máquina física, você pode fazer isso com os sinalizadores de depuração corretos na inicialização e, em seguida, segurando as duas teclas enquanto pressiona o botão liga / desliga. No entanto, essa combinação de teclas não pode ser realizada em uma máquina virtual.

Eu encontrei um script desleixado que suspende a máquina virtual, edita o estado suspenso para indicar que uma NMI está pendente e a retoma, mas isso parece uma perda de tempo.

É possível enviar uma interrupção não mascarável para uma máquina virtual com o VMware Fusion?

    
por zneak 03.09.2014 / 16:51

1 resposta

1

Você pode definir / adicionar o sinalizador 0x4 bit ao argumento debug da variável boot-args por meio do comando nvram . Aqui está um exemplo:

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

Como descrito aqui , entre os outros argumentos, o debug=0x4 sinalizador permite que você caia no depurador no NMI. Isso significa que você pode pressionar Command-Option-Control-Shift-Escape em sua VM e soltar no depurador a qualquer momento (por algum motivo, você também pode precisar pressionar fn se a combinação de chaves mencionada acima não funcionar).

Eventualmente, após definir os pontos de interrupção, inspecionar a memória, imprimir um backtrace etc., você precisará digitar continue para o kernel retomar a execução.

    
por 03.04.2017 / 14:24