📄 disasm.cpp
字号:
};
const CDetourDis::COPYENTRY CDetourDis::s_rceCopyTable0F[257] =
{
{ 0x00, ENTRY_CopyBytes2Mod }, // LLDT/2, etc.
{ 0x01, ENTRY_CopyBytes2Mod }, // INVLPG/7, etc.
{ 0x02, ENTRY_CopyBytes2Mod }, // LAR/r
{ 0x03, ENTRY_CopyBytes2Mod }, // LSL/r
{ 0x04, ENTRY_Invalid }, // _04
{ 0x05, ENTRY_Invalid }, // _05
{ 0x06, ENTRY_CopyBytes2 }, // CLTS
{ 0x07, ENTRY_Invalid }, // _07
{ 0x08, ENTRY_CopyBytes2 }, // INVD
{ 0x09, ENTRY_CopyBytes2 }, // WBINVD
{ 0x0A, ENTRY_Invalid }, // _0A
{ 0x0B, ENTRY_CopyBytes2 }, // UD2
{ 0x0C, ENTRY_Invalid }, // _0C
{ 0x0D, ENTRY_Invalid }, // _0D
{ 0x0E, ENTRY_Invalid }, // _0E
{ 0x0F, ENTRY_Invalid }, // _0F
{ 0x10, ENTRY_Invalid }, // _10
{ 0x11, ENTRY_Invalid }, // _11
{ 0x12, ENTRY_Invalid }, // _12
{ 0x13, ENTRY_Invalid }, // _13
{ 0x14, ENTRY_Invalid }, // _14
{ 0x15, ENTRY_Invalid }, // _15
{ 0x16, ENTRY_Invalid }, // _16
{ 0x17, ENTRY_Invalid }, // _17
{ 0x18, ENTRY_Invalid }, // _18
{ 0x19, ENTRY_Invalid }, // _19
{ 0x1A, ENTRY_Invalid }, // _1A
{ 0x1B, ENTRY_Invalid }, // _1B
{ 0x1C, ENTRY_Invalid }, // _1C
{ 0x1D, ENTRY_Invalid }, // _1D
{ 0x1E, ENTRY_Invalid }, // _1E
{ 0x1F, ENTRY_Invalid }, // _1F
{ 0x20, ENTRY_CopyBytes2Mod }, // MOV/r
{ 0x21, ENTRY_CopyBytes2Mod }, // MOV/r
{ 0x22, ENTRY_CopyBytes2Mod }, // MOV/r
{ 0x23, ENTRY_CopyBytes2Mod }, // MOV/r
{ 0x24, ENTRY_Invalid }, // _24
{ 0x25, ENTRY_Invalid }, // _25
{ 0x26, ENTRY_Invalid }, // _26
{ 0x27, ENTRY_Invalid }, // _27
{ 0x28, ENTRY_Invalid }, // _28
{ 0x29, ENTRY_Invalid }, // _29
{ 0x2A, ENTRY_Invalid }, // _2A
{ 0x2B, ENTRY_Invalid }, // _2B
{ 0x2C, ENTRY_Invalid }, // _2C
{ 0x2D, ENTRY_Invalid }, // _2D
{ 0x2E, ENTRY_Invalid }, // _2E
{ 0x2F, ENTRY_Invalid }, // _2F
{ 0x30, ENTRY_CopyBytes2 }, // WRMSR
{ 0x31, ENTRY_CopyBytes2 }, // RDTSC
{ 0x32, ENTRY_CopyBytes2 }, // RDMSR
{ 0x33, ENTRY_CopyBytes2 }, // RDPMC
{ 0x34, ENTRY_CopyBytes2 }, // SYSENTER
{ 0x35, ENTRY_CopyBytes2 }, // SYSEXIT
{ 0x36, ENTRY_Invalid }, // _36
{ 0x37, ENTRY_Invalid }, // _37
{ 0x38, ENTRY_Invalid }, // _38
{ 0x39, ENTRY_Invalid }, // _39
{ 0x3A, ENTRY_Invalid }, // _3A
{ 0x3B, ENTRY_Invalid }, // _3B
{ 0x3C, ENTRY_Invalid }, // _3C
{ 0x3D, ENTRY_Invalid }, // _3D
{ 0x3E, ENTRY_Invalid }, // _3E
{ 0x3F, ENTRY_Invalid }, // _3F
{ 0x40, ENTRY_CopyBytes2Mod }, // CMOVO (0F 40)
{ 0x41, ENTRY_CopyBytes2Mod }, // CMOVNO (0F 41)
{ 0x42, ENTRY_CopyBytes2Mod }, // CMOVB & CMOVNE (0F 42)
{ 0x43, ENTRY_CopyBytes2Mod }, // CMOVAE & CMOVNB (0F 43)
{ 0x44, ENTRY_CopyBytes2Mod }, // CMOVE & CMOVZ (0F 44)
{ 0x45, ENTRY_CopyBytes2Mod }, // CMOVNE & CMOVNZ (0F 45)
{ 0x46, ENTRY_CopyBytes2Mod }, // CMOVBE & CMOVNA (0F 46)
{ 0x47, ENTRY_CopyBytes2Mod }, // CMOVA & CMOVNBE (0F 47)
{ 0x48, ENTRY_CopyBytes2Mod }, // CMOVS (0F 48)
{ 0x49, ENTRY_CopyBytes2Mod }, // CMOVNS (0F 49)
{ 0x4A, ENTRY_CopyBytes2Mod }, // CMOVP & CMOVPE (0F 4A)
{ 0x4B, ENTRY_CopyBytes2Mod }, // CMOVNP & CMOVPO (0F 4B)
{ 0x4C, ENTRY_CopyBytes2Mod }, // CMOVL & CMOVNGE (0F 4C)
{ 0x4D, ENTRY_CopyBytes2Mod }, // CMOVGE & CMOVNL (0F 4D)
{ 0x4E, ENTRY_CopyBytes2Mod }, // CMOVLE & CMOVNG (0F 4E)
{ 0x4F, ENTRY_CopyBytes2Mod }, // CMOVG & CMOVNLE (0F 4F)
{ 0x50, ENTRY_Invalid }, // _50
{ 0x51, ENTRY_Invalid }, // _51
{ 0x52, ENTRY_Invalid }, // _52
{ 0x53, ENTRY_Invalid }, // _53
{ 0x54, ENTRY_Invalid }, // _54
{ 0x55, ENTRY_Invalid }, // _55
{ 0x56, ENTRY_Invalid }, // _56
{ 0x57, ENTRY_Invalid }, // _57
{ 0x58, ENTRY_Invalid }, // _58
{ 0x59, ENTRY_Invalid }, // _59
{ 0x5A, ENTRY_Invalid }, // _5A
{ 0x5B, ENTRY_Invalid }, // _5B
{ 0x5C, ENTRY_Invalid }, // _5C
{ 0x5D, ENTRY_Invalid }, // _5D
{ 0x5E, ENTRY_Invalid }, // _5E
{ 0x5F, ENTRY_Invalid }, // _5F
{ 0x60, ENTRY_CopyBytes2Mod }, // PUNPCKLBW/r
{ 0x61, ENTRY_Invalid }, // _61
{ 0x62, ENTRY_CopyBytes2Mod }, // PUNPCKLWD/r
{ 0x63, ENTRY_CopyBytes2Mod }, // PACKSSWB/r
{ 0x64, ENTRY_CopyBytes2Mod }, // PCMPGTB/r
{ 0x65, ENTRY_CopyBytes2Mod }, // PCMPGTW/r
{ 0x66, ENTRY_CopyBytes2Mod }, // PCMPGTD/r
{ 0x67, ENTRY_CopyBytes2Mod }, // PACKUSWB/r
{ 0x68, ENTRY_CopyBytes2Mod }, // PUNPCKHBW/r
{ 0x69, ENTRY_CopyBytes2Mod }, // PUNPCKHWD/r
{ 0x6A, ENTRY_CopyBytes2Mod }, // PUNPCKHDQ/r
{ 0x6B, ENTRY_CopyBytes2Mod }, // PACKSSDW/r
{ 0x6C, ENTRY_Invalid }, // _6C
{ 0x6D, ENTRY_Invalid }, // _6D
{ 0x6E, ENTRY_CopyBytes2Mod }, // MOVD/r
{ 0x6F, ENTRY_CopyBytes2Mod }, // MOV/r
{ 0x70, ENTRY_Invalid }, // _70
{ 0x71, ENTRY_CopyBytes2Mod1 }, // PSLLW/6 ib,PSRAW/4 ib,PSRLW/2 ib
{ 0x72, ENTRY_CopyBytes2Mod1 }, // PSLLD/6 ib,PSRAD/4 ib,PSRLD/2 ib
{ 0x73, ENTRY_CopyBytes2Mod1 }, // PSLLQ/6 ib,PSRLQ/2 ib
{ 0x74, ENTRY_CopyBytes2Mod }, // PCMPEQB/r
{ 0x75, ENTRY_CopyBytes2Mod }, // PCMPEQW/r
{ 0x76, ENTRY_CopyBytes2Mod }, // PCMPEQD/r
{ 0x77, ENTRY_CopyBytes2 }, // EMMS
{ 0x78, ENTRY_Invalid }, // _78
{ 0x79, ENTRY_Invalid }, // _79
{ 0x7A, ENTRY_Invalid }, // _7A
{ 0x7B, ENTRY_Invalid }, // _7B
{ 0x7C, ENTRY_Invalid }, // _7C
{ 0x7D, ENTRY_Invalid }, // _7D
{ 0x7E, ENTRY_CopyBytes2Mod }, // MOVD/r
{ 0x7F, ENTRY_CopyBytes2Mod }, // MOV/r
{ 0x80, ENTRY_CopyBytes3Or5Target }, // JO
{ 0x81, ENTRY_CopyBytes3Or5Target }, // JNO
{ 0x82, ENTRY_CopyBytes3Or5Target }, // JB,JC,JNAE
{ 0x83, ENTRY_CopyBytes3Or5Target }, // JAE,JNB,JNC
{ 0x84, ENTRY_CopyBytes3Or5Target }, // JE,JZ,JZ
{ 0x85, ENTRY_CopyBytes3Or5Target }, // JNE,JNZ
{ 0x86, ENTRY_CopyBytes3Or5Target }, // JBE,JNA
{ 0x87, ENTRY_CopyBytes3Or5Target }, // JA,JNBE
{ 0x88, ENTRY_CopyBytes3Or5Target }, // JS
{ 0x89, ENTRY_CopyBytes3Or5Target }, // JNS
{ 0x8A, ENTRY_CopyBytes3Or5Target }, // JP,JPE
{ 0x8B, ENTRY_CopyBytes3Or5Target }, // JNP,JPO
{ 0x8C, ENTRY_CopyBytes3Or5Target }, // JL,NGE
{ 0x8D, ENTRY_CopyBytes3Or5Target }, // JGE,JNL
{ 0x8E, ENTRY_CopyBytes3Or5Target }, // JLE,JNG
{ 0x8F, ENTRY_CopyBytes3Or5Target }, // JG,JNLE
{ 0x90, ENTRY_CopyBytes2Mod }, // CMOVO (0F 40)
{ 0x91, ENTRY_CopyBytes2Mod }, // CMOVNO (0F 41)
{ 0x92, ENTRY_CopyBytes2Mod }, // CMOVB & CMOVC & CMOVNAE (0F 42)
{ 0x93, ENTRY_CopyBytes2Mod }, // CMOVAE & CMOVNB & CMOVNC (0F 43)
{ 0x94, ENTRY_CopyBytes2Mod }, // CMOVE & CMOVZ (0F 44)
{ 0x95, ENTRY_CopyBytes2Mod }, // CMOVNE & CMOVNZ (0F 45)
{ 0x96, ENTRY_CopyBytes2Mod }, // CMOVBE & CMOVNA (0F 46)
{ 0x97, ENTRY_CopyBytes2Mod }, // CMOVA & CMOVNBE (0F 47)
{ 0x98, ENTRY_CopyBytes2Mod }, // CMOVS (0F 48)
{ 0x99, ENTRY_CopyBytes2Mod }, // CMOVNS (0F 49)
{ 0x9A, ENTRY_CopyBytes2Mod }, // CMOVP & CMOVPE (0F 4A)
{ 0x9B, ENTRY_CopyBytes2Mod }, // CMOVNP & CMOVPO (0F 4B)
{ 0x9C, ENTRY_CopyBytes2Mod }, // CMOVL & CMOVNGE (0F 4C)
{ 0x9D, ENTRY_CopyBytes2Mod }, // CMOVGE & CMOVNL (0F 4D)
{ 0x9E, ENTRY_CopyBytes2Mod }, // CMOVLE & CMOVNG (0F 4E)
{ 0x9F, ENTRY_CopyBytes2Mod }, // CMOVG & CMOVNLE (0F 4F)
{ 0xA0, ENTRY_CopyBytes2 }, // PUSH
{ 0xA1, ENTRY_CopyBytes2 }, // POP
{ 0xA2, ENTRY_CopyBytes2 }, // CPUID
{ 0xA3, ENTRY_CopyBytes2Mod }, // BT (0F A3)
{ 0xA4, ENTRY_CopyBytes2Mod1 }, // SHLD
{ 0xA5, ENTRY_CopyBytes2Mod }, // SHLD
{ 0xA6, ENTRY_Invalid }, // _A6
{ 0xA7, ENTRY_Invalid }, // _A7
{ 0xA8, ENTRY_CopyBytes2 }, // PUSH
{ 0xA9, ENTRY_CopyBytes2 }, // POP
{ 0xAA, ENTRY_CopyBytes2 }, // RSM
{ 0xAB, ENTRY_CopyBytes2Mod }, // BTS (0F AB)
{ 0xAC, ENTRY_CopyBytes2Mod1 }, // SHRD
{ 0xAD, ENTRY_CopyBytes2Mod }, // SHRD
{ 0xAE, ENTRY_CopyBytes2Mod }, // FXRSTOR/1,FXSAVE/0
{ 0xAF, ENTRY_CopyBytes2Mod }, // IMUL (0F AF)
{ 0xB0, ENTRY_CopyBytes2Mod }, // CMPXCHG (0F B0)
{ 0xB1, ENTRY_CopyBytes2Mod }, // CMPXCHG (0F B1)
{ 0xB2, ENTRY_CopyBytes2Mod }, // LSS/r
{ 0xB3, ENTRY_CopyBytes2Mod }, // BTR (0F B3)
{ 0xB4, ENTRY_CopyBytes2Mod }, // LFS/r
{ 0xB5, ENTRY_CopyBytes2Mod }, // LGS/r
{ 0xB6, ENTRY_CopyBytes2Mod }, // MOVZX/r
{ 0xB7, ENTRY_CopyBytes2Mod }, // MOVZX/r
{ 0xB8, ENTRY_Invalid }, // _B8
{ 0xB9, ENTRY_Invalid }, // _B9
{ 0xBA, ENTRY_CopyBytes2Mod1 }, // BT & BTC & BTR & BTS (0F BA)
{ 0xBB, ENTRY_CopyBytes2Mod }, // BTC (0F BB)
{ 0xBC, ENTRY_CopyBytes2Mod }, // BSF (0F BC)
{ 0xBD, ENTRY_CopyBytes2Mod }, // BSR (0F BD)
{ 0xBE, ENTRY_CopyBytes2Mod }, // MOVSX/r
{ 0xBF, ENTRY_CopyBytes2Mod }, // MOVSX/r
{ 0xC0, ENTRY_CopyBytes2Mod }, // XADD/r
{ 0xC1, ENTRY_CopyBytes2Mod }, // XADD/r
{ 0xC2, ENTRY_Invalid }, // _C2
{ 0xC3, ENTRY_Invalid }, // _C3
{ 0xC4, ENTRY_Invalid }, // _C4
{ 0xC5, ENTRY_Invalid }, // _C5
{ 0xC6, ENTRY_Invalid }, // _C6
{ 0xC7, ENTRY_CopyBytes2Mod }, // CMPXCHG8B (0F C7)
{ 0xC8, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xC9, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xCA, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xCB, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xCC, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xCD, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xCE, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xCF, ENTRY_CopyBytes2 }, // BSWAP 0F C8 + rd
{ 0xD0, ENTRY_Invalid }, // _D0
{ 0xD1, ENTRY_CopyBytes2Mod }, // PSRLW/r
{ 0xD2, ENTRY_CopyBytes2Mod }, // PSRLD/r
{ 0xD3, ENTRY_CopyBytes2Mod }, // PSRLQ/r
{ 0xD4, ENTRY_Invalid }, // _D4
{ 0xD5, ENTRY_CopyBytes2Mod }, // PMULLW/r
{ 0xD6, ENTRY_Invalid }, // _D6
{ 0xD7, ENTRY_Invalid }, // _D7
{ 0xD8, ENTRY_CopyBytes2Mod }, // PSUBUSB/r
{ 0xD9, ENTRY_CopyBytes2Mod }, // PSUBUSW/r
{ 0xDA, ENTRY_Invalid }, // _DA
{ 0xDB, ENTRY_CopyBytes2Mod }, // PAND/r
{ 0xDC, ENTRY_CopyBytes2Mod }, // PADDUSB/r
{ 0xDD, ENTRY_CopyBytes2Mod }, // PADDUSW/r
{ 0xDE, ENTRY_Invalid }, // _DE
{ 0xDF, ENTRY_CopyBytes2Mod }, // PANDN/r
{ 0xE0, ENTRY_Invalid }, // _E0
{ 0xE1, ENTRY_CopyBytes2Mod }, // PSRAW/r
{ 0xE2, ENTRY_CopyBytes2Mod }, // PSRAD/r
{ 0xE3, ENTRY_Invalid }, // _E3
{ 0xE4, ENTRY_Invalid }, // _E4
{ 0xE5, ENTRY_CopyBytes2Mod }, // PMULHW/r
{ 0xE6, ENTRY_Invalid }, // _E6
{ 0xE7, ENTRY_Invalid }, // _E7
{ 0xE8, ENTRY_CopyBytes2Mod }, // PSUBB/r
{ 0xE9, ENTRY_CopyBytes2Mod }, // PSUBW/r
{ 0xEA, ENTRY_Invalid }, // _EA
{ 0xEB, ENTRY_CopyBytes2Mod }, // POR/r
{ 0xEC, ENTRY_CopyBytes2Mod }, // PADDSB/r
{ 0xED, ENTRY_CopyBytes2Mod }, // PADDSW/r
{ 0xEE, ENTRY_Invalid }, // _EE
{ 0xEF, ENTRY_CopyBytes2Mod }, // PXOR/r
{ 0xF0, ENTRY_Invalid }, // _F0
{ 0xF1, ENTRY_CopyBytes2Mod }, // PSLLW/r
{ 0xF2, ENTRY_CopyBytes2Mod }, // PSLLD/r
{ 0xF3, ENTRY_CopyBytes2Mod }, // PSLLQ/r
{ 0xF4, ENTRY_Invalid }, // _F4
{ 0xF5, ENTRY_CopyBytes2Mod }, // PMADDWD/r
{ 0xF6, ENTRY_Invalid }, // _F6
{ 0xF7, ENTRY_Invalid }, // _F7
{ 0xF8, ENTRY_CopyBytes2Mod }, // PSUBB/r
{ 0xF9, ENTRY_CopyBytes2Mod }, // PSUBW/r
{ 0xFA, ENTRY_CopyBytes2Mod }, // PSUBD/r
{ 0xFB, ENTRY_Invalid }, // _FB
{ 0xFC, ENTRY_CopyBytes2Mod }, // PADDB/r
{ 0xFD, ENTRY_CopyBytes2Mod }, // PADDW/r
{ 0xFE, ENTRY_CopyBytes2Mod }, // PADDD/r
{ 0xFF, ENTRY_Invalid }, // _FF
{ 0, ENTRY_End },
};
BOOL CDetourDis::SanityCheckSystem()
{
for (ULONG n = 0; n < 256; n++) {
REFCOPYENTRY pEntry = &s_rceCopyTable[n];
if (n != pEntry->nOpcode) {
ASSERT(n == pEntry->nOpcode);
return FALSE;
}
}
if (s_rceCopyTable[256].pfCopy != NULL) {
ASSERT(!"Missing end marker.");
return FALSE;
}
for (n = 0; n < 256; n++) {
REFCOPYENTRY pEntry = &s_rceCopyTable0F[n];
if (n != pEntry->nOpcode) {
ASSERT(n == pEntry->nOpcode);
return FALSE;
}
}
if (s_rceCopyTable0F[256].pfCopy != NULL) {
ASSERT(!"Missing end marker.");
return FALSE;
}
return TRUE;
}
//
///////////////////////////////////////////////////////////////// End of File.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -