Cargo objdump无二进制内容输出问题求助(STM32F446裸机开发)
问题排查方案
一、修正命令参数
你当前的命令可能未明确指定反汇编目标或缺少关键参数,试试以下调整:
- 明确指定二进制目标(假设Cargo.toml中bin名称为
stm32):cargo objdump --release --bin stm32 -- --disassemble --no-show-raw-insn - 强制反汇编所有section(包括默认被忽略的区域):
cargo objdump --release -- --disassemble-all --no-show-raw-insn - 仅反汇编代码段(.text):
cargo objdump --release -- --disassemble=.text --no-show-raw-insn
二、检查链接器脚本配置
Embedonomicon的链接器脚本需确保代码被正确映射到Flash区域且入口点有效:
- 确认脚本中包含类似代码,将向量表和代码段放入
.text并指向Flash地址:SECTIONS { .text : { KEEP(*(.vector_table)) *(.text .text.*) } > FLASH } - 检查是否通过
ENTRY(Reset)指定了正确的入口符号,且该符号在代码中存在(比如#[no_mangle] pub extern "C" fn Reset())。
三、验证Rust代码入口配置
若入口未正确标记,release模式优化可能移除空代码:
- 确保使用
cortex-m-rt的#[entry]宏标记主函数,或手动定义#[no_mangle]入口:use cortex_m_rt::entry; #[entry] fn main() -> ! { // 需包含实际代码,比如死循环或外设初始化 loop {} } - 临时关闭release优化:在
Cargo.toml的[profile.release]中添加opt-level = 0,重新编译后再执行反汇编命令,确认是否有内容输出。
四、直接使用GNU工具链验证
若cargo objdump仍有问题,用arm-none-eabi-objdump直接查看二进制:
arm-none-eabi-objdump -d --no-show-raw-insn target/thumbv7em-none-eabihf/release/stm32
这能排除cargo objdump的封装问题,直接获取反汇编结果。
内容的提问来源于stack exchange,提问作者user23564355
相关产品推荐
相关产品推荐

