diff options
Diffstat (limited to 'src/arch/x86/instruction.c')
-rw-r--r-- | src/arch/x86/instruction.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/arch/x86/instruction.c b/src/arch/x86/instruction.c index 72143ee..3e47d13 100644 --- a/src/arch/x86/instruction.c +++ b/src/arch/x86/instruction.c @@ -112,6 +112,7 @@ static x86_instruction _instructions[XOP_COUNT] = { [XOP_MOVZX_R1632_RM8] = { false, 0xb6, IDX_TO_EXT(-1), "movzx", XPX_TWO_BYTES | XPX_OPERAND_SIZE_OVERRIDE }, [XOP_MOVSX_R1632_RM8] = { false, 0xbe, IDX_TO_EXT(-1), "movsx", XPX_TWO_BYTES | XPX_OPERAND_SIZE_OVERRIDE }, + [XOP_MOVSX_R1632_RM1632] = { false, 0xbf, IDX_TO_EXT(-1), "movsx", XPX_TWO_BYTES | XPX_OPERAND_SIZE_OVERRIDE }, [XOP_ADC_RM8_R8] = { false, 0x10, IDX_TO_EXT(-1), "adc", XPX_NONE }, @@ -266,9 +267,12 @@ static x86_instruction _instructions[XOP_COUNT] = { [XOP_MOV_MOFFS1632_E_AX] = { false, 0xa3, IDX_TO_EXT(-1), "mov", XPX_OPERAND_SIZE_OVERRIDE }, + [XOP_MOVS_M1632_M1632] = { false, 0xa5, IDX_TO_EXT(-1), "movs", XPX_OPERAND_SIZE_OVERRIDE }, + [XOP_TEST_AL_IMM8] = { false, 0xa8, IDX_TO_EXT(-1), "test", XPX_NONE }, [XOP_TEST_E_AX_IMM1632] = { false, 0xa9, IDX_TO_EXT(-1), "test", XPX_OPERAND_SIZE_OVERRIDE }, + [XOP_STOS_M1632_E_AX] = { false, 0xab, IDX_TO_EXT(-1), "stos", XPX_OPERAND_SIZE_OVERRIDE }, [XOP_SCAS_AL_M8] = { false, 0xae, IDX_TO_EXT(-1), "scas", XPX_NONE }, @@ -521,6 +525,7 @@ X86Opcodes x86_guess_next_instruction(const bin_t *data, off_t pos, off_t len, X *prefix |= XPX_OPERAND_SIZE_OVERRIDE; break; case 0xf2: + case 0xf3: pos++; extra |= XPX_REPEAT_STRING_OPERATION; break; @@ -583,8 +588,11 @@ static const char *x86_get_instruction_text(const GX86Instruction *instr, const result = strdup(_instructions[instr->type].keyword); + /* FIXME : + http://www.intel.com/software/products/documentation/vlin/mergedprojects/analyzer_ec/mergedprojects/reference_olh/mergedProjects/instructions/instruct32_hh/vc276.htm + */ if (instr->prefixes & XPX_REPEAT_STRING_OPERATION) - result = strprep(result, "repnz "); + result = strprep(result, "rep "/*"repnz "*/); return result; |