Linux Adictos Darkcrizt  

Blink un emulador x86-64 que promete superar a QEMU

blink-gcc

Captura de pantalla de blink en ejecución

Hace poco se dio a conocer la noticia de que el proyecto Blink está desarrollando un nuevo emulador de procesador x86-64 que permite ejecutar aplicaciones Linux compiladas estáticamente en una máquina virtual con un procesador emulado.

Se menciona que el objetivo principal del proyecto es proporcionar la capacidad de ejecutar programas Linux compilados para la arquitectura x86-64 en otros sistemas operativos (macOS, FreeBSD, NetBSD, OpenBSD) y en equipos con una arquitectura de hardware diferente (x86, ARM, RISC- V, MIPS, PowerPC, s390x).

En el repositorio del proyecto describen a blink de la siguiente manera:

blink es una máquina virtual que ejecuta programas x86-64-linux compilados estáticamente en diferentes sistemas operativos y arquitecturas de hardware. Está diseñado para hacer lo mismo que el qemu-x86_64comando, excepto que (a) en lugar de ser un binario de 4mb, Blink solo tiene una huella de ~160kb; y (b) Blink va 2 veces más rápido que Qemu en algunos puntos de referencia, como emular GCC. La contrapartida es que Blink no tiene tantas funciones como Qemu. Blink encaja perfectamente cuando desea una máquina virtual que sea extremadamente pequeña y ejecute programas efímeros mucho más rápido. Para obtener más detalles sobre las motivaciones de esta herramienta, lea https://justine.lol/ape.html .

Cabe mencionar que el proyecto es desarrollado por el autor de desarrollos tales como la biblioteca Cosmopolitan C, un port del mecanismo de aislamiento de compromiso para Linux y el sistema de archivos ejecutable universal Redbean.

En términos de funcionalidad, Blink se parece al comando qemu-x86_64, pero se diferencia de QEMU en un diseño más compacto y un aumento significativo del rendimiento. Por ejemplo, el archivo ejecutable de Blink ocupa solo 157 KB en lugar de 4 MB para qemu-x86_64, y en términos de rendimiento en la prueba de ejecución en el emulador GCC, Blink supera a QEMU dos veces.

Para garantizar un alto rendimiento, se utiliza un compilador JIT, que convierte las instrucciones fuente en código de máquina para la plataforma de destino sobre la marcha (hasta ahora, solo x86_64 y aarch64 son compatibles con JIT).

Se admite el lanzamiento directo en el emulador de archivos ejecutables en formato ELF, PE (Portable Executables) y bin (Flat ejecutable), compilados con las bibliotecas C estándar Cosmopolitan, Glibc y Musl.

Ademas de ello, tambien se destaca que cuenta con el soporte integrado para más de cien llamadas al sistema Linux, incluidas fork() y clone(). Se admite la emulación de los conjuntos de instrucciones i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED y RDTSCP.

Además, el proyecto está desarrollando la utilidad blinkenlights, que proporciona una interfaz para depurar programas en diferentes plataformas, visualizar la ejecución del programa y analizar el contenido de la memoria. Una característica del depurador es la compatibilidad con el modo de depuración inversa (Depuración inversa), que le permite retroceder en el historial de ejecución y volver a un punto ejecutado anteriormente.

blinkenlights es una interfaz TUI que se puede usar para depurar programas x86_64-linux en todas las plataformas. A diferencia de GDB, Blinkenlights se enfoca en visualizar la ejecución del programa. Utiliza caracteres UNICODE IBM Code Page 437 para mostrar paneles de memoria binarios, que cambian a medida que avanza por el código ensamblador de su programa. Estos paneles de memoria se pueden desplazar y ampliar con la rueda del mouse. Blinkenlights también permite la depuración inversa, donde el desplazamiento de la rueda sobre la pantalla del ensamblaje permite rebobinar el historial de ejecución.

Finalmente para los interesados en conocer más sobre este proyecto, deben saber que el código del proyecto está escrito en C (ANSI C11) y se distribuye bajo la licencia ISC. De las dependencias, solo se requiere libc (POSIX.1-2017).

Obtener Blink

Para quienes estén interesados en poder probar blink deben saber que su compilación es sumante sencilla, solo deben obtener el código fuente de este pueden hacerlo desde el siguiente enlace o bien desde una terminal tecleando el siguiente comando:

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

Y listo con ello ya solo deben entrar el directorio de blik y compilar:

cd blink

make -j4

Si quieres conocer más al respecto sobre el funcionamiento de Blink, puedes hacerlo desde el siguiente enlace.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.