您的位置:首页 > 其它

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

2017-10-22 22:40 351 查看

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

教材学习内容总结

程序的机器级表示

计算机执行机器代码,用字节序列编码低级操作,包括处理数据、管理储存器、读写储存设备上的数据,以及利用网络通信。

3.1历史观点

Intel处理器俗称X86,经历了长期的、不断进化的发展过程。

3.2程序编码

编译代码:gcc =O1 -o p p1.c p2.c

实际上gcc命令调用了一系列程序,将源代码转化成可执行代码。

3.2.1机器级代码

指令集体系结构ISA:定义了处理器状态、指令的格式,每条指令对状态的影响。

3.3数据格式



3.4访问信息

一个IA32中央处理单元包含一组8个储存32位值的寄存器。这些寄存器用来存储整数数据和指针。

3.4.1操作数指示符



3.4.2数据传送指令

将数据从一个位置复制到另一个位置的指令。

3.4.3数据传送指令:

MOV:movb,movw,movl分别传送字节,字,双字

MOVZ(零扩展,高位用0填充):同上,压栈出栈见p114表格。(注意栈顶的地址值是栈中最小的)

MOVS(符号扩展,高位用原来最高位的数值填充):同上

C语言中,指针就是地址,间接引用指针就是将指针放在一个寄存器中,然后在存储器中使用这个寄存器。

3.5算数和逻辑操作

四种整数操作:

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

一元操作:只有一个操作数,可以是寄存器也可是存储器位置。

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

移位:第一个是移位量,用单个字节编码(只允许0-31位的移位)。

3.6控制

控制中最核心的是跳转语句:

有条件跳转

无条件跳转

3.6.5循环

1.do-while循环

通用形式:

do

body-statement

while(test-expr);

loop:

body-statement

t = test-expr;

if(t)

goto loop;

2.while循环

通用形式:

while (test-expr)

body-statement

if(!test-expr)

goto done;

do

body-statement

while(test-expr);

3.for循环

通用形式:

for(init-expr;test-expr;update-expr)

body-satament

3.7过程

过程可以理解为c中的函数,当调用者(caller)调用被调用者(be caller)的时候,系统会为被调用者在栈内分配空间,这个空间就称为栈帧。栈顶元素的地址是所有栈中元素地址中最低的

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

栈帧:为单个过程分配的那部分栈称为栈帧。

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

寄存器%ebp-帧指针

寄存器%esp-栈指针

教材问题

1.X86 寻址方式经历三代:

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

2 8086的分段模式

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

2. 机器级编程的两种抽象

1.ISA:定义是与程序设计有关的计算机架构的一部分,包括本地数据类型、指令、寄存器、地址模式、内存架构、中断和意外处理和外部 I/O 。一个 ISA 包括一系列 opcodes(机器语言)的一个规格,本地命令由一个特定的 CPU 设计来实现。

2.机器级程序使用的内存地址是虚拟地址,提供的内存模型看上去是一个非常大的字节数组。

代码示例

汇编代码:

gcc -Og -S xxx



反汇编:

objdump -d xxx



操作数指示符

标识方式一共有三种,一种是$符号后跟一个标准C表示的整数,比如$100,$0x11等等。第二种则是寄存器,当它作为一个操作数的时候,则是取的寄存器当中的数值。另外,对于寄存器来说,也可以选择性的操作4个、2个、1个字节,而并不一定非要操作4个字节。最后一种,则是我们相对来说最熟悉的,就是存储器或者说内存。当它作为一个操作数的时候,会去计算存储器地址的数值,然后去这个地址取相应的数值。



代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

错题1及原因,理解情况

错题2及原因,理解情况

...

结对及互评

点评模板:

博客中值得学习的或问题:

xxx

xxx

...

代码中值得学习的或问题:

xxx

xxx

...

其他

本周结对学习情况

- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...

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

xxx

xxx

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

计划学习时间:XX小时

实际学习时间:XX小时

改进情况:

(有空多看看现代软件工程 课件

软件工程师能力自我评价表)

参考资料

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

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