Blink um emulador x86-64 que promete superar o QEMU

piscar-gcc

Captura de tela do Blink em execução

Recentemente foi divulgada a notícia de que o projeto Blink está desenvolvendo um novo emulador do processador x86-64 que permite executar aplicativos Linux compilados estaticamente em uma máquina virtual com um processador emulado.

É mencionado que eo objetivo principal projeto é fornecer a capacidade de executar programas Linux compilados para a arquitetura x86-64 em outros sistemas operacionais (macOS, FreeBSD, NetBSD, OpenBSD) e em computadores com uma arquitetura de hardware diferente (x86, ARM, RISC-V, MIPS, PowerPC, s390x).

No repositório do projeto, eles descrevem o blink da seguinte forma:

blink é uma máquina virtual que executa programas x86-64-linux compilados estaticamente em diferentes sistemas operacionais e arquiteturas de hardware. Ele foi projetado para fazer a mesma coisa que o comando qemu-x86_64, exceto que (a) em vez de ser um binário de 4 MB, o Blink ocupa apenas cerca de 160 kb; e (b) Blink é 2x mais rápido que Qemu em alguns benchmarks, como emular GCC. A desvantagem é que o Blink não tem tantos recursos quanto o Qemu. O Blink é perfeito quando você deseja uma máquina virtual extremamente pequena e que execute programas efêmeros muito mais rapidamente. Para mais detalhes sobre as motivações para esta ferramenta, leia https://justine.lol/ape.html.

Vale ressaltar que o projeto é desenvolvido pelo autor de desenvolvimentos como a biblioteca Cosmopolitan C, uma porta do mecanismo de isolamento de comprometimento para Linux e o sistema de arquivos executáveis ​​universal Redbean.

Em termos de funcionalidade, Blink se parece com o comando qemu-x86_64Mas difere do QEMU em um design mais compacto e um aumento significativo no desempenho. Por exemplo, o executável Blink tem apenas 157 KB em vez de 4 MB para qemu-x86_64 e em termos de desempenho no teste executado no emulador GCC, Blink vence QEMU duas vezes.

Para garantir alto desempenho, um compilador JIT é usado, que converte as instruções de origem em código de máquina para a plataforma de destino em tempo real (até agora, apenas x86_64 e aarch64 suportam JIT).

O lançamento direto no emulador de arquivos executáveis ​​nos formatos ELF, PE (Portable Executables) e bin (Flat Executable), compilado com as bibliotecas C padrão Cosmopolitan, Glibc e Musl é suportado.

Além disso, Destaca-se também que possui suporte integrado para mais de cem chamadas ao sistema Linux, incluindo fork() e clone(). A emulação dos conjuntos de instruções i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED e RDTSCP é suportada.

Além disso, o projeto está desenvolvendo o utilitário blinkenlights, que fornece uma interface para depurar programas em diferentes plataformas, visualizar a execução do programa e analisar o conteúdo da memória. Um recurso do depurador é o suporte ao modo de depuração reversa (Reverse Debugging), que permite voltar no histórico de execução e retornar a um ponto executado anteriormente.

blinkenlights é uma interface TUI que pode ser usada para depurar programas x86_64-linux em todas as plataformas. Ao contrário do GDB, o Blinkenlights se concentra em visualizar a execução do programa. Ele usa caracteres UNICODE IBM Code Page 437 para exibir painéis de memória binária, que mudam à medida que você percorre o código de montagem de seu programa. Esses painéis de memória podem ser rolados e ampliados com a roda do mouse. Blinkenlights também suporta depuração reversa, onde rolar a roda na tela de montagem permite retroceder o histórico de execução.

Finalmente, para os interessados ​​em saber mais sobre este projeto, devem saber que o código do projeto é escrito em C (ANSI C11) e é distribuído sob a licença ISC. Das dependências, apenas libc (POSIX.1-2017) é necessário.

Obter Blink

Para quem está interessado em experimentar o blink, deve saber que a sua compilação é extremamente simples, basta obter o código fonte do mesmo, pode fazê-lo a partir do seguinte link ou a partir de um terminal digitando o seguinte comando :

git https://github.com/jart/blink.git

E pronto, basta entrar no diretório blik e compilar:

cd blink

make -j4

Se você quiser saber mais sobre como o Blink funciona, você pode fazê-lo no link a seguir


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.