From 6bd79283e08982815cd91bedc77e85bea82015db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joel=20H=C3=B6ner?= Date: Thu, 6 Jul 2017 13:12:43 +0200 Subject: [PATCH] Fixed encoder header --- CMakeLists.txt | 22 +++++++++++++++------- include/Zydis/Encoder.h | 14 +++++++++----- src/EncoderData.h | 2 +- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6434ce6..9e75c08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1 FATAL_ERROR) include(GenerateExportHeader) include(GNUInstallDirs) @@ -9,6 +9,12 @@ project(Zydis VERSION 2.0) # =============================================================================================== # # Features +option(ZYDIS_FEATURE_DECODER + "Enable instruction decoding and formtting functionality" + ON) +option(ZYDIS_FEATURE_ENCODER + "Enable instruction encoding functionality" + OFF) option(ZYDIS_FEATURE_EVEX "Enable support for EVEX instructions" ON) @@ -21,12 +27,6 @@ option(ZYDIS_FEATURE_FLAGS option(ZYDIS_FEATURE_CPUID "Include information about CPUID feature-flags" OFF) -option(ZYDIS_FEATURE_DECODER - "Enable instruction decoding and formtting functionality" - ON) -option(ZYDIS_FEATURE_ENCODER - "Enable instruction encoding functionality" - OFF) # Build configuration option(ZYDIS_BUILD_EXAMPLES @@ -69,6 +69,14 @@ target_include_directories("Zydis" target_compile_definitions("Zydis" PRIVATE "_CRT_SECURE_NO_WARNINGS" "ZYDIS_EXPORTS") generate_export_header("Zydis" BASE_NAME "ZYDIS" EXPORT_FILE_NAME "ZydisExportConfig.h") +if (NOT ZYDIS_FEATURE_ENCODER AND NOT ZYDIS_FEATURE_DECODER) + message( + FATAL_ERROR + "\nIt's dangerous to go alone! Take at least one of these:\n" + "[ ] ZYDIS_FEATURE_ENCODER [ ] ZYDIS_FEATURE_DECODER" + ) +endif () + if (ZYDIS_FEATURE_EVEX) target_compile_definitions("Zydis" PUBLIC "ZYDIS_ENABLE_FEATURE_EVEX") endif () diff --git a/include/Zydis/Encoder.h b/include/Zydis/Encoder.h index 3d1ca37..4620f66 100644 --- a/include/Zydis/Encoder.h +++ b/include/Zydis/Encoder.h @@ -28,9 +28,11 @@ #define ZYDIS_ENCODER_H #include -#include #include -#include +#include +#ifdef ZYDIS_ENABLE_FEATURE_DECODER +# include +#endif #ifdef __cplusplus extern "C" { @@ -88,11 +90,11 @@ typedef struct ZydisEncoderOperand_ typedef struct ZydisEncoderRequest_ { ZydisMachineMode machineMode; - ZydisInstructionMnemonic mnemonic; + ZydisMnemonic mnemonic; ZydisInstructionAttributes attributes; ZydisInstructionEncoding encoding; uint8_t operandCount; - ZydisEncoderOperand operands[10]; + ZydisEncoderOperand operands[5]; // TODO: AVX stuff // TODO: MVEX stuff @@ -102,8 +104,10 @@ typedef struct ZydisEncoderRequest_ /* Exported functions */ /* ============================================================================================== */ -ZYDIS_EXPORT ZydisStatus ZydisEncoderRequestFromDecodedInstruction( +#ifdef ZYDIS_ENABLE_FEATURE_DECODER +ZYDIS_EXPORT ZydisStatus ZydisEncoderDecodedInstructionToRequest( const ZydisDecodedInstruction* in, ZydisEncoderRequest* out); +#endif /** * @brief Encodes the given instruction info to byte-code. diff --git a/src/EncoderData.h b/src/EncoderData.h index 239d98f..6ec61f9 100644 --- a/src/EncoderData.h +++ b/src/EncoderData.h @@ -73,7 +73,7 @@ typedef struct ZydisEncodableInstruction_ uint8_t evexB ZYDIS_BITFIELD( 2); uint8_t evexZ ZYDIS_BITFIELD( 2); uint8_t mvexE ZYDIS_BITFIELD( 2); - } filterIndizes; + } filters; } ZydisEncodableInstruction; /* ---------------------------------------------------------------------------------------------- */