20145305 《信息安全系统设计基础》第5周学习总结
教材学习内容总结
知识点书上都有,就不一一总结了,老师说浪费时间没有必要,那就不写了。
实验楼实践
删除gcc产生代码中以"."开头的编译器指令,针对每条指令画出相应栈帧的情况
学习中的问题和解决过程
1.出现cmovl和cmovge
解决:CMOVL/CMOVNGE——小于/不大于或者等于——(SF异域OF) = 1
2.练习题29中出现jmp .L7(,%eax,4),不理解括号前已经用标识了此处需要跳转,为什么又要写出括号中的地址
L7是跳转表,*指示此处跳到跳转表,括号中的地址是具体跳转到的位置
3.栈和栈帧的关系
栈:
栈底指针和栈顶指针(执行时,它在动),栈底位于最下。
一种特殊的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。
存储原则是先进后出。
对栈的插入与删除操作中,不需要改变栈底指针。
栈是从高地址向低地址延伸的。
栈——相对整个系统而言,调用栈相对某个进程而言。
栈帧——则是相对某个函数而言,调用栈就是正在使用的栈空间,由多个嵌套调用函数所使用的栈帧组成。
栈帧表示程序的函数调用记录,而栈帧又是记录在栈上面。(为单个过程分配的那部分栈称为栈帧)
每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。因此栈作用就是用来保持栈帧的活动记录(即函数调用)。
4.关于过程
调用者caller,被调用者callee。
当caller调用callee时,caller的返回地址被压入栈中,形成caller栈帧的末尾。
返回地址:就是当程序从callee返回时应该继续执行的地方(指令的地址),当被调用过程返回时,程序会从此处继续执行。
callee的栈帧从保存的帧指针的值(%ebp)开始,其后即为其保存的寄存器的值,和callee调用其他过程的参数。
5.CMP和SUB用在什么地方
sub d,s 是d-s结果送回d中,即目的操作数中
而cmp d,s也是相减但结果不送回目的操作数中,一般用作比较数大小时用
6.SET指令根据t=a-b的结果设置条件码
问题
在leal指令中,形如(%eax,%eax,4), %eax ,此时寄存器将值变为5倍,那么为什么不直接写成(%eax,5)
括号内的常数均为偶数(2,4,8),未出现奇数,是不是这种写法中括号内一定为(2n)
代码托管
其他(感悟、思考等,可选)
第三章的比较多,大部分是关于汇编与反汇编的东西,有点不太好理解,还需要多加练习加深理解。
老师也强调了博客没有必要摘抄太多教材上面的东西,只要写出自己的实践过程和遇到的问题和解决方法,这样写起博客来比以往轻松了很多。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 30/30 | |
第二周 | 300/500 | 1/3 | 20/50 | |
第三周 | 100/600 | 1/4 | 20/70 | |
第五周 | 300/900 | 1/5 | 30/100 |