#x86 #bit-set #eflags #aligment

无std x86-alignment-check

x86对齐检查标志操作

5个版本

0.1.6 2023年6月3日
0.1.5 2023年4月1日
0.1.3 2023年3月30日

#135 in 无标准库


用于 memx

MIT/Apache

12KB
145

x86-alignment-check

crate Docs Rust Version Apache2/MIT licensed Test ubu Test mac Test win

x86-alignment-checkeflags 上设置 x86x86_64 中的 ac 标志

功能

  • ac 标志位设置为开启,包含 x86eflags
  • 也支持 x86_64
  • #![no_std]

示例1:如果你的代码正确地控制了对齐

首先,将以下内容添加到 Cargo.toml

[target.'cfg(any(target_arch = "x86_64", target_arch = "x86"))'.dev-dependencies]
x86-alignment-check = "*"

其次,将你的测试代码用 x86_alignment_check() 包围,如下所示

    use x86_alignment_check::x86_alignment_check;
    //
    let old_flag = x86_alignment_check(true);
    //
    // here your test codes, processing anythings, a bus error may occur.
    //
    let _ = x86_alignment_check(old_flag);

最后执行 cargo test

示例2:call_once风格

    let val = x86_alignment_check::ac_call_once(|| {
        // here is alignment check
        // processing anythings
        // return value for assertion
        1
    });
    assert_eq!(val, 1);

目前,由于Rust运行时错误,无法在 FnOnce 内包含 assert_eq!() 等断言。

示例3:call_once风格,但不是对齐检查

    let val = x86_alignment_check::no_ac_call_once(|| {
        // here is not alignment check
        // processing anythings
        // return value for assertion
        1
    });
    assert_eq!(val, 1);

变更日志

此crate的变更日志在此。

许可证

该项目受以下许可证之一许可:

任选其一。

无运行时依赖