16 #ifndef X86DISASSEMBLERDECODER_H
17 #define X86DISASSEMBLERDECODER_H
23 #define INSTRUCTION_SPECIFIER_FIELDS \
26 #define INSTRUCTION_IDS \
27 uint16_t instructionIDs;
31 #undef INSTRUCTION_SPECIFIER_FIELDS
32 #undef INSTRUCTION_IDS
37 #define modFromModRM(modRM) (((modRM) & 0xc0) >> 6)
38 #define regFromModRM(modRM) (((modRM) & 0x38) >> 3)
39 #define rmFromModRM(modRM) ((modRM) & 0x7)
40 #define scaleFromSIB(sib) (((sib) & 0xc0) >> 6)
41 #define indexFromSIB(sib) (((sib) & 0x38) >> 3)
42 #define baseFromSIB(sib) ((sib) & 0x7)
43 #define wFromREX(rex) (((rex) & 0x8) >> 3)
44 #define rFromREX(rex) (((rex) & 0x4) >> 2)
45 #define xFromREX(rex) (((rex) & 0x2) >> 1)
46 #define bFromREX(rex) ((rex) & 0x1)
48 #define rFromVEX2of3(vex) (((~(vex)) & 0x80) >> 7)
49 #define xFromVEX2of3(vex) (((~(vex)) & 0x40) >> 6)
50 #define bFromVEX2of3(vex) (((~(vex)) & 0x20) >> 5)
51 #define mmmmmFromVEX2of3(vex) ((vex) & 0x1f)
52 #define wFromVEX3of3(vex) (((vex) & 0x80) >> 7)
53 #define vvvvFromVEX3of3(vex) (((~(vex)) & 0x78) >> 3)
54 #define lFromVEX3of3(vex) (((vex) & 0x4) >> 2)
55 #define ppFromVEX3of3(vex) ((vex) & 0x3)
57 #define rFromVEX2of2(vex) (((~(vex)) & 0x80) >> 7)
58 #define vvvvFromVEX2of2(vex) (((~(vex)) & 0x78) >> 3)
59 #define lFromVEX2of2(vex) (((vex) & 0x4) >> 2)
60 #define ppFromVEX2of2(vex) ((vex) & 0x3)
62 #define rFromXOP2of3(xop) (((~(xop)) & 0x80) >> 7)
63 #define xFromXOP2of3(xop) (((~(xop)) & 0x40) >> 6)
64 #define bFromXOP2of3(xop) (((~(xop)) & 0x20) >> 5)
65 #define mmmmmFromXOP2of3(xop) ((xop) & 0x1f)
66 #define wFromXOP3of3(xop) (((xop) & 0x80) >> 7)
67 #define vvvvFromXOP3of3(vex) (((~(vex)) & 0x78) >> 3)
68 #define lFromXOP3of3(xop) (((xop) & 0x4) >> 2)
69 #define ppFromXOP3of3(xop) ((xop) & 0x3)
97 #define EA_BASES_16BIT \
133 #define EA_BASES_32BIT \
169 #define EA_BASES_64BIT \
317 #define REGS_SEGMENT \
335 #define REGS_CONTROL \
346 #define ALL_EA_BASES \
351 #define ALL_SIB_BASES \
377 #define ENTRY(x) EA_BASE_##x,
380 #define ENTRY(x) EA_REG_##x,
394 #define ENTRY(x) SIB_INDEX_##x,
408 #define ENTRY(x) SIB_BASE_##x,
429 #define ENTRY(x) MODRM_REG_##x,
496 typedef int (*
byteReader_t)(
const void* arg, uint8_t* byte, uint64_t address);
652 const void* readerArg,
void(* dlog_t)(void *arg, const char *log)
BOOL consumedDisplacement
int(* byteReader_t)(const void *arg, uint8_t *byte, uint64_t address)
uint8_t displacementOffset
int decodeInstruction(struct InternalInstruction *insn, byteReader_t reader, const void *readerArg, dlog_t logger, void *loggerArg, const void *miiArg, uint64_t startLoc, DisassemblerMode mode)
uint64_t prefixLocations[0x100]
const struct InstructionSpecifier * spec
uint8_t prefixPresent[0x100]
const char * x86DisassemblerGetInstrName(unsigned Opcode, const void *mii)
uint8_t numImmediatesConsumed
uint8_t numImmediatesTranslated
const struct OperandSpecifier * operands
void x86DisassemblerDebug(const char *file, unsigned line, const char *s)
EADisplacement eaDisplacement
static void logger(void *arg, const char *log)
uint64_t necessaryPrefixLocation
SegmentOverride segmentOverride
BOOL consumedOpcodeModifier