RDPMC, Windows e MinGW

Well… No Windows (versão 7 e 10, x86-64) o pequeno teste com a instrução RDPMC que mostrei no artigo anterior (aqui) faz o processo disparar um “Access Violation” (na antiga nomenclatura da Microsoft… Hoje é só “crash” mesmo!). Isso significa que, ao que parece, ele mantém o bit PCE do registrador CR4 zerado para processos executados no ring 3. E, é claro, que isso coloca alguma pressão no processador, pois alterar CR4, assim como CR3, no chaveamento de privilegio, causa problemas com TLBs e com o cache, tornando o sistema leeeeennnntoooo… Dai o Windows é lerdo, c.q.d.

E, falando em Windows… Eu uso o MinGW32 e o MinGW-w64 para criar executáveis para Windows à partir do Linux. Nada mais simples. Os pacotes são mingw32 e mingw-w64. Basta instalá-los no seu Linux. Além da diferença óbvia — o primeiro gera código de 32 bits e o último, 64 — a versão de 32 bits exige que você carregue, junto com o executável gerado pelo compilador, a biblioteca mingwm10.dll. Sem ela, nada feito… Já a versão 64 não precisa.

Para compilar código basta usar as mesmas ferramentas disponíveis no Linux, mas adicionando um prefixo. No caso do mingw32, o compilador chama-se i586-mingw32-gcc, já no caso do mingw-w64, chama-se x86_64-w64-mingw32-gcc. Há também o ld, o as (GNU Assembler) e um monte de outras ferramentas do projeto GCC. Mas, também há o i586-minw32-winres e o x86_64-w64-mingw32-winres, para compilar arquivos de recursos. Aqueles terminados com a extensão ‘RC’.

Estranhamente, não consigo instalar o MinGW-w64 para Windows no próprio Windows. Dá “crash”… Se você quiser tentar, eis o link onde baixá-lo (aqui). Já o MinGW32 instala corretamente (baixe aqui).

Anúncios