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

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小时

  • 改进情况:

对于很多根本不会的东西现在敢于下手了,虽然不是吃螃蟹的第一个人,也要做吃螃蟹的人!

参考资料

原文地址:https://www.cnblogs.com/xhwh/p/7711946.html