2019-2020-1 20175313 《信息安全系统设计基础》第三周学习总结

一、教材学习内容总结

数据类型
| C声明 | Intel数据类型| 汇编代码后缀|大小(字节)|比特数|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第三周 | 301/706 | 1/34 | 18/40 | |

  • 注意:汇编代码也使用"l"来表示4字节整数和8字节双精度浮点数。这不会产生歧义,因为浮点数使用的是一组完全不同的指令和寄存器。

操作数

操作数可分为三种类型:
1. 立即数
2. 寄存器
3. 内存引用

操作指示符

过程

P调用Q:

  • call Q该指令会把P中call Q的下一条指令的地址A压入栈中,并把程序计数器设置为Q的代码的起始位置.
  • retq该指令会将地址A从栈中弹出,并将A赋值给PC

gdb调试

  • objdump -d mstore.o进行反汇编

缓冲区溢出

最小化程序缓冲区溢出攻击漏洞三种方式:

  1. 栈随机化:在程序开始之前,在栈上分配0-n字节之间程序不使用的随机大小空间,使得栈的位置在程序每次运行时都有变化。
  2. 栈破坏检测:在帧栈中任何局部缓冲区与栈状态之间存储一个特殊的金丝雀值,在恢复寄存器状态和从函数返回之前,检查金丝雀值是否被该函数的某个操作或者该函数调用的某个函数的某个操作改变了。以此来判断缓冲区是否溢出。
  3. 限制可执行代码区域:只有保存编译器产生的代码那部分内存才需要是可执行的,其他部分可以被限制为只允许读和写。以此来消除攻击者向系统中插入可执行代码的能力。

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

  • 问题1:对教材114页上的代码进行验证时,在进行汇编的时候,显示:错误:无效的选项参数'-Og'

  • 解决方法1:将其改为gcc -O1 -c mstore.c,因为有的版本编译器不支持-Og

  • 运行结果如下:


  1. 使用gdb对教材上的代码进行调试
  • 使用gcc -g week302.c -o week302进行汇编
  • 使用b f在f函数处设置一个断点
  • 使用run运行至断点处
  • 使用disas进行反汇编
  • 使用display /i $pc查看每次执行的汇编语句
  • 使用stepi每次运行一句汇编语句
  • 使用i r查看每个寄存器的值
  • 运行结果如下:



三、心得体会

本周学习内容较为繁杂,只要之前的汇编课认真听讲,理解起来也虽然不是很难。

四、学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第三周 301/706 1/34 18/40
  • 计划学习时间:20小时

  • 实际学习时间:18小时

五、参考资料

猜你喜欢

转载自www.cnblogs.com/xiannvyeye/p/11666309.html