BIOS Interruptions, como rastrear e como manipulá-lo no Windows?

-1

Existe uma maneira de ver as interrupções da BIOS que aumentam para o Windows? Posso usar "debug" (comando cmd) para enviar interrupções para o BIOS e rastrear alguns resultados?

    
por Diogo 27.06.2011 / 20:59

2 respostas

2

Interrupções de hardware

Alguém parece ter dito a você que o Windows NT é executado no topo do BIOS, do qual você deduziu que as interrupções são colocadas em campo pelo BIOS, que "aumenta para o Windows".

Isso é completamente errado e um modelo errôneo de como o sistema operacional funciona. Além da ACPI, do modo de gerenciamento do sistema e do suporte VESA (para alguns adaptadores de vídeo), o firmware do BIOS não está envolvido em nada quando o Windows está em execução. Interrupções (SMM à parte) não são colocadas em campo pelo BIOS. Eles são colocados em campo pela Camada de Abstração de Hardware do Windows, que faz todos os pokery de baixo nível com APICs, IDTs e vetores de interrupção necessários para o preenchimento de interrupções e entrega para o kernel do Windows.

Para rastrear a manipulação de sinais de interrupção no Windows NT, é necessário um debug kernel , comunicando-se com um utilitário debugger do kernel . Então, é possível fazer coisas com comandos do depurador, como !idt , !apic e assim por diante.

Instruções de interrupção

Para chamar funções na API de firmware do BIOS - que são (principalmente, mas não universalmente) invocadas com a instrução int e, portanto, confusamente também "interrupções enviadas para o BIOS" - e Para rastrear sua execução, você precisa do DOS (ou algum outro sistema operacional de modo real de 16 bits). Em particular, você precisa de uma ferramenta de depuração do DOS. Você pode executar essa ferramenta em um DOS real, como o OpenDOS ou o FreeDOS, ou em uma máquina DOS virtualizada, como o NTVDM no Windows NT. Esteja ciente de que a última máquina DOS virtual afetará a funcionalidade do firmware.

Não é possível invocar funções da API de firmware do BIOS - que esperam que o processador (variavelmente) esteja no modo real de 16 bits, no modo protegido de 16 bits v8086 ou no modo protegido de 0 bits de 16 bits - em anel protegido de 32 bits 3 modo. O código da máquina simplesmente não será executado corretamente, mesmo se você tivesse uma maneira de mapeá-lo na memória virtual. Tal funcionalidade de firmware é simplesmente inacessível do modo de aplicativo em sistemas operacionais como o Windows NT ou Linux. (Não é realmente útil para aplicativos em tais sistemas operacionais, de qualquer maneira.)

    
por 29.06.2011 / 15:50
1

Provavelmente você pode conseguir isso, afinal, há interrupções constantes passando pela BIOS, creio - eventos como entrada de teclado, disco io, basicamente tudo. Então, eu vou dizer "Sim, existe um caminho".

Como para descobrir uma maneira .. Existe uma comunidade que gerencia seus próprios firmwares de código aberto coreboot . Sugiro ler a documentação do desenvolvedor e, possivelmente, encontrar alguns de seus desenvolvedores no IRC e conversar com eles.

Você precisa fazer isso estritamente no Windows? Se você está interessado apenas em BIOS, você pode ter mais sorte explorando isso usando utilitários do Linux. Mas isso está além das minhas experiências atuais.

Boa sorte.

    
por 27.06.2011 / 23:13