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.
Eu: Quão pequeno pode ser um emulador?
Piscar: Sim.#Piscar #clang #GCC #hacking pic.twitter.com/75iUIQN6Wn— 0xHiro (ヒロ) (@0x1hiro) 4 de janeiro de 2023
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