gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:26:27 25 4
gpt4 key购买 nike

我写了一个简单的二进制应用程序来生成一个 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那样的execute byte语句。

应用来源

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 特征,当未指定任何内容时这是默认特征,因此您可以简单地使用 {}

关于rust - 如何在 Rust 中内联 ASM 字节语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65475892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com