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

20155234第一周《信息安全系统设计基础》学习总结

程序的机器级表示

3.2程序编码

gcc是Linux上默认的编译器 。gcc -0g告诉编译器使用第一级优化。优化等级越高,程序运行的越快,编译时间越长,用调试工具调试程序越困难。高级别的的优化产生的代码会严重改变形式。
gcc将源代码转换为可执行代码。首先,C预处理器扩展源代码,插入所有用#include命令指定的文件,并扩展所有用#define声明指定的宏。
汇编器将汇编代码转换成二进制目标代码,目标代码是机器代码的一种形式,包含所有指令的二进制表示,但没有填入地址的全局值。
连接器将目标文件与实现库函数的代码合并,并产生最终的可执行代码文件。可执行代码是处理器执行的代码格式。

3.2.2 代码示例

gcc -01 -s code.c //使用“-s” 就能得到C语言编译器产生的汇编代码 。这会产生一个汇编文件 code.s
gcc -01 -c code.c //使用“-c”gcc会编译并汇编该代码,产生目标代码文件code.o,他是二进制格式,无法直接查看。
反汇编器可以查看目标文件内容:objdump -d code.o
“gcc -01 -o prog code.o main.c” 通过之前讲的,应该是让编译器将目标文件“code.o”与实际函数库 “main.c”合并 生成可执行文件prog

3.2.3 关于格式的注解

3.3 数据格式

单精度:4字节 双精度:8字节 扩展精度:10字节实际存储成12字节
moveb、movw、movl:对应字节、字、双字。

3.5 算术和逻辑操作

加载有效地址
一元操作
二元操作
移位操作

3.5.1 加载有效地址

加油有效地址“leal”-将有效地址写到目的操作数,目的操作数必须是一个寄存器。

3.5.2 一元操作和二元操作

一元操作,它只有一个操作数,既是原操作数又是目的操作数,操作数可以是一个寄存器,也可以是一个存储器位置。
二元操作,有两个操作数,第一个为原操作数,可以是立即数、寄存器或存储器位置;第二个为目的操作数,可以是寄存器或者是存储器位置。
二元操作,有两个操作数,第一个为原操作数,可以是立即数、寄存器或存储器位置;第二个为目的操作数,可以是寄存器或者是存储器位置。

3.5.3 移位操作

移位操作,先给出位移量,第二项给出要移位的数值。
因为32为计算机,所以以为最多移位31为(排除循环移位),所以只允许0到31位的位移。
位移量可以是个立即数,或者是只允许%cl。
SAL和AHL没有区别。
SAR为算数右移,最高位要和符号标志位配合进行算数右移。
SHR为逻辑右移。
移位操作的目的操作数可以是一个寄存器或者是一个存储器的位置。

3.5.5 特殊的算术操作

双操作数乘法(imull)指令,从两个32位的操作数产生一个32位的乘积。
单操作数乘法指令mull和imull,这两条指令都要求一个参数必须在寄存器%eax中,另一个由原操作数给出,高32为存放在%edx中,低32为存放在%eax中。

3.6.1 条件码

CF:进位标志
ZF:零标志
SF:符号标志
OF:溢出标志位
leal指令不改变任何条件,用它进行地址计算。
对于移位操作,进位标志将设置为最后一个移除的位,而溢出标志设置为0.
CMP指令根据他们的两个操作数之差来设置条件码,CMP与SUB指令的行为是一致的。
TEST指令与AND指令的行为是一致的。

3.6.2 访问条件码

SET指令的目的操作数是8个单字节寄存器元素之一,或者是一个字节的存储器位置,将这个字节设置成0或者1。
movzbl指令用来清零%eax的三个高字节。

3.6.3 跳转指令及其编码

jmp指令是无条件跳转,它可以是直接跳转,即跳转目标是作为指令的一部分编码的;也可以是间接跳转,即跳转目标是从寄存器或存储器位置中读出的。
程序计数器的值是跳转指令后面的那条指令的地址,而不是跳转指令本身的地址。

3.7.1 栈帧结构

为单个过程分配的那部分称为栈帧。
%esp:栈指针
%ebp:帧指针
栈指针可以移动,因此大多数信息的访问是通过栈指针的
3.7.2栈帧结构
call指令有一个目标,即指明被调用过程起始的指令地址,直接调用是一个标号,间接调用是“*”后面跟一个操作指示符。
call指令的效果是将返回地址入栈,并跳转到被调用过程的起始位置。
ret指令从栈中弹出地址,并跳转到这个位置。
%exa用来返回值
leave为返回值做好准备

代码托管

结对搭档

201555226

感想

因为我上学期汇编学的不够好导致理解困难。特别是看栈帧及递归调用这部分,虽然看了很多,但是还是不能很好地去理解运用。

学习进度条

代码行数(新增/累积) 博客量(新增/累积)
目标 5000行 30篇
第一周 6/6 1/1
第三周 150/156 2/3
第四周 77/233 1/4

参考资料

posted @ 2017-10-22 13:27  zdyt  阅读(141)  评论(0编辑  收藏  举报