📄 disasm.cpp
字号:
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdc,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdd,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xde,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdf,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe0
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe1
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe2
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe3
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe4
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe5
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe6
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe7
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe8
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xe9
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xea
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xeb
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xec
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xed
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xee
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xef
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf0
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf1,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf2
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf3
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf4
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf5
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xd6,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xd7,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf8
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf9
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xfa
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xfb
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xfc
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xfd
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xfe,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE } //0xff,
};
INSTRUCTION instruction[] =
{
{ C_ADD, "ADD", D_EB, D_GB, D_NONE }, //0x00,
{ C_ADD, "ADD", D_EV, D_GV, D_NONE }, //0x01,
{ C_ADD, "ADD", D_GB, D_EB, D_NONE }, //0x02,
{ C_ADD, "ADD", D_GV, D_EV, D_NONE }, //0x03,
{ C_ADD, "ADD", D_AL, D_IB, D_NONE }, //0x04,
{ C_ADD, "ADD", D_AXV, D_IV, D_NONE }, //0x05,
{ C_PUSH, "PUSH", D_ES, D_NONE, D_NONE }, //0x06,
{ C_POP, "POP", D_ES, D_NONE, D_NONE }, //0x07,
{ C_OR, "OR", D_EB, D_GB, D_NONE }, //0x08,
{ C_OR, "OR", D_EV, D_GV, D_NONE }, //0x09,
{ C_OR, "OR", D_GB, D_EB, D_NONE }, //0x0a,
{ C_OR, "OR", D_GV, D_EV, D_NONE }, //0x0b,
{ C_OR, "OR", D_AL, D_IB, D_NONE }, //0x0c,
{ C_OR, "OR", D_AXV, D_IV, D_NONE }, //0x0d,
{ C_PUSH, "PUSH", D_CS, D_NONE, D_NONE }, //0x0e,
{ C_0FH,(PSTR)instruction0FH,D_NONE,D_NONE, D_NONE }, //0x0f,
{ C_ADC, "ADC", D_EB, D_GB, D_NONE }, //0x10,
{ C_ADC, "ADC", D_EV, D_GV, D_NONE }, //0x11,
{ C_ADC, "ADC", D_GB, D_EB, D_NONE }, //0x12,
{ C_ADC, "ADC", D_GV, D_EV, D_NONE }, //0x13,
{ C_ADC, "ADC", D_AL, D_IB, D_NONE }, //0x14,
{ C_ADC, "ADC", D_AXV, D_IV, D_NONE }, //0x15,
{ C_PUSH, "PUSH", D_SS, D_NONE, D_NONE }, //0x16,
{ C_POP, "POP", D_SS, D_NONE, D_NONE }, //0x17,
{ C_SBB, "SBB", D_EB, D_GB, D_NONE }, //0x18,
{ C_SBB, "SBB", D_EV, D_GV, D_NONE }, //0x19,
{ C_SBB, "SBB", D_GB, D_EB, D_NONE }, //0x1a,
{ C_SBB, "SBB", D_GV, D_EV, D_NONE }, //0x1b,
{ C_SBB, "SBB", D_AL, D_IB, D_NONE }, //0x1c,
{ C_SBB, "SBB", D_AXV, D_IV, D_NONE }, //0x1d,
{ C_PUSH, "PUSH", D_DS, D_NONE, D_NONE }, //0x1e,
{ C_POP, "POP", D_DS, D_NONE, D_NONE }, //0x1f,
{ C_AND, "AND", D_EB, D_GB, D_NONE }, //0x20,
{ C_AND, "AND", D_EV, D_GV, D_NONE }, //0x21,
{ C_AND, "AND", D_GB, D_EB, D_NONE }, //0x22,
{ C_AND, "AND", D_GV, D_EV, D_NONE }, //0x23,
{ C_AND, "AND", D_AL, D_IB, D_NONE }, //0x24,
{ C_AND, "AND", D_AXV, D_IV, D_NONE }, //0x25,
{ C_SEGPREFIX, "ES:", _ES_, D_NONE, D_NONE }, //0x26
{ C_DAA, "DAA", D_NONE, D_NONE, D_NONE }, //0x27,
{ C_SUB, "SUB", D_EB, D_GB, D_NONE }, //0x28,
{ C_SUB, "SUB", D_EV, D_GV, D_NONE }, //0x29,
{ C_SUB, "SUB", D_GB, D_EB, D_NONE }, //0x2a,
{ C_SUB, "SUB", D_GV, D_EV, D_NONE }, //0x2b,
{ C_SUB, "SUB", D_AL, D_IB, D_NONE }, //0x2c,
{ C_SUB, "SUB", D_AXV, D_IV, D_NONE }, //0x2d,
{ C_SEGPREFIX, "CS:", _CS_, D_NONE, D_NONE }, //0x2e
{ C_DAS, "DAS", D_NONE, D_NONE, D_NONE }, //0x2f,
{ C_XOR, "XOR", D_EB, D_GB, D_NONE }, //0x30,
{ C_XOR, "XOR", D_EV, D_GV, D_NONE }, //0x31,
{ C_XOR, "XOR", D_GB, D_EB, D_NONE }, //0x32,
{ C_XOR, "XOR", D_GV, D_EV, D_NONE }, //0x33,
{ C_XOR, "XOR", D_AL, D_IB, D_NONE }, //0x34,
{ C_XOR, "XOR", D_AXV, D_IV, D_NONE }, //0x35,
{ C_SEGPREFIX, "SS:", _SS_, D_NONE, D_NONE }, //0x36
{ C_AAA, "AAA", D_NONE, D_NONE, D_NONE }, //0x37,
{ C_CMP, "CMP", D_EB, D_GB, D_NONE }, //0x38,
{ C_CMP, "CMP", D_EV, D_GV, D_NONE }, //0x39,
{ C_CMP, "CMP", D_GB, D_EB, D_NONE }, //0x3a,
{ C_CMP, "CMP", D_GV, D_EV, D_NONE }, //0x3b,
{ C_CMP, "CMP", D_AL, D_IB, D_NONE }, //0x3c,
{ C_CMP, "CMP", D_AXV, D_IV, D_NONE }, //0x3d,
{ C_SEGPREFIX, "DS:", _DS_, D_NONE, D_NONE }, //0x3e
{ C_AAS, "AAS", D_NONE, D_NONE, D_NONE }, //0x3f,
{ C_INC, "INC", D_AXV, D_NONE, D_NONE }, //0x40,
{ C_INC, "INC", D_CXV, D_NONE, D_NONE }, //0x41,
{ C_INC, "INC", D_DXV, D_NONE, D_NONE }, //0x42,
{ C_INC, "INC", D_BXV, D_NONE, D_NONE }, //0x43,
{ C_INC, "INC", D_SPV, D_NONE, D_NONE }, //0x44,
{ C_INC, "INC", D_BPV, D_NONE, D_NONE }, //0x45,
{ C_INC, "INC", D_SIV, D_NONE, D_NONE }, //0x46,
{ C_INC, "INC", D_DIV, D_NONE, D_NONE }, //0x47,
{ C_DEC, "DEC", D_AXV, D_NONE, D_NONE }, //0x48,
{ C_DEC, "DEC", D_CXV, D_NONE, D_NONE }, //0x49,
{ C_DEC, "DEC", D_DXV, D_NONE, D_NONE }, //0x4a,
{ C_DEC, "DEC", D_BXV, D_NONE, D_NONE }, //0x4b,
{ C_DEC, "DEC", D_SPV, D_NONE, D_NONE }, //0x4c,
{ C_DEC, "DEC", D_BPV, D_NONE, D_NONE }, //0x4d,
{ C_DEC, "DEC", D_SIV, D_NONE, D_NONE }, //0x4e,
{ C_DEC, "DEC", D_DIV, D_NONE, D_NONE }, //0x4f,
{ C_PUSH, "PUSH", D_AXV, D_NONE, D_NONE }, //0x50,
{ C_PUSH, "PUSH", D_CXV, D_NONE, D_NONE }, //0x51,
{ C_PUSH, "PUSH", D_DXV, D_NONE, D_NONE }, //0x52,
{ C_PUSH, "PUSH", D_BXV, D_NONE, D_NONE }, //0x53,
{ C_PUSH, "PUSH", D_SPV, D_NONE, D_NONE }, //0x54,
{ C_PUSH, "PUSH", D_BPV, D_NONE, D_NONE }, //0x55,
{ C_PUSH, "PUSH", D_SIV, D_NONE, D_NONE }, //0x56,
{ C_PUSH, "PUSH", D_DIV, D_NONE, D_NONE }, //0x57,
{ C_POP, "POP", D_AXV, D_NONE, D_NONE }, //0x58,
{ C_POP, "POP", D_CXV, D_NONE, D_NONE }, //0x59,
{ C_POP, "POP", D_DXV, D_NONE, D_NONE }, //0x5a,
{ C_POP, "POP", D_BXV, D_NONE, D_NONE }, //0x5b,
{ C_POP, "POP", D_SPV, D_NONE, D_NONE }, //0x5c,
{ C_POP, "POP", D_BPV, D_NONE, D_NONE }, //0x5d,
{ C_POP, "POP", D_SIV, D_NONE, D_NONE }, //0x5e,
{ C_POP, "POP", D_DIV, D_NONE, D_NONE }, //0x5f,
{ C_PUSHA, "PUSHA", D_V, D_NONE, D_NONE }, //0x60,
{ C_POPA, "POPA", D_V, D_NONE, D_NONE }, //0x61,
{ C_BOUND, "BOUND", D_GV, D_MA, D_NONE }, //0x62,
{ C_ARPL, "ARPL", D_EW, D_GW, D_NONE }, //0x63,
{ C_SEGPREFIX, "FS:", _FS_, D_NONE, D_NONE }, //0x64
{ C_SEGPREFIX, "GS:", _GS_, D_NONE, D_NONE }, //0x65
{ C_OPRSIZE, NULL, D_NONE, D_NONE, D_NONE }, //0x66
{ C_ADRSIZE, NULL, D_NONE, D_NONE, D_NONE }, //0x67
{ C_PUSH, "PUSH", D_IV, D_NONE, D_NONE }, //0x68,
{ C_IMUL, "IMUL", D_GV, D_EV, D_IV }, //0x69,
{ C_PUSH, "PUSH", D_SB, D_NONE, D_NONE }, //0x6a,
{ C_IMUL, "IMUL", D_GV, D_EV, D_IB }, //0x6b,
{ C_INS, "INS", D_XB, D_DX, D_NONE }, //0x6c,
{ C_INS, "INS", D_XV, D_DX, D_NONE }, //0x6d,
{ C_OUTS, "OUTS", D_DX, D_XB, D_NONE }, //0x6e,
{ C_OUTS, "OUTS", D_DX, D_XV, D_NONE }, //0x6f,
{ C_JO, "JO", D_JB, D_NONE, D_NONE }, //0x70,
{ C_JNO, "JNO", D_JB, D_NONE, D_NONE }, //0x71,
{ C_JB, "JB", D_JB, D_NONE, D_NONE }, //0x72,
{ C_JNB, "JNB", D_JB, D_NONE, D_NONE }, //0x73,
{ C_JZ, "JZ", D_JB, D_NONE, D_NONE }, //0x74,
{ C_JNZ, "JNZ", D_JB, D_NONE, D_NONE }, //0x75,
{ C_JNA, "JNA", D_JB, D_NONE, D_NONE }, //0x76,
{ C_JA, "JA", D_JB, D_NONE, D_NONE }, //0x77,
{ C_JS, "JS", D_JB, D_NONE, D_NONE }, //0x78,
{ C_JNS, "JNS", D_JB, D_NONE, D_NONE }, //0x79,
{ C_JP, "JP", D_JB, D_NONE, D_NONE }, //0x7a,
{ C_JNP, "JNP", D_JB, D_NONE, D_NONE }, //0x7b,
{ C_JL, "JL", D_JB, D_NONE, D_NONE }, //0x7c,
{ C_JNL, "JNL", D_JB, D_NONE, D_NONE }, //0x7d,
{ C_JLE, "JLE", D_JB, D_NONE, D_NONE }, //0x7e,
{ C_JNLE, "JNLE", D_JB, D_NONE, D_NONE }, //0x7f,
{ C_GROUP,(PSTR)grouptable1,D_EB, D_IB, D_NONE }, //0x80,
{ C_GROUP,(PSTR)grouptable1,D_EV, D_IV, D_NONE }, //0x81,
{ C_GROUP,(PSTR)grouptable1,D_EB, D_IB, D_NONE }, //0x82,
{ C_GROUP,(PSTR)grouptable1,D_EV, D_SB, D_NONE }, //0x83,
{ C_TEST, "TEST", D_EB, D_GB, D_NONE }, //0x84,
{ C_TEST, "TEST", D_EV, D_GV, D_NONE }, //0x85,
{ C_XCHG, "XCHG", D_EB, D_GB, D_NONE }, //0x86,
{ C_XCHG, "XCHG", D_EV, D_GV, D_NONE }, //0x87,
{ C_MOV, "MOV", D_EB, D_GB, D_NONE }, //0x88,
{ C_MOV, "MOV", D_EV, D_GV, D_NONE }, //0x89,
{ C_MOV, "MOV", D_GB, D_EB, D_NONE }, //0x8a,
{ C_MOV, "MOV", D_GV, D_EV, D_NONE }, //0x8b,
{ C_MOV, "MOV", D_EW, D_SW, D_NONE }, //0x8c,
{ C_LEA, "LEA", D_GV, D_MV, D_NONE }, //0x8d,
{ C_MOV, "MOV", D_SW, D_EW, D_NONE }, //0x8e,
{ C_POP, "POP", D_EV, D_NONE, D_NONE }, //0x8f,
{ C_NOP, "NOP", D_NONE, D_NONE, D_NONE }, //0x90,
{ C_XCHG, "XCHG", D_CXV, D_AXV, D_NONE }, //0x91,
{ C_XCHG, "XCHG", D_DXV, D_AXV, D_NONE }, //0x92,
{ C_XCHG, "XCHG", D_BXV, D_AXV, D_NONE }, //0x93,
{ C_XCHG, "XCHG", D_SPV, D_AXV, D_NONE }, //0x94,
{ C_XCHG, "XCHG", D_BPV, D_AXV, D_NONE }, //0x95,
{ C_XCHG, "XCHG", D_SIV, D_AXV, D_NONE }, //0x96,
{ C_XCHG, "XCHG", D_DIV, D_AXV, D_NONE }, //0x97,
{ C_CBW, "CBW", D_NONE, D_NONE, D_NONE }, //0x98,
{ C_CWD, "CWD", D_NONE, D_NONE, D_NONE }, //0x99,
{ C_CALLFAR, "CALL", D_JP, D_NONE, D_NONE }, //0x9a,
{ C_WAIT, "WAIT", D_NONE, D_NONE, D_NONE }, //0x9b,
{ C_PUSHF, "PUSHF", D_V, D_NONE, D_NONE }, //0x9c,
{ C_POPF, "POPF", D_V, D_NONE, D_NONE }, //0x9d,
{ C_SAHF, "SAHF", D_V, D_NONE, D_NONE }, //0x9e,
{ C_LAHF, "LAHF", D_V, D_NONE, D_NONE }, //0x9f,
{ C_MOV, "MOV", D_AL, D_OB, D_NONE }, //0xa0,
{ C_MOV, "MOV", D_AXV, D_OV, D_NONE }, //0xa1,
{ C_MOV, "MOV", D_OB, D_AL, D_NONE }, //0xa2,
{ C_MOV, "MOV", D_OV, D_AXV, D_NONE }, //0xa3,
{ C_MOVS, "MOVS", D_XB, D_NONE, D_NONE }, //0xa4,
{ C_MOVS, "MOVS", D_XV, D_NONE, D_NONE }, //0xa5,
{ C_CMPS, "CMPS", D_XB, D_NONE, D_NONE }, //0xa6,
{ C_CMPS, "CMPS", D_XV, D_NONE, D_NONE }, //0xa7,
{ C_TEST, "TEST", D_AL, D_IB, D_NONE }, //0xa8,
{ C_TEST, "TEST", D_AXV, D_IV, D_NONE }, //0xa9,
{ C_STOS, "STOS", D_XB, D_NONE, D_NONE }, //0xaa,
{ C_STOS, "STOS", D_XV, D_NONE, D_NONE }, //0xab,
{ C_LODS, "LODS", D_XB, D_NONE, D_NONE }, //0xac,
{ C_LODS, "LODS", D_XV, D_NONE, D_NONE }, //0xad,
{ C_SCAS, "SCAS", D_XB, D_NONE, D_NONE }, //0xae,
{ C_SCAS, "SCAS", D_XV, D_NONE, D_NONE }, //0xaf,
{ C_MOV, "MOV", D_AL, D_IB, D_NONE }, //0xb0,
{ C_MOV, "MOV", D_CL, D_IB, D_NONE }, //0xb1,
{ C_MOV, "MOV", D_DL, D_IB, D_NONE }, //0xb2,
{ C_MOV, "MOV", D_BL, D_IB, D_NONE }, //0xb3,
{ C_MOV, "MOV", D_AH, D_IB, D_NONE }, //0xb4,
{ C_MOV, "MOV", D_CH, D_IB, D_NONE }, //0xb5,
{ C_MOV, "MOV", D_DH, D_IB, D_NONE }, //0xb6,
{ C_MOV, "MOV", D_BH, D_IB, D_NONE }, //0xb7,
{ C_MOV, "MOV", D_AXV, D_IV, D_NONE }, //0xb8,
{ C_MOV, "MOV", D_CXV, D_IV, D_NONE }, //0xb9,
{ C_MOV, "MOV", D_DXV, D_IV, D_NONE }, //0xba,
{ C_MOV, "MOV", D_BXV, D_IV, D_NONE }, //0xbb,
{ C_MOV, "MOV", D_SPV, D_IV, D_NONE }, //0xbc,
{ C_MOV, "MOV", D_BPV, D_IV, D_NONE }, //0xbd,
{ C_MOV, "MOV", D_SIV, D_IV, D_NONE }, //0xbe,
{ C_MOV, "MOV", D_DIV, D_IV, D_NONE }, //0xbf,
{ C_GROUP,(PSTR)grouptable2,D_EB, D_IB, D_NONE }, //0xc0,
{ C_GROUP,(PSTR)grouptable2,D_EV, D_IB, D_NONE }, //0xc1,
{ C_RET, "RET", D_IW, D_NONE, D_NONE }, //0xc2,
{ C_RET, "RET", D_NONE, D_NONE, D_NONE }, //0xc3,
{ C_LES, "LES", D_GV, D_MP, D_NONE }, //0xc4,
{ C_LDS, "LDS", D_GV, D_MP, D_NONE }, //0xc5,
{ C_GROUP,(PSTR)grouptable3,D_EB, D_IB, D_NONE }, //0xc6,
{ C_GROUP,(PSTR)grouptable3,D_EV, D_IV, D_NONE }, //0xc7,
{ C_ENTER, "ENTER", D_IW, D_IB, D_NONE }, //0xc8,
{ C_LEAVE, "LEAVE", D_NONE, D_NONE, D_NONE }, //0xc9,
{ C_RETF, "RETF", D_IW, D_NONE, D_NONE }, //0xca,
{ C_RETF, "RETF", D_NONE, D_NONE, D_NONE }, //0xcb,
{ C_INT3, "INT3", D_NONE, D_NONE, D_NONE }, //0xcc,
{ C_INT, "INT", D_IB, D_NONE, D_NONE }, //0xcd,
{ C_INTO, "INTO", D_NONE, D_NONE, D_NONE }, //0xce,
{ C_IRET, "IRET", D_NONE, D_NONE, D_NONE }, //0xcf,
{ C_GROUP,(PSTR)grouptable2,D_EB, D_1, D_NONE }, //0xd0,
{ C_GROUP,(PSTR)grouptable2,D_EV, D_1, D_NONE }, //0xd1,
{ C_GROUP,(PSTR)grouptable2,D_EB, D_CL, D_NONE }, //0xd2,
{ C_GROUP,(PSTR)grouptable2,D_EV, D_CL, D_NONE }, //0xd3,
{ C_AAM, "AAM", D_IB, D_NONE, D_NONE }, //0xd4,
{ C_AAD, "AAD", D_IB, D_NONE, D_NONE }, //0xd5,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xd6,
{ C_XLAT, "XLAT", D_NONE, D_NONE, D_NONE }, //0xd7,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xd8,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xd9,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xda,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdb,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdc,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdd,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xde,
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xdf,
{ C_LOOPNZ, "LOOPNZ", D_JB, D_NONE, D_NONE }, //0xe0
{ C_LOOPZ, "LOOPZ", D_JB, D_NONE, D_NONE }, //0xe1
{ C_LOOP, "LOOP", D_JB, D_NONE, D_NONE }, //0xe2
{ C_JCXZ, "JCXZ", D_JB, D_NONE, D_NONE }, //0xe3
{ C_IN, "IN", D_AL, D_IB, D_NONE }, //0xe4
{ C_IN, "IN", D_AXV, D_IB, D_NONE }, //0xe5
{ C_OUT, "OUT", D_IB, D_AL, D_NONE }, //0xe6
{ C_OUT, "OUT", D_IB, D_AXV, D_NONE }, //0xe7
{ C_CALL, "CALL", D_JV, D_NONE, D_NONE }, //0xe8
{ C_JMP, "JMP", D_JV, D_NONE, D_NONE }, //0xe9
{ C_JMPFAR, "JMP", D_JP, D_NONE, D_NONE }, //0xea
{ C_JMP, "JMP", D_JB, D_NONE, D_NONE }, //0xeb
{ C_IN, "IN", D_AL, D_DX, D_NONE }, //0xec
{ C_IN, "IN", D_AXV, D_DX, D_NONE }, //0xed
{ C_OUT, "OUT", D_DX, D_AL, D_NONE }, //0xee
{ C_OUT, "OUT", D_DX, D_AXV, D_NONE }, //0xef
{ C_LOCK, "LOCK", D_NONE, D_NONE, D_NONE }, //0xf0
{ C_ERROR, NULL, D_NONE, D_NONE, D_NONE }, //0xf1,
{ C_REPNZ, "REPNZ", D_NONE, D_NONE, D_NONE }, //0xf2
{ C_REPZ, "REPZ", D_NONE, D_NONE, D_NONE }, //0xf3
{ C_HLT, "HLT", D_NONE, D_NONE, D_NONE }, //0xf4
{ C_CMC, "CMC", D_NONE, D_NONE, D_NONE }, //0xf5
{ C_GROUP,(PSTR)grouptable4,D_EB, D_NONE, D_NONE }, //0xf6,
{ C_GROUP,(PSTR)grouptable5,D_EV, D_NONE, D_NONE }, //0xf7,
{ C_CLC, "CLC", D_NONE, D_NONE, D_NONE }, //0xf8
{ C_STC, "STC", D_NONE, D_NONE, D_NONE }, //0xf9
{ C_CLI, "CLI", D_NONE, D_NONE, D_NONE }, //0xfa
{ C_STI, "STI", D_NONE, D_NONE, D_NONE }, //0xfb
{ C_CLD, "CLD", D_NONE, D_NONE, D_NONE }, //0xfc
{ C_STD, "STD", D_NONE, D_NONE, D_NONE }, //0xfd
{ C_GROUP,(PSTR)grouptable6,D_EB, D_NONE, D_NONE }, //0xfe,
{ C_GROUP,(PSTR)grouptable7,D_EV, D_NONE, D_NONE } //0xff,
};
//******************************************************
void st_IDA_OUT::output(PSTR buf)
{
CString retn;
if (!this->LockName.IsEmpty())
{
retn += this->LockName;
retn += " ";
}
if (!this->RepName.IsEmpty())
{
retn += this->RepName;
retn += " ";
}
if (!this->CmdStr.IsEmpty())
{
retn += this->CmdStr;
retn += " ";
while (retn.GetLength() < 7)
retn += " ";
}
//par1
{
CString tem = this->Par1Ptr;
tem += this->Par1SegPrefix;
tem += this->Par1Str;
if (!tem.IsEmpty())
retn += tem;
}
//par2
{
CString tem = this->Par2Ptr;
tem += this->Par2SegPrefix;
tem += this->Par2Str;
if (!tem.IsEmpty())
{
retn += ',';
retn += tem;
}
}
//par3
{
CString tem = this->Par3Str;
if (!tem.IsEmpty())
{
retn += ',';
retn += tem;
}
}
strcpy(buf, retn);
}
DWORD CDisasm::Disassembler_X(PBYTE codebuf, DWORD eip, OUT st_IDA_OUT* idaout)
{
// if (memcmp(codebuf, "\x0F\xAF\xC0", 3) == 0)
// {
// memcmp(codebuf, "\x0F\xAF\xC0", 3); //imul eax, eax
// }
m_idaout = idaout;
UasmCode = codebuf;
BaseAddress = eip;
// Initialize data
CodeCount = 0; /* It's code's number. */
OpSize = U_Size;
AdrSize = U_Size;
SegPrefix = _NOSEG_;
LockPrefix = NOPREFIX;
RepPrefix = NOPREFIX;
U_ErrorCode = ERR_NOERROR;
DisassemblerOne();
// Has any error?
if (U_ErrorCode != ERR_NOERROR)
{
this->m_idaout->CmdStr = "INVALID_CODE";
return 1;
}
return CodeCount;
}
/*
void proc1();
int main(int argc,char** argv)
{
proc1();
return 0;
if(argc<2)
{
dbgout("Usage: disasm file.com\n");
return 1;
}
char buf[128];
FILE *fp = fopen(argv[1],"rb");
DWORD filelen = filelength(fileno(fp));
PBYTE codebuf = new BYTE[filelen+1];
fread(codebuf,filelen,1,fp);
fclose(fp);
Set_Disassembler_Mode(BIT32);
for(DWORD len=0;len < filelen;)
{
DWORD pos = len+0x100;
len += Disassembler(buf,codebuf+len,pos);
dbgout("%08x %s\n",pos,buf);
}
delete codebuf;
return 0;
}
*/
//******************************************************
void CDisasm::OpSizePrefix()
{
if( OpSize==BIT16 )
OpSize=BIT32;
else
OpSize=BIT16;
}
void CDisasm::AdrSizePrefix()
{
if( AdrSize==BIT16 )
AdrSize=BIT32;
else
AdrSize=BIT16;
}
/***********************************************************/
/*
void SetName(PSTR name)
{
Putchs(name);
SetBufPtrTox2();
}*/
BYTE PeekB(PBYTE codebuf)
{
return *codebuf;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -