第五周

 

 

 

 

 

第五周(10.05-10.11):

学习计时:共xxx小时

读书:

代码:

作业:

博客:

一、学习目标

1. 理解逆向的概念以及
2. 掌握X86汇编基础,能够阅读(反)汇编代码
3. 了解ISA(指令集体系结构)
4. 理解函数调用栈帧的概念,并能用GDB进行调试

二、学习资源

1. 教材:第三章《程序的机器级表示》,详细学习指导见:重点是3.7,3.11

2. 课程资料:https://www.shiyanlou.com/courses/413   实验四,课程邀请码:W7FQKW4Y

3. 教材中代码运行、思考一下,读代码的学习方法见

三、学习方法

1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“学号-信息安全系统设计基础第五周学习总结”

 

四、学习任务

1. 阅读教材,完成课后练习(书中有参考答案)

   3.1-3.7中练习,重点:3.1,3.3,3.5,3.6,3.9,3.14,3.15,3.16,3.22,3.23,3.27,3.29,3.30,3.33,3.34

2. 考核:练习题把数据变换一下

3. 实验:需要动手的到实验楼中练习一下

4. 深化、实践题目,额外加分

 

、后续学习预告(可选):

第四章《处理器体系结构》

、学习过程

ISA   定义了处理器处理状态、指令的格式,以及每条指令对状态的影响。

在命令行使用-S 选项,就能得到C语言编译器产生的汇编代码

64位的机器产生32位的代码:gcc -m32 -S xxx.c

二进制文件查看内容 使用反汇编器

unix> objdump -d code.o

指针使用示例:

参数xp是一个指向整数的指针,而y是一个整数。像x这样的局部变量,通常是保存在寄存器中。

语句 int x =*xp;(指针的间接引用,将xp的值存放到名为x的局部变量)

语句 *xp = y;(将参数y的值写到xp所指的位置,标明的是一个写操作)

 

CMP指令根据它们的两个操作数之差来设置条件码;

除了只设置条件码而不更新目标寄存器之外,CMP指令与SUB指令的行为是一样的。

 

为单个过程分配的那部分栈称为栈帧。最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,而寄存器%esp为栈指针。

当程序进行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的。

 

 假设过程p(调用者)调用过程q(被调用者),则q的参数放在p的栈帧中。当p调用q时,p中的返回地址被压入栈中,形成p的栈帧的末尾。返回地址就是程序从q返回时应该继续执行的地方。q的栈帧从保存的帧指针的值开始,后面保存其他寄存器的值。

根据惯例,寄存器%eax \%edx\%ecx被划分为调用者保存寄存器。%ebx\%esi\%edi被划分为被调用者保存寄存器。

 

 

 

七、遇到的问题及解决

1.对增加栈指针来释放空间不理解。“可以利用push1将数据存入栈中并利用pop1指令从栈中取出。将栈指针的值减少适当地值可以分配没有指定初始值的数据的空间”,对书上这个解释不理解。

2.按照作业编译的没有结果。

 

 

八、其他

(提示:此处由学生填写,灵感,领悟等)


posted @ 2015-10-11 10:25  20135311不是富东京  阅读(139)  评论(1编辑  收藏  举报