20145307《信息安全系统设计基础》第五周学习总结PT2:

教材学习内容总结

之前有第一部分学习总结:

http://www.cnblogs.com/Jclemo/p/5962219.html

以下为第二部分

执行汇编命令:gcc –s xxx.c –o xxx.s反汇编命令:objdump –d xxx 64位处理器得到32代码的命令:gcc –m32 –s xxx.c

Ltme:

1、三种操作数:

立即数:常数值。表示为$c标准表示的整数。

寄存器:表示某个寄存器的内容。

存储器:根据计算出来的地址访问某个存储器位置

2、数据传送指令

栈的特点

a、 遵循“后进先出”的原则b、 push压栈,pop出栈c、 栈顶:总是从这端插入和删除元素d、 栈顶元素的地址是最低的e、 栈指针%esp保存着栈顶元素的地址

3、数据传送示例

局部变量通常保存在寄存器中;

寄存器访问比存储器访问要快的多。

算术和逻辑操作四组操作

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

一元操作:只有一个操作数,可以是寄存器也可是存储器位置。

二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 ;目的操作数是第二个,可以是寄存器、存储器;两个不能同时为存储器。

移位##:第一个是移位量,用单个字节编码(只允许0-31位的移位),可以是立即数或者放在单字节寄存器%cl中 ;算术右移SAR,填上符号位;逻辑右移SHR,填上0。目的操作数可以是一个寄存器或存储器。

2、特殊的算术操作

1、条件码

CF:进位标志

ZF:零标志SF:符号标志OF:溢出标志

2、访问条件码条件码常用的使用方法

根据条件码的某个组合,将一个字节设置为0或1

SET指令根据t=a-b的结果设置条件码; 可以条件跳转到程序的某个其他部分;可以有条件的传送数据。

3、跳转指令及其编码

jump指令

直接跳转:后面跟标号作为跳转目标间接跳转:*后面跟一个操作数指示符

其他跳转指令

除了jump指令外,其他跳转指令都是有条件的。有条件跳转是指根据条件码的某个组合,或者跳转或者继续执行下一条指令。

4、翻译条件分支

将条件表达式和语句从c语言翻译成机器语言,最常用的方式就是结合有条件和无条件跳转。

5、循环循环结构的三种形式

do-while:先执行循环体语句,再执行判断,循环体至少执行一次。while: 把循环改成do-while的样子,然后用goto翻译 for: 把循环改成do-while的样子,然后用goto翻译

汇编中用条件测试和跳转组合实现循环的效果。大多数汇编器根据do-while形式来产生循环代码,其他的循环会首先转换成do-while形式,然后再编译成机器代码。

6、条件传送指令

实现条件转移的方式传统方式: 利用控制的条件转移。当条件满足时就,程序沿着一条执行路径进行,而当条件不满足时,就走另一路径。

7、switch语句

跳转表是一种非常有效的实现多重分支的方法,是一个数组,表项i是一个代码段的地址,这个代码段实现当开关索引值等于i时程序应该采取的动作。

过程

1、栈帧结构

机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。 最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。

2、转移控制

call指令

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

ret指令

ret指从栈中弹出地址,并跳转到这个位置。ret指令返回到call指令后的那条指令。

leave指令leave指令可以使栈做好返回的准备 等价于:

movl %ebp,%esp popl %ebp

3、寄存器使用惯例

程序寄存器组是唯一能被所有过程共享的资源。

惯例是为了防止一个过程P调用另一个过程Q时寄存器中的值被覆盖

使用惯例:%eax,%edx,%ecx 调用者保存寄存器  %ebx,%esi,%edi 被调用者保存寄存器  %ebp,%esp 保持寄存器

保存某值的两种方式

由调用者保存。在调用之前就压进栈。 由被调用者保存,在刚被调用的时候就压进栈,并在返回之前恢复。

gdb调试

实验练习中的问题和解决过程

使用gcc –S –o main.s main.c -m32命令编译成汇编代码,如下代码中的数字和函数名请自行修改以防与他人雷同

leafpad删除 . 开头文件命令

leafpad//注释

详解main函数保存%ebp,并设置新的帧指针。

pushl   %ebpmovl    %esp,%ebp

分配4字节的栈空间

subl  $4,%esp

设置arg1=8

movl      $8,(%esp)

call调用f f被调用,初始化帧指针,分配栈空间。 将(%esp)中的8给 %eax,即存入栈中

movl    %eax,(%esp)

call调用g g被调用,初始化栈指针,分配栈空间 将 %eax 与立即数 123123

相加add     $123123,%eax

在g结束前弹栈

popl    %ebp

ret返回f中call的调用位置 f也结束,return返回main中call调用的位置 main继续 %eax 加3的操作

addl    $3,%eax

leave为返回准备栈,相当于%ebp出栈,最后ret结束。

本周代码托管截图

链接

https://git.oschina.net/Jclemo/Jclemo-programmi-for_linux/commit/6055b51c0165a8f62851d5bfa14761d5bef3b7a1

20145307《信息安全系统设计基础》第五周学习总结PT2的更多相关文章

  1. 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试

    目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...

  2. 20135234mqy-——信息安全系统设计基础第五周学习总结

    程序的机器级表示 3.1 intel处理器系列俗称x86,经历了一开始个长期的,不断进化的发展过程. 开始时它是第一代单芯片,16位微处理器之一,由于当时集成电路技术水性有限,其中做了很多妥协,此后, ...

  3. 2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客

    2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...

  4. 20145215&20145307信息安全系统设计基础实验报告

    20145215&20145307信息安全系统设计基础实验报告 PART1 一.实验原理 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码.同一个体系结构可以运行不同的操作系统 ...

  5. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  6. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)

    2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...

  7. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod

    20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...

  8. 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交

    2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...

  9. 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

    2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...

随机推荐

  1. SQL server 数据库升级版本问题解决办法

    在升级或安装数据库的时候,会遇到数据库版本不对的问题,无论怎么升级,升级提示成功了,但打开数据库发现还是原来那个版本.甚至出现重装数据库之后,登陆页面已经提示安装的是新版本了,但登陆进去之后,发现数据 ...

  2. echart绑定点击事件

    实例页面:http://echarts.baidu.com/echarts2/doc/example/event.html option = { tooltip : { trigger: 'axis' ...

  3. c# 下三角实现 九九乘法口诀表

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Hell ...

  4. How TCP clients and servers communicate using the TCP sockets interface

    wTCP客户端和服务器是如何通过TCP套接字接口进行通讯的.服务器距离.负载,网络拥堵. HTTP The Definitive Guide We begin with the web server ...

  5. Linux下安装谷歌访问助手,解压缩时出现中文乱码

    1.sudo apt-get install unar 安装unar 2.unar 谷歌访问助手chrome版本.zip   注意:使用 lsar 命令可以查看压缩文件内有那些文件: 例:lsar 谷 ...

  6. php 验证上传图片尺寸

    getimagesize 函数 取得图像大小 (PHP 4, PHP 5) array getimagesize ( string filename [, array &imageinfo] ...

  7. 数据库 - MySQL - 总结

    总结: MySQL 表操作 - 练习题 多表查询 - 练习题 建表查询 - 作业

  8. Sublime Text 配置成 C++ IDE

    在Windows中将Sublime Text配置成C++的IDE.首先,为了运行C++需要安装g++编译器,g++可直接在codeblocks中找到.codeblock的官网下载地址是http://w ...

  9. golang: multiple http.writeHeader calls

    背景: golang的http服务,读取文件,提供给client下载时候. 出现 multiple http.writeHeader calls 错误. func DownloadFile(w htt ...

  10. VC2005 warning C4819 消除方法

    一. Warning C4819:The file contains a character that can ot be represented in the current code page(9 ...