Представлен Blink, эмулятор x86-64, опережающий QEMU по производительности
Проектом blink развивается новый эмулятор процессоров x86–64, позволяющий запускать статически собранные Linux-приложения в виртуальной машине с эмулируемым процессором. Основным назначением проекта является предоставление возможности запуска собранных для архитектуры x86–64 Linux-программ в других операционных системах (macOS, FreeBSD, NetBSD, OpenBSD) и на оборудовании с другой аппаратной архитектурой (x86, ARM, RISC-V, MIPS, PowerPC, s390x). Код проекта написан на языке Си (ANSI C11) и распространяется под лицензией ISC. Из зависимостей требуется только libc (POSIX.1–2017).
Проект развивает автор таких разработок, как Си-библиотека Cosmopolitan, порт механизма изоляции pledge для Linux и система универсальных исполняемых файлов Redbean. По функциональности blink напоминает команду qemu-x86_64, но отличается от QEMU более компактным исполнением и значительным приростом производительности. Например, исполняемый файл Blink занимает всего 157 КБ вместо 4 МБ у qemu-x86_64, а по производительности в тесте запуска в эмуляторе GCC Blink обгоняет QEMU в два раза. Для обеспечения высокой производительности применяется JIT-компилятор, на лету преобразующий исходные инструкции в машинный код для целевой платформы (в JIT пока поддерживается только x86_64 и aarch64).
Поддерживается прямой запуск в эмуляторе исполняемых файлов в форматах ELF, PE (Portable Executables) и bin (Flat executable), собранных со стандартными Си-библиотеками Cosmopolitan, Glibc и Musl. Имеется встроенная поддержка более сотни системных вызовов Linux, включая fork () и clone (). Поддерживается эмуляция наборов инструкций i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED и RDTSCP.
Дополнительно проектом разрабатывается утилита blinkenlights, предоставляющая интерфейс для отладки программ на разных платформах, визуализации хода выполнения программы и анализа содержимого памяти. Особенностью отладчика является поддержка режима реверсивной отладки (Reverse-Debugging), позволяющего перемещаться назад в истории выполнения и возвращаться к уже ранее выполненной точке.
Источник: http://www.opennet.ru/opennews/art.shtml? num=58434
© OpenNet