2017-2018-20155206 《信息安全系统设计基础》第五周学习总结

2017-2018-20155206 《信息安全系统设计基础》第五周学习总结

教材学习内容总结

程序编码

、 GCC将源代码转化为可执行代码的步骤:

、 C预处理器——扩展源代码-生成.i文件
、 编译器——产生两个源代码的汇编代码-——生成.s文件
、 汇编器——将汇编代码转化成二进制目标代码——生成.o文件
、链接器——产生可执行代码文件

机器级代码

、 1.机器级编程的两种抽象
、 (1)指令集结构ISA
、 是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。
、 (2)机器级程序使用的存储器地址是虚拟地址
、 看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。

、** 2.几个处理器:**

、 程序计数器(CS:IP)
、整数寄存器(AX,BX,CX,DX)
、条件码寄存器(OF,SF,ZF,AF,PF,CF)
、浮点寄存器
、一条机器指令只执行一个非常基本的操作。

程序编码

、书上107页的代码,需要用到反汇编器。在Linux系统中,带‘d’命令行标志的程序OBJDUMP可以充当这个角色。

数据格式

、数据传送指令的三个变种:

movb 传送字节
movw 传送字
movl 传送双字

访问信息

、 一个IA32中央处理单元(CPU)包含8个存储32位置的寄存器

操作数指示符

、 立即数
、 寄存器
、 存储器

、** 寻址方式**

、 (1)立即数寻址方式

、 格式:$后加用标准c表示法表示的整数,如$0xAFF

、 (2)寄存器寻址方式

、 如%eax,与汇编中学过的AX寄存器类比。

、 (3)存储器寻址方式

、 直接寻址方式
、 寄存器间接寻址方式
、 寄存器相对寻址方式
、 基址变址寻址方式
、 相对基址变址寻址方式

数据传送指令

、 MOV

movb 传送字节
movw 传送字
movl 传送双字

、MOVS

movsbw 将做了符号扩展的字节传送到字
movsbl 将做了符号扩展的字节传送到双字
movswl 将做了符号扩展的字传送到双字
、 MOVZ

movzbw 将做了零扩展的字节传送到字
movzbl 将做了零扩展的字节传送到双字
movzwl 将做了零扩展的字传送到双字
、** 算术和逻辑操作**
、 一、加载有效地址

、 加载有效地址指令——leal,是movl指令的变形。

、 指令形式:从存储器读取数据到寄存器。

、 实际:将有效地址写入到目的操作数,而目的操作数必须是寄存器;并不真实引用存储器。

、 二、一元操作和二元操作

、 1.一元操作

、 只有一个操作数,既是源又是目的,可以是一个寄存器,或者存储器位置。

、 2.二元操作

、 第一个操作数可以是立即数、寄存器或者存储器位置
、 第二个操作数可以是寄存器或者存储器位置
、 但是不能同时是存储器位置。

、** 控制**

数据传送指令

、 MOV 不影响标志位
、 PUSH POP 不影响标志位
、 XCHG 交换指令 不影响标志位
、 XLAT 换码指令 不影响标志位
、 LEA 有效地址送寄存器指令 不影响标志位
、 PUSHF 标志进栈指令 不影响标志位
、 POPF 标志出栈指令 标志位由装入值决定
、 访问条件码

、 这个指的是SET指令,通过set与不同的条件码的组合,达到不同的跳转条件。
、 某些底层的机器指令可能有多个名字,我们称之为“同义名”。
、 跳转指令及其编码
、 jump分为直接跳转和间接跳转:

、 直接跳转:后面跟标号作为跳转目标
、 间接跳转:*后面跟一个操作数指示符

过程

、 一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。
、 一、栈帧结构

、 栈用来传递参数、存储返回信息、保存寄存器,以及本地存储。

、 1.栈帧

、 为单个过程分配的那部分栈称为栈帧,通用结构见149页

、 所以本质上栈帧还是栈。

、 2.两个指针

、 最顶端的栈帧以两个指针界定:

、 寄存器%ebp-帧指针

、 寄存器%esp-栈指针

、 栈指针可移动,所以信息访问多相对于帧指针。
、 二、转移控制

、 这里用到的主要就是CALL和RET这一对指令。

、 1.call

、 call指令和转移指令相似,同样分直接和间接,直接调用的目标是标号,间接调用的目标是*后面跟一个操作数指示符,和JMP一样。

、 CALL指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是还在程序中紧跟在call后面的那条指令的地址。

、 然后就会用到ret了。

、 2.ret

、 ret指从栈中弹出地址,返回到call指令后的那条指令。

posted on 2017-10-19 19:11  赵飞111  阅读(158)  评论(0编辑  收藏  举报