# 20145314《信息安全系统设计基础》期中复习总结 Part B
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使用平坦寻址方式,使程序员将整个存储空间看做一个大的字节数组。
编译过程
- C预处理器插入宏和头文件:gcc -E xxx.c -o xxx.i
- 编译器产生源代码的汇编代码:gcc -S xxx.i -o xxx.s
- 汇编器化成二进制目标代码:gcc -c xxx.s -o xxx.o
- 链接器生成最终可执行文件:gcc xxx. -o xxx
- 用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的代码步骤
- 先从main程序开始执行,调用y前,先将返回地址入栈,再将%ebp入栈,将%ebp放在现在的栈顶位置,栈顶指针减4分配空间,再将参数8入栈,调用y
- y调用z前,再进行一次将返回地址和%ebp入栈,改变%ebp位置的操作,将栈顶指针减4分配空间,将8存贮在%eax寄存器中,再将现在%eax中的值入栈保存,调用z
- 再进行一次将返回地址和%ebp入栈,改变%ebp位置的操作,将8存入%eax便于操作,对8进行加3的操作,弹出到%ebp,返回main
- 返回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的更多相关文章
- 20145314郑凯杰《信息安全系统设计基础》第八周复习总结 Part A
20145314郑凯杰<信息安全系统设计基础>第八周复习总结 Part A 学习知识点内容总结 复习线索:http://group.cnblogs.com/topic/73069.html ...
- 20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B
20145314郑凯杰<信息安全系统设计基础>第9周学习总结 PART B 明确教材学习目标 注意每个系统调用的参数.返回值,会查帮助文档 阅读教材,完成课后练习(书中有参考答案),考核: ...
- 20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)
已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习g ...
- 20145314郑凯杰《信息安全系统设计基础》GDB调试32位汇编堆栈分析
20145314郑凯杰<信息安全系统设计基础>GDB调试32位汇编堆栈分析 本篇博客将对第五周博客中的GDB调试32位汇编堆栈进行分析 首先放上以前环境配置的图: 图1: 测试代码: #i ...
- 20145314郑凯杰《信息安全系统设计基础》第7周学习总结 part B
20145314郑凯杰<信息安全系统设计基础>第7周学习总结 part B 上篇博客反思与深入 首先根据本周第一篇博客,娄老师给我的评论,我开始进行局部性的深入研究: 分为两个步骤,一是知 ...
- 20145314郑凯杰《信息安全系统设计基础》第5周学习总结 part B
20145314郑凯杰<信息安全系统设计基础>第5周学习总结 part B 在前四天的学习中,我主要对课本知识进行了总结,在本周后三天的学习过程中,我进行实践并截图. http://www ...
- 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接
2016-2017-1 <信息安全系统设计基础> 学生博客及Git@OSC 链接 博客 1452 20145201李子璇 20145202马 超 20145203盖泽双 20145204张 ...
- 20135328信息安全系统设计基础第一周学习总结(Linux应用)
学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令/ ...
- 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)
第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...
随机推荐
- 【Python Programe】使用Python发送语音验证
使用Python向手机发送语音验证码,需要工具有: virtualenv 创建独立运行环境 Twilio 帐号去调用相应的API Twilio 的python库,5.7.0版本 1.使用 virtua ...
- git学习(7)标签管理
git学习(7)标签管理 1. 建立标签 在发布版本时候,我们通常会在版本库中打一个标签,这样就唯一确定了打标签的版本,有点像个里程碑,这里会有一个指向某个commit的指针 打标签很简单,首先切换到 ...
- uva656 Optimal Programs
Optimal Programs As you know, writing programs is often far from being easy. Things become even hard ...
- Fully qualified name FQCN
Fully qualified name - Wikipedia https://en.wikipedia.org/wiki/Fully_qualified_name In computer prog ...
- 一次漫长的服务CPU优化过程
从师父那里接了个服务,每天单机的流量并不大,峰值tips也并不高,但是CPU却高的异常.由于,服务十分重要,这个服务最高时占用了100个docker节点在跑,被逼无奈开始了异常曲折的查因和优化过程. ...
- 为你的CSDN博客添加CNZZ流量统计功能
一.流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计. 1.简介 统计独立的访问者数量(独立用户.独立访客): 可以统计独立的IP地址 ...
- 超简单Centos+Docker+Halo搭建java向博客
首先,我就当你们了解docker基本知识了. 直接开始,全新的系统. 1. 安装Docker 移除旧的版本: $ sudo yum remove docker \ ...
- Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间
1.推荐使用java8 localdate等 线程安全 支持较好 地址 2.joda 一.简述 查看SampleDateFormat源码,叙述有: * Date formats are not syn ...
- (转)理解POST和PUT的区别,顺便提下RESTful
这两个方法咋一看都可以更新资源,但是有本质区别的 具体定义可以百度,我这里就不贴了,光说我自己的理解 首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称 ...
- django+celery 实现定时任务
利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...