关于路由和mips语句杂记

简单记录一下自己关于路由器方向的一些总结,算是从强网回来之后摸鱼的内容

路由的动态调试

环境上这里是用qemu搭建的,调试工具利用的是ida。

qemu语句

1
2
3
- E  var=value 设置环境变量
- g port 开启调试模式等待attach
chroot ./qemu-mips 指定根目录运行qemu-mips

完整的语句
echo $INPUT | chroot . ./qemu-mips -g $PORT -E HTTP_ST=$ST -E REMOTE_ADDR=1.1.1.1 -E REMOTE_PORT=1111 -E SERVER_ID=1 -E HOST="239.255.255.250:1900" /ssdpcgi ssdpcgi

ida调试

先设置remote debug选项

在设置debug选项

接着设置两个debug-options即可


这里主要是选择一下调试的类型,如果你打开了文件就基本不用设置,如果只是attach需要进行一下设置。

mips语法

寄存器篇

一般有0-32个寄存器

简单记录几个重要寄存器

1
2
3
4
$ ra 
储存jr 地址
$sp $fp(s8)
记录堆栈情况

mips基础语法

1
2
3
4
5
6
lw register_destination, RAM_source 从内存中复制到对应的寄存器
lb register_destination, RAM_source 同上即为load bytes
sw register_destination, RAM_destination 将寄存器数据写到特定的内存中
sb 同上lb
la $to,var1 传递地址
($to)形如指针

分支(if else)

1
2
3
4
5
6
7
8
9
10
11
12
13
b   target      #  unconditional branch to program label target

beq $t0,$t1,target # branch to target if $t0 = $t1

blt $t0,$t1,target # branch to target if $t0 < $t1

ble $t0,$t1,target # branch to target if $t0 <= $t1

bgt $t0,$t1,target # branch to target if $t0 > $t1

bge $t0,$t1,target # branch to target if $t0 >= $t1

bne $t0,$t1,target # branch to target if $t0 <> $t1

转跳

1
2
3
4
5
j   target       #  unconditional jump to program label target
                        看到就跳, 不用考虑任何条件
                       
jr $t3 # jump to address contained in $t3 ("jump register")
                          类似相对寻址,跳到该寄存器给出的地址处