寄存器
8个8位通用寄存器
8个16位通用寄存器
8个32位通用寄存器
标志寄存器
控制标志
状态标志
OF CF ZF SF PF AF
OF 规律:
正数+正数==负数 OF = 1
负数+负数==正数 OF = 1
正数+负数 OF = 0
OF 置位方法
如果最高有效位产生了进位或借位
CF = 1
次高位向最高有效位有进位
TMP = 1
OF = CF ^ TMP

分段机制
物理地址= 段地址0x10+段内偏移
段寄存器
ES、CS、SS、DS、FS、GS
MOV指令
规则:
DEST: R\m\Sreg
Src: R\Imm\m\Sreg
这两个操作数不能同时为内存
OD快捷键
单步步入
单步步过
运行
跳转到指定位置 Ctrl+G
汇编窗口中使用空格 修改汇编指令
注释 ;分号
数据传送指令(不影响EFLAGS)
堆栈操作: PUSH POP PUSHAD POPAD
数据扩展指令: MOVSX(符号位扩展)
MOVZX(零扩展)
取址指令:LEA r=后边表达式的结果
LEA EAX,DWORD PTR DS:[0x12345678] EAX = 0x12345678
MOV EAX,DWORD PTR DS:[0x12345678] EAX = [0x12345678] 地址里的内容
交换指令:XCHG
XCHG EAX,EAX = NOP
二进制算术运算
加 ADD
减 SUB
自增 INC ;不影响CF
自减 DEC ;不影响CF
乘 IMUL(重点)MUL
IMUL 一个操作数 AX=SRC
AL/DX:AX=SRCAX/EDX:EAX=SRCEAX
两个操作数 DEST=DESTSRC
三个操作数 DEST = SRC1(r/m)
SRC2(imm)
除 IDIV DIV
二进制逻辑位移
逻辑左移 SHL CF <- MSB MLB <- 0
逻辑右移 SHR
二进制逻辑位操作
按位与 AND CF/OF=0 其它根据结果设置
按位或 OR CF/OF=0 其它根据结果设置
按位异或 XOR CF/OF=0 其它根据结果设置
按位取反 NOT 不影响EFLAGS
流程控制指令 CMP + Jcc
分支
if-else if-else
JGE/JAE 是不比较ZF的
switch-case
循环
for(3)
while(2)
do-while(1)
函数
指令 PUSH POP CALL RET
PUSH: SUB ESP,4; MOV [ESP],XXX
POP (EAX): MOV EAX,[ESP];ADD ESP,4;
CALL: PUSH nextEIP;JMP DEST
RET: pop eip;jmp eip
RET (8)imm: pop eip;jmp eip;esp+=8
堆栈图
EBP-4 LOCAL
EBP 上一层栈的EBP
EBP+4 返回地址
EBP+8 第一个参数
EBP+C 第二个参数
开辟栈帧指令
PUSH EBP;
MOV EBP,ESP;
SUB ESP,XXX;
相当于 ENTER XXX,0
MOV ESP,EBP;
POP EBP
相当于 LEAVE
串操作指令
memset
STOS: 用AL/AX/EAX填充ES:[EDI]CL/CX/ECX次
REP STOS
memecpy
MOVS: DS:[ESI]->ES:[EDI] CL/CX/ECX次 ESI+1/2/4/8 EDI+1/2/4/8
REP MOVS(B/W/D/Q)
strlen
SCAS: AL/AX/EAX/ - es:[edi]
REPNE SCAS: 找一个指定的数字
repe scas
strcmp
CMPS: DS:[ESI]-ES:[EDI]
REPNE cmps
repe cmps
堆栈平衡

函数调用约定
__cdecl 外平栈(调用者平衡),从右向左,PUSH 入栈
__stdcall 内平栈(被调用者平衡),从右向左,PUSH 入栈
__fastcall 内平栈,前两个参数ECX,EDX传参,其余,从右向左,PUSH 入栈
__thiscall 不能直接显示调用,this指针使用ECX,其余,从右向左,PUSH 入栈 内平栈(被调用者平衡),从右向左,PUSH

常见指令编码:
E8 CALL
E9 JMP
404F INC r DEC r
50
5F PUSH r POP r
707f + Ib系列 jcc short JMP
0f80
0f8f Id 系列 JCC near jmp
前缀
F0 LOCK
F2 REPNE
F3 REP
26 ES
2e CS
36 SS
3e DS
64 FS
65 GS
66 修改操作数大小
67 切换寻址模式内存地址大小
内联汇编
__asm{}
插入字节码
__emit(0xE9);插入一个JMP指令
裸函数
__declspec(naked)