mips架构
java -jar Mars4_5.jar:打开mars
寄存器:
前三个参数:A0,A1,A2
返回地址:$ra
rip:pc
$zero:总是0,方便进行各种运算
rax: v0 system的系统调用是0xfab
rsp:$sp
rbp: $fp
$at:用于标记当前的汇编指令。
v0−v1:用于存储函数的返回值。
a0−a3:用于函数调用时的参数。
t0−t9:通用寄存器。
s0−s7:用于保存局部变量的寄存器。
$t8:用于保存程序计数器(PC)
汇编指令集:
跳转类
jr +寄存器:跳转到寄存器(Jump Register)
jal displayMessage ;跳转指令调用并返回,1、跳转displayMessage地址,同时把下一条指令的地址写入到 $ra寄存器
加载类
li:类lea但是是加载立即数的
la: 类似lea载入地址
sw: 将寄存器(s0)值放入$sp + 4 * 倍 数位置 sw $s0,0($sp)这里sp前的0表示0倍
lw:从栈上取回值到寄存器 lw $s0,0($sp)
计算类
addi $s0,$zero,5:将加法结果加到第一个寄存器
add $a0,$zero,$s0:将加法结果赋值给第一个寄存器
arm架构
ARM运行模式
运行模式 功能
用户模式(USR) ARM处理器正常程序执行状态
快速中断模式(FIQ) 高速数据传输或通道处理
外部中断模式(IRQ) 通用的中断处理
管理模式(SVC) 操作系统使用的保护模式
数据访问终止模式(ABT) 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护
系统模式(SYS) 运行具有特权的操作系统任务
未定义指令终止模式(UND) 未定义的指令执行是进入该模式
寄存器:
前三个参数:R0,R1,R2
LR:返回地址
汇编:
汇编指令
cmp=[]
with open(r“C:\Users\86198\Desktop\tt\attachment-7\BEIXUAN-19.exe","rb")as f:
tmp=f.read()
if tmp[0:3]==b'\x4d\x5a\x50':
start=0x0b3614+0xcc8
else:
start=0xcc8
cmp= [ tmp[start+i10] for i in range(24)]
inp1=cmp[:12]
v7=cmp[12:]
v4=[2,0,3,1,6,4,7,5,10,8,11,9]
inp2=[0]12
for i in range(len(inp2)):
inp2[i]=v7[v4[i]]
key='ISCC'
for i in range(len(inp1)):
inp1[i]^=ord(key[i%len(key)])
for i in range(len(inp1)):
print(chr(inp1[i])+chr(inp2[i]),end='')Which_is_the_flag
数据处理指令
数据传送指令
mov
mvn
算术逻辑运算指令
add
anc
比较指令
cmp
tst
跳转指令
b
BL
程序状态寄存器(PSR)处理指令
msr
mrs
存储器访问指令
ldr
str
协处理器指令
cdp
LDC
异常产生指令
SWI
BKPT
数据处理指令
mov a b:把b给a
算数运算指令
add a ,b,c: a=b+c
比较指令
逻辑运算指令
转移指令
b:无条件跳转
状态寄存器访问指令
加载存储指令
异常产生指令
伪代码
mips
register Assembly name Comment
r0 $zero Always 0
r1 $at Reserved for assembler
r2 - r3 %v0 - $v1 Stores results
r4 - r7 $a0 - $a3 Stores arguments,参数超过4个才会存放到栈上
r8 - r15 $t0 - $t7 Temporaries,not saved
r16 - r23 $s0 - $s7 Contents saved for use later
r24 - r25 $t8 - $t8 More temporaries,not saved
r26 - r27 $k0 - $k1 Reserved by operating system。 给中断使用
r28 $gp Global pointer
r29 $sp Stack pointer。栈顶
r30 $fp Frame pointer。栈底
r31 $ra Return address
$f0 - $f3 - Floating point return values
$f4 - $f10 - Temporary registers,not preserved by subprograms
$12 - $f14 - First two arguments to subprograms,not preserved by subprograms
$16 - $f18 - More temporary registers,not preserved by subprograms
$f20 - $31 - Saved registers,preserved by subprograms