20145314《信息安全系统设计基础》期中复习总结 Part B

学习知识点内容总结

复习线索:http://group.cnblogs.com/topic/73069.html

本周的第一篇博客里也有大量的内容:

http://www.cnblogs.com/5314zkj/p/6028274.html

第三章重要知识点总结

本章思路:

本章学习内容是汇编语言,现在直接写汇编的机会不多了,但一定要能读懂,信息安全的核心思维方式“逆向”在这有很好很直接的体现,反汇编就是直接的逆向工程。

本章重点是3.7,但没有3.1-3.6的基础也是不行,如果想真正的提高动手能力,3.11如何用GDB调试汇编要好好练习一下,不过大多GDB技巧大家都会了。

历史观点

X86 寻址方式经历三代:

  • DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
  • 8086的分段模式
  • IA32的带保护模式的平坦模式

Linux使用平坦寻址方式,使程序员将整个存储空间看做一个大的字节数组。

编译过程

  1. C预处理器插入宏和头文件:gcc -E xxx.c -o xxx.i
  2. 编译器产生源代码的汇编代码:gcc -S xxx.i -o xxx.s
  3. 汇编器化成二进制目标代码:gcc -c xxx.s -o xxx.o
  4. 链接器生成最终可执行文件:gcc xxx. -o xxx
  5. 用objdump -d xxx.o -o xxx.s 反汇编

建立函数调用栈帧的汇编代码:

pushl   %ebp 将寄存器%ebp中的内容压入程序栈
movl%esp,%ebp 将%ebp中的内容放入寄存器%esp
......
popl%ebp 寄存器%ebp中内容出栈
ret 返回结果

访问信息

一个IA32中央处理单元(CPU)包含一组8个存储32位值的寄存器。用来存储整数数据和指针。

%eax%ax (%ah %al)  通用寄存器
%ecx%cx (%ch %cl) 通用寄存器
%edx%dx (%dh %dl) 通用寄存器
%ebx%bx (%bh %bl) 通用寄存器
%esi%si 用来操纵数组
%edi%di 用来操纵数组
%esp%sp 操纵栈帧
%ebp%bp 操纵栈帧

  • 栈是一个数据结构,可以添加或者删除数据,总是遵循“先进后出”原则。
  • 栈顶:总是从栈的这端插入和删除元素。
  • 栈顶元素的地址是所有栈中元素地址中最低的。

lean指令

  • lean是加载有效地址指令
  • 指令形式实际上并没有引用存储器,它的第一个操作数其实是将有效地址写入到目的操作数
  • 可以为后面的存储器引用产生指针,简洁的表述普通算数操作。
  • 目的操作数必须是一个寄存器。

过程

过程调用:

进入,为过程的局部变量分配空间

将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。

退出,释放这些空间。

转移控制

call

call指令和转移指令相似,同样分直接和间接,直接调用的目标是标号,间接调用的目标是*后面跟一个操作数指示符,和JMP一样。
CALL指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是还在程序中紧跟在call后面的那条指令的地址。 ret ret指从栈中弹出地址,并跳转到这个位置。
在上学期的汇编语言学习中,call和ret常被用来进行子函数、子模块的调用。

第二章重要知识点总结

本章思路:

每章所遇到问题的总结分析

第三章重点问题总结

问题类型一 假定当前是32位x86机器,eax寄存器的值为0x8226,执行完addw $0x8266,%ax指令后eax的值是多少?

解析:0x8226+0x826=0x1044c, ax是16位寄存器,出现溢出,最高位的1会丢掉,剩下0x44c,不要以为eax是32位的不会发生溢出。

问题类型二 stack.c反汇编成stack.s的代码步骤

  1. 先从main程序开始执行,调用y前,先将返回地址入栈,再将%ebp入栈,将%ebp放在现在的栈顶位置,栈顶指针减4分配空间,再将参数8入栈,调用y
  2. y调用z前,再进行一次将返回地址和%ebp入栈,改变%ebp位置的操作,将栈顶指针减4分配空间,将8存贮在%eax寄存器中,再将现在%eax中的值入栈保存,调用z
  3. 再进行一次将返回地址和%ebp入栈,改变%ebp位置的操作,将8存入%eax便于操作,对8进行加3的操作,弹出到%ebp,返回main
  4. 返回main,将%eax中的参数加1,结束程序

问题类型三 练习3.33 %esp和偏移量为+4、+8两个位置存储的数值是如何形成的

是将字符串“%x %x”存储在%esp的位置,同时通过leal命令,将x和y的位置存储在+8、+4的位置

问题类型四 既然leal是mov的变形,leal与mov有何区别,两者分别如何使用?

mov是将数据从源操作传到目的操作数中,lea是将源操作数的地址传到目的操作数中。一个是数据,一个是地址

自己新学到的知识点总结

  • Linux简介
  • Linux核心命令
  • Ubuntu下常用快捷键
  • man命令
  • cheat命令
  • find命令
  • locate命令
  • which命令
  • whereis命令
  • apt-cache命令
  • VIM编辑器
  • gcc
  • 静态库与共享库
  • gdb
  • makefile
  • git的一般程序

自己的收获

在半学期的学习中,我刚开始就一直忙于参办学院里的各大活动。对于每周的考试就不是特别上心,加上本学期对博客的要求降低而对考试的要求提高,于是我的成绩直线下滑,进入了待及格名单。但是慢慢的,我开始认真学习,赶上进度。

主要收获了

  • 对虚拟机的使用,这个应用在操作系统、信息安全技术两门课程的学习实践中,也有很大帮助。
  • 对ubuntu的了解,乌班图是我们信安系学生的新大陆,然而现在只是发现了冰山一角,还有十分巨大的财宝等着我们去发现。
  • 在乌班图下的命令,有问题就问“男人”提供了一个万用的解决方法,"cheat"的安装和使用教会了我乌班图功能的扩展,find命令告诉我们可以用这样的方式进行文件寻找,等等。
  • VIM编辑器,这个在实验楼里也十分好用
  • gcc gdb等,编译与执行文件的最好途径。
  • makelife
  • git,在虚拟机下配置git,上传至开源中国,更是给我们提供了一个信息备份的思维和方式。受益匪浅。

自己的不足(要具体,有改进措施)

自己有十分多的不足。

  • 首先是在学习和工作的处理上,我并不能做到完全不影响学习。但实际上这已完全违背了学生干部的初衷,所以我首先要检讨的就是这一点。在后半学期里,我一定努力,利用其他课余时间,将所缺所漏的课程给补上!
  • 其次是在学习时的实践上,在学习过程中我们需要多多实践,但是很明显的。我并没有像其他某些同学的博客里出现的那样,不仅对书上知识点进行归纳实践,还对课外补充内容进行演示。在今后要着重加强这一方面。
  • 还有是在拓展研究这一方面。在Y86那一章,老师多次提到张晓涵和陈俊达。因为这两位同学都发了一篇比较好的博客,内容就是Y86模拟器的安装。书上并没有详细的教程,两位同学是自行在网络上搜索教程,再融会贯通之后,写出属于自己的教程。然而我对于平时的知识就已经是疲于奔命了,对于这样的要求更是难以满足。归根结底还是时间的安排不当。
  • 最后是对于每次的考试。我并没有对去年的每一题进行重点突破,最终导致了自己成绩一落再落。考试是很关键的,需要继续加油。

课程建议和意见(要有理由)

本学期已经比起上学期更加完善了。更能让大家学到真本领,加扣分项目的设置更是如虎添翼。我觉得如果实在要提改进建议的话,还是建议老师在课上建立现场问答,现场做题,现场分析机制。这一机制在高中的应用是最多的,也是最有效的。对此老师可以直接针对性地提问,提问某些薄弱的孩子们,正确加分,错误减分。这样是对考试机制的一种贯彻,也能起到加强作用。

参考资料

# 20145314《信息安全系统设计基础》期中复习总结 Part B的更多相关文章

  1. 20145314郑凯杰《信息安全系统设计基础》第八周复习总结 Part A

    20145314郑凯杰<信息安全系统设计基础>第八周复习总结 Part A 学习知识点内容总结 复习线索:http://group.cnblogs.com/topic/73069.html ...

  2. 20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B

    20145314郑凯杰<信息安全系统设计基础>第9周学习总结 PART B 明确教材学习目标 注意每个系统调用的参数.返回值,会查帮助文档 阅读教材,完成课后练习(书中有参考答案),考核: ...

  3. 20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)

    已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习g ...

  4. 20145314郑凯杰《信息安全系统设计基础》GDB调试32位汇编堆栈分析

    20145314郑凯杰<信息安全系统设计基础>GDB调试32位汇编堆栈分析 本篇博客将对第五周博客中的GDB调试32位汇编堆栈进行分析 首先放上以前环境配置的图: 图1: 测试代码: #i ...

  5. 20145314郑凯杰《信息安全系统设计基础》第7周学习总结 part B

    20145314郑凯杰<信息安全系统设计基础>第7周学习总结 part B 上篇博客反思与深入 首先根据本周第一篇博客,娄老师给我的评论,我开始进行局部性的深入研究: 分为两个步骤,一是知 ...

  6. 20145314郑凯杰《信息安全系统设计基础》第5周学习总结 part B

    20145314郑凯杰<信息安全系统设计基础>第5周学习总结 part B 在前四天的学习中,我主要对课本知识进行了总结,在本周后三天的学习过程中,我进行实践并截图. http://www ...

  7. 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接

    2016-2017-1 <信息安全系统设计基础> 学生博客及Git@OSC 链接 博客 1452 20145201李子璇 20145202马 超 20145203盖泽双 20145204张 ...

  8. 20135328信息安全系统设计基础第一周学习总结(Linux应用)

    学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Linux中用户管理命令/ ...

  9. 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)

    第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...

随机推荐

  1. 【Python Programe】使用Python发送语音验证

    使用Python向手机发送语音验证码,需要工具有: virtualenv 创建独立运行环境 Twilio 帐号去调用相应的API Twilio 的python库,5.7.0版本 1.使用 virtua ...

  2. git学习(7)标签管理

    git学习(7)标签管理 1. 建立标签 在发布版本时候,我们通常会在版本库中打一个标签,这样就唯一确定了打标签的版本,有点像个里程碑,这里会有一个指向某个commit的指针 打标签很简单,首先切换到 ...

  3. uva656 Optimal Programs

    Optimal Programs As you know, writing programs is often far from being easy. Things become even hard ...

  4. Fully qualified name FQCN

    Fully qualified name - Wikipedia https://en.wikipedia.org/wiki/Fully_qualified_name In computer prog ...

  5. 一次漫长的服务CPU优化过程

    从师父那里接了个服务,每天单机的流量并不大,峰值tips也并不高,但是CPU却高的异常.由于,服务十分重要,这个服务最高时占用了100个docker节点在跑,被逼无奈开始了异常曲折的查因和优化过程. ...

  6. 为你的CSDN博客添加CNZZ流量统计功能

    一.流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计. 1.简介 统计独立的访问者数量(独立用户.独立访客): 可以统计独立的IP地址 ...

  7. 超简单Centos+Docker+Halo搭建java向博客

    首先,我就当你们了解docker基本知识了. 直接开始,全新的系统. 1. 安装Docker 移除旧的版本:  $ sudo yum remove docker \                  ...

  8. Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间

    1.推荐使用java8 localdate等 线程安全 支持较好 地址 2.joda 一.简述 查看SampleDateFormat源码,叙述有: * Date formats are not syn ...

  9. (转)理解POST和PUT的区别,顺便提下RESTful

    这两个方法咋一看都可以更新资源,但是有本质区别的 具体定义可以百度,我这里就不贴了,光说我自己的理解 首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称 ...

  10. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...