0%

逆向工程核心原理第1-12章学习笔记

逆向工程核心原理第一—-十二章笔记

部分基础汇编指令的运用,以及寄存器类型;
如:8086汇编段寄存器:

CS:代码段寄存器(CPU执行命令仅从CS:IP指向的内容开始执行,到该内容截止。且CPU提供转义指令来修改CS、IP的内容)
SS:栈段寄存器
DS:数据段寄存器
ES:附加数据寄存器
FS:段寄存器
GS:段寄存器(FS,GS是80386起增加的两个辅助段寄存器,在这之前只有一个辅助段寄存器ES,增加这两个寄存器是为了减轻ES寄存器的负担,并能更好地配合适用于通用寄存器组的基址和变址寄存器.
这两个是通用的段寄存器,语法上同其它的段寄存器一样,不能直接用立即数给它赋值。)

更详细的段寄存器知识取自以下网址 段寄存器

image-20211207162249072

附上偏移地址的概念图

各种寄存器的简略介绍

image-20211207184336279

IP寄存器拓展:

EIP指针指令寄存器:保存着CPU要执行的指令地址,由IP寄存器拓展的EIP是不能直接修改的程序运行时CPU读EIP中的一条指令的地址,EIP寄存器的值自己增加,CPU每次执行完一条指令,就会通过EIP寄存器读取并执行下一条指令。

  • Ollydbg的部分使用方法
  • 大/小端序标记法。(字符串被保存在一个字符数组中时,无论采用哪种标记法,存储顺序都相同。)
    image-20211207170855768数据的低位存储在低地址位,数据的高位存储在高地址位,小端字节序称为LSB

数据的低位存储在高地址位,数据的高位存储在低地址位,大端字节序称为MSB

判断大小端序的方法

image-20211207183813150

 反之则为大端序。

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)

image-20211207185955041

image-20211207192440502

具体理解参考如下文章顺序栈基本操作(入栈和出栈)C语言详解

栈帧:

首先,在程序运行时,ESP寄存器的值是随时变化的;所以,调用某函数时,先把用作基准点(函数起始地址)的ESP值保存到EBP(栈帧指针),并维持在函数内部。这样,EBP的值能够安全访问到相关函数的局部变量、参数,返回地址,这就是EBP寄存器作为栈帧指针的作用。

栈帧—是利用EBP寄存器访问栈内局部变量、参数、函数返回地址等的手段。

image-20211207192332394