第五周学习总结

学号20145332 《信息安全系统设计基础》第五周学习总结

教材学习内容总结

· X86 寻址方式经历三代:
①DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
②8086的分段模式
③IA32的带保护模式的平坦模式
·ISA:定义了处理器状态,指令的格式,以及每条指令对状态的影响。
·二进制文件用od命令查看
·ATT与Intel汇编代码格式区别:
Intel代码省略了指示大小的后缀
Intel代码省略了寄存器前面的‘%’符号
Intel代码用不同的方式来描述存储器中位置
在带有多个操作数的指令情况下,列出操作数的顺序相反
·栈:遵循“后进先出”的原则

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

·教材P118,习题3.5,在看完后面的解析后仍然不能理解为什么第4、5、6行代表的是C语言中的Get x/y/z
·从教材P119,习题3.6中知道,在指令值要写为16进制数,但结果用十进制数表示,比如倒数第二行答案写为4y+10,而不是4y+OxA
·教材P121,汇编语言中算数右移写为C语言是不用写作除法,而是写作>>。
·教材P126,习题3.14不是很理解习题中的意思,看了答案解析也不是很明白
·教材P129,习题3.15,在计算B时本来是按照无符号数计算的,看了答案之后认为有关加减的地址偏移量是默认的有符号数。也确认了有符号数的正负数是按最高位是0还是1来确认的(因为忘记了这个知识点)

代码调试中的问题和解决过程

·P107的代码,在输完c语言代码code.c后,编译为code.s本以为会得到下面的汇编代码,但是得到的不一样,不知道操作有什么问题。截图如下:

·代码生成目标代码文件code.o是二进制文件,直接查看出现:

应该使用od code.o命令查看,结果为:

·使用反汇编器时,输入objdump -d code.o没有得到书上的代码,结果如图:

课后作业中的问题和解决过程

·首先想先写一个上周的问题,这周在看书时在课本P106页下面看到IA32机器代码和原始的C语言代码差别很大,一些通常对C语言程序员隐藏的处理器状态是可见的。其中有程序计数器,用%eip表示,指示将要执行的下条指令的地址,以及P107的汇编代码。想起上周P44页练习题2.18中的代码和这个表示方法很像,我认为题中的应该也是表示某种地址。上网查了一下%esp、%ebp,发现在查找出的代码中其意义为栈顶存与栈基址,所以我认为题中这些表示的意义应该是在栈中的位置。

本周代码托管截图

http://git.oschina.net/20145332/linux/tree/master

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

感觉这章的内容需要多做书上的习题,通过做题来理解书上讲解的内容。所以这章的学习主要是通过做书上的重点习题来理解。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第二周 100/200 1/1 20/20
第三周 100/500 1/1 25/30
第四周 0/0 0/1 5 /20
第五周 200/300 1/1 30/30

参考资料

原文地址:https://www.cnblogs.com/lx20145332/p/5960706.html