【汇编学习】Mips 指令集

一点一点总结

A

addiu

addiu 是加立即数指令,不受溢出限制

具体表现为:遇到溢出时,对溢出的结果进行 32 bit 求模,将求模结果写入目的寄存器中

1
addiu    $a1, $v0, -8

意思为:$a1 = $v0 + (-8)

B

b

无条件跳转,相对当前地址(PC)进行跳转

1
b    0x76ffeffc

shellcode

汇编号是 \x00\x10,假设从 0x76ffeff8 跳转到 0x76ffeffc

1
2
sc += '\x00\x00'  # 相对偏移 - 4
sc += '\x00\x10' # b

bal

无条件跳转,相对当前地址(PC)进行跳转,将跳转函数的返回地址保存到 $ra 中

1
bal    0x409230

shellcode

汇编号是 \x11\x04,假设从 0x76ffeff8 跳转到 0x76ffeffc

1
2
sc += '\x00\x00'  # 相对偏移 - 4
sc += '\x11\x04' # bal

beqz

条件转移指令,当寄存器中内容为 0 时跳转

1
beqz    $a3, oprd

其中 oprd 为转移的目的地址,程序转移到目的地址所指向的指令继续往下执行

J

jalr

1
jalr oprd1 oprd2

无条件跳转到由寄存器 oprd1 存储的地址,并将下一条指令的地址保存到寄存器 oprd2(默认为31)中

jr

跳转到寄存器存储的地址

1
jr    $ra

shellcode

1
2
sc = '\x08\x00\xa0\x03'  # jr     $sp
sc = '\x08\x00\xe0\x03' # jr $ra

L

lw

lw (Load Word) 指令用于从一个指定的地址加载一个 word 类型的值到一个寄存器中

1
lw    $gp, 0x10($fp)

等同于 $gp = [$fp + 0x10]

M

move

move 指令用于寄存器之间值的传递

1
move    $sp, $fp

N

nop

空操作

文章目录
  1. 1. A
    1. 1.1. addiu
  2. 2. B
    1. 2.1. b
    2. 2.2. bal
    3. 2.3. beqz
  3. 3. J
    1. 3.1. jalr
    2. 3.2. jr
  4. 4. L
    1. 4.1. lw
  5. 5. M
    1. 5.1. move
  6. 6. N
    1. 6.1. nop
|