20135219洪韶武——信息安全系统设计基础第四周学习总结

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

学习任务:教材第三章

学习时间:10小时

学习内容


一、教材知识梳理

1.程序编码与机器级代码

  程序编码

       gcc编译器,将源代码转化成可执行代码,C预处理器-汇编器-链接器

  机器级代码

       机器级程序的格式和行为,定义【指令集体系结构ISA】,定义了处理器状态,指令格式,以及指令对状态的影响

       机器级程序实用的存储地址使用的是虚拟地址

2.数据格式

  整数型、长整数型存储为4字节格式

  指针类型存储为4字节格式

  浮点数有三种形式:单精度、双精度、扩展精度,分别为4字节、8字节、10字节

3.操作数指示符

  第一种是立即数,即常数值

  第二种是寄存器,表示某个寄存器的内容

  第三种是存储器,根据计算出的有效地址,访问存储器位置

4.操作数格式见课本P113【注意s因子必须是1、2、4或8】

5.数据传送指令:把不同指令分为指令类,同一类指令执行相同操作【不同的是操作数大小不同】

6.MOV类中的指令源操作数的值复制到目的操作数中【源操作数的指定的值是一个立即数,目的操作数指定一个位置】

7.栈是一个数据结构,可以添加或删除值,遵循后进先出原则。

8.加载有效地址【leal】:从存储器读数据到寄存器。

9.一元操作与二元操作

  一元操作:只有一个操作数,既是源又是目的

  二元操作:其中的第二个操作数既是元又是目的

10.移位操作:先给移位量,再给移位值,可以进行算术和逻辑右移。

11.条件码:寄存器,描述最近的算术或逻辑操作的属性。

  最常用的条件码:CF【进位标志】,ZF【零标志】,SF【符号标志】,OF 【溢出标志】

12.注意:CMP指令和TEST指令不会修改任何寄存器的值,只设置条件码。

13.访问条件码:常使用三种方法P125

14.三种循环【do-while】【while】【for】

15.一个过程包括将数据和控制从代码的一部分传到另一部分,在进入时为过程的局部变量分配空间,并在退出时释放空间。

16.栈帧结构:为单个过程分配的那部分栈称为【栈帧】

  程序执行时,栈指针可以移动,大多数信息访问都是针对于帧指针的

17.转移控制:call指令、leave指令、ret指令P150

18.递归过程P156

二、重点知识点(与梳理中重复内容不再写)

 

1.x86寻址方式经历三代:

 

  DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
  8086的分段模式
  IA32的带保护模式的平坦模式
2.程序计数器【PC】指示将要执行的下一条指令在存储器中的地址

 

3.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) 产生的代码更接近教材中代码(删除"."开头的语句)

 

4.二进制文件可以用od 命令查看,也可以用gdb的x命令查看
有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看
od code.o | more
od code.o > code.txt

 

5.gcc -S 产生的汇编中可以把 以”.“开始的语句都删除了再阅读

 

6.ATT格式和Intel格式的区别  

 

  Intel代码省略了指示大小的后缀,省略了寄存器名字前面的%,用不同方式描述存储器中位置

 

7.注意P111表中不同数据的汇编代码后缀如:char【b】,short【w】,int【l】

 

8.esi edi可以用来操纵数组,esp ebp用来操纵栈帧。 对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx,大家要理解32位的eax,16位的ax,8位的ah,al都是独立的,我们通过下面例子说明:假定当前是32位x86机器,eax寄存器的值为0x8226,执行完addw $0x8266, %ax指令后eax的值是多少? 解析:0x8226+0x826=0x1044c, ax是16位寄存器,出现溢出,最高位的1会丢掉,剩下0x44c,不要以为eax是32位的不会发生溢出.

 

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

 

10. MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOV,MOVS,MOVZ,掌握push,pop

 

11.栈帧与push pop; 注意栈顶元素的地址是所有栈中元素地址中最低的。
  思考一下:CMP和SUB用在什么地方

 

  CMP是比较指令,根据来两操作数之差设置条件码

 

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

 

13. bt/frame/up/down :关于栈帧的gdb命令

 

 

 

 

posted @ 2015-10-11 21:30  5219hsw  阅读(131)  评论(1编辑  收藏  举报