你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F303开发】+使用fromelf反汇编keil生成的AXF文件  

[复制链接]
creep 提问时间:2015-7-5 18:23 /
本帖最后由 creep 于 2019-5-29 21:56 编辑


昨天我在另一个帖子里谈到了怎么样找到程序跑飞的原因:【STM32F303开发】+如何找到导致程序出现HardFault的代码     贴子的最后我们使用直接在debug模式下汇编窗口中输入LR的值来定位有问题的代码,有的时候可能会感觉这样不是很方便,或许我们想看看其他的汇编代码。下面我们就使用fromelf命令来将keil生成的axf文件反汇编成汇编代码。

从fromelf这个名字上我们就能看到它是用来处理elf文件的,elf 全称 Executable and Linking Format ,这种文件是gcc编译出来的,而我们使用的axf全称 Arm executable File ,是由keil或者ads编译出来的,两者在格式上有些区别,但里面包含的符号表,调试信息,汇编基本是相同的。keil生成的hex就是调用的fromelf将axf转换而来的,所以你编译后可以在输出文件中同时看到axf和hex文件。

fromelf有2种模式:常用的生成的bin文件是使用的format conversion mode,还有一种text mode模式就是用来生成反汇编的text文件的。
fromelf.jpg
text模式介绍如下:值得注意的是如果我们不指定输出格式的话,那么默认就是--text格式,也就是说如果我们给--text 指定几个options的话我们可以省掉--text 而只使用相应的[options就可以,我下面的处理中将会省掉--text。
fromelf.jpg
--text的几个options介绍:下面要使用的反汇编是-c
fromelf.jpg

用fromelf把axf反汇编有2中方法,一种直接在windows环境中使用,一种和生成bin文件那样在keil编译后调用。
1)windows 窗口下进行:
❶:将我们生成的axf文件复制到keil安装目录的下ARM\ARMCC\bin目录下,
fromelf.jpg
❷:在这个窗口中不要选中任何文件的前提下按下键盘的Shift键然后单击鼠标的右键选中“在此处打开命令窗口”,
fromelf.jpg
❸:在打开的CMD窗口中输入下面的命令并回车,
  1. fromelf -c F303RE.axf -o F303RE.txt
复制代码
❹:然后就可以生成反汇编文件F303RE.txt文件,
fromelf.jpg
2)在keil里面直接调用和生成bin文件差不多,我们可以使用下面的命令:
  1. fromelf -c -o "$L@L.txt" "#L"
复制代码
fromelf.jpg
如果你感觉上面的命令比较难懂,也可以使用下面的稍微好理解的命令,不过一定要注意你生成的axf的文件的路径和工程文件所在路径的对应关系,否则可能会调用失败,
  1. fromelf -c  .\output\F303RE.axf  -o  .\output\F303RE.txt
复制代码
fromelf.jpg

好了,现在我们已经得到反汇编文件F303RE.txt,使用notepad++打开这个文件,你就可以看到我们的c语言汇编成的代码,我们还是使用上面提到的昨天的那个帖子的LR的值0x080002bd,因为M3/M4内核使用的Thumb指令会要求最低bit0为1,所以我们此处的LR 应该为 0x080002bc  在notepad++里面ctrl+f打开查询窗口输入0x080002bc  然后回车,我们发现定位的代码和昨天定位的一样,就是那句对0地址赋值0的代码,至此,我们也就通过反汇编axf找到导致程序跑飞程序的代码了。
fromelf.jpg

formelf 命令的功能相当强大,平常我使用到只是生成bin反汇编axf这些基本的,由于人比较懒用不到的就不想看这些英文文档,下面附件中的fromelf的说明文档详细介绍了它的其他的功能,希望那位兄弟有兴趣研究了分享下。

测试代码:
F303RE_Fromelf.rar (476.66 KB, 下载次数: 315)
1 收藏 18 评论38 发布时间:2015-7-5 18:23

举报

38个回答
creep 回答时间:2015-12-6 11:53:57
2602082487 发表于 2015-12-6 10:55
请问一下fromelf -c -o "$" "#L"这个命令参数的具体解释,手册上好像没有介绍啊

附件第2个PDF好像有介绍的,你看看有没有!
wyxy163@126.com 回答时间:2015-9-9 08:17:09
提示: 作者被禁止或删除 内容自动屏蔽
2602082487 回答时间:2015-12-6 10:55:36
请问一下fromelf -c -o "$L@L.txt" "#L"这个命令参数的具体解释,手册上好像没有介绍啊
mark0668 回答时间:2015-7-5 18:46:21
谢谢分享
Paderboy 回答时间:2015-7-5 19:14:00
多谢分享,支持。。
feiting94 回答时间:2015-7-5 20:42:34
赞一个,
qianfan 回答时间:2015-7-5 20:47:15
拜见橙子哥
creep 回答时间:2015-7-5 22:11:09

QianFan版主好,周末大好时光不去泡妹子来泡论坛!
qianfan 回答时间:2015-7-6 10:20:07
creep 发表于 2015-7-5 22:11
QianFan版主好,周末大好时光不去泡妹子来泡论坛!

马上考试了,准备突击啊
qianfan 回答时间:2015-7-6 10:20:09
creep 发表于 2015-7-5 22:11
QianFan版主好,周末大好时光不去泡妹子来泡论坛!

马上考试了,准备突击啊
肽宰1 回答时间:2015-7-6 11:00:40
moyanming2013 回答时间:2015-7-6 11:28:45
支持,学习了。
creep 回答时间:2015-7-6 11:53:32
HenryChen 回答时间:2015-7-6 17:41:12
支持,学习了。
埃斯提爱慕 回答时间:2015-7-6 21:55:15
提示: 作者被禁止或删除 内容自动屏蔽
qingzhu-325396 回答时间:2015-9-8 15:41:20
非常有用啊。。。不用在Debug里面一条条看。。。
wyxy163@126.com 回答时间:2015-9-8 17:30:09
提示: 作者被禁止或删除 内容自动屏蔽
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版