20145321《信息安全系统设计基础》第6周总结1及错题集

20145321《信息安全系统设计基础》第6周总结1及错题集

第四章 处理器体系结构

  • 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA)。不同的处理器“家族”都有不同的ISA。

Y86指令集体系结构

1、程序员可见的状态

-·Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称之为程序员可见状态。

-·Y86处理器状态类似于I32。可以访问和修改程序寄存器、条件码、程序计数器和存储器, 状态码指明程序是否运行正常。

  • RF:程序寄存器 %eax,%ecx,%edx,%ebx,%esi,%edi,%esp(出栈、入栈、调用和返回指令作为栈指针),%ebp
  • CC:条件码 ZF、SF、OF(都是一位条件码,用来保存最近的算术或逻辑指令所造成影响的有关信息。)
  • PC:程序计数器 存放当前正在执行的指令
  • DMEM:存储器 很大的字节数组,保存着程序和数据。Y86程序用虚拟地址来引用存储器位置。
  • Stat:程序状态码 它表明程序执行的总体状态。它会指示是正常运行还是出现了某种异常。
2、Y86指令

-·Y86指令集基本上是IA32指令集的一个子集,只包括四字节整数操作。寻址方式比较少,操作也比较少。

-·指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符, 还可能含有一个四字节的常数字。字段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX)。 所有数值都用十六进制表示。

-·IA32的movl指令中,指令分成:irmovl、rrmovel、mrmovl、rmmovl四个不同指令,分别显式地指明源和目的的格式。 指令名字的第一个字母就表明了源类型。指令第二个字母指明了目的类型。 源可以是立即数(i)、寄存器(r)、存储器(m)。目的可以是寄存器(r)或存储器(m)。 两个存储器传送指令中的存储器引用方式是简单地基址和偏移量形式。

  • 在地址计算中,不支持第二变址寄存器和任何寄存器值的伸缩。
  • 不允许从一个存储器地址直接传送到另一个存储器地址。也不允许将立即数传送到存储器。

-·4个整数操作指令:addl、subl、andl、xorl。Y86中只允许对寄存器数据进行操作。

-·7个跳转指令(jXX):

  • jmp、jle(<=)、jl(<)、je(=)、jne(≠)、jge(>=)、jg(>)

-·6个条件传送指令(cmovXX)

  • cmovle、cmovl、cmove、cmovne、cmovge、cmovg
  • 只有当条件码满足所需要的约束时,才会更新目的寄存器的值。

-·call指令将返回地址入栈,然后跳到目的地址。ret指令从这样的过程调用中返回。

-·pushl和popl指令实现了入栈和出栈。

-·halt指令停止指令的执行。对于Y86来说,执行halt指令会导致处理器停止,并将状态码设置为HLT。

3、指令编码

-·每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。 功能值只有在一组相关指令共用一个代码时才有用。

-·8个程序寄存器中每个都有相应的0~7的寄存器标识符。

-·程序寄存器存在一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。 当需要指明不应访问任何寄存器时,用ID值0xF表示。

-·只需要一个寄存器操作数的指令(irmovl、pushl、popl),将另一个寄存器指示符设为0xF。

-·有的指令需要一个附加的4字节常数字,可作为:irmovl的立即数数据,rmmovl和mrmovl的地址指示符偏移量, 分支指令和调用指令的目的地址。

注意:

分支指令和调用指令的目的地址是一个绝对地址,而不是相对寻址方式。

所有整数采用小端法编码。当指令按反汇编格式书写时这些字节就以相反的顺序出现。

-·指令集的一个重要性质就是字节编码必须有唯一的解释。如果不知道一段代码序列的起始位置, 我们就不能准确地确定怎样将序列划分成单独的指令。

4、Y86异常

-·对于Y86来说,程序员可见的状态中包括stat状态码,它标识了程序执行的状态。出现异常时Y86处理器停止运行指令。 可以调用一个异常处理程序使其更完整。

-·Y86状态码

5、Y86程序

-·Y86可能需要多条指令来执行一条IA32指令所完成的功能。Y86没有伸缩寻址模式。

-·以“.”开头的词是汇编命令,他们告诉汇编器调整地址,以便在那儿产生代码或插入一些数据。

-·命令指明应该将代码或数据放在什么位置,以及如何对齐。这个程序详细说明了栈的放置、数据初始化、程序初始化和程序结束等问题。

-·创建Y86代码的唯一工具是汇编器。

错题集

第五周
  • 当前目录下创建20145300目录的命令是 (mkdir 20145300)
  • zip程序可以压缩也可以解压文件。(X)
  • (程序计数器或%eip) 指示将要执行的下一条指令在内存中的地址。
  • %ebp的值为0x10c, pushl %eax后,%ebp的值为0x108. (x)
  • 从汇编代码看出,decode1的参数先入栈的是(zp)
  • arith(1,2,3)的值是( -4 )
  • jz/jnz指令中跳转条件是由(ZF)决定的。
  • C语言中的循环结构汇编中可以用(条件测试和跳转)组合起来实现。
  • Linux汇编中,销毁栈帧的语句是(movl %ebp,%esp popl %ebp 或leave)
  • (精通细节 )是理解更深和更基本概念的先决条件。
第四周
  • GCC中INFINITY表示(无穷大)。
  • “高对高,低对低”的机器是大端机器。(X)
  • (Shannon 或香农)建立了布尔代数和数字逻辑之间的联系。
  • C语言中,x>>k作算术右移,x>>>k作逻辑右移。(X)
  • 浮点数 00110转化为十进制为1.5 ( ok )
  • K=30 移位2,加/减1,表达式为( (x<<5)-(x<<2) )
  • x=9,y=12, x,y为四位无符号数,x+y = ( 5 )
  • fun1(0xED005380) = ( 0x00000080 ,0x80都行 )
  • 16位机器上,补码0xFFFE转化等值的十进制是( -2 )
  • a,b长度都是一个字节,a=6,b=15, a|b = ( 15 )
  • 获得unsigned x的最低位字节的C表达式是(x & 0xff)
  • gdb中使用命令( until ) 可以跳出循环语句。

虚拟机出现的问题

终端不能正常使用:

  • 终端打开后输入命令时首先出现了输入法

  • 切换后继续输入,变成这样字母间有间隔

  • 所有命令回车后都运行不了

原文地址:https://www.cnblogs.com/5321z/p/5982600.html