STM32F103系列单片机为例。该单片机基于ARM Cortex M3内核,片内带有64KB的Flash和20KB的SRAM。单片机读取程序到SRAM再进行译码。目前已知的有两个地方会存储需要运行的程序:
1.单片机内的Flash/ROM。
2.单片机外挂的Flash/ROM。
对于存储器来说,读和写的操作是最基本的,即:必然存在一种方式,可以把存储器中的数据读取出来。如果读取的数据是单片机需要翻译的机器码,那么我们就把读取的过程叫提取,把要读取的数据称为固件。
stm32f103c8t6单片机的片内Flash的地址是0x08000000-0x0801ffff(如上图所示),总共64KB。如果要提取出固件,有必要了解代码是如何烧写进芯片内的Flash区域里面的。
在开发过程中,会有如下过程:
1.搭建好编译环境,编写程序代码(一般采用高级程序设计语言,如C语言),编译、生成可执行文件。
2.搭建好烧写环境,把可执行文件传到单片机芯片中,使单片机上电可以运行。
编译环境就是用把单片机C语言程序编译成汇编、机器码等,生成16进制hex文件或者二进制bin文件,一个编译器即可。烧写环境就是把机器码下载到上图的Flash区域的过程中所需的工具,包含J-link、U-link、ST-LINK(stm32单片机专用)等硬件工具和STVP、mcuisp等软件(使用一套软硬件即可)
请注意,烧写、下载、上传、提取这四个词,说白了,就是对Flash区域读写的过程。目前发现两种读取固件的方式,第一种是依托于生产厂商固化在芯片内的bootloader,把Flash中的固件读取出来,第二种是通过调试接口把固件读出来。第一种需要bootloader支持,而且一般是支持的。第二种是依靠硬件调试工具直接读取,在前面的案例中,研究人员通过PCB上保留的JTAG调试接口,把固件读取了出来。
篇幅所限,读取过程中的交互细节不多介绍,直接介绍两类固件提取的工具和方法,一类是以stm32单片机为例的单片机固件提取的工具和方法,一类是外挂Flash形式的Flash固件提取的工具和方法。 单片机片内
Flash的固件提取的工具和方法: 单片机固件提取方式有两类,一类是通过bootloader读取,一类是通过调试接口读取。 (责任编辑:admin) |