{ codeImgUrl : '', // >= v1.1.5 左侧图片设置,不配置使用 window.cnblogsConfig.blogAvatar aboutHtml : '', // 关于博主,不配置使用默认 copyrightHtml: '', // 版权声明,不配置使用默认 supportHtml : '', // 声援博主,不配置使用默认 }

经典定长指令_修改通用寄存器

一、PUSH/POP(0x5x系列)

0x50  PUSH EAX
0x51  PUSH ECX
0x52  PUSH EDX
0x53  PUSH EBX
0x54  PUSH ESP
0x55  PUSH EBP
0x56  PUSH ESI
0x57  PUSH EDI
0x58  PUSH EAX
0x59  PUSH ECX
0x5A  PUSH EDX
0x5B  PUSH EBX
0x5C  PUSH ESP
0x5D  PUSH EBP
0x5E  PUSH ESI
0x5F  PUSH EDI

顺序一一对应

二、INC/DEC(0x4x系列)

0x40              INC EAX
0x41              INC ECX
0x42              INC EDX
0x43              INC EBX
0x44              INC ESP
0x45              INC EBP
0x46              INC ESI
0x47              INC EDI
0x48              DEC EAX
0x49              DEC ECX
0x4A              DEC EDX
0x4B              DEC EBX
0x4C              DEC ESP
0x4D              DEC EBP
0x4E              DEC ESI
0x4F              DEC EDI

三、MOV Rb,Ib

Opcode有1byte/2byte/3byte,以上是1byte的下面是2byte

定长:Opcode确定了,这行指令的长度就确定了叫定长

I:立即数

b:8Byte

AL:8位寄存器

B0 00    MOV AL,0
B1 00    MOV CL,0
B2 00    MOV DL,0
B3 00    MOV BL,0
B4 00    MOV AH,0
B5 00    MOV CH,0
B6 00    MOV DH,0
B7 00    MOV BH,0

 以下是手册中的具体说明(可点我看上一篇文章)

 四、MOV ERX,Id

 

 

 

 

 I:立即数

v:依赖于是32位模式还是16位模式

32位:EAX/AX

64位:RAX,EAX,AX

r8:64为模式下才有的

B8 000000BB     MOV EAX,BB000000
B9 BC00BD00     MOV ECX,0BD00BC
BA 00BF00FF     MOV EDX,FF00BF00
BB 401D4C00     MOV EBX,VSCodeUs.004C1D40
BC D2556846     MOV ESP,466855D2
BD 4B0064FF     MOV EBP,FF64004B
BE 648922E8     MOV ESI,E8228964
BF 9AFFFFA3     MOV EDI,A3FFFF9A

 

 五、XCHG EAX,ERX

XCHG:交换俩个操作数的内容

91    XCHG EAX,ECX
92    XCHG EAX,EDX
93    XCHG EAX,EBX
94    XCHG EAX,ESP
95    XCHG EAX,EBP
96    XCHG EAX,ESI
97    XCHG EAX,EDI

i64:不支持64位,只支持32位模式下使用

o64:only支持64位模式下使用

d64:默认为64位模式,而且不支持32位的

f64:强制必须64位,硬编码66也无法改变

posted @ 2022-01-09 14:13  Mkd1R  阅读(432)  评论(0)    收藏  举报