代码丢了怎么从单片机上下载
前言
有的同学在做完练习之后将代码删除了,只在单片机上有一份代码,其实还是有办法解决的,不过我们最后只能得到一份汇编代码
声明:在未经别人的允许读取别人的代码是违法行为!
产品中的单片机设置有读保护功能,没有权限使用此功能读取代码
准备工作:
硬件:STM32单片机,USB转TTL,杜邦line若干
软件:GCC工具,FlyMcu软件
准备好上述工具就可以开始了
读取代码
首先我们要将单片机的UART1和U转TTL连接好(这里只能是UART1),也可以用这个方法打开bootloader模式,使用串口烧录单片机(只能使用hex文件)
开启bootloader:有的开发板上有跳线帽(有的有一键下载电路),我们拨动boot0的跳线帽从0到1,然后点击reset复位就好,开启bootloader模式之后我们就可以使用串口向单片机烧录程序,有时候我们如果使用AFIO将烧录代码用的SWD引脚映射掉就可以使用这个方式重新烧录代码,烧录完成之后再将跳线帽换回原位再复位即可。
之后我们要打开FlyMcu软件,可以使用这个软件通过串口的方式向单片机烧录,不过这里我们要读取flash,因此点击下面的读FLASH按键即可生成一个bin(二进制)文件
反汇编
这里我使用的是GIT BASH和GCC,只需要在二进制程序的目录下右键打开GIT BASH,然后输入命令就可以生成反汇编的txt文件
objdump -d test.bin > test.txt
这样就可以在文件所在位置生成一个txt文件,内容就是反汇编之后的结果,这里的test需要改成自己设置的bin文件的名称,最终我们就得到了一份汇编文件。
结束
可以再对其进行分析修改,值得一提的是,没有经验的程序员读汇编也是一件十分头疼的事,除非是需要对源码进行bug修改之类的工作,或者说源码确实丢了,打算做一个类似的代码,这样其实可以拼接出来,我们可以使用gcc再多链接几个文件,将源文件的汇编于我们后期写的函数链接到一起,找到源文件的main中BL我们新写的函数即可(需要提前IMPORT)
有问题的小伙伴欢迎留言咱们一起进步
作者:tommy_xing