使用keil-MDK生成bin文件以及反汇编文件

使用keil-MDK生成bin和反汇编(dis)文件教程,
在keil-MDK工程中,通过勾选Run#1和Run#2,配置fromelf命令生成bin和反汇编文件。Run#1用于生成bin文件,指定--bin格式和--output参数;Run#2生成反汇编文件,使用--text和--output参数。完成设置后,进行编译将在Objects目录下得到Bootloader.bin和Bootloader.dis文件。

使用keil-MDK生成bin文件以及反汇编文件

工程设置如下:
工程设置

勾选Run#1,输入以下指令:

fromelf --bin --output=Objects\Bootloader.bin Objects\Bootloader.axf

其中–bin是指定输出文件格式是bin格式,
–output=xxxx\xxxx.bin指定目录以及输出文件名,
xxxx\xxxx.axf 是指定目录下的指定axf文件,此文件作为输入文件,是keil编译后产生的。


勾选Run#2,输入以下指令:

fromelf --text -a -c --output=Objects\Bootloader.dis Objects\Bootloader.axf

其中–text是指定输出文件格式为text格式,
–output=xxxx\xxxx.dis 指定目录以及输出文件名,
xxxx\xxxx.axf 是指定目录下的指定axf文件,此文件作为输入文件,是keil编译后产生的。

设置完成后,点击工程选项build,就能在工程目录下的object下找到生成的bin文件以及反汇编dis文件。


在这里插入图片描述

对 `.bin` 文件进行反汇编操作通常需要依赖反汇编工具以及目标平台的指令集架构信息。以下是一些常见的方法和步骤,适用于不同场景下的 `.bin` 文件反汇编需求。 ### 使用专用反汇编工具 #### C51 架构下的反汇编工具 如果你处理的是基于 C51 架构的 `.bin` 文件,可以使用名为 `hextoasm` 或 `bintoasm` 的工具。该工具支持将 `.hex` 和 `.bin` 格式的文件进行反汇编操作,并无大小限制。通过此工具,可以将 C51 编译生成的二进制文件转换为汇编代码,便于代码分析和调试 [^1]。 #### ARM 架构下的反汇编方法 对于 ARM 架构下的 `.bin` 文件,可以使用 Keil MDK 提供的命令行工具 `fromelf`。具体步骤如下: 1. 打开命令行工具(cmd.exe),进入 Keil 安装目录下的 ARM 编译器路径,例如 `X:\Program Files\Keil\MDK510\ARM\ARMCC\bin`。 2. 使用 `fromelf` 命令生成反汇编文件: ```bash fromelf --text -a -c --output=example.dis example.axf ``` 其中 `example.dis` 是生成反汇编文件,`example.axf` 是 Keil 生成的可执行文件 [^3]。 ### 使用通用反汇编工具 #### 使用 objdump 工具 对于基于 Linux 系统的反汇编操作,可以使用 GNU 工具链中的 `objdump`。该工具支持多种架构,并且可以对 `.bin` 文件进行反汇编。具体步骤如下: 1. 首先,确保你已经安装了 `binutils` 包,其中包含了 `objdump`。 2. 使用以下命令对 `.bin` 文件进行反汇编: ```bash objdump -D -b binary -m arm example.bin > example.dis ``` 其中 `-D` 表示反汇编所有内容,`-b binary` 表示输入文件是二进制格式,`-m arm` 表示目标架构为 ARM,`example.bin` 是输入文件,`example.dis` 是输出文件 [^3]。 ### 获取函数调用关系 #### 栈回溯分析 在嵌入式系统中,特别是 STM32 微处理器上,可以通过栈回溯来分析函数调用关系。具体步骤如下: 1. 在进入 fault 处理程序(Handler)前,CM3 内核会将几个必须的寄存器压栈保存。 2. 栈中的 PC 寄存器代表在进入 Handler 之前程序的位置,也就是出错的那行代码。 3. 从栈顶开始打印各个数据,以 32bit 为基准,每 32bit 为一个寄存器的值。 4. 首先关注进入 Handler 之前的 PC 值,其代表从哪行代码进入 fault。 5. 进入引发错误的相应函数后,根据后续打印的 LR(0x0800xxxx)继续分析函数调用关系即可 [^2]。 ### 示例代码 假设你已经有一个 `.bin` 文件,并希望使用 `objdump` 对其进行反汇编操作,可以参考以下代码示例: ```bash # 确保已经安装了 binutils 包 sudo apt-get install binutils # 使用 objdump 对 .bin 文件进行反汇编 objdump -D -b binary -m arm example.bin > example.dis ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值