信息安全系统设计第四周实验报告

程序编码

 

一组浮点寄存器存放浮点数据。

 

机器代码只是将存储器看成一个很大的、按字节寻址的数组。

 

程序存储器(program memeory)包含:程序的可执行机器代码(代码和数据区),操作系统需要的一些信息(应该也在代码和数据区),用来管理过程调用和返回的运行时栈(栈),以及用户分配的存储器块(堆)。

 

操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器(processor memory)中的物理地址。

 

gcc -O1 -s xxx.c 输出 汇编代码

 

gcc -O1 -c xxx.c 输出 目标代码

 

objdump -d xxx.o 反汇编机器代码(包括目标代码和可执行代码,两者的区别在于偏移地址)

 

gdb 可以直接对机器代码使用(包括目标代码和可执行代码)

 

gcc -s产生的汇编代码中,所有以点开头的行都是用于指导汇编器和链接器的。

 

gccobjdump产生的汇编代码是ATT风格,微机原理里面学习的是Intel风格。

 

数据格式

 

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

 

(P111表格)

 

访问信息

 

Linux——平坦寻址方式:

ds,ss,cs等各段的段基地址都指向同一个地方,不管是数据段还是代码段,只要他们的偏移相等,那么他们就是寻址一样的物理内存,所以我们就只需指明偏移就能得到统一的寻址目标,不管这个目标是在代码段还是数据段或者堆栈段之中

 

算术和逻辑操作

加载有效地址

leal,从存储器读数据到寄存器,而从存储器引用的过程实际上是将有效地址写入到目的操作数。目的操作数必须是一个寄存器。

一元操作和二元操作

  • 一元操作:只有一个操作数,既是源又是目的,可以是一个寄存器或者存储器。

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

移位

先给出位移量,然后是位移的数值,可进行算数和逻辑右移。移位操作移位量可以是立即数或%cl中的数。

 

控制

常用的条件码: 

     CF:进位标志

 

       ZF:零标志

 

       SF:符号标志

 

       OF:溢出标志

 

       CF:(unsignedt < (unsiged)a  无符号溢出

 

       ZF:  (t==0) 

 

       SF:   (t < 0)  负数

 

       OF:(a <0 == b< 0&& (t < 0 != a < 0) 有符号溢出

 

访问条件码的读取方式:

 

  1. 根据条件码的某个组合,将一个字节设置成0或1;
  2. 跳转到程序某个其他的部分
  3. 有条件的传送数据。

 

SET指令根据t=a-b的结果设置条件码

JUMP指令,同样是汇编中常用的指令,根据不同的条件和符号位进行不同的跳转动作,具体见书128页。

跳转指令有几种不同的编码,最常用的是PC(程序计数器)相关的。

 

 

过程

 

 

  • 为单个过程分配的栈叫做栈帧,寄存器%ebp为帧指针,而寄存器指针%esp为栈指针,程序执行时栈指针移动,大多数信息的访问都是相对于帧指针。

  • 栈向低地址方向增长,而栈指针%esp指向栈顶元素。

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

    ret:从栈中弹出地址,并跳转到这个位置。

 

 

 

 

 

 

 

 

 

posted @ 2015-10-11 17:20  武西垚  阅读(233)  评论(1编辑  收藏  举报