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

目录

  • 一、教材学习内容总结
  • 二、教材学习中的问题和解决过程
  • 三、心得体会
  • 四、学习进度条
  • 五、参考资料

一、教材学习内容总结

数据类型

  • 注意:汇编代码也使用"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
  • 运行结果如下:


  • 问题2:对于markdown的表格语法,在有道云上能够显示表格,但是传到博客园上就无法显示。

  • 解决方法2:未能解决。
  • 问题3:使用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小时

五、参考资料

原文地址:https://www.cnblogs.com/xiannvyeye/p/11666309.html

时间: 2024-10-15 21:51:14

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

信息安全系统设计基础第三周学习总结

要点概括: 一.三种最重要的数字表示:    无符号数,有符号数(二进制补码),浮点数 从逆向考虑为什么产生漏洞: 结果太大不能表示时产生溢出,得到了负的结果.   二.信息存储 1.进制转换:以二进制作为桥梁. 2.字长:32位 64位 3.数据大小:单精度(4字节),双精度(8字节) 4.声明指针: 对于任何数据类型T,声明 T *p: 表明p是一个指针变量,指向一个类型为T的对象. 5.gcc –m32 可以在64位机上生成32位的代码. 6.寻址和字节顺序:    字节顺序是网络编程的基

20135223何伟钦—信息安全系统设计基础第三周学习总结

信息的表示和处理 2.0三种数字表示 无符号:编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码:编码是表示有符号整数的最常见的方式,有 符号整数就是可以为正或者为负的数字. 浮点数:编码是表示实数的科学记数法 的以二为基数的版本. 溢出(overflow)的例子:使用 32 位来表示数据类型int,计算表达式200*300*400*500会得出结果 -884 901 888. 这违背了整数运算的特性,计算一组正数的乘积不应产生一个为负的结果. 2.1信息存储 机器级程序将存储器视为一

20135327郭皓——信息安全系统设计基础第三周学习总结

第2章 信息的表示和处理 三种重要的数字表现形式: 1. 无符号数:编码基于传统的二进制表示法,表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,有符号整数就是可以为正或者是负的数字. 3. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 2.1 信息储存 大多数计算机使用8位块,或者字节,作为最小的可寻址的储存器单位,而不是在储存器中访问单独的位. 虚拟储存器:机器级程序将储存器视为一个非常大的字节数组. 地址:储存器的每个字节的唯一的数字标识. 虚拟地址空间:所有

信息安全系统设计基础第三周学习总结 ---20135334 赵阳林

第2章 信息的表示和处理 三种最重要的数字表示: * 无符号 * 补码 * 浮点数 运算: * 整数运算 * 浮点运算 对比: 整数运算只能编码相对较小的范围,但是是精确的: 浮点运算可以编码一个较大的范围,但是是近似的:浮点运算不可结合. 注意:溢出——运算位数的限制 第一节 信息存储 计算机最小的可寻址的存储器单位——字节 一个字节的值域:00H-FFH 一.十六进制表示法 1. C表示法 以0x或0X开头的数字常量为十六进制 2. 进制转换 常用进制:二进制(B),十进制(D),八进制(O

20135210程涵——信息安全系统设计基础第三周学习总结

本次学习任务:仔细研读<深入理解计算机系统>第二章内容,掌握整数表示.浮点数表示及其运算 一.学习过程 三种重要的数字表现形式: 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 补码:编码是表示有符号整数的最常见方法,可以是正或者是负的数字. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 溢出:计算机的表示法是用有限数量的位来为一个数字编码,因此当结果太大就会导致某些运算溢出. 整数和浮点数会有不同的数学属性是因为处理数字表示有限性的方法不同. (整数是编码相对较小的数值

信息安全系统设计基础第三周学习总结—20135227黄晓妍

一.Vim编辑器 1.Vim的六种模式 2.Vim三种常用模式的使用方式,以及三者的切换.打开Vim即默认进入普通模式,按i进入插入模式,按esc从插入模式退出普通模式,再按:进入命令行模式. 普通模式下游标的移动 按键 说明 h 左 l 右(小写L) j 下 k 上 w 移动到下一个单词 b 移动到上一个单词 普通模式进入插入模式的方式 命令         说明 i        在当前光标处进行编辑 I        在行首插入 A       在行末插入 a       在光标后插入编辑

信息安全系统设计基础第三周学习总结-吕松鸿

第2章 信息的表示和处理 (一).三种重要的数字表示 无符号数:编码基于传统的二进制表示法(大于或者等于零的数字). 补码:编码是表示有符号整数的最常见方式(为正或者为负的数字). 浮点数:编码是表示实数的科学记数法的以二为基数的版本. 整数的表示虽然只能编码一个相对较小的数值范围,但是是精确的:而浮点数虽然可以编码一个较大的数值范围,但是这种表示是近似的表示. 大量的计算机安全漏洞都是由于计算机运算的微妙细节引发的. (二).信息存储 计算机最小的可寻址的存储器单位——字节 一个字节的值域:0

20135219洪韶武——信息安全系统设计基础第三周学习总结

学习过程总结 一.gcc 编译 使用C99特性时 gcc -std=c99 xxx.c 实验楼环境为64位,编译为32位机器码: gcc -m32 xxx.c 二.重点注意知识点 p20: 三种数字:无符号数.有符号数(2进制补码).浮点数,信息安全系同学从逆向角度考虑为什么会产生漏洞 p22: 进制转换,注意拿二进制作中间结果就好转了 p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码 p26: 字节顺序是网络编程的基础,记住小端是“高对高.低对低”,大端与之相反

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

20145311 《信息安全系统设计基础》第一周学习总结

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E