Bien que j'ai déjà vu des documents sur l'utilisation de rustc
directement dans l'assemblage en sortie, il est fastidieux d'extraire manuellement les commandes utilisées par Cargo et de les éditer pour écrire Assembly.
Existe-t-il un moyen d'exécuter Cargo pour écrire des fichiers d'assemblage?
Vous pouvez utiliser la commande cargo rustc
de Cargo pour envoyer des arguments directement à rustc
:
cargo rustc -- --emit asm
ls target/debug/deps/crate_name.s
Pour un montage optimisé:
cargo rustc --release -- --emit asm
ls target/release/deps/crate_name.s
En plus de la réponse de kennytm, vous pouvez également utiliser la variable d'environnement RUSTFLAGS
et utiliser les commandes cargo standard:
RUSTFLAGS="--emit asm" cargo build
cat target/debug/deps/project_name-hash.s
Ou en mode release (avec optimisations):
RUSTFLAGS="--emit asm" cargo build --release
cat target/release/deps/project_name-hash.s
Vous pouvez transmettre différentes valeurs au paramètre --emit
,, y compris (sans limitation):
mir
(représentation intermédiaire de rouille)llvm-ir
(représentation intermédiaire de LLVM)llvm-bc
(code d'octet LLVM)asm
(Assemblée)Les deux réponses existantes (en utilisant cargo rustc
et RUSTFLAGS
) constituent le meilleur moyen d'obtenir Assembly avec des outils standard. Si vous essayez de regarder assez souvent Assembly, vous pouvez envisager d'utiliser la sous-commande cargo asm
. Après l'avoir installé avec cargo install cargo-asm
, vous pouvez imprimer l'assemblage comme suit:
cargo build --release
cargo asm my_crate::my_function
Il y a quelques points à surveiller, cependant:
cargo asm
pour répertorier tous les symboles que vous pouvez inspecter.cargo build --release
avant d'essayer de regarder l'assembly, parce que cargo asm
(apparemment) ne regarde que les artefacts de construction existants