只有hex文件可以弄出c程序吗

2019-03-24 16:55发布

只有hex文件可以弄出c程序吗 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
wsmysyn
2019-03-25 09:38
本帖最后由 wsmysyn 于 2018-12-27 10:55 编辑

hex其实和烧到flash里边的程序已经差不多了。

intel hex-80格式,我记得大概就是地址偏移量,然后是长度,然后是sram中存储的二进制程序代码,最后是一个校验码

通过工具可以将实际写入到sram中的数据提取出来。。

然后提取出来的数据,可以用反汇编工具,将二进制代码转成汇编的形式。
(如果经验够得话,可以根据MCS51指令集,根据程序入口地址,以及中断向量入口地址,自己手工计算代码的执行过程也是可以的)

经验比较足的话,可以根据汇编的代码,反向成C语言。

缺点:
1、从上面描述你也看到,从hex转成C语言有这个可能,但是你要是用hex转成人家原始C文件,绝对不可能。
2、反汇编工具是否智能,因为编译链接生成的代码,不一定都是在连续空间存储的,反编译工具如果识别不出来,很可能把不连续区也当做代码部分进行反汇编,可能会造成反汇编错误,影响分析。
但是通过hex生成的binary文件,可以人工干预,手算偏移地址,在指定偏移地址处开始反汇编
3、比较明显的汇编语句,转成C比较容易些,比如90E6017480F0 直接就可以写成C语言句式:IFCONFIG = 0x80;
但是原始C语言比较复杂的语法,从汇编程序上比较难看出来。还有就是一些函数传参等等,需要仔细阅读汇编的代码,确定传了一些什么参数。
4、综上,从hex转C,以上步骤不能少,能不能转C?答案是有可能。难度多大?看代码长度,估计一下源代码复杂度,还有自身的知识储备。

不过有那分析的时间,还不如去自己写了。。
优点:
1、你通过分析,掌握了MCS-51指令集,可以根据二进制代码手算CPU的执行过程。
2、通过手算CPU的执行过程,你掌握了8051的固件工作过程,二进制级别
3、你了解了c语言的语句对应的机器指令是如何实现的。
4、没了。。。


一周热门 更多>