#x86 #intel #xed

sys xed-sys

Rust对Intel XED的FFI绑定

10个版本 (5个重大更新)

0.6.0+xed-2024.05.202024年6月1日
0.5.1+xed-2023.12.192024年6月1日
0.5.0+xed-2023.12.192024年1月17日
0.4.0 2021年6月26日
0.1.1 2017年10月8日

#500 in 编码

Download history 7/week @ 2024-04-28 111/week @ 2024-05-26 251/week @ 2024-06-02 6/week @ 2024-06-09 5/week @ 2024-06-16 39/week @ 2024-06-23 20/week @ 2024-06-30 91/week @ 2024-07-28

每月91次下载
用于 rusty-xed

Apache-2.0

4MB
81K SLoC

Python 35K SLoC // 0.2% comments Rust 26K SLoC // 0.0% comments C 19K SLoC // 0.1% comments C++ 847 SLoC // 0.1% comments Forge Config 467 SLoC // 0.8% comments Shell 29 SLoC // 0.2% comments Assembly 28 SLoC // 0.1% comments

Build Status docs.rs crates.io

xed-sys

Rust对Intel XED的FFI绑定。

/// Similar to `examples/xed-min.c` from official Intel XED repository.
use xed_sys::*;

fn main() {
    unsafe {
        let (mmode, stack_addr_width) = (XED_MACHINE_MODE_LEGACY_32, XED_ADDRESS_WIDTH_32b);

        xed_tables_init();

        let itext: [u8; 15] = [
            0xf, 0x85, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        ];

        for bytes in 0..16 {
            let mut xedd = ::std::mem::MaybeUninit::<xed_decoded_inst_t>::uninit();
            xed_decoded_inst_zero(xedd.as_mut_ptr());
            xed_decoded_inst_set_mode(xedd.as_mut_ptr(), mmode, stack_addr_width);

            let xed_error: xed_error_enum_t = xed_decode(xedd.as_mut_ptr(), itext.as_ptr(), bytes);
            let desc = std::ffi::CStr::from_ptr(xed_error_enum_t2str(xed_error)).to_string_lossy();
            println!("bytes={} error={}", bytes, desc);
        }
    }
}

构建

为了构建此crate,你需要

  • Python版本3.8或更高版本(构建XED)。
  • C编译器。

如果你启用了bindgen特性,则还需要

示例

你可以在examples/目录中找到使用示例。

这些示例旨在使用cargo执行。例如,要运行名为xed_min的示例

# cd to the crate's root directory
cargo run --example xed_min

无运行时依赖