第五周
学习计时:共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.按照作业编译的没有结果。
|
八、其他 |
(提示:此处由学生填写,灵感,领悟等) |