通用的单片机反汇编程序实现方法

合集下载

单片机汇编语言程序设计

单片机汇编语言程序设计

单片机汇编语言程序设计机器语言只是01之类的二进制数。

汇编语言,用英文助记符来代替机器语言的语言。

汇编程序,用汇编语言编写的程序称为汇编源程序汇编,汇编源程序需转换成二进制代码表示的机器语言程序,单片机才能识别和执行,这一转换过程称为汇编.汇编程序,完成“翻译”工作的程序称为汇编程序。

目标程序,经汇编程序“汇编”得到的以0,1代码形式表示的机器语言程序称为目标程序。

反汇编,机器语言转换成汇编语言的过程高级语言,与汇编语言相比,高级语言比较接近人类语言。

可读性比汇编更强。

汇编语句必须要有的操作码,未必有操作数,常见的四分段格式标号字段,操作码字段,操作数字段,注释字段。

注释使用,来注释操作码字段, 操作码,汇编指令中唯一不可空缺部分。

操作数字段,操作数有单操作数,双操作数,和无操作数三种情况,双操作数,两个操作数之间用,隔开。

操作数中十六进制,二进制,十进制的表示方法十六进制采用末位加H;十进制采用末位加D或者省略二进制采用末位加B伪指令,在汇编过程中不产生对应的机器码。

ORG 汇编起始地址命令END 汇编终止命令EQU 标号赋值命令DB 定义数据字节命令DW 定义数据字命令DS 定义存储区命令BIT 位定义命令中断程序的编写思路所谓中断就是,主程序在执行某项工作时,突然间遇到另外一个事件打断,这时需要程序去处理突然出现的事件。

处理完继续返回到主程序去执行原先被打断的工作。

中断与子程序的区别,1. 中断和子程序的编写虽然都涉及到标号,但是中断是一旦触发了中断标志,会自动生成LCALL 中断入口地址去调用中断子程序。

2. 中断的响应具有随机性,不确定性。

子程序常用于人为调用。

中断的构成中断标志位总允许EA 中断源中断源允许响应中断请求中断优先级IP 硬件查询1.TCON:为定时器/计数器的控制寄存器。

字节地址88H,可位寻址。

IT0 ,IT1选择外部中断请求为跳沿触发。

IT0=1,IT1=1设置为跳沿触发。

反汇编——精选推荐

反汇编——精选推荐

反汇编反汇编反汇编:把⽬标代码转为汇编代码的过程。

通常,编写程序是利⽤⾼级语⾔如C,Pascal等⾼级语⾔进⾏编程的,然后再经过编译程序⽣成可以被计算机系统直接执⾏的⽂件。

反汇编即是指将这些执⾏⽂件反编译还原成汇编语⾔或其他⾼级语⾔。

但通常反编译出来的程序与原程序会存在许多不同,虽然执⾏效果相同.gdb相关操作:b linenumber 设置断点run 运⾏disassemble 获取汇编代码⽤i(nfo) r(egisters)查看各寄存器的值⽤x查看内存地址中的值具体步骤:设置断点在main函数调⽤f函数的位置gdb> b maingdb> run运⾏gdb> disassemble反汇编display /i $pci rx查看内存中的内容si执⾏下⼀条汇编反汇编:使⽤gcc - g example.c -o example -m32指令在64位的机器上产⽣32位汇编,然后使⽤gdb example指令进⼊gdb调试器:⽤gcc在64位机器上编译⼀个32位的程序,遇到报错,具体如下图:这是因为编译64位Linux版本32位的⼆进制⽂件,需要安装⼀个库,使⽤指令sudo apt-get install libc6-dev-i386进⼊之后先在main函数处设置⼀个断点,再run⼀下,使⽤disassemble指令获取汇编代码,⽤i(info) r(registers)指令查看各寄存器的值:可见此时主函数的栈基址为0xffffd1e8,⽤x(examine)指令查看内存地址中的值,但⽬前%esp所指堆栈内容为0,%ebp所指内容也为0以上为⼊门⼩练习,接下来让我们直接进⼊f函数中,查看f函数的每⼀步汇编代码“display /i $pc” 其中 $pc 代表当前汇编指令,/i 表⽰以⼗六进⾏显⽰。

当需要关⼼汇编代码时,此命令相当有⽤。

这样在每次执⾏下⼀条汇编语句时,都会显⽰出当前执⾏的语句。

pic单片机c语言的可执行程序反编的方法

pic单片机c语言的可执行程序反编的方法

pic单片机c语言的可执行程序反编的方法
反编译PIC单片机的可执行程序是一项复杂而困难的任务,因为PIC单片机编译生成的可执行文件通常是二进制格式的机器码,而不是常见的可执行文件格式(如ELF、PE等)。

在反编译PIC单片机可执行程序时,可以尝试以下方法:
1. 逆向工程:逆向工程是根据可执行程序的行为和功能来分析程序的工程技术。

逆向工程可以使用逆向工程工具(如IDA Pro)来分析程序的结构、函数、变量等,并尝试将其转化回C语言代码。

2. 代码静态分析:通过对程序的二进制代码进行分析,寻找关键的函数、指令序列、常量等,来理解程序的功能和行为。

3. 反汇编:使用反汇编工具(如GNU Binutils中的objdump)将可执行程序转化为汇编代码,然后通过分析汇编代码来理解程序的结构和行为。

4. 动态调试:通过将可执行程序加载到模拟器或实际的PIC单片机硬件上,并使用调试器(如MPLAB X IDE)来监视程序的执行和内存状态,以获取更多的信息。

需要注意的是,由于反编译是一项复杂且困难的任务,结果可能并不完全准确或可读性较差。

在进行反编译时,建议先进行逆向工程,尽量还原程序的结构和语
义。

同时,尊重所使用的程序的版权和知识产权,确保在合法的范围内进行逆向工程和反编译的活动。

反汇编原理

反汇编原理

反汇编原理反汇编是指将目标文件中的机器代码转换为汇编代码的过程。

在软件逆向工程中,反汇编是一项非常重要的技术,它可以帮助我们理解程序的内部结构和运行机制,甚至可以帮助我们进行程序的修改和优化。

本文将介绍反汇编的基本原理和常用工具,希望能对读者有所帮助。

首先,我们需要了解反汇编的原理。

在计算机中,程序是以二进制形式存储的,这些二进制数据就是机器代码。

而汇编代码是一种人类可读的低级语言,它是机器代码的助记符表示。

反汇编就是将机器代码转换为汇编代码的过程。

在这个过程中,我们需要了解指令的编码格式、寻址方式、操作数的含义等信息,然后根据这些信息将机器代码转换为汇编代码。

其次,我们需要了解反汇编的应用。

反汇编在软件逆向工程中有着广泛的应用,它可以帮助我们理解程序的内部结构和运行机制。

通过反汇编,我们可以分析程序的算法和数据结构,找出程序的漏洞和安全隐患,甚至可以进行程序的修改和优化。

此外,反汇编还可以帮助我们进行代码调试和分析,帮助我们理解程序的运行逻辑和实现原理。

接下来,我们需要了解反汇编的常用工具。

目前,市面上有很多优秀的反汇编工具,比如IDA Pro、OllyDbg、Hopper等。

这些工具可以帮助我们进行高效的反汇编和代码分析。

它们提供了丰富的功能和友好的界面,可以帮助我们快速定位程序的关键代码和数据,提高我们的工作效率。

最后,我们需要了解反汇编的注意事项。

在进行反汇编时,我们需要注意保护知识产权和遵守法律法规,不得进行未经授权的逆向工程。

此外,反汇编可能会遇到一些困难和挑战,比如代码混淆、反调试技术等,我们需要具备扎实的计算机知识和丰富的实战经验,才能应对这些挑战。

总之,反汇编是软件逆向工程中的重要技术,它可以帮助我们理解程序的内部结构和运行机制,甚至可以帮助我们进行程序的修改和优化。

通过学习反汇编的原理和常用工具,我们可以提高自己的逆向工程能力,为软件安全和优化提供更多的可能性。

希望本文对读者有所帮助,谢谢!以上就是关于反汇编原理的相关内容,希望对你有所帮助。

单片机反汇编

单片机反汇编

单片机反汇编单片机反汇编是指将单片机的机器码翻译成汇编代码的过程。

在程序调试或逆向工程中,反汇编技术是必不可少的。

本文将介绍单片机反汇编的基本原理和实际应用。

一、反汇编原理单片机的机器码是由指令和数据组成的二进制代码。

指令是CPU执行的基本操作,例如数据传输、算术运算、逻辑运算等。

不同的单片机芯片有不同的指令集,但它们都遵循一定的规则,例如指令的长度和格式。

在反汇编过程中,我们需要根据这些规则将机器码解析成汇编指令。

二、反汇编工具反汇编工具有很多种,例如IDA Pro、OllyDbg、Ghidra等。

这些工具可以自动将机器码翻译成汇编指令,并提供调试和逆向分析的功能。

不同的工具有不同的特点和优缺点,选择适合自己的工具是非常重要的。

三、反汇编实例以下是一个简单的反汇编实例,以AT89S52单片机为例。

假设我们要反汇编一个简单的LED闪烁程序。

78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0 78 F0 90 F0MOV P1,#0xFFL1: ACALL DELAYCPL P1.0SJMP L1解析:第一条指令MOV P1,#0xFF是将0xFF赋值给P1寄存器,即将P1所有引脚都输出高电平,点亮LED灯。

中微单片机 risc反汇编-概述说明以及解释

中微单片机 risc反汇编-概述说明以及解释

中微单片机risc反汇编-概述说明以及解释1.引言1.1 概述:中微单片机是一种高性能、低成本的嵌入式微处理器,具有广泛的应用领域,在物联网、智能家居、工业控制等领域有着重要的作用。

而RISC (精简指令集计算机)架构是一种以简化指令集和高效指令执行为特点的计算机体系结构。

本篇文章将介绍中微单片机的基本概念和结构,以及RISC架构的相关知识。

同时,我们将探讨反汇编原理与方法,通过对中微单片机程序的分解和分析,揭示其中的指令流程和数据处理过程,从而深入理解其内部运行机制。

通过本文的学习,读者将能够更好地理解中微单片机和RISC架构,掌握反汇编的方法和技巧,为进一步的应用研究和开发工作提供有力支持。

1.2 文章结构本文主要包括以下几个部分:1. 引言:介绍文章的背景和目的,概述中微单片机和RISC架构的基本概念,以及反汇编的原理和方法。

2. 中微单片机简介:介绍中微单片机的基本特点、应用领域以及其在物联网、嵌入式系统中的重要性。

3. RISC架构概述:深入探讨RISC架构的基本原理、特点和优势,以及在单片机领域中的应用情况。

4. 反汇编原理与方法:详细解释反汇编的概念,介绍反汇编的原理和实现方法,以及其在单片机开发和分析中的重要性。

5. 结论:总结全文的观点和结论,探讨中微单片机和RISC架构在未来的应用前景,展望相关领域的发展趋势。

1.3 目的本文的目的在于深入探讨中微单片机的反汇编技术,通过对RISC架构的简介和反汇编原理的分析,帮助读者更好地了解单片机的工作原理和内部结构。

同时,本文也旨在探讨反汇编在单片机领域中的应用前景,为相关领域的研究和应用提供参考。

通过本文的介绍和分析,读者可以更深入地了解单片机技术,并对其在未来的发展方向有更清晰的认识。

2.正文2.1 中微单片机简介中微单片机是一种应用广泛的嵌入式微控制器,具有体积小、功耗低、性能稳定等特点。

中微单片机常被用于诸如家电控制、汽车电子、工业自动化等领域。

OllyICE反汇编教程及汇编命令详解

它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。
3、指针寄存器
其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
32位CPU有2个32位通用寄存器EBP和ESP。
它们主要用于访问堆栈内的存储单元,并且规定:
其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,
用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8、嵌套任务标志NT(Nested Task)
嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:
(1)、当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;
(2)、当NT=1,通过任务转换实现中断返回。
3、重启动标志RF(Restart Flag)
在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。
三、32位标志寄存器增加的标志位
1、I/O特权标志IOPL(I/O Privilege Level)
I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。
如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。

Keil反汇编HEX文件资料

Keil 程序调试窗口上一讲中我们学习了几种常用的程序调试方法,这一讲中将介绍Keil 提供各种窗口如输出窗口、观察窗口、存储器窗口、反汇编窗口、串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用。

一、程序调试时的常用窗口Keil 软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Windows )、观察窗口(Watch&Call Statck Windows )、存储器窗口(Memory Window )、反汇编窗口(Dissambly Window )串行窗口(Serial Window )等。

进入调试模式后,可以通过菜单View 下的相应命令打开或关闭这些窗口。

图1是输出窗口、观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。

进入调试程序后,输出窗口自动切换到Command 页。

该页用于输入调试命令和输出调试信息。

对于初学者,可以暂不学习调试命令的使用方法。

1、存储器窗口存储器窗口中可以显示系统中各种内存中的值,通过在Address 后的编缉框内输入“字母:数字”即可显示相应内存值,其中字母可以是C 、D 、I 、X ,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM 空间,数字代表想要查看的地址。

例如输入D :0即可观察到地址0开始的片内RAM 单元值、键入C :0即可显示从0开始的ROM 单元中的值,即查看程序的二进制代码。

该窗口的显示值可以以各种形式显示,如十进制、十六进制、字符型等,改变显示方式的方法是点鼠标右键,在弹出的快捷菜单中选择,该菜单用分隔条分成三部份,其中第一部份与第二部份的三个选项为同一级别,选中第一部份的任一选项,内容将以整数形式显示,而选中第二部份的Ascii 项则将以字符型式显示,选中Float 项将相邻四字节组成的浮点数形式显示、选中Double 项则将相邻8字节组成双精度形式显示。

如何实现单片机程序代码的反汇编

如何实现单片机程序代码的反汇编如何实现单片机程序代码的反汇编要正确获取程序的目标代码,首先要明确程序代码的存放地点。

51单片机的程序存储器最大空间为64KB,在一个实际的应用系统中,程序存储器的分布情况可能有以下几种:(1)只使用了片内程序空间。

而没有使用片外的程序空间。

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

这种情况比较简单,全部应用程序都在单片机内部的程序存储器中,我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。

要注意的是,有一些新型的单片机具有加密功能,如果进行了加密,其中的程序代码就是不能读出。

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

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

这种情况下,全部应用程序都在单片机外部的程序存储器中,原则上我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。

但要注意的是,这样得到的并不一定是真正的目标代码,因为,为了防止程序代码被读取、反汇编,很多设计人员都采取跳接线的方法,将某些地址线跳接或将某些数据线跳接或将地址线、数据线都进行跳接,从而保护自己的程序不被反汇编(参见图1~图4)。

这样一来,我们从存储器中读取的就不是真正的程序目标代码,必须进行某种变换,将其转换为真正的程序目标代码,才能进行反汇编。

要进行目标代码的变换,首先必须根据硬件画出实际的地址和数据的接线图,然后借助于工具软件进行变换。

在“51汇编集成开发环境”(其下载网址为www1.skycn.com/SOFt/15074/html)中,提供了一个变换工具,从软件界面的[辅助工具]—[目标代码转换]-[bin代码还原]就可以启动这个工具。

单击[浏览]可以选择要转换的代码文件,注意:这里的代码文件只能是二进制代码文件,。

单片机 第四章 80C51单片机汇编语言程序设计


(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
(后续)
4.2.4 子程序设计
3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序
(接上)
6.在子程序调用时,还要注意参数传递的问题
子程序的基本结构
MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序 ┇ SUB:PUSH PSW PUSH ACC ;现场保护 ;
过程B
是 出口 (c) 循环结构
出口 (b) 分支结构
4.2.1
顺序程序结构
是汇编语言程序的最简单也是最基本的程序结 构。程序执行时一条接一条地按顺序执行指令, 无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A , #30H ADD A , #58H MOV 30H , A SJMP $
二、定时程序 (2)多重循环定时程序(单片机频率为6MHz) 例 MOV R5,#TIME1 LOOP2: MOV R4,#TIME2 ;单周期指令 LOOP1: NOP ;单周期指令 NOP DJNZ R4,LOOP1 ;双周期指令 DJNZ R5,LOOP2 ;双周期指令 RET 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2µs 总时间=循环体时间+4µs
机器编辑->交叉汇编->串行传送
(过程图见教材92页)
单片机的开发过程
设计硬件 软件编程 软件仿真调试 源代码烧入单片机 插入单片机脱机工作 模数电路/单片机硬件 MCS51汇编语言/C
计算机/MEDWIN环境
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档