如何对单片机读出目标代码进行反汇编

发布者:huijiazi5210最新更新时间:2016-12-15 来源: eefocus关键字:单片机  目标代码  反汇编 手机看文章 扫描二维码
随时随地手机看文章

要正确获取程序的目标代码,首先要明确程序代码的存放地点。51单片机的程序存储器最大空间为64KB,在一个实际的应用系统中,程序存储器的分布情况可能有以下几种:

(1)只使用了片内程序空间。而没有使用片外的程序空间。

其硬件特征为:/EA引脚接VCC;/PSEN引脚为空脚。

这种情况比较简单,全部应用程序都在单片机内部的程序存储器中,我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。要注意的是,有一些新型的单片机具有加密功能,如果进行了加密,其中的程序代码就是不能读出。

(2)没有使用片内程序空间,片外程序空间由单个存储芯片构成。

其硬件特征为:/EA引脚接GND;/PSEN引脚接到一个存储芯片上。

这种情况下,全部应用程序都在单片机外部的程序存储器中, 原则上我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。但要注意的是,这样得到的并不一定是真正的目标代码,因为,为了防止程序代 码被读取、反汇编,很多设计人员都采取跳接线的方法,将某些地址线跳接或将某些数据线跳接或将地址线、数据线都进行跳接,从而保护自己的程序不被反汇编 (参见图1~图4)。这样一来,我们从存储器中读取的就不是真正的程序目标代码,必须进行某种变换,将其转换为真正的程序目标代码,才能进行反汇编。

 

要进行目标代码的变换,首先必须根据硬件画出实际的地址和数据的接线图,然后借助于工具软件进行变换。在“51汇编集成开发环境”(其下载网址为www1.skycn.com/SOFt/15074/html)中,提供了一个变换工具,从软件界面的[辅助工具]—[目标代码转换]-[bin代码还原]就可以启动这个工具。

单击[浏览]可以选择要转换的代码文件,注意:这里的代码文件只能是二进制代码文件,即bin文件,如果你通过编程器读取后保存的文件不是bin文件,就 需要先将其转换为bin文件,在“51汇编集成开发环境”的[辅助工具]-[目标代码转换]菜单下,有相应的转换工具。

单击[另存为]可以选择转换结果的存放地点和文件名,转换结果也一定是bin文件。

再根据实际的地址、数据的接线图,来选择地址线跳接、数据线跳接,设置其接线表,然后单击[还原]即完成了代码的变换。

(3)没有使用片内程序空间,片外程序空间由多个存储芯片构成 其硬件特征为:/EA引脚接GND;/PSEN引脚接到了几个存储芯片上。

这种情况下,全部应用程序在单片机外部的多个存储芯片中,我们首先需要使用编程器将每一个存储芯片上的程序代码读出来,分别保存为一个目标代码文件,然后将它们合并为一个文件。

在读取存储芯片上的程序代码时,要注意查看硬件接线有无跳接线,如果有跳接线,必须进行代码的变换。

在合并程序代码时,要注意每一个存储芯片的地址范围,必须按地址连接,才能得到真正的目标代码文件。 在“51汇编集成开发环境”中,从[辅助工具][目标代码转换]-[bin代码合并]可以启动合并工具。 单击[浏览]可以选择要合并的两个代码文件,注意:第一个代码文件必须是从0地址开始的文件,单击

[另存为]可以选择合并后的文件存放地点和文件名,然后单击[开始]即完成了代码的合并。

若选择直接连接,则第二个代码文件将紧接着第一个文件后连接;若选择按地址连接,则第二个代码文件将从指定的地址开始连接。如果两个代码文件之间有空字 节,则将填充为“00H”或“FFH”;如果两个代码文件在空间上有重叠,则将得到提示:“地址空间存在重合现象,不能正常合并!”。

(4)既使用了片内程序空间,也使用片外的程序空间,其硬件特征为:/EA引脚接VCC;/PSEN引脚接到一个存储芯片或几个存储芯片上。

在这种情况下,全部应用程序分布在单片机内部的程序存储器和外部的多个存储芯片中,获取程序代码的基本方法同(3)。

这里要注意的是,片外程序存储器的 地址范围应该在1000H~FFFFH之间,如果某一片程序存储器的地址是从0000H开始的,那么其0000H~0FFFH之间的代码是无效的,必须将 其去除。借助于“51汇编集成开发环境”的[辅助工具]-[目标代码转换]菜单下的[bin代码拆分],可以完成这一 工作。

单击[浏览]可以选择要转换的代码文件,再选择片内ROM空间为4KB,然后单击[开始]即可。

要想成功进行反汇编,还必须有一个好的反汇编工具。在“51汇编集成开发环境”中集成有一个反汇编工具。该工具目前不支持对非0地址开始的部分代码 进行反汇编,因为非O地址开始的部分代码无法区分程序和数据,但是对于从O地址开始的全部或部分代码的反汇编效果较好,能够智能分段、自动地分离出程序和 数据,使获得的源程序具有较好的可读性。

从软件界面的[编译]-[反汇编]-[MCS-51反汇编]可以启动这个工具

处理。要进行反汇编必须按以下步骤进行:

(1)借助于编程器分别从单片机和28C64中读取代码,保存为两个

文件。其中,从单片机中读取的文件名为CODE0.bin;从28C64中

读取的文件名为CODE1.bin。

(2)用“51汇编集成开发环境”中的[bin代码还原],将从28C64中读取的文件CODE1.bin转换为真正的程 序代码,保存为文件CODE2.bin。

(3)用“51汇编集成开发环境”中的[bin代码合并],将CODE0.bin和CODE2.bin合并为一个文件CODE3.bin.

(4)用“51汇编集成开发环境”中的[MCS51反汇编],对CODE3.bin进行反汇编,得到的源程序文件保存为CODE.ASM。

至此,反汇编成功。


关键字:单片机  目标代码  反汇编 引用地址:如何对单片机读出目标代码进行反汇编

上一篇:防止单片机解密的简单的解决方法
下一篇:hex格式介绍及转bin格式的源程序

推荐阅读最新更新时间:2024-03-16 15:25

基于CH375的LPT-USB打印机驱动器的设计
1 引言   本课题来源于北京普析通用公司。 由于该公司现有光谱仪器的单机版(如1810和T6等)采用的是并行口打印技术,而随着USB打印机技术的逐渐普及,并行口打印机越来越少,有些用户原有的打印机只是USB接口而非并行口,因此现有仪器对打印机的支持不能适应用户需要。为了使该公司的并行口仪器直接和USB打印机相连,笔者设计了一种LPT-USB打印机驱动器,实现并口仪器与USB打印机的连接。   笔者利用单片机和USB总线接口器件实现LPT-USB打印机驱动器的设计。利用该设计将能够实现并行打印口数据在USB打印机上的直接打印,克服了有些并口仪器必须连接并口打印机才能打印的弊端,极大地方便了用户的使用。 2 CH375的特点及工
[应用]
PIC单片机之AD框架
/******************************** *1 ADCON1 选择参考电压和模拟输入引脚 * ADCON0 选择通道,时钟 打开AD模式 *2 清楚 ADIF 设置 ADIE PEIE GIE *3 等待一定的时间 *4 开始A/D转化 GO/DONE=1 *5 1扫描方式开始扫描 GO/DONE 并清零 2响应中断清中断标志位 *6 读取寄存器的值 *********************************/ #include pic.h #include string.h #include STDIO.H __CONFIG(0x00A); #define inter_flag
[单片机]
基于单片机的密闭容器内蒸汽压力和炉壁温度控制方案
本文介绍一种用 单片机 作为控制器,实现对密闭容器内汽液混合状态下的蒸汽压力和炉壁温度进行控制的方案。该控制器采用模糊控制技术,适用于非线性、时变和时滞系统。实验结果表明,它具有无超调、无静差、鲁棒性强等特点。 1系统的硬件组成 总体的硬件结构如图1所示。 选用PIC16C74单片机作为主控制芯片,它有40根引脚,振荡频率可达20MHz,内含4KB的程序存储器和192Bytes的RAM。内置3个定时器,2个*模块,一个同步串行通信接口,一个5输入通道的8位A/D转换模块,并提供了12个中断源。 1.2测温电路部分 本电路的测温传感元件采用电阻温度探测器(RTD)。阻值RT与温度T有如下对应关系:R
[单片机]
基于<font color='red'>单片机</font>的密闭容器内蒸汽压力和炉壁温度控制方案
STC89C52RC单片机8位流水灯程序
#include reg52.h //头文件 /***********宏定义*******************/ #define uint unsigned int #define uchar unsigned char /*********数组定义并赋值************/ uchar LED ={ 0XFE,0XFD,0XFB,0XF7, 0XEF,0XDF,0XBF,0X7F }; /**********延时子程序***************/ void delayms(uint xms) { uint i,j; for(i=xms;i 0;i--) for(j=124;j 0;j--); } /*****
[单片机]
51单片机使用DAC0832编程输出方波,锯齿波,三角波,正弦波
#include reg51.h #include math.h #define uchar unsigned char #define uint unsigned int #define PI 3.1415925 float alph; void delayms(uint x) { uchar i; while(x--); { for(i=0;i 123;i++); } } main() { uchar i; while(1) { for(alph=0;alph 2*PI;alph+=0.1) { P2=1
[单片机]
51<font color='red'>单片机</font>使用DAC0832编程输出方波,锯齿波,三角波,正弦波
采用单片机C8051F310实现光伏电池MPPT控制器的设计
1 引 言 能源是人类社会存在和发展的重要物质基础,随着社会的发展,能源日渐减少,并伴随着环境问题日益突出,使得越来越多的国家把目光投向可再生能源。太阳能作为重要能源之一,以其永不枯竭,无污染等优点,正得到迅速的发展。但是太阳能电池在其工作过程中,由于受环境(主要包括日照强度,温度)的影响,其输出具有明显的非线性特性,造成电池与负载之间的不匹配,从而不能使太阳能最大效率地转化为电能输出。为了实现光伏发电系统的功率输出最大化,就需要对光伏电池的最大功率点进行跟踪控制,即MPPT(MaximumPower Point Tracking)控制。 在光伏控制技术上,MPPT控制方法有很多种,目前市场上常用的是使用CVT(恒定电压跟踪)
[单片机]
采用<font color='red'>单片机</font>C8051F310实现光伏电池MPPT控制器的设计
贸泽开售英飞凌MOTIX™ TLE989x MCU: 单芯片功率IC,更适合汽车/BLDC电机控制
2023 年 10 月 23 日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 贸泽开售英飞凌MOTIX™ TLE989x MCU: 配备CAN (FD) 接口的单芯片功率IC,更适合汽车/BLDC电机控制 (Mouser Electronics) 即日起开售英飞凌MOTIX™ TLE989x微控制器 (MCU)。 TLE989x系列微控制器扩展了其全面且经过验证的MOTIX™ MCU嵌入式功率IC产品组合,并采用CAN (FD) 作为通信接口。与TLE987x产品系列相比,此系列的处理能力提高了约60%,同时还拥有额外的功能安全和网络安全功能,如安全启动和密钥
[工业控制]
贸泽开售英飞凌MOTIX™ TLE989x <font color='red'>MCU</font>:  单芯片功率IC,更适合汽车/BLDC电机控制
基于stm8s103k3单片机串口UART的正确使用分享
最近开始使用stm8s103k3单片机了。据说很好,确实不错。前几天已经试过了GPIO,Timer2,ADC的功能,都比较容易,唯独串口UART使用,破费周折,写出来,供大家借鉴。 我使用的是stm8s103k3,32脚单片机,这个使用手册上说了UART1,UART2,UART3。但是引脚的功能图上只有UART1,并且你打开stm8s103k.h的头文件,里面也只有UART1寄存器的定义说明。所以我认为只有UART1。既然有这个功能,那就用吧,我以为直接可以连接到电脑的串口(COM1),就可以使用了,其实不可以。单片机即使写着提供UART通讯功能,也要连接MAX232转接芯片,我就在这里耽误了许多时间。 1、使用stm8s
[单片机]
基于stm8s103k3<font color='red'>单片机</font>串口UART的正确使用分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved