2017-2018-1 20155203 《信息安全系统设计基础》第5周学习总结
教材学习内容总结
- X86 寻址方式经历三代:
1、 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
2、 8086的分段模式
3、 IA32的带保护模式的平坦模式
- ISA(指令集体系结构)定义了处理器状态指令的格式,以及每条指令对状态的影响
- PC(程序计数器)指示将要执行的下一条指令在存储器中的地址
- Ubuntu中 gcc -S code.c (不带-O1) 产生的代码更接近教材中代码
- 对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx, 32位的eax,16位的ax,8位的ah,al都是独立的
- 有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
- MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下
- CMP指令根据他们的两个操作数之差来设置条件码。除了只设置条件码而不更新目标寄存器之外,CMP与SUB行为是一样的
- call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是在程序中紧跟在call后面的那条指令的地址
作业
1.使用gcc –S –o main.s main.c -m32
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8) + 1;
}
a.s文件
a.s文件去点
代码调试中的问题和解决过程
- 问题1:作业编译出错
- 问题1解决方案:因为我在C文件中加入了printf()语句,所以之后又加入了头文件
#include <stdio.h>
至于为什么加入头文件语句后反汇编会出现错误,这个还没有查到还需要继续学习。
代码托管
结对及互评
本周结对学习情况
- 结对学习内容
- 一起做实验,一起写实验报告(每次写结对学习内容感觉像在汇报谈恋爱的情况)
学习进度条
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 6/6 | |
第三周 | 156/388 | 2/3 | 15/21 | 这周除课堂实践外,大多数都是知识性的学习内容,代码量确实太少从下周起就要抓紧了 |
第三周 | 156/388 | 3/6 | 15/36 | 每天100行好难啊,不过感觉找到了学习的一些动力。在调试代码上花的时间太多,都要没时间看书了,还要继续改进 |
-
计划学习时间:15小时
-
实际学习时间:15小时
-
改进情况:
对于很多根本不会的东西现在敢于下手了,虽然不是吃螃蟹的第一个人,也要做吃螃蟹的人!