逆向工程核心原理第一—-十二章笔记
部分基础汇编指令的运用,以及寄存器类型;
如:8086汇编段寄存器:
CS:代码段寄存器(CPU执行命令仅从CS:IP指向的内容开始执行,到该内容截止。且CPU提供转义指令来修改CS、IP的内容)
SS:栈段寄存器
DS:数据段寄存器
ES:附加数据寄存器
FS:段寄存器
GS:段寄存器(FS,GS是80386起增加的两个辅助段寄存器,在这之前只有一个辅助段寄存器ES,增加这两个寄存器是为了减轻ES寄存器的负担,并能更好地配合适用于通用寄存器组的基址和变址寄存器.
这两个是通用的段寄存器,语法上同其它的段寄存器一样,不能直接用立即数给它赋值。)更详细的段寄存器知识取自以下网址 段寄存器
附上偏移地址的概念图
IP寄存器拓展:
EIP指针指令寄存器:保存着CPU要执行的指令地址,由IP寄存器拓展的EIP是不能直接修改的程序运行时CPU读EIP中的一条指令的地址,EIP寄存器的值自己增加,CPU每次执行完一条指令,就会通过EIP寄存器读取并执行下一条指令。
- Ollydbg的部分使用方法
- 大/小端序标记法。(字符串被保存在一个字符数组中时,无论采用哪种标记法,存储顺序都相同。)
数据的低位存储在低地址位,数据的高位存储在高地址位,小端字节序称为LSB
数据的低位存储在高地址位,数据的高位存储在低地址位,大端字节序称为MSB
反之则为大端序。
EFLAGS(32位)是由FLAGS(16位)扩展来的。
每位值都有意义。
初级阶段掌握 ZF(零标志)、OF(溢出标志)、CF(进位标志)即可。
ZF 运算结果0或1,True或False
OF 有符号整数溢出时,OF为1。MSB改变时,其值也为1。
CF 无符号整数溢出时,CF为1。
Tip
Jcc(条件跳转)指令要检查这3个标志的值(只要是条件跳转指令,都要检查这个值,来决定如何跳转。),并根据 其值决定是否执行某个动作。(以这点为核心的题目为攻防世界中RE的simple-check。)
栈–一种数据结构,其存储数据的规则为–先进(PUSH)后出(POP)
具体理解参考如下文章顺序栈基本操作(入栈和出栈)C语言详解
栈帧:
首先,在程序运行时,ESP寄存器的值是随时变化的;所以,调用某函数时,先把用作基准点(函数起始地址)的ESP值保存到EBP(栈帧指针),并维持在函数内部。这样,EBP的值能够安全访问到相关函数的局部变量、参数,返回地址,这就是EBP寄存器作为栈帧指针的作用。
栈帧—是利用EBP寄存器访问栈内局部变量、参数、函数返回地址等的手段。