ide*_*n42 20 assembly rust rust-cargo
虽然我已经看到rustc直接使用输出程序集的文档,但必须手动提取Cargo使用的命令并编辑它们来编写程序集是很繁琐的.
有没有办法运行编写汇编文件的货物?
ken*_*ytm 38
您可以使用Cargo的cargo rustc命令rustc直接发送参数:
cargo rustc -- --emit asm
ls target/debug/deps/crate_name.s
Run Code Online (Sandbox Code Playgroud)
对于优化装配:
cargo rustc --release -- --emit asm
ls target/release/deps/crate_name.s
Run Code Online (Sandbox Code Playgroud)
Luk*_*odt 27
除了kennytm的答案,您还可以使用RUSTFLAGS环境变量并使用标准货物命令:
RUSTFLAGS="--emit asm" cargo build
cat target/debug/deps/project_name-hash.s
Run Code Online (Sandbox Code Playgroud)
或者在发布模式下(带优化):
RUSTFLAGS="--emit asm" cargo build --release
cat target/release/deps/project_name-hash.s
Run Code Online (Sandbox Code Playgroud)
您可以将不同的值传递给--emit参数,包括(但不限于):
mir (Rust中间表示)llvm-ir (LLVM中间表示)llvm-bc (LLVM字节码)asm (部件)现有的两个答案(使用cargo rustc和RUSTFLAGS)都是使用标准工具进行组装的最佳方法。如果你发现自己想要看组装相当频繁,你可能要考虑使用的cargo asm子命令。使用安装后cargo install cargo-asm,您可以像下面那样打印程序集:
cargo build --release
cargo asm my_crate::my_function
Run Code Online (Sandbox Code Playgroud)
但是,有几件事要注意:
cargo asm,它将列出您可以检查的所有符号。cargo build --release在尝试查看程序集之前就必须这样做,因为cargo asm(显然)仅查看已存在的构建工件