汇编语言:指令详解

发布于:2025-04-11 ⋅ 阅读:(32) ⋅ 点赞:(0)

零、前置知识

1、数据类型修饰符

名称 解释
byte 一个字节,8bit
word 单字,占2个字节,16bit
dword 双字,占4个字节,32bit
qword 四字,占8个字节,64bit

2、关键词解释

ptr:它代表 pointer(指针)的缩写。这个关键字在汇编代码中的作用是用来临时指定或转换操作数的类型。这可以类比于C语言中的强制类型转换。

一、控制流指令

1、JMP

无条件内存地址跳转

jmp 0x00007FF97543C47C
//直接跳转到内存地址00007FF97543C47C

2、CALL

3、RET

4、JZ /JE

通过ZF标志位是否跳转,当执行到JZ或者JE指令时,如果ZF=1则跳转,如果ZF=0,不跳转.

二、逻辑运算指令

1、AND

2、OR

3、NOT

4、XOR

三、算术运算指令

1、ADD

加法运算:6进制的减法和十进制类似,只不过向上进是逢16进一。
语法格式: add 被加数 加数

add rsp 38
//rsp是寄存器,假定rsp内值为58,则以上式子等同于rsp=rsp+28.

2、SUB

减法运算:16进制的减法和十进制类似,只不过向上借位借的是16。
语法格式: sub 被减数 减数

sub rsp 28
//rsp是寄存器,假定rsp内值为58,则以上式子等同于rsp=rsp-28.

3、MUL/IMUL

4、DIV/IDIV

5、MOD

6、CMP

用于比较两个操作数的大小的指令,内置一个减法运算,CMP指令的结果会影响处理器的标志位,这些标志位随后可以用于条件跳转指令JE或者JZ,从而实现类似于高级语言中的if语句的逻辑结构。
语法格式: cmp 目的操作数 源操作数 (被减数 减数)
标记位:ZF零标志位,CF进位标志位,SF符号标志位,OF溢出标志位。
解释:
ZF:当 cmp 指令执行减法运算后结果为 0 时,ZF 标志位会被置为 1;若结果不为 0,则 ZF 置为 0。
CF:cmp 指令执行减法运算后,如果被减数小于减数,就会产生借位,此时 CF 标志位置为 1;若没有借位,CF 置为 0。
SF:当 cmp 指令执行减法运算后结果为负数时,SF 置为 1;结果为正数或 0 时,SF 置为 0。
OF:对于减法运算,如果运算结果超出了其类型所能表示的范围,就会发生溢出,此时 OF 标志位置为 1;若没有溢出,OF 置为 0。

四、数据传输指令

1、MOV

把源操作数的值传递给目的操作数
语法格式: mov 目的操作数 源操作数
目的操作数可以是寄存器REG存储器MEN段寄存器SEG
同时注意以下mov的使用范围和规范。

在这里插入图片描述

对于无法直接传送的,可以考虑采用AX进行桥梁传递数据。

mov rax, qword ptr ds:[0x0000000000405560]
//DS是段寄存器,DS:0x0000000000405560代表段:偏移,指向某一个具体的内存地址

五、特殊指令

总结:

汇编语言是逆向工程的基础,本篇主要记录在逆向工程过程中遇到的不懂的汇编语法和语句,对其进行相应的记录和分析。