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

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

教材学习内容总结

1、Intel处理器系列:俗称x86,开始时是第一代单芯片、16位微处理器之一。

第一代是8086,也是汇编课程中学习的处理器型号。

每个后继处理器的设计都是后向兼容的,可以保证较早版本上编译的代码在较新的处理器上运行。

2、GCC将源代码转化为可执行代码的步骤:

C预处理器——扩展源代码-生成.i文件

编译器——产生两个源代码的汇编代码-——生成.s文件

汇编器——将汇编代码转化成二进制目标代码——生成.o文件

链接器——产生可执行代码文件

3、书中107页的代码体现了反汇编器的使用:

即可反汇编-d后的文件,查看目标代码文件的内容。

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

4、机器代码和它的反汇编表示的一些特性:

  • IA32指令长度从1到15个字节不等
  • 设计指令格式的方式是,从某个给定位置开始,可以将字节唯一的解码成机器指令
  • 反汇编器只是基于机器代码文件中的字节序列来确定汇编代码,不需要访问程序的源代码或汇编代码
  • 反汇编器使用的指令命名规则与GCC生成的汇编代码使用的有些差别

ATT和INTEL的汇编代码格式有所差别。

5、c语言基本数据类型对应的IA32表示

char	字节	1字节

short	字	2字节

int		双字	4字节

long int 双字 4字节

long long int (不支持) 4字节

char *	双字 4字节

float	单精度 4字节

double	双精度 8字节

long double 扩展精度 10/12字节

6、数据传送指令的三个变种:

  • movb 传送字节
  • movw 传送字
  • movl 传送双字

7、寻址方式

(1)立即数寻址方式

格式:$后加用标准c表示法表示的整数,如$0xAFF

(2)寄存器寻址方式

如%eax,与汇编中学过的AX寄存器类比。

(3)存储器寻址方式
  • 直接寻址方式
  • 寄存器间接寻址方式
  • 寄存器相对寻址方式
  • 基址变址寻址方式
  • 相对基址变址寻址方式

8、关于栈

①堆栈

1.后进先出

2.栈指针指向栈顶元素

3.栈朝低地址方向增长

②压栈push

指令格式——PUSH r16/m16/seg

指令功能

第一步:SP←SP-2 ;堆栈指针SP上移

第二步:(SS):(SP)←r16/m16/seg  ;字操作数存入堆栈顶部

注意 堆栈操作必须至少以为单位,这时栈顶指针-2

如果压入的是双字,栈顶指针-4

3、出栈pop

指令格式——POP r16/m16/seg
指令功能

第一步:r16/m16/seg← (SS):(SP) ;栈顶的一个字传送到指定的目的操作数

第二步:SP←SP+2   ;堆栈指针SP下移,指向新的栈顶

栈顶指针变化同压栈。

9、 控制

一、条件码

CF:进位标志

ZF:零标志

SF:符号标志

OF:溢出标志

条件码的改变:

数据传送指令

MOV 不影响标志位

PUSH POP 不影响标志位

XCHG 交换指令 不影响标志位

XLAT 换码指令 不影响标志位

LEA 有效地址送寄存器指令 不影响标志位

PUSHF 标志进栈指令 不影响标志位

POPF 标志出栈指令 标志位由装入值决定

算术指令

ADD 加法指令 影响标志位

ADC 带进位加法指令 影响标志位

INC 加一指令 不影响CF,影响别的标志位

SUB 减法指令 影响标志位

SBB 带借位减法指令 影响标志位

DEC 减一指令 不影响CF,影响其他标志位

NEG 求补指令 影响标志位 只有操作数为0,例如字运算对-128求补,OF=1,其他时候OF=0

CMP 比较指令 做减法运算但不存储结果,根据结果设置条件标志位

MUL 无符号数乘法指令

IMUL 有符号数乘法指令   均对CF和OF位以外的条件码位无定义(即状态不定)

DIV 无符号数除法指令

IDIV 带符号数除法指令 除法指令对所有条件码位均无定义

位操作指令:

AND 逻辑与

OR 逻辑或

NOT 逻辑非 不影响标志位

XOR 异或

TEST 测试指令   除NOT外的四种,置CF、OF为0,AF无定义,SF,ZF,PF根据运算结果设置

移位指令:

SHL 逻辑左移指令

SHR 逻辑右移指令 移位指令根据结果设置SF,ZF,PF位

ROL 循环左移指令

ROR 循环右移指令 循环移位指令不影响除CF,OF之外的其他条件位

串处理指令:

MOVS 串传送指令

STOS 存入串指令

LODS 从串取指令 均不影响条件位

CMPS 串比较指令

SCAS 串扫描指令 均不保存结果,只根据结果设置条件码

控制转移指令:

JMP 无条件转移指令 不影响条件码

所有条件转移指令  都不影响条件码

循环指令:

不影响条件码

子程序相关:

CALL调用和RET返回 都不影响条件码

10、循环

汇编中可以用条件测试和跳转组合起来实现循环的效果,但是大多数汇编器中都要先将其他形式的循环转换成

本周学习体会

这次的很多内容都是在上学期的汇编的基础上进行的,虽然有些地方理解起来还是有些困难,但是与上一周的学习内容比起来还是相对比较轻松的。

本周代码托管链接

代码链接

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 150/150 1/2 20/20
第二周 200/350 1/2 24/44
第三周 150/500 1/3 20/64
第五周 300/800 1/4 15/79

参考资料

原文地址:https://www.cnblogs.com/GZSdeboke/p/5968142.html