You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:57:05