信息安全系统设计基础第四周学习总结

$3.1x86的发展历史

   1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
   2 8086的分段模式
   3 IA32的带保护模式的平坦模式

$3.2程序编码
  1、机器级代码:机器级编译的两种抽象:指令集体系结构和存储地址是虚拟地址。一条指令只执行一个非常基本的操作。
  2、关于格式的注解:所有以“.”开头的行都是知道汇编器和链接器的命令
       gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编; 注意函数前两条和后两条汇编代码,所有函数都有,建立函         数调用栈帧,应该理解、熟记。 
       注意: 64位机器上想要得到32代码:gcc -m32 -S xxx.c MAC OS中没有objdump, 有个基本等价的命令otool  Ubuntu中 gcc -S code.c (不带-O1) 产生的代码更接近教材中代码(删除"."开头的语句)
       
$3.3数据格式
  1、字表示16位数据类型。浮点数有三种形式:单精度,双精度,扩展精度。
  2、传送指令的三个变种:movb(传送字节)movw(传送字)movl(传送双字)
$3.4访问信息
  1、操作数指示符:执行一个操作中要引用的源数据值已经防止结果的目标位置。
        操作数分为三类:立即数,寄存器和存储器。(汇编学过的三种寻址方式)
        
  2、数据传送指令:MOV:源操作数复制到目的操作数。两个操作数不能都指向寄存器
        栈是一个数据结构,可以添加或删除值,遵循后进先出的原则。
        push压入栈,pop删除数据。可以插入和删除元素的一端称为栈顶。栈顶元素的地址是最低的
        
 
        
$3.5算术和逻辑操作
  1、加载有效地址:从存储器读数据到寄存器。
        
  2、一元操作数和二元操作数:
       一元操作数,既是源又是目的。二元操作数:第二个数既是源又是目的。、
  3、移位操作:先给出移位量接着给出移位的数值。移位量可以是立即数,也可以是放在单字解寄存器元素中。
  4、以上指令既可以用于无符号数运算也可以用于补码运算。
  5、特殊的算术操作:
        
$3.6控制
  1、要求有条件的执行根据数据测试的结果来决定操作执行的顺序。
  2、条件码:CF 进位标志。ZF 零标志。SF 符号标志。OF 溢出标志。
       
        使用方法:
        ①:根据条件码的某种组合将字节设置为1或0
        ②:条件跳转到程序的某个其他部分
        ③:有条件的传送数据
        
  3、跳转指令及其编码:jump无条件跳转
       直接跳转:跳转目标作为指令的一部分编码,给出一个标号作为跳转目标
       间接跳转:跳转目标是从寄存器或存储器读出的,‘*’跟一个操作数指示符。
       其他有条件指令可以参考书上128页
  4、翻译条件分支
      将条件表达式和语句从C语言翻译成机器代码最常用的方法结合有条件和无条件跳转
      
  5、循环
      汇编中循环可以用条件测试和跳转组合起来实现
  6、条件传送指令
     实现条件操作的传统方法是利用控制的条件转移。实际利用数据的控制转移 
     基于条件数据传送的代码比基于条件控制转移的代码性能好。
  7、switch语句
      可以根据一整个引索值进行多重分支。提高代码可读性
      Switch语句是多重分支的典型,而且使用的是跳转表这种数据类型,是的搜索的更快更高效。
     所以这里的关键就是要领会使用跳转     表是一种非常有效的实现多重分支的方法。
$3.7过程
   1、栈帧结构:机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复以及本地存储。为单个过程分配的部分栈称为栈帧
         %ebp为帧指针,%esp为栈指针
   2、转移控制:
       
        
 
 
 
posted @ 2015-10-11 21:54  20135236贾瑗  Views(303)  Comments(1Edit  收藏  举报