#asm #proc-macro #naked

no-std naked-function-macro

naked-function crate 的 Proc 宏

6 个版本

0.1.5 2023 年 4 月 13 日
0.1.4 2023 年 4 月 7 日
0.1.2 2023 年 2 月 3 日
0.1.1 2023 年 1 月 27 日
0.1.0 2022 年 8 月 12 日

#42 in #asm

Download history 204/week @ 2024-04-11 135/week @ 2024-04-18 98/week @ 2024-04-25 140/week @ 2024-05-02 159/week @ 2024-05-09 66/week @ 2024-05-16 48/week @ 2024-05-23 118/week @ 2024-05-30 374/week @ 2024-06-06 243/week @ 2024-06-13 315/week @ 2024-06-20 1033/week @ 2024-06-27 216/week @ 2024-07-04 367/week @ 2024-07-11 407/week @ 2024-07-18 325/week @ 2024-07-25

1,546 monthly downloads
2 个 crate 中使用 (via naked-function)

MIT/Apache

19KB
381

#[naked]

Crates.io

文档

此 crate 提供了一个用于稳定 Rust 的 #[naked] 属性的 proc 宏版本。

示例

// The SYSV64 calling convention used on x86_64 Linux passes the first
// 2 integer arguments in EDI/ESI.
#[naked_function::naked]
pub unsafe extern "C" fn add(a: i32, b: i32) -> i32 {
    asm!(
        "lea eax, [edi + esi]",
        "ret",
    );
}

#[test]
fn main() {
    let ret = unsafe { add(1, 2) };
    assert_eq!(ret, 3);
}

许可证

根据您的选择,许可协议为以下之一

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,都将根据上述方式双重许可,而无需任何附加条款或条件。


lib.rs:

naked-function crate 使用的 proc 宏的实现。

不要直接使用此 crate,而是使用 naked-function crate。

依赖项

~275–730KB
~17K SLoC