CTF 竞赛入门指南(CTF All In One)学习(六)


MIPS汇编基础

寄存器

  • 共 32 个通用寄存器。
  • 汇编语言中,寄存器总以美元符号$为前缀
  • 寄存器有 2 种寻址方式:
    • 使用寄存器编号,例如$ 0$ 31
    • 使用别名,例如$ t1$ sp
  • 特殊寄存器LoHi用于存储乘法和除法的结果,不能直接寻址,
    • 使用特殊指令mfhi(move from hi = 从 Hi 移动 )和mflo( 从 Lo 移动 )访问内容。
  • 栈从高到低生长。

程序结构

  • 本质上就是带有数据声明的纯文本文件,文件后缀应为.s或者.asm
  • 数据声明在前,代码在后。

数据声明

  • 数据声明以.data为标号
  • 声明后即在主存中分配空间。
  • 声明格式如下:
    name:storage_type value(s)
  • value(s)用于给出初值,
  • .space,给出空间大小(以字节为单位),例如:
    var1:.word 3         # 创建一个初始值为 3 的整数变量.
    array1:.byte'a','b' # 创建一个元素初始化为 a 和 b的 2 元字符数组.
    array2:.space 40     # 分配 40 个连续字节, 未初始化的空间可以用作 40 个元素的字符数组,
                          # 或者是 10 个元素的整数数组.

代码

  • 代码以.text为标号
  • 程序入口为main

注释

  • #表示单行注释。

模板

       MIPS 汇编语言程序模板如下:

# Comment giving name of program and description of function
# Template.s
# Bare-bones outline of MIPS assembly language program


           .data       # variable declarations follow this line
                       # ...
					
           .text       # instructions follow this line				
					
main:                  # indicates start of code (first instruction to execute)
                       # ...
                       
# End of program, leave a blank line afterwards to make SPIM happy

指令

  • MIPS指令是 4 字节定长
    • 1 字节 = 8 位,半字长 = 2 个字节,1 字长 = 4 个字节
    • 1 个字符占 1 字节
    • 1 个整型占 1 字长
  • 常量
    • 直接输入数字,例如 4;
    • 单字符用单引号,例如:'b’;
    • 字符串用双引号,例如:“string”。

Load/Store

  • 只能使用 load/store 访问内存
  • 其他指令只能使用寄存器参数。

算术指令

  • 最多有 3 个参数。
  • 操作数只能是寄存器,不能是内存地址(因为只有 load/store 能访问内存)。
  • 操作数大小为 1 个字。



参考链接:
https://www.cnblogs.com/thoupin/p/4018455.html
https://www.bookstack.cn/read/CTF-All-In-One/doc-1.5.2_assembly.md#3.6%20MIPS%E6%B1%87%E7%BC%96%E5%9F%BA%E7%A1%80

猜你喜欢

转载自blog.csdn.net/m_pNext/article/details/107249457
ctf