1

我正在使用 gcc 4.71 工具链为 STM32F4 (ARM Cortex-M4) 微控制器编译我的 c 程序。在我的程序被编译和链接后(我有 .elf 文件),我想为每个源代码行提取第一条指令的地址。目前我正在尝试通过解析反汇编文件来做到这一点 - 例如,在下面我得到了 main.c 中第 41 行的 adr 0x8000c44。

还有其他更方便的方法如何使用一些 gcc 工具获取这些信息吗?

示例反汇编文件:

c:\a_test2/main.c:41

8000c44: b580 推 {r7, lr}

我用来编译和链接的命令行:

c:\Yagarto471\bin\arm-none-eabi-gcc.exe -c -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -Wall -Wextra -Wno-unused-parameter -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-but-set-variable -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-ahlms=app.lst -DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DUSE_STM32F4_DISCOVERY -DUSE_USB_OTG_FS -DHSE_VALUE=8000000 - MD -MP -MF app.d -I。-Iinc -save-temps -c main.c -o main.o

c:\Yagarto471\bin\arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -Tstm32f4xx.ld -g -Wl,-Map=Map.map,--cref,--no-warn-mismatch - wl,--gc-sections -nostartfiles startup\startup_stm32f4xx.o startup\stm32f4_discovery.o startup\system_stm32f4xx.o startup\stm32f4xx_rcc.o startup\stm32f4xx_gpio.o startup\stm32f4xx_tim.o startup\misc.o startup\stm32f4xx_usart.o startup \syscalls.o main.o sys.o intr.o vars.o debug.o lib.o -o stm32f4_temp.elf

4

1 回答 1

0

gdb 是做你想做的事的好工具。

arm-none-eabi-gdb -batch -ex '文件 stm32f4_temp.elf' -ex '反汇编 main'

您将获得每条指令的地址信息。

于 2018-10-09T02:56:00.617 回答