浅谈基于51单片机的反汇编要点
从一个现有的单片机应用系统中读出目标代码进行反汇编,可以分析原程序的设计思想,然后加以改进和创新,这是单片机爱好者学习单片机、开发新产品的一个重要途径。但是,很多单片机爱好者在反汇编时常会失败,怎样才能正确进行反汇编呢?下面就以51单片机为例,谈谈反汇编的要点。
1.怎样正确获取程序的目标代码
要正确获取程序的目标代码,首先要明确程序代码的存放地点。51单片机的程序存储器最大空间为64KB,在一个实际的应用系统中,程序存储器的分布情况可能有以下几种:
(1)只使用了片内程序空间。而没有使用片外的程序空间。
其硬件特征为:/EA引脚接VCC;/PSEN引脚为空脚。
这种情况比较简单,全部应用程序都在单片机内部的程序存储器中,我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。要注意的是,有一些新型的单片机具有加密功能,如果进行了加密,其中的程序代码就是不能读出。
(2)没有使用片内程序空间,片外程序空间由单个存储芯片构成。
其硬件特征为:/EA引脚接GND;/PSEN引脚接到一个存储芯片上。
这种情况下,全部应用程序都在单片机外部的程序存储器中,原则上我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。但要注意的是,这样得到的并不一定是真正的目标代码,因为,为了防止程序代码被读取、反汇编,很多设计人员都采取跳接线的方法,将某些地址线跳接或将某些数据线跳接或将地址线、数据线都进行跳接,从而保护自己的程序不被反汇编(参见下面四图)。这样一来,我们从存储器中读取的就不是真正的程序目标代码,必须进行某种变换,将其转换为真正的程序目标代码,才能进行反汇编。
评论