您的位置:首页 > 其它

20145229吴姗珊 《信息安全系统设计基础》第5周学习总结

2016-10-16 20:17 357 查看

20145229吴姗珊 《信息安全系统设计基础》第5周学习总结

教材学习内容总结

程序的机器级表示

计算机执行机器代码,用字节序列编码低级的操作

GCC C以汇编代码的形式产生输出,汇编代码是机器代码的文本表示

寻址方式地址

DOS时代的平坦模式:不区分用户空间和内核空间,很不安全。

8086的分段模式

IA32的带保护模式的平坦模式

机器级编程的两种抽象

指令集结构ISA是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响

机器级程序使用的存储器地址是虚拟地址,提供的储存器看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来

二进制文件可以用od 命令查看,也可以用gdb的x命令查看。

od code.o | more

od code.o > code.txt

int、long int、所有指针都用双字,浮点数单精度4字节、双精度8字节、扩展精度10字节

代码示例

命令行中使用-s得到汇编代码,使用-c会编译并汇编

反汇编器:带-d命令行标志的程序OBJDUMP

数据传送指令

MOV传送,MOVS符号拓展,MOVZ零拓展

将一个值从一个存储器位置复制到另一个存储器位置需要两条指令

数据格式



理解操作数的三种类型

立即数:常数值,表示为$c标准表示的整数

寄存器:表示某个寄存器的内容

存储器:根据计算出来的地址访问某个存储器位置

数据传送指令



特殊的算术操作



栈的特点

后进先出的原则

push压栈,pop出栈

栈顶:总是从这端插入和删除元素

栈顶元素的地址是最低的

栈指针%esp保存着栈顶元素的地址

四组操作

加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器

一元操作:只有一个操作数,既是源又是目的

二元操作:源操作数是第一个,可以是立即数、寄存器、存储器,目的操作数是第二个,可以是寄存器、存储器,但两个不能同时为存储器

移位:第一个是移位量,用单个字节编码且只允许0-31位的移位,可以是立即数或者放在单字节寄存器%cl中(算术右移SAR,填上符号位/逻辑右移SHR,填上0)目的操作数可以是一个寄存器或存储器

寄存器使用惯例

程序寄存器组是唯一能被所有过程共享的资源

%eax、%edx、%ecx被划分为调用者保存寄存器

%ebx、%esi、%edi被划分为被调用者保存寄存器

教材学习中的问题和解决过程

3.1 题目:将值存放在指明的存储器地址和寄存器中

9(%eax,%edx)

解决方法:根据操作数格式操作数值来计算:ox[9+100+03]=ox10C,地址ox10C对应值为ox11

练习3.33 D

做此题的时候,不太懂%esp和偏移量为+4、+8两个位置存储的数值是如何形成的,通过思考GCC生成的汇编代码,发现是将字符串“%x %x”存储在%esp的位置,同时通过leal命令,将x和y的位置存储在+8、+4的位置

实验过程





本周代码托管截图



https://git.oschina.net/sssqykdky/Linux20145229/tree/week5/

其他(感悟、思考等,可选)

这周的内容牵涉到很多汇编的知识,上学期汇编的生疏让我现在有一点吃力,不过如果把任务分块化就轻松多了,一天看一点点,如果堆积到周末是肯定没有办法快速学习完的,看到哪里就对哪里进行实践,这样的话会对知识有很大的帮助,相信在这样的学习方法中会让人学得更好。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周0/02/220/20
第二周300/3003/318/18
第三周96/964/410/10
第四周0/04/40/0
第五周90/905/512/12v

参考资料

《深入理解计算机系统V2》学习指导

...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: