#jit-compiler #jit #assembly #dynasm #dynasm-rs #compiler-plugin

dynasmrt

一个用于在运行时汇编代码的简单运行时。结合插件库 dynasm,可以轻松编写 JIT 编译器。

32 个版本 (8 个稳定版)

2.0.0 2023年1月31日
1.2.3 2022年3月31日
1.2.1 2021年12月19日
1.2.0 2021年11月19日
0.0.6 2016年10月27日

编程语言 中排名 42

Download history 21784/week @ 2024-03-14 17753/week @ 2024-03-21 16698/week @ 2024-03-28 21496/week @ 2024-04-04 20552/week @ 2024-04-11 17729/week @ 2024-04-18 18427/week @ 2024-04-25 20624/week @ 2024-05-02 23621/week @ 2024-05-09 26245/week @ 2024-05-16 23845/week @ 2024-05-23 28216/week @ 2024-05-30 20452/week @ 2024-06-06 19508/week @ 2024-06-13 18374/week @ 2024-06-20 11431/week @ 2024-06-27

每月下载量 74,547
146 软件包使用 (34 个直接使用)

MPL-2.0 许可证

185KB
3.5K SLoC

用 Rust 编写的 Rust 动态汇编器。

此工具的目的是简化需要运行时汇编的程序创建。

它与稳定版 rustc 1.45 及更高版本兼容。

Build status

##dynasm-rs 在 irc.libera.chat 上

功能

  • 完全集成在 Rust 工具链中,无需其他工具。
  • 汇编被优化为一系列 Vec.pushVec.extend 语句。
  • 错误几乎都在编译时以清晰的方式诊断。
  • 使用简单的宏,以 nasm 类似语法内联编写要生成的汇编。

文档

文档发布说明

架构支持

  • 支持 x64/x86 指令集在长模式和保护模式下,除了 AVX-512 以外的每个 AMD/Intel/VIA 扩展。
  • 支持 aarch64 指令集直到 ARMv8.4,除了 SVE 指令。此汇编器后端的发展得到了 Wasmer 众多出色人士的慷慨赞助!

示例

use dynasmrt::{dynasm, DynasmApi, DynasmLabelApi};

use std::{io, slice, mem};
use std::io::Write;

fn main() {
    let mut ops = dynasmrt::x64::Assembler::new().unwrap();
    let string = "Hello World!";

    dynasm!(ops
        ; .arch x64
        ; ->hello:
        ; .bytes string.as_bytes()
    );

    let hello = ops.offset();
    dynasm!(ops
        ; .arch x64
        ; lea rcx, [->hello]
        ; xor edx, edx
        ; mov dl, BYTE string.len() as _
        ; mov rax, QWORD print as _
        ; sub rsp, BYTE 0x28
        ; call rax
        ; add rsp, BYTE 0x28
        ; ret
    );

    let buf = ops.finalize().unwrap();

    let hello_fn: extern "win64" fn() -> bool = unsafe { mem::transmute(buf.ptr(hello)) };

    assert!(hello_fn());
}

pub extern "win64" fn print(buffer: *const u8, length: u64) -> bool {
    io::stdout()
        .write_all(unsafe { slice::from_raw_parts(buffer, length as usize) })
        .is_ok()
}

背景

此项目深受 Dynasm 启发。

赞助

Aarch64 汇编器后端的发展得到了 Wasmer 的赞助。

许可证

Mozilla 公共许可证,版本 2.0,请参阅 LICENSE

版权 2016 CensoredUsername

保证在以下编译器版本中工作

该项目曾经是一个编译器插件,因此对于旧编译器,这里有一个列表,列出了哪些版本的 dynasm 可以保证与哪些编译器兼容。由于项目已经转型为 proc macro,因此这对于编译器的现代版本不再相关。

  • v0.2.0rustc 1.27.0-nightly (ac3c2288f 2018-04-18)
  • v0.2.1rustc 1.28.0-nightly (a1d4a9503 2018-05-20)
  • v0.2.3rustc 1.31.0-nightly (96cafc53c 2018-10-09)

依赖

约2MB
约44K SLoC