1685 lines
65 KiB
C++
1685 lines
65 KiB
C++
#include "ntsdp.hpp"
|
|
|
|
#include "i386_asm.h"
|
|
|
|
PUCHAR X86SearchOpcode(PUCHAR);
|
|
|
|
// type and size table is ordered on enum of operand types
|
|
|
|
OPNDTYPE mapOpndType[] = {
|
|
{ typAX, sizeB }, // opnAL - AL register - byte
|
|
{ typAX, sizeW }, // opnAX - AX register - word
|
|
{ typAX, sizeV }, // opneAX - eAX register - (d)word
|
|
{ typCL, sizeB }, // opnCL - CX register - byte
|
|
{ typDX, sizeW }, // opnDX - DX register - word (DX)
|
|
{ typAbs, sizeV }, // opnAp - absolute pointer (16:16/32)
|
|
{ typExp, sizeB }, // opnEb - expression (mem/reg) - byte
|
|
{ typExp, sizeW }, // opnEw - expression (mem/reg) - word
|
|
{ typExp, sizeV }, // opnEv - expression (mem/reg) - (d)word
|
|
{ typGen, sizeB }, // opnGb - general register - byte
|
|
{ typGen, sizeW }, // opnGw - general register - word
|
|
{ typGen, sizeV }, // opnGv - general register - (d)word
|
|
{ typGen, sizeD }, // opnGd - general register - dword
|
|
{ typIm1, sizeB }, // opnIm1 - immediate - value 1
|
|
{ typIm3, sizeB }, // opnIm3 - immediate - value 3
|
|
{ typImm, sizeB }, // opnIb - immediate - byte
|
|
{ typImm, sizeW }, // opnIw - immediate - word
|
|
{ typImm, sizeV }, // opnIv - immediate - (d)word
|
|
{ typJmp, sizeB }, // opnJb - relative jump - byte
|
|
{ typJmp, sizeV }, // opnJv - relative jump - (d)word
|
|
{ typMem, sizeX }, // opnM - memory pointer - nosize
|
|
{ typMem, sizeA }, // opnMa - memory pointer - (16:16, 32:32)
|
|
{ typMem, sizeB }, // opnMb - memory pointer - byte
|
|
{ typMem, sizeW }, // opnMw - memory pointer - word
|
|
{ typMem, sizeD }, // opnMd - memory pointer - dword
|
|
{ typMem, sizeP }, // opnMp - memory pointer - (d)(f)word
|
|
{ typMem, sizeS }, // opnMs - memory pointer - sword
|
|
{ typMem, sizeQ }, // opnMq - memory pointer - qword
|
|
{ typMem, sizeT }, // opnMt - memory pointer - ten-byte
|
|
{ typMem, sizeV }, // opnMv - memory pointer - (d)word
|
|
{ typCtl, sizeD }, // opnCd - control register - dword
|
|
{ typDbg, sizeD }, // opnDd - debug register - dword
|
|
{ typTrc, sizeD }, // opnTd - trace register - dword
|
|
{ typReg, sizeD }, // opnRd - general register - dword
|
|
{ typSt, sizeT }, // opnSt - floating point top-of-stack
|
|
{ typSti, sizeT }, // opnSti - floating point index-on-stack
|
|
{ typSeg, sizeW }, // opnSeg - segment register - PUSH / POP
|
|
{ typSgr, sizeW }, // opnSw - segment register - MOV
|
|
{ typXsi, sizeB }, // opnXb - string source - byte
|
|
{ typXsi, sizeV }, // opnXv - string source - (d)word
|
|
{ typYdi, sizeB }, // opnYb - string destination - byte
|
|
{ typYdi, sizeV }, // opnYv - string destination - (d)word
|
|
{ typOff, sizeB }, // opnOb - memory offset - byte
|
|
{ typOff, sizeV } // opnOv - memory offset - (d)word
|
|
};
|
|
|
|
UCHAR szAAA[] = {
|
|
'a', 'a', 'a', '\0',
|
|
0x37, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szAAD[] = {
|
|
'a', 'a', 'd', '\0',
|
|
0xd5, as0x0a + tEnd + eEnd };
|
|
|
|
UCHAR szAAM[] = {
|
|
'a', 'a', 'm', '\0',
|
|
0xd4, as0x0a + tEnd + eEnd };
|
|
|
|
UCHAR szAAS[] = {
|
|
'a', 'a', 's', '\0',
|
|
0x3f, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szADC[] = {
|
|
'a', 'd', 'c', '\0',
|
|
0x14, opnAL, opnIb + tEnd,
|
|
0x15, opneAX, opnIv + tEnd,
|
|
0x80, asReg2, opnEb, opnIb + tEnd,
|
|
0x83, asReg2, opnEv, opnIb + tEnd,
|
|
0x81, asReg2, opnEv, opnIv + tEnd,
|
|
0x10, opnEb, opnGb + tEnd,
|
|
0x11, opnEv, opnGv + tEnd,
|
|
0x12, opnGb, opnEb + tEnd,
|
|
0x13, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szADD[] = {
|
|
'a', 'd', 'd', '\0',
|
|
0x04, opnAL, opnIb + tEnd,
|
|
0x05, opneAX, opnIv + tEnd,
|
|
0x80, asReg0, opnEb, opnIb + tEnd,
|
|
0x83, asReg0, opnEv, opnIb + tEnd,
|
|
0x81, asReg0, opnEv, opnIv + tEnd,
|
|
0x00, opnEb, opnGb + tEnd,
|
|
0x01, opnEv, opnGv + tEnd,
|
|
0x02, opnGb, opnEb + tEnd,
|
|
0x03, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szAND[] = {
|
|
'a', 'n', 'd', '\0',
|
|
0x24, opnAL, opnIb + tEnd,
|
|
0x25, opneAX, opnIv + tEnd,
|
|
0x80, asReg4, opnEb, opnIb + tEnd,
|
|
0x83, asReg4, opnEv, opnIb + tEnd,
|
|
0x81, asReg4, opnEv, opnIv + tEnd,
|
|
0x20, opnEb, opnGb + tEnd,
|
|
0x21, opnEv, opnGv + tEnd,
|
|
0x22, opnGb, opnEb + tEnd,
|
|
0x23, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szARPL[] = {
|
|
'a', 'r', 'p', 'l', '\0',
|
|
0x63, opnEw, opnGw + tEnd + eEnd };
|
|
|
|
UCHAR szBOUND[] = {
|
|
'b', 'o', 'u', 'n', 'd', '\0',
|
|
0x62, opnGv, opnMa + tEnd + eEnd };
|
|
|
|
UCHAR szBSF[] = {
|
|
'b', 's', 'f', '\0',
|
|
0x0f, 0xbc, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szBSR[] = {
|
|
'b', 's', 'r', '\0',
|
|
0x0f, 0xbd, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szBSWAP[] = {
|
|
'b', 's', 'w', 'a', 'p', '\0',
|
|
0x0f, 0xc8, asOpRg, opnGd + tEnd + eEnd };
|
|
|
|
UCHAR szBT[] = {
|
|
'b', 't', '\0',
|
|
0x0f, 0xa3, opnEv, opnGv + tEnd,
|
|
0x0f, 0xba, asReg4, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szBTC[] = {
|
|
'b', 't', 'c', '\0',
|
|
0x0f, 0xbb, opnEv, opnGv + tEnd,
|
|
0x0f, 0xba, asReg7, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szBTR[] = {
|
|
'b', 't', 'r', '\0',
|
|
0x0f, 0xb3, opnEv, opnGv + tEnd,
|
|
0x0f, 0xba, asReg6, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szBTS[] = {
|
|
'b', 't', 's', '\0',
|
|
0x0f, 0xab, opnEv, opnGv + tEnd,
|
|
0x0f, 0xba, asReg5, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szCALL[] = {
|
|
'c', 'a', 'l', 'l', '\0',
|
|
0xe8, opnJv + tEnd,
|
|
0xff, asReg2, asMpNx, opnEv + tEnd,
|
|
0xff, asReg3, opnMp + tEnd,
|
|
0x9a, opnAp + tEnd + eEnd };
|
|
|
|
UCHAR szCBW[] = {
|
|
'c', 'b', 'w', '\0',
|
|
0x98, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szCDQ[] = {
|
|
'c', 'd', 'q', '\0',
|
|
0x99, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szCLC[] = {
|
|
'c', 'l', 'c', '\0',
|
|
0xf8, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szCLD[] = {
|
|
'c', 'l', 'd', '\0',
|
|
0xfc, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szCLI[] = {
|
|
'c', 'l', 'i', '\0',
|
|
0xfa, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szCLTS[] = {
|
|
'c', 'l', 't', 's', '\0',
|
|
0x0f, 0x06, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szCMC[] = {
|
|
'c', 'm', 'c', '\0',
|
|
0xf5, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szCMP[] = {
|
|
'c', 'm', 'p', '\0',
|
|
0x3c, opnAL, opnIb + tEnd,
|
|
0x3d, opneAX, opnIv + tEnd,
|
|
0x80, asReg7, opnEb, opnIb + tEnd,
|
|
0x83, asReg7, opnEv, opnIb + tEnd,
|
|
0x81, asReg7, opnEv, opnIv + tEnd,
|
|
0x38, opnEb, opnGb + tEnd,
|
|
0x39, opnEv, opnGv + tEnd,
|
|
0x3a, opnGb, opnEb + tEnd,
|
|
0x3b, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szCMPS[] = {
|
|
'c', 'm', 'p', 's', '\0',
|
|
0xa6, opnXb, opnYb + tEnd,
|
|
0xa7, opnXv, opnYv + tEnd + eEnd };
|
|
|
|
UCHAR szCMPSB[] = {
|
|
'c', 'm', 'p', 's', 'b', '\0',
|
|
0xa6, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szCMPSD[] = {
|
|
'c', 'm', 'p', 's', 'd', '\0',
|
|
0xa7, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szCMPSW[] = {
|
|
'c', 'm', 'p', 's', 'w', '\0',
|
|
0xa7, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szCMPXCHG[] = {
|
|
'c', 'm', 'p', 'x', 'c', 'h', 'g', '\0',
|
|
0x0f, 0xb0, opnEb, opnGb + tEnd,
|
|
0x0f, 0xb1, opnEv, opnGv + tEnd + eEnd };
|
|
|
|
UCHAR szCMPXCHG8B[] = {
|
|
'c', 'm', 'p', 'x', 'c', 'h', 'g', '8', 'b', '\0',
|
|
0x0f, 0xc7, asReg1, opnMq + tEnd + eEnd };
|
|
|
|
UCHAR szCPUID[] = {
|
|
'c', 'p', 'u', 'i', 'd', '\0',
|
|
0x0f, 0xa2, asNone + tEnd + eEnd };
|
|
|
|
|
|
UCHAR szCS[] = {
|
|
'c', 's', ':', '\0',
|
|
0x2e, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szCWD[] = {
|
|
'c', 'w', 'd', '\0',
|
|
0x99, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szCWDE[] = {
|
|
'c', 'w', 'd', 'e', '\0',
|
|
0x98, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szDAA[] = {
|
|
'd', 'a', 'a', '\0',
|
|
0x27, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szDAS[] = {
|
|
'd', 'a', 's', '\0',
|
|
0x2f, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szDEC[] = {
|
|
'd', 'e', 'c', '\0',
|
|
0x48, asOpRg, opnGv + tEnd,
|
|
0xfe, asReg1, opnEb + tEnd,
|
|
0xff, asReg1, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szDIV[] = {
|
|
'd', 'i', 'v', '\0',
|
|
0xf6, asReg6, opnEb + tEnd,
|
|
0xf7, asReg6, opnEv + tEnd,
|
|
0xf6, asReg6, opnAL, opnEb + tEnd,
|
|
0xf7, asReg6, opneAX, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szDS[] = {
|
|
'd', 's', ':', '\0',
|
|
0x3e, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szENTER[] = {
|
|
'e', 'n', 't', 'e', 'r', '\0',
|
|
0xc8, opnIw, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szES[] = {
|
|
'e', 's', ':', '\0',
|
|
0x36, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szF2XM1[] = {
|
|
'f', '2', 'x', 'm', '1', '\0',
|
|
0xd8, 0xf0, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFABS[] = {
|
|
'f', 'a', 'b', 's', '\0',
|
|
0xd9, 0xe1, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFADD[] = {
|
|
'f', 'a', 'd', 'd', '\0',
|
|
0xd8, asReg0, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg0, opnMq + tEnd,
|
|
0xd8, 0xc0, opnSt, opnSti + tEnd,
|
|
0xdc, 0xc0, opnSti, opnSt + tEnd,
|
|
0xdc, 0xc1, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFADDP[] = {
|
|
'f', 'a', 'd', 'd', 'p', '\0',
|
|
0xde, 0xc0, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFBLD[] = {
|
|
'f', 'b', 'l', 'd', '\0',
|
|
0xdf, asReg4, opnMt + tEnd + eEnd };
|
|
|
|
UCHAR szFBSTP[] = {
|
|
'f', 'b', 's', 't', 'p', '\0',
|
|
0xdf, asReg6, opnMt + tEnd + eEnd };
|
|
|
|
UCHAR szFCHS[] = {
|
|
'f', 'c', 'h', 's', '\0',
|
|
0xd9, 0xe0, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFCLEX[] = {
|
|
'f', 'c', 'l', 'e', 'x', '\0',
|
|
0xdb, 0xe2, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFCOM[] = {
|
|
'f', 'c', 'o', 'm', '\0',
|
|
0xd8, 0xd1, asNone + tEnd,
|
|
0xd8, 0xd0, opnSti + tEnd,
|
|
0xd8, asReg2, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg2, opnMq + tEnd + eEnd };
|
|
|
|
UCHAR szFCOMP[] = {
|
|
'f', 'c', 'o', 'm', 'p', '\0',
|
|
0xd8, 0xd9, asNone + tEnd,
|
|
0xd8, 0xd8, opnSti + tEnd,
|
|
0xd8, asReg3, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg3, opnMq + tEnd + eEnd };
|
|
|
|
UCHAR szFCOMPP[] = {
|
|
'f', 'c', 'o', 'm', 'p', 'p', '\0',
|
|
0xde, 0xd9, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFCOS[] = {
|
|
'f', 'c', 'o', 's', '\0',
|
|
0xd9, 0xff, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFDECSTP[] = {
|
|
'f', 'd', 'e', 'c', 's', 't', 'p', '\0',
|
|
0xd9, 0xf6, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFDISI[] = {
|
|
'f', 'd', 'i', 's', 'i', '\0',
|
|
0xdb, 0xe1, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFDIV[] = {
|
|
'f', 'd', 'i', 'v', '\0',
|
|
0xdc, 0xf9, asNone + tEnd,
|
|
0xd8, asReg6, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg6, opnMq + tEnd,
|
|
0xd8, 0xf0, opnSt, opnSti + tEnd,
|
|
0xdc, 0xf8, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFDIVP[] = {
|
|
'f', 'd', 'i', 'v', 'p', '\0',
|
|
0xde, 0xf8, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFDIVR[] = {
|
|
'f', 'd', 'i', 'v', 'r', '\0',
|
|
0xde, 0xf1, asNone + tEnd,
|
|
0xd8, asReg7, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg7, opnMq + tEnd,
|
|
0xd8, 0xf8, opnSt, opnSti + tEnd,
|
|
0xdc, 0xf0, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFDIVRP[] = {
|
|
'f', 'd', 'i', 'v', 'r', 'p', '\0',
|
|
0xde, 0xf0, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFENI[] = {
|
|
'f', 'e', 'n', 'i', '\0',
|
|
0xdb, 0xe0, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFFREE[] = {
|
|
'f', 'f', 'r', 'e', 'e', '\0',
|
|
0xdd, 0xc0, asWait, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFIADD[] = {
|
|
'f', 'i', 'a', 'd', 'd', '\0',
|
|
0xde, asReg0, opnMw, asFSiz + tEnd,
|
|
0xda, asReg0, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFICOM[] = {
|
|
'f', 'i', 'c', 'o', 'm', '\0',
|
|
0xde, asReg2, opnMw, asFSiz + tEnd,
|
|
0xda, asReg2, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFICOMP[] = {
|
|
'f', 'i', 'c', 'o', 'm', 'p', '\0',
|
|
0xde, asReg3, opnMw, asFSiz + tEnd,
|
|
0xda, asReg3, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFIDIV[] = {
|
|
'f', 'i', 'd', 'i', 'v', '\0',
|
|
0xde, asReg6, opnMw, asFSiz + tEnd,
|
|
0xda, asReg6, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFIDIVR[] = {
|
|
'f', 'i', 'd', 'i', 'v', 'r', '\0',
|
|
0xde, asReg7, opnMw, asFSiz + tEnd,
|
|
0xda, asReg7, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFILD[] = {
|
|
'f', 'i', 'l', 'd', '\0',
|
|
0xdf, asReg0, opnMw, asFSiz + tEnd,
|
|
0xdb, asReg0, opnMd + tEnd,
|
|
0xdf, asReg5, opnMq + tEnd + eEnd };
|
|
|
|
UCHAR szFIMUL[] = {
|
|
'f', 'i', 'm', 'u', 'l', '\0',
|
|
0xde, asReg1, opnMw, asFSiz + tEnd,
|
|
0xda, asReg1, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFINCSTP[] = {
|
|
'f', 'i', 'n', 'c', 's', 't', 'p', '\0',
|
|
0xd9, 0xf7, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFINIT[] = {
|
|
'f', 'i', 'n', 'i', 't', '\0',
|
|
0xdb, 0xe3, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFIST[] = {
|
|
'f', 'i', 's', 't', '\0',
|
|
0xdf, asReg2, opnMw, asFSiz + tEnd,
|
|
0xdb, asReg2, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFISTP[] = {
|
|
'f', 'i', 's', 't', 'p', '\0',
|
|
0xdf, asReg3, opnMw, asFSiz + tEnd,
|
|
0xdb, asReg3, opnMd + tEnd,
|
|
0xdf, asReg7, opnMq + tEnd + eEnd };
|
|
|
|
UCHAR szFISUB[] = {
|
|
'f', 'i', 's', 'u', 'b', '\0',
|
|
0xde, asReg4, opnMw, asFSiz + tEnd,
|
|
0xda, asReg4, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFISUBR[] = {
|
|
'f', 'i', 's', 'u', 'b', 'r', '\0',
|
|
0xde, asReg5, opnMw, asFSiz + tEnd,
|
|
0xda, asReg5, opnMd + tEnd + eEnd };
|
|
|
|
UCHAR szFLD[] = {
|
|
'f', 'l', 'd', '\0',
|
|
0xd9, asReg0, opnMd, asFSiz + tEnd,
|
|
0xdd, asReg0, opnMq + tEnd,
|
|
0xdb, asReg5, opnMt + tEnd,
|
|
0xd9, 0xc0, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFLD1[] = {
|
|
'f', 'l', 'd', '1', '\0',
|
|
0xd9, 0xe8, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFLDCW[] = {
|
|
'f', 'l', 'd', 'c', 'w', '\0',
|
|
0xd9, asWait, asReg5, opnMw + tEnd + eEnd };
|
|
|
|
UCHAR szFLDENV[] = {
|
|
'f', 'l', 'd', 'e', 'n', 'v', '\0',
|
|
0xd9, asWait, asReg4, opnMw + tEnd + eEnd };
|
|
|
|
UCHAR szFLDL2E[] = {
|
|
'f', 'l', 'd', 'l', '2', 'e', '\0',
|
|
0xd9, 0xea, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFLDL2T[] = {
|
|
'f', 'l', 'd', 'l', '2', 't', '\0',
|
|
0xd9, 0xe9, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFLDLG2[] = {
|
|
'f', 'l', 'd', 'l', 'g', '2', '\0',
|
|
0xd9, 0xec, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFLDLN2[] = {
|
|
'f', 'l', 'd', 'l', 'n', '2', '\0',
|
|
0xd9, 0xed, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFLDPI[] = {
|
|
'f', 'l', 'd', 'p', 'i', '\0',
|
|
0xd9, 0xeb, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFLDZ[] = {
|
|
'f', 'l', 'd', 'z', '\0',
|
|
0xd9, 0xee, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFMUL[] = {
|
|
'f', 'm', 'u', 'l', '\0',
|
|
0xde, 0xc9, asNone + tEnd,
|
|
0xd8, asReg1, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg1, opnMq + tEnd,
|
|
0xd8, 0xc8, opnSt, opnSti + tEnd,
|
|
0xdc, 0xc8, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFMULP[] = {
|
|
'f', 'm', 'u', 'l', 'p', '\0',
|
|
0xde, 0xc8, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFNCLEX[] = {
|
|
'f', 'n', 'c', 'l', 'e', 'x', '\0',
|
|
0xdb, 0xe2, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFNDISI[] = {
|
|
'f', 'n', 'd', 'i', 's', 'i', '\0',
|
|
0xdb, 0xe1, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFNENI[] = {
|
|
'f', 'n', 'e', 'n', 'i', '\0',
|
|
0xdb, 0xe0, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFNINIT[] = {
|
|
'f', 'n', 'i', 'n', 'i', 't', '\0',
|
|
0xdb, 0xe3, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFNOP[] = {
|
|
'f', 'n', 'o', 'p', '\0',
|
|
0xd9, 0xd0, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFNSAVE[] = {
|
|
'f', 'n', 's', 'a', 'v', 'e', '\0',
|
|
0xdd, asReg6, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szFNSTCW[] = {
|
|
'f', 'n', 's', 't', 'c', 'w', '\0',
|
|
0xd9, asReg7, opnMw + tEnd + eEnd };
|
|
|
|
UCHAR szFNSTENV[] = {
|
|
'f', 'n', 's', 't', 'e', 'n', 'v', '\0',
|
|
0xd9, asReg6, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szFNSTSW[] = {
|
|
'f', 'n', 's', 't', 's', 'w', '\0',
|
|
0xdf, 0xe0, asNone + tEnd,
|
|
0xdf, 0xe0, opnAX + tEnd,
|
|
0xdf, asReg7, opnMw + tEnd + eEnd };
|
|
|
|
UCHAR szFPATAN[] = {
|
|
'f', 'p', 'a', 't', 'a', 'n', '\0',
|
|
0xd9, 0xf3, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFPREM[] = {
|
|
'f', 'p', 'r', 'e', 'm', '\0',
|
|
0xd9, 0xf8, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFPREM1[] = {
|
|
'f', 'p', 'r', 'e', 'm', '1', '\0',
|
|
0xd9, 0xf5, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFPTAN[] = {
|
|
'f', 'p', 't', 'a', 'n', '\0',
|
|
0xd9, 0xf2, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFRNDINT[] = {
|
|
'f', 'r', 'n', 'd', 'i', 'n', 't', '\0',
|
|
0xd9, 0xfc, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFRSTOR[] = {
|
|
'f', 'r', 's', 't', 'o', 'r', '\0',
|
|
0xdd, asWait, asReg4, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szFS[] = {
|
|
'f', 's', ':', '\0',
|
|
0x64, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szFSAVE[] = {
|
|
'f', 's', 'a', 'v', 'e', '\0',
|
|
0xdd, asWait, asReg6, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szFSCALE[] = {
|
|
'f', 's', 'c', 'a', 'l', 'e', '\0',
|
|
0xd9, 0xfd, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFSETPM[] = {
|
|
'f', 's', 'e', 't', 'p', 'm', '\0',
|
|
0xdb, 0xe4, asWait + tEnd + eEnd };
|
|
|
|
UCHAR szFSIN[] = {
|
|
'f', 's', 'i', 'n', '\0',
|
|
0xd9, 0xfe, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFSINCOS[] = {
|
|
'f', 's', 'i', 'n', 'c', 'o', 's', '\0',
|
|
0xd9, 0xfb, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFSQRT[] = {
|
|
'f', 's', 'q', 'r', 't', '\0',
|
|
0xd9, 0xfa, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFST[] = {
|
|
'f', 's', 't', '\0',
|
|
0xd9, asReg2, opnMd, asFSiz + tEnd,
|
|
0xdd, asReg2, opnMq + tEnd,
|
|
0xdd, 0xd0, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFSTCW[] = {
|
|
'f', 's', 't', 'c', 'w', '\0',
|
|
0xd9, asWait, asReg7, opnMw + tEnd + eEnd };
|
|
|
|
UCHAR szFSTENV[] = {
|
|
'f', 's', 't', 'e', 'n', 'v', '\0',
|
|
0xd9, asWait, asReg6, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szFSTP[] = {
|
|
'f', 's', 't', 'p', '\0',
|
|
0xd9, asReg3, opnMd, asFSiz + tEnd,
|
|
0xdd, asReg3, opnMq + tEnd,
|
|
0xdb, asReg7, opnMt + tEnd,
|
|
0xdd, 0xd8, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFSTSW[] = {
|
|
'f', 's', 't', 's', 'w', '\0',
|
|
0xdf, 0xe0, asWait + tEnd,
|
|
0xdf, 0xe0, asWait, opnAX + tEnd,
|
|
0xdd, asWait, asReg7, opnMw + tEnd + eEnd };
|
|
|
|
UCHAR szFSUB[] = {
|
|
'f', 's', 'u', 'b', '\0',
|
|
0xde, 0xe9, asNone + tEnd,
|
|
0xd8, asReg4, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg4, opnMq + tEnd,
|
|
0xd8, 0xe0, opnSt, opnSti + tEnd,
|
|
0xdc, 0xe8, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFSUBP[] = {
|
|
'f', 's', 'u', 'b', 'p', '\0',
|
|
0xde, 0xe8, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFSUBR[] = {
|
|
'f', 's', 'u', 'b', 'r', '\0',
|
|
0xde, 0xe1, asNone + tEnd,
|
|
0xd8, asReg5, opnMd, asFSiz + tEnd,
|
|
0xdc, asReg5, opnMq + tEnd,
|
|
0xd8, 0xe8, opnSt, opnSti + tEnd,
|
|
0xdc, 0xe0, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFSUBRP[] = {
|
|
'f', 's', 'u', 'b', 'r', 'p', '\0',
|
|
0xde, 0xe0, opnSti, opnSt + tEnd + eEnd };
|
|
|
|
UCHAR szFTST[] = {
|
|
'f', 't', 's', 't', '\0',
|
|
0xd9, 0xe4, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFUCOM[] = {
|
|
'f', 'u', 'c', 'o', 'm', '\0',
|
|
0xdd, 0xe1, asNone, + tEnd,
|
|
0xdd, 0xe0, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFUCOMP[] = {
|
|
'f', 'u', 'c', 'o', 'm', 'p', '\0',
|
|
0xdd, 0xe9, asNone + tEnd,
|
|
0xdd, 0xe8, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFUCOMPP[] = {
|
|
'f', 'u', 'c', 'o', 'm', 'p', 'p', '\0',
|
|
0xda, 0xe9, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFWAIT[] = { // same as WAIT
|
|
'f', 'w', 'a', 'i', 't', '\0',
|
|
0x9b, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szFXAM[] = {
|
|
'f', 'x', 'a', 'm', '\0',
|
|
0xd9, 0xe5, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFXCH[] = {
|
|
'f', 'x', 'c', 'h', '\0',
|
|
0xd9, 0xc9, asNone + tEnd,
|
|
0xd9, 0xc8, opnSti + tEnd + eEnd };
|
|
|
|
UCHAR szFXTRACT[] = {
|
|
'f', 'x', 't', 'r', 'a', 'c', 't', '\0',
|
|
0xd9, 0xf4, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFYL2X[] = {
|
|
'f', 'y', 'l', '2', 'x', '\0',
|
|
0xd9, 0xf1, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szFYL2XP1[] = {
|
|
'f', 'y', 'l', '2', 'x', 'p', '1', '\0',
|
|
0xd9, 0xf9, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szGS[] = {
|
|
'g', 's', ':', '\0',
|
|
0x65, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szHLT[] = {
|
|
'h', 'l', 't', '\0',
|
|
0xf4, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szIDIV[] = {
|
|
'i', 'd', 'i', 'v', '\0',
|
|
0xf6, asReg7, opnEb + tEnd,
|
|
0xf7, asReg7, opnEv + tEnd,
|
|
0xf6, asReg7, opnAL, opnEb + tEnd,
|
|
0xf7, asReg7, opneAX, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szIMUL[] = {
|
|
'i', 'm', 'u', 'l', '\0',
|
|
0xf6, asReg5, opnEb + tEnd,
|
|
0xf7, asReg5, opnEv + tEnd,
|
|
0xf6, asReg5, opnAL, opnEb + tEnd,
|
|
0xf7, asReg5, opneAX, opnEv + tEnd,
|
|
0x0f, 0xaf, opnGv, opnEv + tEnd,
|
|
0x6b, opnGv, opnIb + tEnd,
|
|
0x69, opnGv, opnIv + tEnd,
|
|
0x6b, opnGv, opnEv, opnIb + tEnd,
|
|
0x69, opnGv, opnEv, opnIv + tEnd + eEnd };
|
|
|
|
UCHAR szIN[] = {
|
|
'i', 'n', '\0',
|
|
0xe4, opnAL, opnIb + tEnd,
|
|
0xe5, opneAX, opnIb + tEnd,
|
|
0xec, opnAL, opnDX + tEnd,
|
|
0xed, opneAX, opnDX + tEnd + eEnd };
|
|
|
|
UCHAR szINC[] = {
|
|
'i', 'n', 'c', '\0',
|
|
0x40, asOpRg, opnGv + tEnd,
|
|
0xfe, asReg0, opnEb + tEnd,
|
|
0xff, asReg0, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szINS[] = {
|
|
'i', 'n', 's', '\0',
|
|
0x6c, opnYb, opnDX + tEnd,
|
|
0x6d, opnYv, opnDX + tEnd + eEnd };
|
|
|
|
UCHAR szINSB[] = {
|
|
'i', 'n', 's', 'b', '\0',
|
|
0x6c, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szINSD[] = {
|
|
'i', 'n', 's', 'd', '\0',
|
|
0x6d, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szINSW[] = {
|
|
'i', 'n', 's', 'w', '\0',
|
|
0x6d, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szINT[] = {
|
|
'i', 'n', 't', '\0',
|
|
0xcc, opnIm3 + tEnd,
|
|
0xcd, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szINTO[] = {
|
|
'i', 'n', 't', 'o', '\0',
|
|
0xce, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szINVD[] = {
|
|
'i', 'n', 'v', 'd', '\0',
|
|
0x0f, 0x08, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szINVLPG[] = {
|
|
'i', 'n', 'v', 'l', 'p', 'g', '\0',
|
|
0x0f, 0x01, asReg7, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szIRET[] = {
|
|
'i', 'r', 'e', 't', '\0',
|
|
0xcf, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szIRETD[] = {
|
|
'i', 'r', 'e', 't', 'd', '\0',
|
|
0xcf, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szJA[] = { // same as JNBE
|
|
'j', 'a', '\0',
|
|
0x77, opnJb + tEnd,
|
|
0x0f, 0x87, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJAE[] = { // same as JNB, JNC
|
|
'j', 'a', 'e', '\0',
|
|
0x73, opnJb + tEnd,
|
|
0x0f, 0x83, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJB[] = { // same as JC, JNAE
|
|
'j', 'b', '\0',
|
|
0x72, opnJb + tEnd,
|
|
0x0f, 0x82, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJBE[] = { // same as JNA
|
|
'j', 'b', 'e', '\0',
|
|
0x76, opnJb + tEnd,
|
|
0x0f, 0x86, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJC[] = { // same as JB, JNAE
|
|
'j', 'c', '\0',
|
|
0x72, opnJb + tEnd,
|
|
0x0f, 0x82, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJCXZ[] = {
|
|
'j', 'c', 'x', 'z', '\0',
|
|
0xe3, asSiz0, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szJECXZ[] = {
|
|
'j', 'e', 'c', 'x', 'z', '\0',
|
|
0xe3, asSiz1, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szJE[] = { // same as JZ
|
|
'j', 'e', '\0',
|
|
0x74, opnJb + tEnd,
|
|
0x0f, 0x84, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJG[] = { // same as JNLE
|
|
'j', 'g', '\0',
|
|
0x7f, opnJb + tEnd,
|
|
0x0f, 0x8f, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJGE[] = { // same as JNL
|
|
'j', 'g', 'e', '\0',
|
|
0x7d, opnJb + tEnd,
|
|
0x0f, 0x8d, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJL[] = { // same as JNGE
|
|
'j', 'l', '\0',
|
|
0x7c, opnJb + tEnd,
|
|
0x0f, 0x8c, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJLE[] = { // same as JNG
|
|
'j', 'l', 'e', '\0',
|
|
0x7e, opnJb + tEnd,
|
|
0x0f, 0x8e, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJMP[] = {
|
|
'j', 'm', 'p', '\0',
|
|
0xeb, opnJb + tEnd,
|
|
0xe9, opnJv + tEnd,
|
|
0xff, asReg4, opnEv, asMpNx + tEnd,
|
|
0xff, asReg5, opnMp + tEnd,
|
|
0xea, opnAp + tEnd, + eEnd };
|
|
|
|
UCHAR szJNA[] = { // same as JBE
|
|
'j', 'n', 'a', '\0',
|
|
0x76, opnJb + tEnd,
|
|
0x0f, 0x86, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNAE[] = { // same as JB, JC
|
|
'j', 'n', 'a', 'e','\0',
|
|
0x72, opnJb + tEnd,
|
|
0x0f, 0x82, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNB[] = { // same as JAE, JNC
|
|
'j', 'n', 'b', '\0',
|
|
0x73, opnJb + tEnd,
|
|
0x0f, 0x83, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNBE[] = { // same as JA
|
|
'j', 'n', 'b', 'e', '\0',
|
|
0x77, opnJb + tEnd,
|
|
0x0f, 0x87, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNC[] = { // same as JAE, JNB
|
|
'j', 'n', 'c', '\0',
|
|
0x73, opnJb + tEnd,
|
|
0x0f, 0x83, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNG[] = { // same as JLE
|
|
'j', 'n', 'g', '\0',
|
|
0x7e, opnJb + tEnd,
|
|
0x0f, 0x8e, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNGE[] = { // same as JNL
|
|
'j', 'n', 'g', 'e', '\0',
|
|
0x7c, opnJb + tEnd,
|
|
0x0f, 0x8c, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNE[] = { // same as JNZ
|
|
'j', 'n', 'e', '\0',
|
|
0x75, opnJb + tEnd,
|
|
0x0f, 0x85, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNL[] = { // same as JGE
|
|
'j', 'n', 'l', '\0',
|
|
0x7d, opnJb + tEnd,
|
|
0x0f, 0x8d, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNLE[] = { // same as JNG
|
|
'j', 'n', 'l', 'e', '\0',
|
|
0x7f, opnJb + tEnd,
|
|
0x0f, 0x8f, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNO[] = {
|
|
'j', 'n', 'o', '\0',
|
|
0x71, opnJb + tEnd,
|
|
0x0f, 0x81, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNP[] = { // same as JPO
|
|
'j', 'n', 'p', '\0',
|
|
0x7b, opnJb + tEnd,
|
|
0x0f, 0x8b, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNS[] = {
|
|
'j', 'n', 's', '\0',
|
|
0x79, opnJb + tEnd,
|
|
0x0f, 0x89, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJNZ[] = { // same as JNE
|
|
'j', 'n', 'z', '\0',
|
|
0x75, opnJb + tEnd,
|
|
0x0f, 0x85, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJO[] = {
|
|
'j', 'o', '\0',
|
|
0x70, opnJb + tEnd,
|
|
0x0f, 0x80, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJP[] = { // same as JPE
|
|
'j', 'p', '\0',
|
|
0x7a, opnJb + tEnd,
|
|
0x0f, 0x8a, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJPE[] = { // same as JP
|
|
'j', 'p', 'e', '\0',
|
|
0x7a, opnJb + tEnd,
|
|
0x0f, 0x8a, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJPO[] = { // same as JNP
|
|
'j', 'p', 'o', '\0',
|
|
0x7b, opnJb + tEnd,
|
|
0x0f, 0x8b, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJS[] = {
|
|
'j', 's', '\0',
|
|
0x78, opnJb + tEnd,
|
|
0x0f, 0x88, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szJZ[] = { // same as JE
|
|
'j', 'z', '\0',
|
|
0x74, opnJb + tEnd,
|
|
0x0f, 0x84, opnJv + tEnd + eEnd };
|
|
|
|
UCHAR szLAHF[] = {
|
|
'l', 'a', 'h', 'f', '\0',
|
|
0x9f, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szLAR[] = {
|
|
'l', 'a', 'r', '\0',
|
|
0x0f, 0x02, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szLDS[] = {
|
|
'l', 'd', 's', '\0',
|
|
0xc5, opnGv, opnMp + tEnd + eEnd };
|
|
|
|
UCHAR szLEA[] = {
|
|
'l', 'e', 'a', '\0',
|
|
0x8d, opnGv, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szLEAVE[] = {
|
|
'l', 'e', 'a', 'v', 'e', '\0',
|
|
0xc9, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szLES[] = {
|
|
'l', 'e', 's', '\0',
|
|
0xc4, opnGv, opnMp + tEnd + eEnd };
|
|
|
|
UCHAR szLFS[] = {
|
|
'l', 'f', 's', '\0',
|
|
0x0f, 0xb4, opnGv, opnMp + tEnd + eEnd };
|
|
|
|
UCHAR szLGDT[] = {
|
|
'l', 'g', 'd', 't', '\0',
|
|
0x0f, 0x01, asReg2, opnMs + tEnd + eEnd };
|
|
|
|
UCHAR szLGS[] = {
|
|
'l', 'g', 's', '\0',
|
|
0x0f, 0xb5, opnGv, opnMp + tEnd + eEnd };
|
|
|
|
UCHAR szLIDT[] = {
|
|
'l', 'i', 'd', 't', '\0',
|
|
0x0f, 0x01, asReg3, opnMs + tEnd + eEnd };
|
|
|
|
UCHAR szLLDT[] = {
|
|
'l', 'l', 'd', 't', '\0',
|
|
0x0f, 0x00, asReg2, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szLMSW[] = {
|
|
'l', 'm', 's', 'w', '\0',
|
|
0x0f, 0x01, asReg6, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szLOCK[] = {
|
|
'l', 'o', 'c', 'k', '\0',
|
|
0xf0, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szLODS[] = {
|
|
'l', 'o', 'd', 's', '\0',
|
|
0xac, opnXb + tEnd,
|
|
0xad, opnXv + tEnd + eEnd };
|
|
|
|
UCHAR szLODSB[] = {
|
|
'l', 'o', 'd', 's', 'b', '\0',
|
|
0xac, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szLODSD[] = {
|
|
'l', 'o', 'd', 's', 'd', '\0',
|
|
0xad, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szLODSW[] = {
|
|
'l', 'o', 'd', 's', 'w', '\0',
|
|
0xad, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szLOOP[] = {
|
|
'l', 'o', 'o', 'p', '\0',
|
|
0xe2, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szLOOPE[] = { // same as LOOPZ
|
|
'l', 'o', 'o', 'p', 'e', '\0',
|
|
0xe1, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szLOOPNE[] = { // same as LOOPNZ
|
|
'l', 'o', 'o', 'p', 'n', 'e', '\0',
|
|
0xe0, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szLOOPNZ[] = { // same as LOOPNE
|
|
'l', 'o', 'o', 'p', 'n', 'z', '\0',
|
|
0xe0, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szLOOPZ[] = { // same as LOOPE
|
|
'l', 'o', 'o', 'p', 'z', '\0',
|
|
0xe1, opnJb + tEnd + eEnd };
|
|
|
|
UCHAR szLSL[] = {
|
|
'l', 's', 'l', '\0',
|
|
0x0f, 0x03, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szLSS[] = {
|
|
'l', 's', 's', '\0',
|
|
0x0f, 0xb2, opnGv, opnMp + tEnd + eEnd };
|
|
|
|
UCHAR szLTR[] = {
|
|
'l', 't', 'r', '\0',
|
|
0x0f, 0x00, asReg3, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szMOV[] = {
|
|
'm', 'o', 'v', '\0',
|
|
0xa0, opnAL, opnOb + tEnd,
|
|
0xa1, opneAX, opnOv + tEnd,
|
|
0xa2, opnOb, opnAL + tEnd,
|
|
0xa3, opnOv, opneAX + tEnd,
|
|
0x8a, opnGb, opnEb + tEnd,
|
|
0x8b, opnGv, opnEv + tEnd,
|
|
0x88, opnEb, opnGb + tEnd,
|
|
0x89, opnEv, opnGv + tEnd,
|
|
0x8c, asSiz0, opnEw, opnSw + tEnd,
|
|
0x8e, asSiz0, opnSw, opnEw + tEnd,
|
|
0xb0, asOpRg, opnGb, opnIb + tEnd,
|
|
0xb8, asOpRg, opnGv, opnIv + tEnd,
|
|
0xc6, opnEb, opnIb + tEnd,
|
|
0xc7, opnEv, opnIv + tEnd,
|
|
0x0f, 0x20, opnRd, opnCd + tEnd,
|
|
0x0f, 0x21, opnRd, opnDd + tEnd,
|
|
0x0f, 0x22, opnCd, opnRd + tEnd,
|
|
0x0f, 0x23, opnDd, opnRd + tEnd,
|
|
0x0f, 0x24, opnRd, opnTd + tEnd,
|
|
0x0f, 0x26, opnTd, opnRd + tEnd + eEnd };
|
|
|
|
UCHAR szMOVS[] = {
|
|
'm', 'o', 'v', 's', '\0',
|
|
0xa4, opnXb, opnYb + tEnd,
|
|
0xa5, opnXv, opnYv + tEnd + eEnd };
|
|
|
|
UCHAR szMOVSB[] = {
|
|
'm', 'o', 'v', 's', 'b', '\0',
|
|
0xa4, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szMOVSD[] = {
|
|
'm', 'o', 'v', 's', 'd', '\0',
|
|
0xa5, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szMOVSW[] = {
|
|
'm', 'o', 'v', 's', 'w', '\0',
|
|
0xa5, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szMOVSX[] = {
|
|
'm', 'o', 'v', 's', 'x', '\0',
|
|
0x0f, 0xbe, opnGv, opnEb + tEnd,
|
|
0x0f, 0xbf, opnGv, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szMOVZX[] = {
|
|
'm', 'o', 'v', 'z', 'x', '\0',
|
|
0x0f, 0xb6, opnGv, opnEb + tEnd,
|
|
0x0f, 0xb7, opnGv, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szMUL[] = {
|
|
'm', 'u', 'l', '\0',
|
|
0xf6, asReg4, opnEb + tEnd,
|
|
0xf7, asReg4, opnEv + tEnd,
|
|
0xf6, asReg4, opnAL, opnEb + tEnd,
|
|
0xf7, asReg4, opneAX, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szNEG[] = {
|
|
'n', 'e', 'g', '\0',
|
|
0xf6, asReg3, opnEb + tEnd,
|
|
0xf7, asReg3, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szNOP[] = {
|
|
'n', 'o', 'p', '\0',
|
|
0x90, asNone + tEnd };
|
|
|
|
UCHAR szNOT[] = {
|
|
'n', 'o', 't', '\0',
|
|
0xf6, asReg2, opnEb + tEnd,
|
|
0xf7, asReg2, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szOR[] = {
|
|
'o', 'r', '\0',
|
|
0x0c, opnAL, opnIb + tEnd,
|
|
0x0d, opneAX, opnIv + tEnd,
|
|
0x80, asReg1, opnEb, opnIb + tEnd,
|
|
0x83, asReg1, opnEv, opnIb + tEnd,
|
|
0x81, asReg1, opnEv, opnIv + tEnd,
|
|
0x08, opnEb, opnGb + tEnd,
|
|
0x09, opnEv, opnGv + tEnd,
|
|
0x0a, opnGb, opnEb + tEnd,
|
|
0x0b, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szOUT[] = {
|
|
'o', 'u', 't', '\0',
|
|
0xe6, opnIb, opnAL + tEnd,
|
|
0xe7, opnIb, opneAX + tEnd,
|
|
0xee, opnDX, opnAL + tEnd,
|
|
0xef, opnDX, opneAX + tEnd + eEnd };
|
|
|
|
UCHAR szOUTS[] = {
|
|
'o', 'u', 't', 's', '\0',
|
|
0x6e, opnDX, opnYb + tEnd,
|
|
0x6f, opnDX, opnYv + tEnd + eEnd };
|
|
|
|
UCHAR szOUTSB[] = {
|
|
'o', 'u', 't', 's', 'b', '\0',
|
|
0x6e, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szOUTSD[] = {
|
|
'o', 'u', 't', 's', 'd', '\0',
|
|
0x6f, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szOUTSW[] = {
|
|
'o', 'u', 't', 's', 'w', '\0',
|
|
0x6f, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szPOP[] = {
|
|
'p', 'o', 'p', '\0',
|
|
0x58, asOpRg, opnGv + tEnd,
|
|
0x8f, asReg0, opnMv + tEnd,
|
|
0x1f, opnSeg, segDS, asNone+ tEnd,
|
|
0x07, opnSeg, segES, asNone+ tEnd,
|
|
0x17, opnSeg, segSS, asNone+ tEnd,
|
|
0x0f, 0xa1, opnSeg, segFS, asNone+ tEnd,
|
|
0x0f, 0xa9, opnSeg, segGS, asNone+ tEnd + eEnd };
|
|
|
|
UCHAR szPOPA[] = {
|
|
'p', 'o', 'p', 'a', '\0',
|
|
0x61, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szPOPAD[] = {
|
|
'p', 'o', 'p', 'a', 'd', '\0',
|
|
0x61, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szPOPF[] = {
|
|
'p', 'o', 'p', 'f', '\0',
|
|
0x9d, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szPOPFD[] = {
|
|
'p', 'o', 'p', 'f', 'd', '\0',
|
|
0x9d, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szPUSH[] = {
|
|
'p', 'u', 's', 'h', '\0',
|
|
0x50, asOpRg, opnGv + tEnd,
|
|
0xff, asReg6, opnMv + tEnd,
|
|
0x6a, opnIb + tEnd,
|
|
0x68, opnIv + tEnd,
|
|
0x0e, opnSeg, segCS, asNone+ tEnd,
|
|
0x1e, opnSeg, segDS, asNone+ tEnd,
|
|
0x06, opnSeg, segES, asNone+ tEnd,
|
|
0x16, opnSeg, segSS, asNone+ tEnd,
|
|
0x0f, 0xa0, opnSeg, segFS, asNone+ tEnd,
|
|
0x0f, 0xa8, opnSeg, segGS, asNone+ tEnd + eEnd };
|
|
|
|
UCHAR szPUSHA[] = {
|
|
'p', 'u', 's', 'h', 'a', '\0',
|
|
0x60, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szPUSHAD[] = {
|
|
'p', 'u', 's', 'h', 'a', 'd', '\0',
|
|
0x60, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szPUSHF[] = {
|
|
'p', 'u', 's', 'h', 'f', '\0',
|
|
0x9c, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szPUSHFD[] = {
|
|
'p', 'u', 's', 'h', 'f', 'd', '\0',
|
|
0x9c, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szRCL[] = {
|
|
'r', 'c', 'l', '\0',
|
|
0xd0, asReg2, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg2, opnEb, opnCL + tEnd,
|
|
0xc0, asReg2, opnEb, opnIb + tEnd,
|
|
0xd1, asReg2, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg2, opnEv, opnCL + tEnd,
|
|
0xc1, asReg2, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szRCR[] = {
|
|
'r', 'c', 'r', '\0',
|
|
0xd0, asReg3, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg3, opnEb, opnCL + tEnd,
|
|
0xc0, asReg3, opnEb, opnIb + tEnd,
|
|
0xd1, asReg3, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg3, opnEv, opnCL + tEnd,
|
|
0xc1, asReg3, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szRDMSR[] = {
|
|
'r', 'd', 'm', 's', 'r', '\0',
|
|
0x0f, 0x32, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szRDTSC[] = {
|
|
'r', 'd', 't', 's', 'c', '\0',
|
|
0x0f, 0x31, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szREP[] = { // same as REPE, REPZ
|
|
'r', 'e', 'p', '\0',
|
|
0xf3, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szREPE[] = { // same as REP, REPZ
|
|
'r', 'e', 'p', 'e', '\0',
|
|
0xf3, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szREPZ[] = { // same as REP, REPE
|
|
'r', 'e', 'p', 'z', '\0',
|
|
0xf3, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szREPNE[] = { // same as REPNZ
|
|
'r', 'e', 'p', 'n', 'e', '\0',
|
|
0xf2, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szREPNZ[] = { // same as REPNE
|
|
'r', 'e', 'p', 'n', 'z', '\0',
|
|
0xf2, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szRET[] = { // same as RETN
|
|
'r', 'e', 't', '\0',
|
|
0xc3, asNone + tEnd,
|
|
0xc2, opnIw + tEnd + eEnd };
|
|
|
|
UCHAR szRETF[] = {
|
|
'r', 'e', 't', 'f', '\0',
|
|
0xcb, asNone + tEnd,
|
|
0xca, opnIw + tEnd + eEnd };
|
|
|
|
UCHAR szRETN[] = { // same as RET
|
|
'r', 'e', 't', 'n', '\0',
|
|
0xc3, asNone + tEnd,
|
|
0xc2, opnIw + tEnd + eEnd };
|
|
|
|
UCHAR szROL[] = {
|
|
'r', 'o', 'l', '\0',
|
|
0xd0, asReg0, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg0, opnEb, opnCL + tEnd,
|
|
0xc0, asReg0, opnEb, opnIb + tEnd,
|
|
0xd1, asReg0, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg0, opnEv, opnCL + tEnd,
|
|
0xc1, asReg0, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szROR[] = {
|
|
'r', 'o', 'r', '\0',
|
|
0xd0, asReg1, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg1, opnEb, opnCL + tEnd,
|
|
0xc0, asReg1, opnEb, opnIb + tEnd,
|
|
0xd1, asReg1, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg1, opnEv, opnCL + tEnd,
|
|
0xc1, asReg1, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szRSM[] = {
|
|
'r', 's', 'm', '\0',
|
|
0x0f, 0xaa, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSAHF[] = {
|
|
's', 'a', 'h', 'f', '\0',
|
|
0x9e, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSAL[] = {
|
|
's', 'a', 'l', '\0',
|
|
0xd0, asReg4, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg4, opnEb, opnCL + tEnd,
|
|
0xc0, asReg4, opnEb, opnIb + tEnd,
|
|
0xd1, asReg4, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg4, opnEv, opnCL + tEnd,
|
|
0xc1, asReg4, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szSAR[] = {
|
|
's', 'a', 'r', '\0',
|
|
0xd0, asReg7, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg7, opnEb, opnCL + tEnd,
|
|
0xc0, asReg7, opnEb, opnIb + tEnd,
|
|
0xd1, asReg7, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg7, opnEv, opnCL + tEnd,
|
|
0xc1, asReg7, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szSBB[] = {
|
|
's', 'b', 'b', '\0',
|
|
0x1c, opnAL, opnIb + tEnd,
|
|
0x1d, opneAX, opnIv + tEnd,
|
|
0x80, asReg3, opnEb, opnIb + tEnd,
|
|
0x83, asReg3, opnEv, opnIb + tEnd,
|
|
0x81, asReg3, opnEv, opnIv + tEnd,
|
|
0x18, opnEb, opnGb + tEnd,
|
|
0x19, opnEv, opnGv + tEnd,
|
|
0x1a, opnGb, opnEb + tEnd,
|
|
0x1b, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
|
|
UCHAR szSCAS[] = {
|
|
's', 'c', 'a', 's', '\0',
|
|
0xae, opnYb + tEnd,
|
|
0xaf, opnYv + tEnd + eEnd };
|
|
|
|
UCHAR szSCASB[] = {
|
|
's', 'c', 'a', 's', 'b', '\0',
|
|
0xae, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSCASD[] = {
|
|
's', 'c', 'a', 's', 'd', '\0',
|
|
0xaf, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szSCASW[] = {
|
|
's', 'c', 'a', 's', 'w', '\0',
|
|
0xaf, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szSETA[] = { // same as SETNBE
|
|
's', 'e', 't', 'a', '\0',
|
|
0x0f, 0x97, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETAE[] = { // same as SETNB, SETNC
|
|
's', 'e', 't', 'a', 'e', '\0',
|
|
0x0f, 0x93, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETB[] = { // same as SETC, SETNAE
|
|
's', 'e', 't', 'b', '\0',
|
|
0x0f, 0x92, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETBE[] = { // same as SETNA
|
|
's', 'e', 't', 'b', 'e', '\0',
|
|
0x0f, 0x96, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETC[] = { // same as SETB, SETNAE
|
|
's', 'e', 't', 'c', '\0',
|
|
0x0f, 0x92, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETE[] = { // same as SETZ
|
|
's', 'e', 't', 'e', '\0',
|
|
0x0f, 0x94, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETG[] = { // same as SETNLE
|
|
's', 'e', 't', 'g', '\0',
|
|
0x0f, 0x9f, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETGE[] = { // same as SETNL
|
|
's', 'e', 't', 'g', 'e', '\0',
|
|
0x0f, 0x9d, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETL[] = { // same as SETNGE
|
|
's', 'e', 't', 'l', '\0',
|
|
0x0f, 0x9c, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETLE[] = { // same as SETNG
|
|
's', 'e', 't', 'l', 'e', '\0',
|
|
0x0f, 0x9e, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNA[] = { // same as SETBE
|
|
's', 'e', 't', 'n', 'a', '\0',
|
|
0x0f, 0x96, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNAE[] = { // same as SETB, SETC
|
|
's', 'e', 't', 'n', 'a', 'e', '\0',
|
|
0x0f, 0x92, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNB[] = { // same as SETAE, SETNC
|
|
's', 'e', 't', 'n', 'b', '\0',
|
|
0x0f, 0x93, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNBE[] = { // same as SETA
|
|
's', 'e', 't', 'n', 'b', 'e', '\0',
|
|
0x0f, 0x97, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNC[] = { // same as SETAE, SETNC
|
|
's', 'e', 't', 'n', 'c', '\0',
|
|
0x0f, 0x93, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNE[] = { // same as SETNZ
|
|
's', 'e', 't', 'n', 'e', '\0',
|
|
0x0f, 0x95, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNG[] = { // same as SETLE
|
|
's', 'e', 't', 'n', 'g', '\0',
|
|
0x0f, 0x9e, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNGE[] = { // same as SETL
|
|
's', 'e', 't', 'n', 'g', 'e', '\0',
|
|
0x0f, 0x9c, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNL[] = { // same as SETGE
|
|
's', 'e', 't', 'n', 'l', '\0',
|
|
0x0f, 0x9d, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNLE[] = { // same as SETG
|
|
's', 'e', 't', 'n', 'l', 'e', '\0',
|
|
0x0f, 0x9f, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNO[] = {
|
|
's', 'e', 't', 'n', 'o', '\0',
|
|
0x0f, 0x91, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNP[] = { // same as SETPO
|
|
's', 'e', 't', 'n', 'p', '\0',
|
|
0x0f, 0x9b, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNS[] = {
|
|
's', 'e', 't', 'n', 's', '\0',
|
|
0x0f, 0x99, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETNZ[] = { // same as SETNE
|
|
's', 'e', 't', 'n', 'z', '\0',
|
|
0x0f, 0x95, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETO[] = {
|
|
's', 'e', 't', 'o', '\0',
|
|
0x0f, 0x90, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETP[] = { // same as SETPE
|
|
's', 'e', 't', 'p', '\0',
|
|
0x0f, 0x9a, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETPE[] = { // same as SETP
|
|
's', 'e', 't', 'p', 'e', '\0',
|
|
0x0f, 0x9a, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETPO[] = { // same as SETNP
|
|
's', 'e', 't', 'p', 'o', '\0',
|
|
0x0f, 0x9b, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETS[] = {
|
|
's', 'e', 't', 's', '\0',
|
|
0x0f, 0x98, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSETZ[] = { // same as SETE
|
|
's', 'e', 't', 'z', '\0',
|
|
0x0f, 0x94, opnEb + tEnd + eEnd };
|
|
|
|
UCHAR szSGDT[] = {
|
|
's', 'g', 'd', 't', '\0',
|
|
0x0f, 0x01, asReg0, opnMs + tEnd + eEnd };
|
|
|
|
UCHAR szSHL[] = {
|
|
's', 'h', 'l', '\0',
|
|
0xd0, asReg4, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg4, opnEb, opnCL + tEnd,
|
|
0xc0, asReg4, opnEb, opnIb + tEnd,
|
|
0xd1, asReg4, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg4, opnEv, opnCL + tEnd,
|
|
0xc1, asReg4, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szSHLD[] = {
|
|
's', 'h', 'l', 'd', '\0',
|
|
0x0f, 0xa4, opnEv, opnGv, opnIb + tEnd,
|
|
0x0f, 0xa5, opnEv, opnGv, opnCL + tEnd + eEnd };
|
|
|
|
UCHAR szSHR[] = {
|
|
's', 'h', 'r', '\0',
|
|
0xd0, asReg5, opnEb, opnIm1 + tEnd,
|
|
0xd2, asReg5, opnEb, opnCL + tEnd,
|
|
0xc0, asReg5, opnEb, opnIb + tEnd,
|
|
0xd1, asReg5, opnEv, opnIm1 + tEnd,
|
|
0xd3, asReg5, opnEv, opnCL + tEnd,
|
|
0xc1, asReg5, opnEv, opnIb + tEnd + eEnd };
|
|
|
|
UCHAR szSHRD[] = {
|
|
's', 'h', 'r', 'd', '\0',
|
|
0x0f, 0xac, opnEv, opnGv, opnIb + tEnd,
|
|
0x0f, 0xad, opnEv, opnGv, opnCL + tEnd + eEnd };
|
|
|
|
UCHAR szSIDT[] = {
|
|
's', 'i', 'd', 't', '\0',
|
|
0x0f, 0x01, asReg1, opnMs + tEnd + eEnd };
|
|
|
|
UCHAR szSLDT[] = {
|
|
's', 'l', 'd', 't', '\0',
|
|
0x0f, 0x00, asReg0, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szSMSW[] = {
|
|
's', 'm', 's', 'w', '\0',
|
|
0x0f, 0x01, asReg4, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szSS[] = {
|
|
's', 's', ':', '\0',
|
|
0x26, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szSTC[] = {
|
|
's', 't', 'c', '\0',
|
|
0xf9, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSTD[] = {
|
|
's', 't', 'd', '\0',
|
|
0xfd, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSTI[] = {
|
|
's', 't', 'i', '\0',
|
|
0xfb, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSTOS[] = {
|
|
's', 't', 'o', 's', '\0',
|
|
0xaa, opnYb + tEnd,
|
|
0xab, opnYv + tEnd + eEnd };
|
|
|
|
UCHAR szSTOSB[] = {
|
|
's', 't', 'o', 's', 'b', '\0',
|
|
0xaa, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szSTOSD[] = {
|
|
's', 't', 'o', 's', 'd', '\0',
|
|
0xab, asSiz1 + tEnd + eEnd };
|
|
|
|
UCHAR szSTOSW[] = {
|
|
's', 't', 'o', 's', 'w', '\0',
|
|
0xab, asSiz0 + tEnd + eEnd };
|
|
|
|
UCHAR szSTR[] = {
|
|
's', 't', 'r', '\0',
|
|
0x0f, 0x00, asReg1, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szSUB[] = {
|
|
's', 'u', 'b', '\0',
|
|
0x2c, opnAL, opnIb + tEnd,
|
|
0x2d, opneAX, opnIv + tEnd,
|
|
0x80, asReg5, opnEb, opnIb + tEnd,
|
|
0x83, asReg5, opnEv, opnIb + tEnd,
|
|
0x81, asReg5, opnEv, opnIv + tEnd,
|
|
0x28, opnEb, opnGb + tEnd,
|
|
0x29, opnEv, opnGv + tEnd,
|
|
0x2a, opnGb, opnEb + tEnd,
|
|
0x2b, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
UCHAR szTEST[] = {
|
|
't', 'e', 's', 't', '\0',
|
|
0xa8, opnAL, opnIb + tEnd,
|
|
0xa9, opneAX, opnIv + tEnd,
|
|
0xf6, asReg0, opnEb, opnIb + tEnd,
|
|
0xf7, asReg0, opnEv, opnIv + tEnd,
|
|
0x84, opnEb, opnGb + tEnd,
|
|
0x85, opnEv, opnGv + tEnd + eEnd };
|
|
|
|
UCHAR szVERR[] = {
|
|
'v', 'e', 'r', 'r', '\0',
|
|
0x0f, 0x00, asReg4, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szVERW[] = {
|
|
'v', 'e', 'r', 'w', '\0',
|
|
0x0f, 0x00, asReg5, opnEw + tEnd + eEnd };
|
|
|
|
UCHAR szWAIT[] = { // same as FWAIT
|
|
'w', 'a', 'i', 't', '\0',
|
|
0x9b, asPrfx + tEnd + eEnd };
|
|
|
|
UCHAR szWBINVD[] = {
|
|
'w', 'b', 'i', 'n', 'v', 'd', '\0',
|
|
0x0f, 0x09, asNone + tEnd + eEnd };
|
|
|
|
UCHAR szWRMSR[] = {
|
|
'w', 'r', 'm', 's', 'r', '\0',
|
|
0x0f, 0x30, asNone + tEnd + eEnd };
|
|
|
|
|
|
UCHAR szXADD[] = {
|
|
'x', 'a', 'd', 'd', '\0',
|
|
0x0f, 0xc0, opnEb, opnGb + tEnd,
|
|
0x0f, 0xc1, opnEv, opnGv + tEnd + eEnd };
|
|
|
|
UCHAR szXCHG[] = {
|
|
'x', 'c', 'h', 'g', '\0',
|
|
0x90, asOpRg, opneAX, opnGv + tEnd,
|
|
0x90, asOpRg, opnGv, opneAX + tEnd,
|
|
0x86, opnGb, opnEb + tEnd,
|
|
0x86, opnEb, opnGb + tEnd,
|
|
0x87, opnGv, opnEv + tEnd,
|
|
0x87, opnEv, opnGv + tEnd + eEnd };
|
|
|
|
UCHAR szXLAT[] = {
|
|
'x', 'l', 'a', 't', '\0',
|
|
0xd7, asNone + tEnd,
|
|
0xd7, asSeg, opnM + tEnd + eEnd };
|
|
|
|
UCHAR szXOR[] = {
|
|
'x', 'o', 'r', '\0',
|
|
0x34, opnAL, opnIb + tEnd,
|
|
0x35, opneAX, opnIv + tEnd,
|
|
0x80, asReg6, opnEb, opnIb + tEnd,
|
|
0x83, asReg6, opnEv, opnIb + tEnd,
|
|
0x81, asReg6, opnEv, opnIv + tEnd,
|
|
0x30, opnEb, opnGb + tEnd,
|
|
0x31, opnEv, opnGv + tEnd,
|
|
0x32, opnGb, opnEb + tEnd,
|
|
0x33, opnGv, opnEv + tEnd + eEnd };
|
|
|
|
PUCHAR OpTable[] = {
|
|
szAAA, szAAD, szAAM, szAAS, szADC, szADD,
|
|
szAND, szARPL, szBOUND, szBSF, szBSR, szBSWAP,
|
|
szBT, szBTC, szBTR, szBTS, szCALL, szCBW,
|
|
szCDQ, szCLC, szCLD, szCLI, szCLTS, szCMC,
|
|
szCMP, szCMPS, szCMPSB, szCMPSD, szCMPSW, szCMPXCHG,
|
|
szCMPXCHG8B, szCPUID, szCS, szCWD, szCWDE, szDAA,
|
|
szDAS, szDEC, szDIV, szDS, szENTER, szES,
|
|
szF2XM1, szFABS, szFADD, szFADDP, szFBLD, szFBSTP,
|
|
szFCHS, szFCLEX, szFCOM, szFCOMP, szFCOMPP, szFCOS,
|
|
szFDECSTP, szFDISI, szFDIV, szFDIVP, szFDIVR, szFDIVRP,
|
|
szFENI, szFFREE, szFIADD, szFICOM, szFICOMP, szFIDIV,
|
|
szFIDIVR, szFILD, szFIMUL, szFINCSTP, szFINIT, szFIST,
|
|
szFISTP, szFISUB, szFISUBR, szFLD, szFLD1, szFLDCW,
|
|
szFLDENV, szFLDL2E, szFLDL2T, szFLDLG2, szFLDLN2, szFLDPI,
|
|
szFLDZ, szFMUL, szFMULP, szFNCLEX, szFNDISI, szFNENI,
|
|
szFNINIT, szFNOP, szFNSAVE, szFNSTCW, szFNSTENV, szFNSTSW,
|
|
szFPATAN, szFPREM, szFPREM1, szFPTAN, szFRNDINT, szFRSTOR,
|
|
szFS, szFSAVE, szFSCALE, szFSETPM, szFSIN, szFSINCOS,
|
|
szFSQRT, szFST, szFSTCW, szFSTENV, szFSTP, szFSTSW,
|
|
szFSUB, szFSUBP, szFSUBR, szFSUBRP, szFTST, szFUCOM,
|
|
szFUCOMP, szFUCOMPP, szFWAIT, szFXAM, szFXCH, szFXTRACT,
|
|
szFYL2X, szFYL2XP1, szGS, szHLT, szIDIV, szIMUL,
|
|
szIN, szINC, szINS, szINSB, szINSD, szINSW,
|
|
szINT, szINTO, szINVD, szINVLPG, szIRET, szIRETD,
|
|
szJA, szJAE, szJB, szJBE, szJC, szJCXZ,
|
|
szJE, szJECXZ, szJG, szJGE, szJL, szJLE,
|
|
szJMP, szJNA, szJNAE, szJNB, szJNBE, szJNC,
|
|
szJNE, szJNG, szJNGE, szJNL, szJNLE, szJNO,
|
|
szJNP, szJNS, szJNZ, szJO, szJP, szJPE,
|
|
szJPO, szJS, szJZ, szLAHF, szLAR, szLDS,
|
|
szLEA, szLEAVE, szLES, szLFS, szLGDT, szLGS,
|
|
szLIDT, szLLDT, szLMSW, szLOCK, szLODS, szLODSB,
|
|
szLODSD, szLODSW, szLOOP, szLOOPE, szLOOPNE, szLOOPNZ,
|
|
szLOOPZ, szLSL, szLSS, szLTR, szMOV, szMOVS,
|
|
szMOVSB, szMOVSD, szMOVSW, szMOVSX, szMOVZX, szMUL,
|
|
szNEG, szNOP, szNOT, szOR, szOUT, szOUTS,
|
|
szOUTSB, szOUTSD, szOUTSW, szPOP, szPOPA, szPOPAD,
|
|
szPOPF, szPOPFD, szPUSH, szPUSHA, szPUSHAD, szPUSHF,
|
|
szPUSHFD, szRCL, szRCR, szRDMSR, szRDTSC, szREP,
|
|
szREPE, szREPNE, szREPNZ, szREPZ, szRET, szRETF,
|
|
szRETN, szROL, szROR, szRSM, szSAHF, szSAL,
|
|
szSAR, szSBB, szSCAS, szSCASB, szSCASD, szSCASW,
|
|
szSETA, szSETAE, szSETB, szSETBE, szSETC, szSETE,
|
|
szSETG, szSETGE, szSETL, szSETLE, szSETNA, szSETNAE,
|
|
szSETNB, szSETNBE, szSETNC, szSETNE, szSETNG, szSETNGE,
|
|
szSETNL, szSETNLE, szSETNO, szSETNP, szSETNS, szSETNZ,
|
|
szSETO, szSETP, szSETPE, szSETPO, szSETS, szSETZ,
|
|
szSGDT, szSHL, szSHLD, szSHR, szSHRD, szSIDT,
|
|
szSLDT, szSMSW, szSS, szSTC, szSTD, szSTI,
|
|
szSTOS, szSTOSB, szSTOSD, szSTOSW, szSTR, szSUB,
|
|
szTEST, szVERR, szVERW, szWAIT, szWBINVD, szWRMSR,
|
|
szXADD, szXCHG, szXLAT, szXOR
|
|
};
|
|
|
|
#define OPTABLESIZE (sizeof(OpTable) / sizeof(PUCHAR))
|
|
|
|
|
|
/*** X86SearchOpcode - search for opcode
|
|
*
|
|
* Purpose:
|
|
* Search the opcode table for a match with the string
|
|
* pointed by *pszOp.
|
|
*
|
|
* Input:
|
|
* *pszOp - string to search as opcode
|
|
*
|
|
* Returns:
|
|
* if not -1, index of match entry in opcode table
|
|
* if -1, not found
|
|
*
|
|
*************************************************************************/
|
|
|
|
PUCHAR X86SearchOpcode (PUCHAR pszop)
|
|
{
|
|
LONG low = 0;
|
|
LONG mid;
|
|
LONG high = OPTABLESIZE - 1;
|
|
LONG match;
|
|
|
|
while (low <= high) {
|
|
mid = (low + high) / 2;
|
|
match = (ULONG)strcmp((char *)pszop, (char *)OpTable[mid]);
|
|
if (match == -1)
|
|
high = mid - 1;
|
|
else if (match == 1)
|
|
low = mid + 1;
|
|
else
|
|
return OpTable[mid] + strlen((char *)OpTable[mid]) + 1;
|
|
}
|
|
return NULL;
|
|
}
|