如何在 Rust 中内联 ASM 字节语句?

How to inline ASM byte statement in Rust?

我写了一个简单的二进制应用程序来生成一个 c 源文件,我给它一个内存地址并拆分字符串以打印最终源文件。我是 Rust 的新手,如何改进?我也做了一些搜索和替换,最后给了我“”,我不确定为什么要替换它。

这是应用输出:

~/Research/split_mem_mk_src(master*) » cargo run                                                                                
   Compiling split_mem_mk_src v0.1.0 (/Users/RSRCH/Research/split_mem_mk_src)
    Finished dev [unoptimized + debuginfo] target(s) in 0.46s
     Running `target/debug/split_mem_mk_src`
int main(int argc, char *argv[]) {
  __asm__(".byte "0x62, 0x02, 0x55, 0xd4, 0x7f, 0xb5, 0xb1, 0x8e, 0xbf, 0xcd\"")
}

我想以此结束...

int main(int argc, char *argv[]) {
  __asm__(".byte 0x62, 0x02, 0x55, 0xd4, 0x7f, 0xb5, 0xb1, 0x8e, 0xbf, 0xcd");
}

我最终只想在 rust 中执行 asm 并通过 gdb 运行,所以任何关于这个的想法都会很棒。很高兴阅读文档。我找到了这个 https://doc.rust-lang.org/beta/unstable-book/library-features/asm.html 但没有看到像 C.

这样的执行字节语句

应用程序来源

fn main() {
    let n = 2;
    let text = "620255d47fb5b18ebfcd".to_string();
    let mem_addr = text.chars()
    .enumerate()
    .flat_map(|(i, c)| {
        if i != 0 && i % n == 0 {
            Some(' ')
        } else {
            None
        }
        .into_iter()
        .chain(std::iter::once(c))
    })
    .collect::<String>();
    let final_str = format!("0x{:?}", mem_addr.replace(" ", ", 0x"));
    println!("int main(int argc, char *argv[]) {{");
    println!("  __asm__(\".byte {:?})", final_str.replace("0x\"", "0x"));
    println!("}}");
}
```

您正在使用 {:?}。这使用 Debug 特性,仅用于调试,始终在字符串周围包含引号并转义特殊字符,例如 "Debug 不能用于产生任何类型的精确输出。

你想要的是Display trait,当没有指定时这是默认的trait,所以你可以简单地使用{}.