学号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 |