代码
Set-Location 'D:\TBOX\SDK\QSR01A01_C_SDK_LTE_E_BETA20251225\qos_build\release\EC800ZCNLFR01A01M04_BETA0403_OCPU\DBG' $env:Path = 'D:\unirtos-toolchain\gcc-arm-none-eabi-10.2.1\bin;D:\unirtos-toolchain\bin;' + $env:Path cmd /c "where arm-none-eabi-objdump.exe" arm-none-eabi-objdump.exe -d -S --demangle --line-numbers ap_application.elf > ap_application.disasm.S arm-none-eabi-objdump.exe -h ap_application.elf > ap_application.sections.txt arm-none-eabi-nm.exe -n ap_application.elf > ap_application.nm.txt # 示例:用 nm 里真实存在的符号地址 0x00a62d28(ql_rtos_task_create) arm-none-eabi-addr2line.exe -e ap_application.elf -f -C 0x00a62d28 # 同一地址反汇编一小段(避免全量) arm-none-eabi-objdump.exe -d --demangle --line-numbers --start-address=0x00a62d28 --stop-address=0x00a62d28+0x120 ap_application.elf > example_ql_rtos_task_create.disasm.txt你这段 PowerShell 脚本的核心目的是:切换到指定的固件编译输出目录,配置 ARM 嵌入式工具链的环境变量,然后使用 ARM 官方工具链中的objdump、nm、addr2line等工具,对嵌入式固件文件ap_application.elf进行反汇编、符号分析和地址溯源,是嵌入式开发中调试固件、定位代码问题的典型操作。
下面我先整体解释脚本的作用,再重点拆解你关心的objdump、nm、addr2line命令。
脚本整体执行流程
Set-Location:切换到固件文件所在的目录(DBG 目录),确保后续命令能找到目标文件ap_application.elf。$env:Path:将 ARM 工具链的bin目录添加到系统环境变量Path中,让系统能找到arm-none-eabi-*系列工具。cmd /c "where arm-none-eabi-objdump.exe":验证工具是否能被系统找到(排查环境变量配置问题)。- 后续的
arm-none-eabi-*命令:对ap_application.elf(嵌入式固件的可执行文件)进行反汇编、符号分析、地址溯源。
核心命令详解
1. arm-none-eabi-objdump.exe(最核心的反汇编工具)
objdump是 ARM 工具链中用于分析目标文件(如.elf、.o)的工具,核心作用是将二进制的机器码转换成人类可读的汇编代码,还能解析文件的段信息、符号表等。
| 你用到的参数 | 含义 |
|---|---|
-d |