IDA反汇编STM32代码学习记录
首先,使用IDA反汇编STM32代码应该打开的是bin文件,而不是.hex或.axf文件,只有bin文件是和下载到flash内的数据一致的。具体参见:三种文件的区别
那么,怎么生成bin文件呢,在有工程的情况下,在MDK中是在user的afterbuild后添加命令:
fromelf --bin -o ./Output/@L.bin ./Output/@L.axf
@L代表着工程名,./是工程文件所在文件夹,第一个.bin是生成的文件,第二个axf是用来生成bin的文件,是MDK必定生成的,也可以用hex。具体参见Keil MDK5生成 .bin文件的简单教程(图文)
或者在环境变量:

中先加上 fromelf.exe所在的路径(请换成自己的):
C:\Applications\Keil_v5\ARM\ARMCC\bin
然后直接在axf所在文件夹中shift+右键选择打开powershell后输入:
fromelf --bin -o filename.bin filename.axf
即可生成bin文件。
生成的bin文件用ida32打开后先选处理器类型:

选完点击Processor options:

再编辑ARM architecture options:

一般都是arm-v7 m
进入ROM和RAM的配置,(RAM可以不配):

根据实际情况配置即可。
进入后先按D将最开头的8个字节换成字表示,(第一个字是中断向量表有关的,第二个字是reset handler地址,具体请看stm32的启动流程):

双击第二个字跳转到对应地址:

注意,这里对于有的处理器来说,指令是奇数字节开始的,需要在AC处按C进行反汇编:

对比启动文件中的reset_handler的代码:

第二个地址是__main地址,双击跳转到对应地址:

跳过来后有几个地址跳过去看一下简单对比一下就知道哪个是main了。__main就是在进入main函数前进行了一些数值的初始化。
查看代码时可能需要对比.map文件查看,在设置的listing中打开:

然后可能还需要点击一下SelectFolder选择另一个位置,不然也会有打不开的情况

然后双击工程名就可:

浙公网安备 33010602011771号