pwn-常见汇编指令学习

pwn题常见的汇编指令

本文总阅读量

1.Intel指令

指令 描述 例子 解释
mov 传送数据 mov rax,18 将18的值传送进rax寄存器(rax = 18)
add 加法运算 add rax,rbx rax与rbx的值相加,并存储在rax(rax = rax + rbx)
sub 减法运算 sub rax,9 rax减9,将结果存储在rax(rax = rax - 9)
xor 异或运算 xor rax,rax 将rax与rax进行异或处理,等价于:(rax = 0)
call 调用函数
lea 取地址,现在一般用于运算 lea rax,[rbp - 18] 将rbp-18的结果传送到rax(rax = rbp - 18)
cmp 判断指令,实际作用是做减法运算,通常搭配J开头的命令进行使用 cmp rax,0x61 进行rax - 0x61运算,此命令不会将运算的结果值存储(rax - 0x61)
movzx 传送数据 movzx rax,BYTE ptr [rbp-0x10] 相当于将rbp-0x10地址的值,取8位数字传送至rax处BYTE:8位WORD:16位DWORD:32位QWORD:64位
push 压栈 push ebp 等同于:mov esp,esp - 4mov [esp],ebp[]的作用是取寄存器里的地址指向的没有[]的作用是取寄存器的地址
pop 弹栈 pop ebp 等同于mov ebp,[esp]mov esp,esp+4
leave 返回上级函数时,恢复原本栈空间 leave mov esp,ebppop ebp
ret 返回上级函数后,执行上级函数的指令 ret 等同于pop eip(这条指令实际是不存在的,不能直接向RIP寄存器传送数据)
call 调用指定函数,注意,调用函数时,push eip的值实际上eip下一条指令的地址值 call dofunc 等同于push eipjmp dofunc
nop 无操作,仅使ip指令+1,对应的指令是:\x90
test 测试指定寄存器中的值与另一个值(常数或寄存器)的按位与操作结果,而不改变寄存器的值。如果结果为零,将设置零标志位ZF。 test rax,rax
指令 描述 标记位
JE,JZ 结果为0则跳转(相等时跳转) ZF=1
JNE,JNZ 结果不为0则跳转(不相等时则跳转) ZF=0
JS 结果为负跳转 SF=1
JNS 结果为非负跳转 SF=0
JP,JPE 结果中1的个数为偶数则跳转 PF=1
JNP,JPO 结果中1的个数为奇数则跳转 PF=0
JO 结果溢出了则跳转 OF=1
JNO 结果没有溢出则跳转 OF=0
JB,JNAE 小于则跳转(无符号数) CF=1
JNB,JAE 大于等于则跳转(无符号数) CF=0
JBE,JNA 小于等于则跳转(无符号数) CF=1 or ZF=1
JNBE,JA 大于则跳转(无符号数) CF=0 and ZF=0
JL,JNGE 小于则跳转(有符号数) SF≠OF
JNL,JGE 大于等于则跳转(有符号数) SF=OF
JLE,JNG 小于等于则跳转(有符号数) ZF=1 or SF≠OF
JNLE,JG 大于则跳转(有符号数) ZF=0 and SF=OF

2.mips指令

寄存器的作用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$0$zero    常量0(constant value 0)
$1$at  保留给汇编器(Reserved for assembler)
$2-$3$v0-$v1   函数调用返回值(values for results and expression evaluation)
$4-$7$a0-$a3   函数调用参数(arguments)
$8-$15$t0-$t7  暂时的(或随便用的)
$16-$23$s0-$s7 保存的(或如果用需要SAVE/RESTORE的)(saved)
$24-$25$t8-$t9 暂时的(或随便用的)
$28$gp 全局指针(Global Pointer)
$29$sp 堆栈指针(Stack Pointer)
$30$fp/$s8 栈帧指针(Frame Pointer)
$31$ra 返回地址(return address)
指令 描述 例子 解释
j 跳转至标签处,相当于jmp指令
jr 跳转至寄存器里的地址指向的值,通常函数的返回处使用的指令为jr指令 jr $ra 将pc指令指向$ra寄存器里的值
jal 跳转指令,返回地址存储在$ra寄存器中,一般用于函数调用 jmp 目标地址mov fp,sp
jalr 与jal指令类似,只不过jal的对象为寄存器
la 相当于x86的lea
sw sw $ra, 0x5c($sp) 把$ra的内容写入到[$sp+0x5c]中

后续有待补充… …