基础溢出:
常见的就是shellcode和Rop技术
HTTP协议:
http是一种超文本传输协议,是web上进行任意数据交换的基础,也是一种客户端-服务器协议。
它由请求和响应组成,三部分:请求行,消息报头,请求正文。
请求行:
1
| Method Request-URI HTTP-Version CRLF
|
消息报头:
包含各个字段,通常以key: value格式表示:
1 2
| Content-Length: 348 Content-Type: application/x-www-form-urlencoded
|
请求正文:
HTTP请求正文是请求消息中可选的部分,通常用于在 POST、PUT 或其他需要传递数据的请求中,携带客户端向服务器发送的数据。它是位于请求头之后的实际数据内容。可由多种数据组成,如表单、二进制、JSON等,如
1 2 3 4 5 6 7 8 9 10
| POST /api/v1/user HTTP/1.1 # 请求行 Host: api.example.com # 消息报头(开始) Content-Type: application/json Content-Length: 55 # 消息报头(结束)
{ # 请求正文(开始) "username": "admin", "password": "12345", "remember_me": true } # 请求正文(结束)
|
Content-Type来判断请求正文的格式,JSON格式的内容则是请求正文
MIPS架构:
寄存器
1 2 3 4 5 6 7 8 9 10 11
| zero -> 值始终为0 $at -> 保留给汇编器 $v0-$v1 -> 保存表达式返回结果 $a0-$v3 -> 函数参数,类比rdi,rsi...的顺序,超过4个则用堆栈传递 $t0-t9 -> 临时寄存器,其中t8,t9是扩展,且t9常用来调用函数 $s0-$s7 -> 保存寄存器,保存一些函数调用时必要的值 $k0-$k1 -> 留给系统中断处理的时候使用 $gp -> 全局指针 $sp -> 堆栈指针,类比rsp $fp -> 栈帧指针 $ra -> 返回地址,类比ret
|
基础汇编
LOAD和STORE
1 2 3 4 5 6 7 8
| l==>LOAD s==>STORE 不同的后缀代表不同的数据大小 w==>word h==>half b==>byte u==>unsigned i==>immediate
|
指令格式
R型
1
| opcode | first source res | second source res | destination res | offset | funct(这个参数不用了解,毕竟我们看的常常是汇编)
|
I型
1
| opcode | source res | destination res | addr_offset
|
J型
常见汇编
1 2 3
| add jr==jmp,常跟ra jalr,效果近似于jmp,后边常跟t9调用函数
|
流水线指令集特性之一:分支延迟效应
流水线效应最常见的就是跳转指令(如jalr)导致的分支延迟效应,当它跳转指令填充好跳转地址但尚未跳转过去时,它会优先执行该跳转指令的下一条指令,如
在还未跳转到t9时,会执行addiu汇编,然后再进行跳转,可以理解为同时执行了两条指令