mips pwn 笔记

环境

qemu

1
sudo apt install --install-suggests qemu

gdb-multiarch

1
sudo apt-get install gdb-multiarch

mips软件包

1
2
3
4
5
<!-- 具备MIPS交叉编译gcc与MIPS程序动态链接库 -->
sudo apt-get install gcc-mips-linux-gnu
sudo apt-get install gcc-mipsel-linux-gnu
sudo apt-get install gcc-mips64-linux-gnuabi64
sudo apt-get install gcc-mips64el-linux-gnuabi64

启动

Step 1

1
qemu-mipsel -g 9000 -L ./mips mips

or

1
io = process(["qemu-mipsel","-g","9000","-L","./mips","mips"])

Step 2

1
gdb-multiarch -q mips

Step 3

1
2
3
set architecture mips
set endian big
target remote :9000

shellcode

1
asm(shellcraft.mips.linux.sh())

汇编

跳转指令

  • j指令跳转到某个标签处,单纯的jmp

  • jr指令用于跳转到寄存器里的地址值指向的地方。

  • jal 跳转时,会将返回地址存入$ra寄存器。

  • jalr 与jal指令类似,只不过后面的对象为寄存器。

  • $ra寄存器,ra为,return address的缩写,一般用于存储返回地址,一个函数结尾往往会从栈里弹出一个值赋值给$ra寄存器,然后jr $ra。

内存读取指令

  • sw register,addr指令,sw即store word的缩写(对应的有store byte),将register寄存器里的值写入到addr地址处。

  • lw register,addr指令,lw即load word的缩写(对应的有load byte),读取addr处的数据,放入register寄存器。

寻址

  • la指令,相当于x86的lea

  • lai指令,i的意思是immediate立即数,即后面的对象为立即数。

  • la $a0,1($s0)指令,带有偏移的寻址,它的作用是$a0 = 1 + $s0

函数调用

传参方式

用$a0~$a3传递函数的前4个参数,记忆方法,寄存器名字a实际为argument的缩写。多余的参数用栈传递

函数返回值

一般用$v0~$v1寄存器传递。v也就是value的缩写。


mips pwn 笔记
https://www.w4y2sh3ll.top/2024/04/17/mips-pwn-笔记/
作者
W4y2Sh3ll
发布于
2024年4月17日
许可协议