2018-2019-1 20175206《信息安全系统设计基础》第三周学习总结

2018-2019-1 20175206《信息安全系统设计基础》第三周学习总结

学习目标

1.理解逆向的概念
2.掌握X86汇编基础,能够阅读(反)汇编代码
3.了解ISA(指令集体系结构)
4.理解函数调用栈帧的概念,并能用GDB进行调试

学习PPT和查阅相关资料后,第三章我总结如下:

两个抽象

  • 指令集体系结构或指令集架构来定义机器级程序的格式和行为,他定义了处理器状态、指令的格式,以及每条指令对状态的影响。

  • 机器级程序使用的内存地址,提供的内存模型看上去是一个非常大的字节数组。

ISA(指令集体系结构)定义了处理器状态指令的格式,以及每条指令对状态的影响
PC(程序计数器)指示将要执行的下一条指令在存储器中的地址

X86-64指令

  • 指令长度:1到15个字节不等
  • 指令格式:OPER[DEST[,SRC]];注释

生成汇编文件和反汇编

  • 使用GCC编译器 输入 gcc -Og -S *.c即可生成对应的汇编文件

  • 使用OBJDUMP 输入objdump -d mstore.o即可生成对应文件(反汇编)

处理器的类型

处理器
程序计数器
整数寄存器
条纹寄存器
浮点寄存器

数据格式

  • C语言数据类型对应x86-64中的表示
C声明 Intel数据类型 汇编代码后缀 大小(字节)
char 字节 b 1
short w 2
int 双字 l 4
long 四字 q 8
char* 四字 q 8
float 单精度 s 4
double 双精度 l 8

访问信息

通用目的寄存器:

操作数指示符

  • 操作数指示符分为三类
    立即数
    寄存器
    内存引用

数据传送指令和寻址方式

movb ——传送字节
movw——传送字
movl——传送双字
movs——符号位扩展
movz——零扩展

寻址方式分为立即数寻址方式、寄存器寻址方式和存储器寻址方式,其中还有更为详细的分类:
如直接寻址方式、基址变址寻址方式、寄存器间接寻址方式、相对基址变址寻址方式、寄存器相对寻址方式等。

算术和逻辑操作

一元和二元操作:
一元操作:
INC DEC NEG NOT (只有一个操作数,既是源又是目的,可以是一个寄存器,或者存储器位置)
二元操作:
ADD SUB IMUL XOR OR AND (第一个操作数可以是立即数,寄存器或者存储器位置;第二个操作数既是源又是目的。可以是寄存器或者存储器位置,但是不同时是储存器位置)
移位操作:
SAL SHL SAR SHR (源操作数即移位量是立即数或者放在单字节寄存器元素%cl中;目的操作数是一个寄存器或是一个存储器位置)

条件码

CF(进位标志) ZF(零标志) SF(符号标志) OF(溢出标志)

函数栈帧

push——把ebp压入栈中
movebp,esp:ebp=esp——
sub esp,xxx——在栈上分配XXX字节的临时空间
push xxx——如果有必要,保存名为XXX的寄存器
pop xxx——如有必要,恢复保存过的寄存器
movesp ,ebp——恢复esp同时回收局部变量空间
ret——从栈取得返回地址,并跳转到该位置。

指令:
call Label 过程调用
call *Operand过程调用
leave为返回准备栈
ret从过程调用中返回

参考文献:
教材《深入理解计算机系统》
程序的机器级表示PPT

程序的转换与机器级表示

posted @ 2019-10-13 19:33  20175206ldc  阅读(238)  评论(0编辑  收藏  举报