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

 

第五周(10.05-10.11):

学习计时:共14小时

读书:3

代码:3

作业:2

博客:4

一、学习目标

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

 

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

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

、学习过程

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

 


 

 

 3.2程序编码

 

一、机器级代码

 

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

 

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

 

  1. ISA:机器级程序的格式和行为,定义为指令集体系机构,它定义了处理器状态指令的格式,以及每条指令对状态的影响。机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字符数组
  1. PC:程序计数器。在IA32中,用%eip表示,指示将要执行的下一条指令在存储器中的地址。
  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

 

三、关于格式的注解

 

所有以“.”开头的行都是指导汇编器和链接器的命令。我们通常可以忽略这行。

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

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

 

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

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

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

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

 

 

3.3 数据格式

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

 

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

 

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

浮点数使用的是一组完全不同的指令和寄存器。

 

3.4 访问信息

 

一、操作数指示符

  1. 操作数格式

操作数的三种类型:

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

 

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

 

寻址方式和操作数格式:

 

 

二、数据传送指令

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

 

 

不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下,因此需要两个指令。

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

 

 

3.5 算术和逻辑操作

 

按目的操作数分类:

 

1.加载有效地址

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

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

 

2.一元操作

操作数既是源又是目的。可以是寄存器也可以是存储器。

 

3.二元操作

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

 

4.移位操作

位移量是一个立即数或放在单字节寄存器%cl中。移位操作的目的操作数可以是一个寄存器或是一个存储器位置。

 

SAL 算术左移

SHL 逻辑左移

SAR 算术右移(补符号位)

SHR 逻辑右移(补0

 

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

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

无条件跳转jmp(实现goto)

 

 特殊的算术操作

 

3.6 控制

 

一、条件码寄存器

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

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

 

二、访问条件码

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

2.可以条件跳转到程序的某个其他部分

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为栈指针。程序执行时,栈指针可以移动,大多数信息的访问都是相对于帧指针的。

 

 

栈向低地址方向增长

 

 

二、转移控制

  1. call指令

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

  1. ret指令

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

 

 

 

七、遇到的问题及解决

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

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

经过测验,重新反思了自己的学习习惯问题。以后会继续脚踏实地。

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

课后习题因为有参考答案所以并没有大问题,有在学习过程中遇到一些琐碎的问题,询问了同学和百度知道,都有不同程度地解决。

 

最后,还是希望老师可以减轻作业量……今天我的生日也全埋在教室里写作业了……

 

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

 

 

八、其他

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

 

转载于:https://www.cnblogs.com/ClareOhno/p/4869555.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值