硬编码

定长指令:
50-57 PUSH EAX--PUSH EDI
58-5F POP EAX -- POP EDI

40-47 INC EAX -- INC EDI
48-4F DEC EAX -- DEC EDI

B0 XX--B3 XX   MOV AL,XX ---MOV BL,XX
B4 XX--B7 XX   MOV AH,XX---MOV BH,XX

B8 XXXXXXXX--BF XXXXXXXX  MOV EAX,XX---MOV EDI,XX

91-97  XCHG EAX,ECX ---- XCHG EAX,EDI

90 NOP

70-7F  条件跳转 共两个字节 后跟一个字节立即数的偏移Ib(有符号)
如果条件成立 跳转到   当前指令地址+当前指令长度+Ib
最大值:向前跳7F 向后跳80

0F 80--0F 8F 条件跳转 共五个字节 后跟一个四个字节立即数的偏移Id(有符号)
如果条件成立 跳转到   当前指令地址+当前指令长度+Id
最大值:向前跳7FFFFFFF 向后跳80000000

0xE0 LOOPNE/LOOPNZ Ib(Jb)
0xE1 LOOPE/LOOPZ Ib(Jb)
0xE2 LOOP  Ib(Jb)  只看ECX
0xE3 JrCXZ Ib(Jb)
0xE8 CALL Id(Jd)
0xE9 JMP Id(Jd)

8个段寄存器: ES CS SS DS FS GS LDTR TR (顺序固定)
(段寄存器实际是个结构体,共96位,其中仅16位是汇编指令可以访问到的)
16位汇编中为了寻址  32位 为了权限控制

0xEA JMP Ap (Ap:六字节长度的直接地址) 共7字节
JMP CS:Id  将Ap中的高2位赋值给CS,低4位直接赋值给EIP, 即跳转

004183D7 >    EA 12345678 1B00     JMP FAR 001B:78563412

0xEB JMP Ib (Jb)
跳转到 当前指令地址 + 当前指令长度 + Ib

0xC3 RET 共1字节
EIP出栈 POP EIP

0xC2 RET Iw 共3字节
EIP出栈后,ESP = ESP + Iw

0XCB RETF (return far) 共1字节
出栈8个字节,低4个字节赋值给EIP,高4个字节中低2位赋值给CS

0xCA RETF Iw 共3字节
出栈8个字节,低4个字节赋值给EIP,高4个字节中低2位赋值给CS后,ESP = ESP + Iw


ret  -> pop eip
retf -> pop eip, pop cs

变长指令:

88 MOV Eb,Gb    G:通用寄存器
89  MOV Ev,Gv    E:寄存器、内存
8A  MOV Gb,Eb   b:字节
8B   MOV Gv,Ev   v:word ,dword qword

内存操作对象,后面跟一个字节的ModR/M 8位
TABLE 2-2
67 Mod 11位寄存器 00 01 10 是内存
345 Reg/Opcode 决定G
12 R/M   100(无意义)    101(立即数(四字节)) 特殊

88 01   00 000 001 MOV  byte ptr ds:[ECX], AL
89 01   00 000 001 MOV  dwprd ptr ds:[ECX],EAX
88 82  (立即数)32位偏移  10 000 010 MOV  byte ptr ds:[edx+(立即数)32位偏移],AL

R/M = 100  后面跟一个字节SIB
TABLE 2-3
88 84(4或C结尾含有SIB) (48)SIB (立即数)32位偏移    10 000 100 MOV byte ptr ds:[EAX+ECX*2 +(立即数)32位偏移], AL
01 001 000
67位代表Scale: 2的多少次方  1 2 4  8
345位代表 Index 代表8个通用寄存器
12位代表 Base 代表8个通用寄存器

none 代表不需要添加

80 65 08 FF
查表步骤:
1第一个字节为80  查 Table A-2 表,得到对应结构Eb,Ib
2.第二个字节为ModR/M,所以拆分 65
01 100 101
Mod 与R/M 字段 查Table2-2 得到对应的结构:[EBP+DIS8]
3. 100 字段 查找TableA-6 得到对应的操作码:AND
4.最终指令:
AND [ebp+dis8],Ib
AND byte ptr SS:[EBP+08],0xFF

说明 TAble A-2  i64 64位下无效 o64 64仅在64位下有效 d64 在64位下 以64位的长度运行
主表 TAble A-2

0F 80 2个字节的opcode

指令前缀:
1.段前缀
默认前缀 DS:[]
EBP ESP 前缀SS
EDI默认前缀ES
EIP 前缀 CS

2e-CS
36 -SS
3e-DS
26- ES
64-FS
65-GS
2.操作指令前缀,修改地址默认长度
50 PUSH EAX
66:50 PUSH AX
3.操作指令前缀,修改默认寻址方式
8801 MOV BYTE PTR DS:[ECX],AL
67:8801 MOV BYTE PTR DS:[BX+DI],AL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值