Various changes to the instruction-definitions and decoder/encoder-tables

This commit is contained in:
flobernd 2017-07-19 18:43:59 +02:00
parent d7a49370fe
commit 341f3866c3
9 changed files with 23134 additions and 23064 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3369,26 +3369,27 @@ static void ZydisSetEffectiveOperandSize(ZydisDecoderContext* context,
* *
* @param context A pointer to the @c ZydisDecoderContext struct. * @param context A pointer to the @c ZydisDecoderContext struct.
* @param instruction A pointer to the @c ZydisDecodedInstruction struct. * @param instruction A pointer to the @c ZydisDecodedInstruction struct.
* @param definition A pointer to the @c ZydisInstructionDefinition struct.
*/ */
static void ZydisSetEffectiveAddressWidth(ZydisDecoderContext* context, static void ZydisSetEffectiveAddressWidth(ZydisDecoderContext* context,
ZydisDecodedInstruction* instruction) ZydisDecodedInstruction* instruction, const ZydisInstructionDefinition* definition)
{ {
ZYDIS_ASSERT(context); ZYDIS_ASSERT(context);
ZYDIS_ASSERT(instruction); ZYDIS_ASSERT(instruction);
ZydisBool hasOverride = definition->acceptsAddressSizeOverride &&
(instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE);
switch (context->decoder->addressWidth) switch (context->decoder->addressWidth)
{ {
case 16: case 16:
instruction->addressWidth = instruction->addressWidth = hasOverride ? 32 : 16;
(instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 16;
break; break;
case 32: case 32:
instruction->addressWidth = instruction->addressWidth = hasOverride ? 16 : 32;
(instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 16 : 32;
break; break;
case 64: case 64:
instruction->addressWidth = instruction->addressWidth = hasOverride ? 32 : 64;
(instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 64;
break; break;
default: default:
ZYDIS_UNREACHABLE; ZYDIS_UNREACHABLE;
@ -4226,7 +4227,7 @@ static ZydisStatus ZydisDecodeInstruction(ZydisDecoderContext* context,
const ZydisInstructionDefinition* definition; const ZydisInstructionDefinition* definition;
ZydisGetInstructionDefinition(instruction->encoding, node->value, &definition); ZydisGetInstructionDefinition(instruction->encoding, node->value, &definition);
ZydisSetEffectiveOperandSize(context, instruction, definition); ZydisSetEffectiveOperandSize(context, instruction, definition);
ZydisSetEffectiveAddressWidth(context, instruction); ZydisSetEffectiveAddressWidth(context, instruction, definition);
const ZydisInstructionEncodingInfo* info; const ZydisInstructionEncodingInfo* info;
ZydisGetInstructionEncodingInfo(node, &info); ZydisGetInstructionEncodingInfo(node, &info);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -545,7 +545,8 @@ enum ZydisMaskPolicies
uint8_t operandCount ZYDIS_BITFIELD( 4); \ uint8_t operandCount ZYDIS_BITFIELD( 4); \
uint16_t operandReference ZYDIS_BITFIELD(15); \ uint16_t operandReference ZYDIS_BITFIELD(15); \
uint8_t operandSizeMap ZYDIS_BITFIELD( 3); \ uint8_t operandSizeMap ZYDIS_BITFIELD( 3); \
uint8_t flagsReference ZYDIS_BITFIELD( 7) uint8_t flagsReference ZYDIS_BITFIELD( 7); \
ZydisBool acceptsAddressSizeOverride ZYDIS_BITFIELD( 1)
#define ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR \ #define ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR \
ZYDIS_INSTRUCTION_DEFINITION_BASE; \ ZYDIS_INSTRUCTION_DEFINITION_BASE; \