Ox00 前言


Ox10 硬件基础

  • 通用寄存器
    • 8位
      • al, ah , bl, bh , cl , ch , dl ,dh
    • 16位
      • ax,cx,dx, bx, si, bi , sp ,bp
    • 32位
      • eax,ecx,edx,ebx,esi, ebi , esp ,ebp
    • 64位
      • rax,rcx,rdx, rbx, rsi, rbi , rsp ,rbp, r8,r9,r10,r11,r12,r13,r14,r15
  • 段寄存器
    • cs , ds, es, ss , fs ,gs
  • 标志寄存器
    • elags
      • ZF - 零标志位
      • SF - 符号标志位
      • OF - 溢出标志位
      • CF - 进位标志位
      • AF - 辅助进位标志位
      • PF - 奇偶标志位
      • DF - 方向标志位
      • IF - 中断允许标志位
      • TF - 陷阱标志位
  • 指针寄存器
    • eip

Ox20 指令基础

  • 数据传送指令
    • mov
    • xchg
    • lea
    • push
    • pop
  • 算术运算指令
    • inc
    • dec
    • add
    • sub
    • imul/mul
    • idiv/div
  • 位操作指令
    • shl
    • shr
    • and
    • or
    • not
  • 串操作指令
    • movs
    • lods
    • stos
    • cmps
  • 条件跳转指令
    • jl
    • jg
    • ja
    • jb
  • 控制转移指令
    • call
    • ret
    • jmp

Ox30 程序基础

  • 选择结构
  • 循环结构
  • 函数
    • 函数传参(调用约定)
      • cdecl
        • 参数依次从右往左入栈
        • 调用者平衡栈
      • stdcall
        • 参数依次从右往左入栈
        • 函数内部平衡栈
      • thiscall
        • 使用ecx保存对象首地址(this指针) 参数依次从右往左入栈
        • 函数内部平衡栈
      • fastcall
        • 前两个参数依次使用ecx,edx传递, 后续参数依次从右往左入栈
        • 函数内部平衡栈
      • 64位fastcall
        • 前4个参数依次使用rcx,rdx,r8,r9传递, 后续参数从右往左通过栈传递
        • 函数外部平衡栈
    • 函数栈帧
      • 打开栈帧:  push ebp; mov ebp ,esp
      • 关闭栈帧: mov esp,ebp ; pop ebp
      • 定位参数
        • 打开栈帧之后, ebp+8以上是形参
      • 定位局部变量
        • 打开栈帧之后, ebp-4以上是局部变量
    • 函数返回值(一般通过eax传递)

Ox40 逆向基础