Blink an x86-64 emulator that promises to surpass QEMU

blink-gcc

Screenshot of blink running

The news recently broke that the project Blink is developing a new emulator of x86-64 processor that allows you to run compiled Linux applications statically in a virtual machine with an emulated processor.

It is mentioned that ethe main objective of the project is to provide the ability to run Linux programs compiled for the x86-64 architecture on other operating systems (macOS, FreeBSD, NetBSD, OpenBSD) and on computers with a different hardware architecture (x86, ARM, RISC-V, MIPS, PowerPC, s390x).

In the project repository they describe blink as follows:

blink is a virtual machine that runs statically compiled x86-64-linux programs on different operating systems and hardware architectures. It is designed to do the same thing as the qemu-x86_64 command, except that (a) instead of being a 4mb binary, Blink only has a ~160kb footprint; and (b) Blink is 2x faster than Qemu in some benchmarks, like emulating GCC. The tradeoff is that Blink doesn't have as many features as Qemu. Blink is a perfect fit when you want a virtual machine that is extremely small and runs ephemeral programs much faster. For more details on the motivations for this tool, please read https://justine.lol/ape.html.

It is worth mentioning that the project is developed by the author of developments such as the Cosmopolitan C library, a port of the commitment isolation mechanism for Linux and the Redbean universal executable file system.

In terms of functionality, Blink looks like the command qemu-x86_64, But differs from QEMU in a more compact design and a significant increase in performance. For example, the Blink executable is only 157 KB instead of 4 MB for qemu-x86_64, and in terms of performance in the test run on the GCC emulator, Blink beats QEMU twice.

To ensure high performance, a JIT compiler is used, which converts source instructions to machine code for the target platform on the fly (so far only x86_64 and aarch64 support JIT).

Direct launch on the emulator of executable files in ELF, PE (Portable Executables) and bin (Flat Executable) formats, compiled with the standard C libraries Cosmopolitan, Glibc and Musl is supported.

Besides that, It also stands out that it has integrated support for more than one hundred calls to the Linux system, including fork() and clone(). Emulation of the i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED, and RDTSCP instruction sets is supported.

In addition, the project is developing the blinkenlights utility, which provides an interface for debugging programs on different platforms, visualizing program execution, and analyzing memory contents. A feature of the debugger is support for reverse debugging mode (Reverse Debugging), which allows you to go back in execution history and return to a previously executed point.

blinkenlights is a TUI interface that can be used to debug x86_64-linux programs on all platforms. Unlike GDB, Blinkenlights focuses on visualizing the execution of the program. It uses UNICODE IBM Code Page 437 characters to display binary memory panels, which change as you move through the assembly code of your program. These memory panels can be scrolled and enlarged with the mouse wheel. Blinkenlights also supports reverse debugging, where scrolling the wheel on the assembly screen allows you to rewind the execution history.

Finally, for those interested in learning more about this project, they should know that the project code is written in C (ANSI C11) and is distributed under the ISC license. Of the dependencies, only libc (POSIX.1-2017) is required.

get blink

For those who are interested in being able to try blink, they should know that its compilation is extremely simple, they only have to obtain the source code of it, they can do it from the following link or from a terminal by typing the following command:

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

And done with it, you just have to enter the blik directory and compile:

cd blink

make -j4

If you want to know more about how Blink works, you can do it from the following link


Be the first to comment

Leave a Comment

Your email address will not be published. Required fields are marked with *

*

*

  1. Responsible for the data: AB Internet Networks 2008 SL
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.