网站首页 > 文章精选 正文
机器语言
- 机器语言是机器指令的集合;
- 机器指令就是一台机器可以正确执行的命令;
- 电子计算机的机器指令是一列二进制数字,计算机将之转换为一列高低电平,使计算机的电子器件受到驱动,进行计算。
CPU中央处理单元
每一种微处理器,由于硬件设计和内部结构不同,需要用不同的电平脉冲来驱动,因此每一种微处理器都有自己的机器指令集,也就是机器语言。
- 指令:01010000(PUSH AX)
- 电平脉冲
早期程序设计均使用机器语言。程序员用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带或卡片输入计算机,进行运算。
汇编语言产生
- 汇编指令是机器指令便于记忆的书写格式。
- 操作:寄存器BX的内容送到AX中
- 机器指令:1000100111011000
- 汇编指令:mov ax,bx
编译器:能够将汇编指令转换成机器指令的翻译程序。
汇编语言组成
- 汇编指令:机器码的助记符,有对应的机器码
- 伪指令:没有对应机器码,由编译器执行,计算机并不执行
- 其他符号:如+、-、*、/等,由编译器识别,没有对应机器码。
存储器
指令和数据在存储器中存放,然而在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。
1000100111011000 → 89DB 数据
1000100111011000 → mov ax,bx 指令
存储单元
存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号。例如:一个存储器有128个存储单元,从0~127开始编号。
CPU对存储器的读写
总线:CPU和其他芯片连接的导线,叫做总线。物理上,总线是一根根导线的集合;根据传送信息不同,逻辑上分为地址总线、数据总线、控制总线。
地址总线
- 一个CPU有N根地址线,即这个CPU的地址总线宽带为N。最多可以寻找2^N2N??个内存单元。
数据总线
控制总线
- CPU对外部器件的控制是通过控制总线来进行的
- 控制总线宽度决定了CPU对外部器件的控制能力。
主板和接口卡
主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。
CPU不能之间控制外部设备,这些外部设备都通过插在扩展插槽上的接口卡直接控制,而接口卡也通过总线和CPU相连,CPU就可以控制外部设备。
存储器芯片
- RAM和ROM,位置(主存或接口卡,比如显存)。
- BIOS
内存地址空间
逻辑存储器情况:
8086CPU内存地址空间分配情况
寄存器
- 运算器进行信息处理
- 寄存器进行信息存储
- 控制器控制各种器件进行工作
- 内部总线连接各种器件,在它们之间进行数据传送
通用寄存器
mov 和 add 指令
逆向分析
- 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误。
- 而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果。
- 调试逆向分为动态分析技术和静态分析技术。动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令流程,以便观察相关计算的结果和当前的设备情况。静态分析技术是相对于动态分析而言的。由于在实际分析中,很多场合不方便运行目标(例如病毒程序,设备不兼容,软件的单独某一模块)。那么这个时候静态分析技术就该上场了!
- OD(OllyDbg)和IDA Pro这两款工具分别是调试逆向的倚天剑和屠龙刀。
- 虽然两者都兼容动态和静态的调试方式,但就动态调试而言,OD更为灵活和强大,而静态调试工具的王者理所应当是功能极为强大的IDA Pro。
OD基本快捷键及功能
定位到系统函数
- Ctrl + G 输入MessageBoxA
- bp MessageBoxA 直接下断点
数据类型
在学习16位汇编时,可以对内存单元进行长度修饰,比如:mov byte ptr [1000H], 1,表示1是一个字节类型数据,mov word ptr [1000H], 1,表示1是一个字类型数据。
在C++中,使用变量类型表示数据的大小,引用头文件Windows.h
字节 BYTE 1字节 0-0xFF (unsigned char)
字 WORD 2字节 0-0xFFFF (unsigned short )
双字 DWORD 4字节 0-0xFFFFFFFF (unsigned long)
问题
只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
mov ax,2
add ax,ax
add ax,ax
add ax,ax
086CPU偏移地址
8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。从8086的内部结构来看,如果讲地址从内部简单的发出,那么只能送出16位地址,寻址能力只有64KB。
物理地址=段地址*16+偏移地址
- 内存并没有分段,段的划分来自CPU
- 段地址一定是16的倍数
- 一个段最大长度是64KB
段寄存器CS和IP
在8086CPU中,任意时刻,设CS中的内容为M,IP中内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令。
在8086CPU加电启动或复位后(即CPU刚开始工作时),CS被设置为FFFFH,IP被设置为0000H。CPU从FFFF0H内存单元中读取指令并执行,时开机后的第一条指令。
修改CS和IP
- 同时修改cs和ip:jmp 段地址:偏移地址
- 只修改ip:jmp 寄存器
如图所示:CPU初始状态CS=2000H,IP=0000H
Debug调试
常用指令
- R命令查看、改变CPU寄存器的内容
- D命令查看内存中的内容
- E命令改写内存中的内容
- U命令将内存中的机器指令翻译成汇编指令
- T命令执行一条机器指令
- A命令以汇编指令格式在内存中写入一条机器指令
进入Debug
实验任务1
实验任务2
实验任务3
DS段地址
将al中的数据送入内存单元10000H中
mov bx,1000H
mov ds,bx
mov [0],al
SUB指令
sub 操作数A,操作数B
影响ZF标志位
标志寄存器
8086 CPU 标志寄存器有16位,其中存储的信息通常被称为程序状态字PSW(Program State Word)。
- 用来存储相关指令的某些执行结果
- 用来为CPU执行相关指令提供行为依据
- 用来控制CPU的相关工作方式
ZF标志位
flag的第6位是ZF,零标志位,记录相关指令执行后,其结果是否为0。如果结果为0,ZR( Zero ),ZF=1,如果结果不为0,NZ( Not Zero ),ZF=0。
OD命令栏指令
- bp 下断点
- bc 清除断点
- dd 以双字显示数据
- dw 以字显示数据
- db 以字节显示数据
- dc 以字符显示数据
- ? 计算表达式的值
PDB文件
全称为程序数据库文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。
禁用VS优化
MOVSX和MOVZX
- 都是由小存储单元向大存储单元进行数据传送
- MOVSX用符号位进行扩展填充
- MOVZX用0进行扩展填充
LEA
- 将源操作数给出的有效地址传送到指定的的寄存器中
PF标志位
flag第2位是PF(Parity Flag),判断结果所有bit位中1的个数如果是偶数,PE(Parity Even),PF=1,如果是奇数PO(Parity Odd),PF=0。
SF标志位
flag第7位是SF(Sign Flag),结果为负NG,SF=1,结果为正PL,SF=0。
栈操作指令
- push ax:将ax中数据送入栈中
- pop ax: 将栈顶数据取出送入ax
- ss:sp 指向栈顶
push ax执行,由下列两步完成
1.SP=SP-2
2.将ax中数据送入新的SS:SP指向位置
CF标志位
flag的第0位是CF,在进行无符号运算的时候,记录运算结果的最高有效位向更高位的进位值,或者从更高位的借位值。
OF标志位
记录有符号数是否溢出。
CMP指令
指令格式:cmp 操作对象1,操作对象2
指令功能:计算操作对象1-操作对象2,但并不保存结果,
下列为根据无符号数的比较结果进行转移的条件转移指令:
- 上一篇: 小红书宣布调整组织职级,管理走向扁平化
- 下一篇: 汇编还是程序员的必修课吗?为何应学习汇编语言?
猜你喜欢
- 2025-01-02 什么是C语言?
- 2025-01-02 我们一起学RISC-V——10-C和汇编语言混合编程
- 2025-01-02 世界上最著名的操作系统是用什么语言编写的?
- 2025-01-02 支持PLC编程的5大电气语言
- 2025-01-02 支持PLC编程的5大电气语言,全部会用的才是大神!
- 2025-01-02 知识地图—编程语言相互影响的关联图
- 2025-01-02 简单说说什么是MLIR
- 2025-01-02 学指令集(汇编语言)的重点是寻址方式(一)
- 2025-01-02 零基础五步掌握,PLC学习方法
- 2025-01-02 CPU眼里的:汇编语言
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)