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

 

第五周(10.05-10.11):

学习计时:共14小时html

读书:3编程

代码:3windows

做业:2数组

博客:4安全

1、学习目标数据结构

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

2、学习资源less

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

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

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

3、学习方法

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

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

 

4、学习任务

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. 深化、实践题目,额外加分

 

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

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

、学习过程

(提示:此处由学生填写,学习过程,学习笔记,代码编译,运行结果,思考等)

 


 

 

 3.2程序编码

 

1、机器级代码

 

对于机器级编程来讲,两种抽象尤其重要。

 

  • 指令集体系结构ISA
  • 存储器系统

 

  1. ISA:机器级程序的格式和行为,定义为指令集体系机构,它定义了处理器状态指令的格式,以及每条指令对状态的影响。机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个很是大的字符数组
  1. PC:程序计数器。在IA32中,用%eip表示,指示将要执行的下一条指令在存储器中的地址。
  2. 程序存储器:包含程序的可执行机器代码,操做系统须要的一些信息,用来管理过程调用和返回的运行时栈,以及用户分配的存储器块。

 

2、代码示例

 

书第107页的代码以下:

int accum = 0;

int sum(int x, int y)
{
    int t = x + y;
    accum += t;
    return t;
}

 

反汇编器查看目标代码文件的内容。

objdump -d xxx.xx

  

 

二进制文件能够用od 命令查看,也能够用gdb的x命令查看。 有些输出内容过多,咱们可使用 more或less命令结合管道查看,也可使用输出重定向来查看。

od code.o | more
od code.o > code.txt

 

在读取地址时要注意是否是小端法,小端法的正确读法是与天然方向相反,好比109页第六行中后四个字节18 a0 04 08的正确顺序实际上是08 04 a0 18,去掉最高位的0后即为0x804a018

 

3、关于格式的注解

 

全部以“.”开头的行都是指导汇编器和连接器的命令。咱们一般能够忽略这行。

为了更清楚地说明汇编代码,有一种格式来表示汇编代码。 忽略了大部分指令,但包括行号和解释性说明。

如下是带解释的汇编代码:

 

Linux和windows的汇编格式的区别:

  • Intel代码省略了指示大小的后缀,即'l'
  • Intel代码省略了寄存器名字前面的‘%’符号,用的是esp,而不是%esp
  • Intel代码用不一样的方式来描述存储器中位置

在带有多个操做数的指令状况下,列出操做数的顺序相反

当带选项-S-O1运行gcc时,会产生xxx.s文件,其中带有'.'开头的行是指导汇编器和连接器的命令

 

 

3.3 数据格式

C语言数据类型在IA32中的大小:

 

大多数经常使用数据类型都是以双字形式存储的。

 

如图,大多数GCC生成的汇编代码指令都有一个字符后缀,代表操做数的大小。

浮点数使用的是一组彻底不一样的指令和寄存器。

 

3.4 访问信息

 

1、操做数指示符

  1. 操做数格式

操做数的三种类型:

  1. 当即数(常数值
  2. 寄存器(某个寄存器的内容
  3. 存储器(根据计算出来的地址访问某个存储器位置

 

有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

 

寻址方式和操做数格式:

 

 

2、数据传送指令

将数据从一个位置复制到另外一个位置的指令。

 

 

不能从内存地址直接MOV到另外一个内存地址,要用寄存器中转一下,所以须要两个指令。

  • 栈顶元素的地址是全部栈中元素地址中最低的
  • 栈指针%esp保存栈顶元素的地址。

 

 

3.5 算术和逻辑操做

 

按目的操做数分类:

 

1.加载有效地址

实际是将有效地址写入目的操做数,目的操做数必须是寄存器。

  • 指令形式:从存储器读取数据到寄存器。
  • 实际:将有效地址写入到目的操做数,而目的操做数必须是寄存器;并不真实引用存储器。

 

2.一元操做

操做数既是源又是目的。能够是寄存器也能够是存储器。

 

3.二元操做

第二个操做数既是源又是目的。但两个操做数不能同时是存储器。

 

4.移位操做

位移量是一个当即数或放在单字节寄存器%cl中。移位操做的目的操做数能够是一个寄存器或是一个存储器位置。

 

SAL 算术左移

SHL 逻辑左移

SAR 算术右移(补符号位)

SHR 逻辑右移(补0

 

控制中最核心的是跳转语句

有条件跳转(实现if,switch,while,for)

无条件跳转jmp(实现goto)

 

 特殊的算术操做

 

3.6 控制

 

1、条件码寄存器

  • 描述了最近的算术或逻辑操做的属性,能够检测这些寄存器来执行条件分支指令
  • 经常使用条件码:CF ZF SF OF

leal不改变任何条件码CMP指令根据他们的两个操做数之差来设置条件码。除了至设置条件码而不更新目标寄存器以外。CMP与SUB相同)

 

2、访问条件码

1.根据条件码的某个组合,将一个字节设置为0或1。SET指令根据t=a-b的结果设置条件码

2.能够条件跳转到程序的某个其余部分

3.能够有条件的传送数据

 

3、跳转指令(致使执行切换到程序中一个全新的位置,跳转的目的地一般用一个标号指明)

无条件跳转:JMP 能够是直接跳转也能够是间接跳转(写法是*后面加操做数指示符)

有条件跳转:根据条件码的某个组合,或者跳转或者继续执行下一条指令

  1. 条件分支——if-else结构:在两个分支语句中选择执行一个,汇编实现经过goto,就是汇编器为两个分支产生各自的代码块,它会插入条件和无条件分支,以保证能执行正确的代码块。
  2. 循环结构——do-while、while、for:用条件测试和跳转组合实现循环的效果。大多数汇编器根据do-while形式来产生循环代码,其余的循环会首先转换成do-while形式,而后再编译成机器代码。
  3. switch语句:根据一个整数索引值进行多重分支。经过使用跳转表这种数据结构实现更加高效。跳转表是一个数组,表项i是一个代码段的地址,这个代码段实现当开关索引值为i时程序该作的。此时跳转能够用goto/jmp

 

 

 

3.7 过程

包括将数据和控制从代码的一部分传递到另外一部分,须要在进入时为过程的局部变量分配空间并在退出时释放空间,这经过程序栈实现。

IA32经过程序栈来实现过程调用。

 

栈的做用:传递过程参数、存储返回信息、保存寄存器、本地存储

栈帧:为单个过程分配的那部分栈

结构:最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。程序执行时,栈指针能够移动,大多数信息的访问都是相对于帧指针的。

 

 

栈向低地址方向增加

 

 

2、转移控制

  1. call指令

有一个目标,即指明被调用过程起始的指令地址,效果是将返回地址入栈,并跳转到被调用过程的起始处。

  1. ret指令

从栈中弹出地址,并跳转到这个位置,使用这个指令栈指针要指向call指令存储返回地址的位置。

 

 

 

7、遇到的问题及解决

(提示:此处由学生填写,是重要的得分点,要写出遇到的问题和解决方案以及对出现问题的思考)

 不能由于困难而半途而废呀……上周的学习出现了问题,所以测验成绩很低。学习的内容一旦多了,就会想要得过且过。

通过测验,从新反思了本身的学习习惯问题。之后会继续脚踏实地。

不过老师此次的书本阅读量好大,写博客就写了四个小时……前六节的基础很重要所以不能不看,第七节最重要,所以重点理解。

课后习题由于有参考答案因此并无大问题,有在学习过程当中遇到一些琐碎的问题,询问了同窗和百度知道,都有不一样程度地解决。

 

最后,仍是但愿老师能够减轻做业量……今天个人生日也全埋在教室里写做业了……

 

PS 闫佳鑫同窗很强大,有少量内容借鉴她的博客。

 

 

8、其余

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

相关文章
相关标签/搜索