首页 > 编程知识 正文

c语言打开文件格式,bin文件反编译成c语言

时间:2023-05-03 08:14:10 阅读:156334 作者:1561

以hex(hexadecimal )、十六进制英文缩写、*.hex为后缀的文件称为hex文件,主要用于存储单片机固件,直接下载到单片机

1、hex文件的内容

打开其中一个hex文件。 内容如下。 (为了展示内容,当选部分被删除了) )。

整个文件以行为单位,每行以冒号开头,内容全部以十六进制代码(ASCII代码)显示。 两个ASCII代码字符表示一个Hex字节。

2、hex文件分析

hex文件的内容都是有规律编码的。 以第一行:020000040800F2为例,可以进行分析。

1 )每行以(0x3A )开头

2 )第一字节的0x02表示数据区的字节数,用ASCII表示四个ASCII字符

4 )第4字节0x04表示本行记录的数据类型

' 00' Data Record :用于记录数据,HEX文件中的大部分记录都是数据记录

' 01' End of File Record :用于标识文件的结尾,位于文件的结尾,用于标识HEX文件的结尾

' 02 ' extendedsegmentaddressrecord :用于标识扩展段地址的记录

' 03 '开始段地址记录:不使用段地址STM32

' 04 '扩展线性地址记录:标识扩展线性地址

' 05 '开始线性地址记录:程序开始执行的地址

5 )第5、6字节的0x 08,0x 00为数据

6 )第7字节0xF2是校验字节,其中校验和算法计算0x3A之后的每个字节(除0x3A外)的缩略图256的余数。 也就是说,每个字节二进制相加值是不超过256的溢出值,通过用0x100减去该相加值获得的值是该行的校验和。

7 )每个数据最后有0x0d (回车键)、0x0a (换行符)

总结:可以按如下方式分析hex文件中的数据行:

注:每行只能识别2字节的数据地址,因此最多可以识别64K。 有扩展线性地址记录,以便可以存储高地址数据。 如果该行的数据类型为0x04,则该行中的数据将是后续数据的基址。 例如:

:0200000040004f6

:1000000018 f 09 Fe 518f 09 Fe 518f 09 Fe 518f 09 Fe 518f 09 Fe 518f 09 Fe 518f 09 Fe 518f 09 Fe 5c 0

:1000100018 f 09 Fe 5805 f 20 B9 f0f1Fe 518 f 09 Fe 51d

第一行是扩展线性地址记录,其中的数据,即基地址为0x0004。

第二行是Data Record,其中的地址值为0x0000。 那么,数据18 f 09 Fe 518 f 09 Fe 518 f 09 Fe 518 f 09 Fe 518 f 09 Fe 5写入闪存的地址为|0x000416|0x0000,即写入闪存的0x40000。

第3行数据的写入地址为0x40010。 如果一个HEX文件的数据超过7k,则该文件将出现多个扩展线性地址记录。

3、分析实例:

烧写在:10000003807002029020008 b 90300086 f 0300000820---0x 080000000中的数据

烧写在:10001000 b 5030008 d 102000847060008000000 f0---0x 080000010中的数据

:040000050800018965 ----05类型的行对烧写程序没有帮助

:00000001FF ----HEX文件结束行

---结束了----

本文参考安富莱STM32开发板软件的参考手册,笔者知识有限,如果发现本文有错误欢迎批评指正,如果本文对你有帮助,转发、共享也是笔者坚持的动力

分享好文章

南风关注蜻蜓飞行,开辟物联网、嵌入式学习之路

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。