Pwn学习之汇编基础

汇编是什么:

计算机执行的语言都是以1和0的二进制语言,物理上则表现为电信号的高低电平。汇编语言把机器指令翻译成容易理解的语句。例如:

1000100111011000  # 机器指令
MOV AX,BX  # 汇编指令

相对于机器指令,汇编指令更容易理解。
不管是REVERSE还是PWN都需要了解基本的汇编语法知识。

了解寄存器:

寄存器是计算机暂存指令、数据和地址的地方

常用寄存器:

EAX:累加器,是很多加法乘法指令的缺省寄存器
EBX:基质寄存器:在内存寻址时存放基地址
ECX:计数器
EDX:数据寄存器,被用于来放整数除法产生的余数
ESI:源变址寄存器
EDI:目的变址寄存器
EBP:扩展基址指针寄存器
ESP:栈指针寄存器
EIP:指令指针寄存器

标志位

进位标志CF(Carry Flag):

进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高 位产生了一个进位或借位,那么,其值为1,否则其值为0。

奇偶标志PF(Parity Flag):

奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。

辅助进位标志AF(Auxiliary Carry Flag):

在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0(在字操作时,发生低字节向高字节进位或借位时;在字节操作时,发生低4位向高4位进位或借位时)。

零标志ZF(ZeroFlag):

零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

符号标志SF(Sign Flag):

符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

溢出标志OF(Overflow Flag):

溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
Pwn学习之汇编基础_第1张图片

常用汇编指令:

ADD(加)

 ADD 被加数, 加数

AND(逻辑与)

AND 目标数, 原数   

CALL(调用)

CALL 相对地址

CMP(比较)

CMP 目标数,原数
CMP指令比较两个值并且标记CF、OF、ZF:
CMP     EAX, EBX             # 比较eax和ebx是否相等,如果相等就设置ZF为1
CMP     EAX,[404000]         # 比较eax和偏移量为[404000]的值是否相等
CMP     [404000],EAX         # 比较[404000]是否与eax相等

DEC(自减)

DEC 相对地址 

INC(自加)

INC 相对地址

INT

INT 相对地址

MOV(传送赋值)

MOV 目标数,原数

POP
PUSH

POP 相对地址
PUSH 相对地址

RET(返回)

RET 相对地址

SUB(减)

SUB 目标数,原数

TEST

TEST 操作符,操作符

你可能感兴趣的:(Pwn学习笔记)