diff --git a/Bindings/C/Zydis.h b/Bindings/C/Zydis.h deleted file mode 100644 index 49e8574..0000000 --- a/Bindings/C/Zydis.h +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_DISASSEMBLER_H_ -#define _ZYDIS_DISASSEMBLER_H_ - -#include "ZydisTypes.h" -#include "ZydisInstructionDecoder.h" -#include "ZydisInstructionFormatter.h" -#include "ZydisSymbolResolver.h" -#include "ZydisUtils.h" - -#endif /* _ZYDIS_DISASSEMBLER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionDecoder.cpp b/Bindings/C/ZydisInstructionDecoder.cpp deleted file mode 100644 index 89b622c..0000000 --- a/Bindings/C/ZydisInstructionDecoder.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisInstructionDecoder.h" -#include "ZydisInstructionDecoder.hpp" -#include "ZydisTypes.hpp" - -/* Helpers ===================================================================================== */ - -namespace -{ - -inline Zydis::BaseInput* ZydisBaseInput_CppPtr( - ZydisBaseInputContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseInput* ZydisBaseInput_CppPtr( - const ZydisBaseInputContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseInputContext* ZydisBaseInput_CPtr( - Zydis::BaseInput *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseInputContext* ZydisBaseInput_CPtr( - const Zydis::BaseInput *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - const ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline ZydisInstructionDecoderContext* ZydisInstructionDecoder_CPtr( - Zydis::InstructionDecoder *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisInstructionDecoderContext* ZydisInstructionDecoder_CPtr( - const Zydis::InstructionDecoder *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionDecoder* ZydisInstructionDecoder_CppPtr( - ZydisInstructionDecoderContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::InstructionDecoder* ZydisInstructionDecoder_CppPtr( - const ZydisInstructionDecoderContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline Zydis::DisassemblerMode ZydisDisassemblerMode_CppRepr( - ZydisDisassemblerMode val) -{ - return static_cast(val); -} - -inline ZydisDisassemblerMode ZydisDisassemblerMode_CRepr( - Zydis::DisassemblerMode val) -{ - return static_cast(val); -} - -inline Zydis::InstructionSetVendor ZydisInstructionSetVendor_CppRepr( - ZydisInstructionSetVendor val) -{ - return static_cast(val); -} - -inline ZydisInstructionSetVendor ZydisInstructionSetVendor_CRepr( - Zydis::InstructionSetVendor val) -{ - return static_cast(val); -} - -} - -/* BaseInput ============================================================================ */ - -void ZydisBaseInput_Release(ZydisBaseInputContext *ctx) -{ - delete ZydisBaseInput_CppPtr(ctx); -} - -uint8_t ZydisBaseInput_InputPeek(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info) -{ - return ZydisBaseInput_CppPtr(ctx)->inputPeek(*ZydisInstructionInfo_CppPtr(info)); -} - -uint8_t ZydisBaseInput_InputNext(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info) -{ - return ZydisBaseInput_CppPtr(ctx)->inputNext(*ZydisInstructionInfo_CppPtr(info)); -} - -uint8_t ZydisBaseInput_InputCurrent(const ZydisBaseInputContext *ctx) -{ - return ZydisBaseInput_CppPtr(ctx)->inputCurrent(); -} - -bool ZydisBaseInput_IsEndOfInput(const ZydisBaseInputContext *ctx) -{ - return ZydisBaseInput_CppPtr(ctx)->isEndOfInput(); -} - -uint64_t ZydisBaseInput_GetPosition(const ZydisBaseInputContext *ctx) -{ - return ZydisBaseInput_CppPtr(ctx)->getPosition(); -} - -bool ZydisBaseInput_SetPosition(ZydisBaseInputContext *ctx, uint64_t position) -{ - return ZydisBaseInput_CppPtr(ctx)->setPosition(position); -} - -/* MemoryInput ========================================================================== */ - -ZydisBaseInputContext* ZydisMemoryInput_Create(const void* buffer, size_t bufferLen) -{ - return reinterpret_cast( - new Zydis::MemoryInput(buffer, bufferLen)); -} - -/* InstructionDecoder ======================================================================== */ - -ZydisInstructionDecoderContext* ZydisInstructionDecoder_Create() -{ - return reinterpret_cast(new Zydis::InstructionDecoder); -} - -ZydisInstructionDecoderContext* ZydisInstructionDecoder_CreateEx( - ZydisBaseInputContext *input, - ZydisDisassemblerMode disassemblerMode, - ZydisInstructionSetVendor preferredVendor, - uint64_t instructionPointer) -{ - return ZydisInstructionDecoder_CPtr(new Zydis::InstructionDecoder( - ZydisBaseInput_CppPtr(input), - ZydisDisassemblerMode_CppRepr(disassemblerMode), - ZydisInstructionSetVendor_CppRepr(preferredVendor), - instructionPointer)); -} - -void ZydisInstructionDecoder_Release(ZydisInstructionDecoderContext *ctx) -{ - delete ZydisInstructionDecoder_CppPtr(ctx); -} - -bool ZydisInstructionDecoder_DecodeInstruction( - ZydisInstructionDecoderContext *ctx, ZydisInstructionInfo *info) -{ - return ZydisInstructionDecoder_CppPtr(ctx)->decodeInstruction( - *ZydisInstructionInfo_CppPtr(info)); -} - -ZydisBaseInputContext* ZydisInstructionDecoder_GetDataSource( - const ZydisInstructionDecoderContext *ctx) -{ - return ZydisBaseInput_CPtr(ZydisInstructionDecoder_CppPtr(ctx)->getDataSource()); -} - -void ZydisInstructionDecoder_SetDataSource( - ZydisInstructionDecoderContext *ctx, ZydisBaseInputContext *input) -{ - ZydisInstructionDecoder_CppPtr(ctx)->setDataSource(ZydisBaseInput_CppPtr(input)); -} - -ZydisDisassemblerMode ZydisInstructionDecoder_GetDisassemblerMode( - ZydisInstructionDecoderContext *ctx) -{ - return ZydisDisassemblerMode_CRepr(ZydisInstructionDecoder_CppPtr(ctx)->getDisassemblerMode()); -} - -void ZydisInstructionDecoder_SetDisassemblerMode( - ZydisInstructionDecoderContext *ctx, - ZydisDisassemblerMode disassemblerMode) -{ - ZydisInstructionDecoder_CppPtr(ctx)->setDisassemblerMode( - ZydisDisassemblerMode_CppRepr(disassemblerMode)); -} - -ZydisInstructionSetVendor ZydisInstructionDecoder_GetPreferredVendor( - const ZydisInstructionDecoderContext *ctx) -{ - return ZydisInstructionSetVendor_CRepr( - ZydisInstructionDecoder_CppPtr(ctx)->getPreferredVendor()); -} - -void ZydisInstructionDecoder_SetPreferredVendor( - ZydisInstructionDecoderContext *ctx, - ZydisInstructionSetVendor preferredVendor) -{ - return ZydisInstructionDecoder_CppPtr(ctx)->setPreferredVendor( - ZydisInstructionSetVendor_CppRepr(preferredVendor)); -} - -uint64_t ZydisInstructionDecoder_GetInstructionPointer( - ZydisInstructionDecoderContext *ctx) -{ - return ZydisInstructionDecoder_CppPtr(ctx)->getInstructionPointer(); -} - -void ZydisInstructionDecoder_SetInstructionPointer( - ZydisInstructionDecoderContext *ctx, - uint64_t instructionPointer) -{ - ZydisInstructionDecoder_CppPtr(ctx)->setInstructionPointer(instructionPointer); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionDecoder.h b/Bindings/C/ZydisInstructionDecoder.h deleted file mode 100644 index f6a3bce..0000000 --- a/Bindings/C/ZydisInstructionDecoder.h +++ /dev/null @@ -1,253 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_INSTRUCTIONDECODER_H_ -#define _ZYDIS_INSTRUCTIONDECODER_H_ - -#include "ZydisTypes.h" -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* BaseInput ============================================================================ */ - -typedef struct _ZydisBaseInputContext { int a; } ZydisBaseInputContext; - -/** - * @brief Releases a data source. - * @param ctx The context to release. - * The context may no longer be used after it was released. - */ -void ZydisBaseInput_Release(ZydisBaseInputContext *ctx); - -/** - * @brief Reads the next byte from the data source without altering the current input position - * or the @c length field of the @c info parameter. - * @param ctx The data source context. - * @param info The instruction info struct. - * @return The current input byte. If the result is zero, you should always check the @c flags - * field of the @c info parameter for error flags. Possible error values are - * @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - */ -uint8_t ZydisBaseInput_InputPeek(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info); - -/** - * @brief Reads the next byte from the data source. - * @param ctx The data soruce context. - * @param info The instruction info. - * @return The current input byte. If the result is zero, you should always check the - * @c flags field of the @c info parameter for error flags. - * Possible error values are @c IF_ERROR_END_OF_INPUT or @c IF_ERROR_LENGTH. - * This method increases the current input position and the @c length field of the @c info - * parameter. This function also appends the new byte to to @c data field of the @c info - * parameter. - */ -uint8_t ZydisBaseInput_InputNext(ZydisBaseInputContext *ctx, ZydisInstructionInfo *info); - -/** - * @brief Returns the current input byte. - * @param ctx The data soruce context. - * @return The current input byte. - * The current input byte is set everytime the @c inputPeek or @c inputNext method is called. - */ -// TODO: check long descr -uint8_t ZydisBaseInput_InputCurrent(const ZydisBaseInputContext *ctx); - -/** - * @brief Queries if the end of the data source is reached. - * @param ctx The data soruce context. - * @return @c true if end of input, @c false if not. - */ -bool ZydisBaseInput_IsEndOfInput(const ZydisBaseInputContext *ctx); - -/** - * @brief Returns the current input position. - * @param ctx The data soruce context. - * @return The current input position. - */ -uint64_t ZydisBaseInput_GetPosition(const ZydisBaseInputContext *ctx); - -/** - * @brief Sets a new input position. - * @param ctx The data soruce context. - * @param position The new input position. - * @return @c false if the new position exceeds the maximum input length. - */ -bool ZydisBaseInput_SetPosition(ZydisBaseInputContext *ctx, uint64_t position); - -/* MemoryInput ========================================================================== */ - -/** - * @brief Creates a memory data source. - * @param buffer The input buffer. - * @param bufferLen THe length of the input buffer. - * @return @c NULL if it fails, else a data source context. - * @see BaseInput_Release - */ -// TODO: verify return value -ZydisBaseInputContext* ZydisMemoryInput_Create(const void* buffer, size_t bufferLen); - -/* Enums ======================================================================================= */ - -/** - * @brief Values that represent a disassembler mode. - */ -typedef enum _ZydisDisassemblerMode /* : uint8_t */ -{ - DM_M16BIT, - DM_M32BIT, - DM_M64BIT -} ZydisDisassemblerMode; - -/** - * @brief Values that represent an instruction-set vendor. - */ -typedef enum _ZydisInstructionSetVendor /* : uint8_t */ -{ - ISV_ANY, - ISV_INTEL, - ISV_AMD -} ZydisInstructionSetVendor; - -/* InstructionDecoder ======================================================================== */ - -typedef struct _ZydisInstructionDecoderContext { int a; } ZydisInstructionDecoderContext; - -/** - * @brief Creates an instruction decoder. - * @return @c NULL if it fails, else an instruction decoder context. - * @see InstructionDecoder_Release - */ -// TODO: verify return value -ZydisInstructionDecoderContext* ZydisInstructionDecoder_Create(void); - -/** - * @brief Creates an instruction decoder. - * @param input A reference to the input data source. - * @param disassemblerMode The disassembler mode. - * @param preferredVendor The preferred instruction-set vendor. - * @param instructionPointer The initial instruction pointer. - * @return @c NULL if it fails, else an instruction decoder context. - * @see InstructionDecoder_Release - */ -ZydisInstructionDecoderContext* ZydisInstructionDecoder_CreateEx(ZydisBaseInputContext *input, - ZydisDisassemblerMode disassemblerMode, ZydisInstructionSetVendor preferredVendor, - uint64_t instructionPointer); - -/** - * @brief Releases an instruction decoder. - * @param ctx The context of the instruction decoder to release. - */ -void ZydisInstructionDecoder_Release(ZydisInstructionDecoderContext *ctx); - -/** - * @brief Decodes the next instruction from the input data source. - * @param ctx The instruction decoder context. - * @param info The @c ZydisInstructionInfo struct that receives the information about the decoded - * instruction. - * @return This function returns @c false if the current position exceeds the maximum input - * length. In all other cases (valid and invalid instructions) the return value is - * @c true. - */ -bool ZydisInstructionDecoder_DecodeInstruction(ZydisInstructionDecoderContext *ctx, - ZydisInstructionInfo *info); - -/** - * @brief Returns a pointer to the current data source. - * @param ctx The instruction decoder context. - * @return The context of the data source. - */ -ZydisBaseInputContext* ZydisInstructionDecoder_GetDataSource(const ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets a new data source. - * @param ctx The instruction decoder context. - * @param input The context of the new input data source. - */ -void ZydisInstructionDecoder_SetDataSource(ZydisInstructionDecoderContext *ctx, - ZydisBaseInputContext *input); - -/** - * @brief Returns the current disassembler mode. - * @param ctx The instruction decoder context. - * @return The current disassembler mode. - */ -ZydisDisassemblerMode ZydisInstructionDecoder_GetDisassemblerMode(ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets the current disassembler mode. - * @param ctx The instruction decoder context. - * @param disassemblerMode The new disassembler mode. - */ -void ZydisInstructionDecoder_SetDisassemblerMode(ZydisInstructionDecoderContext *ctx, - ZydisDisassemblerMode disassemblerMode); - -/** - * @brief Returns the preferred instruction-set vendor. - * @param ctx The instruction decoder context. - * @return The preferred instruction-set vendor. - */ -ZydisInstructionSetVendor ZydisInstructionDecoder_GetPreferredVendor( - const ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets the preferred instruction-set vendor. - * @param ctx The instruction decoder context. - * @param preferredVendor The new preferred instruction-set vendor. - */ -void ZydisInstructionDecoder_SetPreferredVendor(ZydisInstructionDecoderContext *ctx, - ZydisInstructionSetVendor preferredVendor); - -/** - * @brief Returns the current instruction pointer. - * @param ctx The instruction decoder context. - * @return The current instruction pointer. - */ -uint64_t ZydisInstructionDecoder_GetInstructionPointer(ZydisInstructionDecoderContext *ctx); - -/** - * @brief Sets a new instruction pointer. - * @param ctx The instruction decoder context. - * @param instructionPointer The new instruction pointer. - */ -void ZydisInstructionDecoder_SetInstructionPointer(ZydisInstructionDecoderContext *ctx, - uint64_t instructionPointer); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_INSTRUCTIONDECODER_H_ */ diff --git a/Bindings/C/ZydisInstructionFormatter.cpp b/Bindings/C/ZydisInstructionFormatter.cpp deleted file mode 100644 index d6d8c7c..0000000 --- a/Bindings/C/ZydisInstructionFormatter.cpp +++ /dev/null @@ -1,251 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisInstructionFormatter.h" -#include "ZydisInstructionFormatter.hpp" - -/* Helpers ===================================================================================== */ - -namespace -{ - -inline Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - const ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - const Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::ExactSymbolResolver* ZydisExactSymbolResolver_CppPtr( - ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::ExactSymbolResolver* ZydisExactSymbolResolver_CppPtr( - const ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_CPtr( - Zydis::ExactSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_CPtr( - const Zydis::ExactSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - const ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - const Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::BaseInstructionFormatter* ZydisBaseInstructionFormatter_CppPtr( - ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseInstructionFormatter* ZydisBaseInstructionFormatter_CppPtr( - const ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline Zydis::BaseInstructionFormatter* ZydisIntelInstructionFormatter_CppPtr( - ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseInstructionFormatter* ZydisIntelInstructionFormatter_CppPtr( - const ZydisBaseInstructionFormatterContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CPtr( - Zydis::BaseInstructionFormatter *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CPtr( - const Zydis::BaseInstructionFormatter *ctx) -{ - return reinterpret_cast(ctx); -} - -} - -/* BaseSymbolResolver ======================================================================== */ - -void ZydisBaseSymbolResolver_Release( - ZydisBaseSymbolResolverContext *ctx) -{ - delete ZydisBaseSymbolResolver_CppPtr(ctx); -} - -const char* ZydisBaseSymbolResolver_ResolveSymbol( - ZydisBaseSymbolResolverContext *ctx, - const ZydisInstructionInfo *info, - uint64_t address, - uint64_t *offset) -{ - return ZydisBaseSymbolResolver_CppPtr(ctx)->resolveSymbol( - *ZydisInstructionInfo_CppPtr(info), - address, - *offset); -} - -/* ExactSymbolResolver ======================================================================= */ - -ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_Create(void) -{ - return ZydisExactSymbolResolver_CPtr(new Zydis::ExactSymbolResolver); -} - -bool EZydisxactSymbolResolver_ContainsSymbol( - ZydisBaseSymbolResolverContext *ctx, - uint64_t address) -{ - return ZydisExactSymbolResolver_CppPtr(ctx)->containsSymbol(address); -} - -void ZydisExactSymbolResolverContext_SetSymbol( - ZydisBaseSymbolResolverContext *ctx, - uint64_t address, - const char* name) -{ - ZydisExactSymbolResolver_CppPtr(ctx)->setSymbol(address, name); -} - -void ZydisExactSymbolResolverContext_RemoveSymbol( - ZydisBaseSymbolResolverContext *ctx, - uint64_t address) -{ - ZydisExactSymbolResolver_CppPtr(ctx)->removeSymbol(address); -} - -void ZydisExactSymbolResolverContext_Clear( - ZydisBaseSymbolResolverContext *ctx) -{ - ZydisExactSymbolResolver_CppPtr(ctx)->clear(); -} - -/* BaseInstructionFormatter ================================================================== */ - -const char* ZydisBaseInstructionFormatter_FormatInstruction( - ZydisBaseInstructionFormatterContext *ctx, - const ZydisInstructionInfo *info) -{ - return ZydisBaseInstructionFormatter_CppPtr(ctx)->formatInstruction( - *ZydisInstructionInfo_CppPtr(info)); -} - -ZydisBaseSymbolResolverContext* ZydisBaseInstructionFormatter_GetSymbolResolver( - const ZydisBaseInstructionFormatterContext *ctx) -{ - return ZydisBaseSymbolResolver_CPtr( - ZydisBaseInstructionFormatter_CppPtr(ctx)->getSymbolResolver()); -} - -void ZydisBaseInstructionFormatter_SetSymbolResolver( - ZydisBaseInstructionFormatterContext *ctx, - ZydisBaseSymbolResolverContext *resolver) -{ - ZydisBaseInstructionFormatter_CppPtr(ctx)->setSymbolResolver( - ZydisBaseSymbolResolver_CppPtr(resolver)); -} - -void ZydisBaseInstructionFormatter_Release( - ZydisBaseInstructionFormatterContext *ctx) -{ - delete ZydisBaseInstructionFormatter_CppPtr(ctx); -} - -/* IntelInstructionFormatter ================================================================ */ - -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_Create(void) -{ - return ZydisIntelInstructionFormatter_CPtr(new Zydis::IntelInstructionFormatter); -} - -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CreateEx( - ZydisBaseSymbolResolverContext *resolver) -{ - return ZydisIntelInstructionFormatter_CPtr(new Zydis::IntelInstructionFormatter( - ZydisBaseSymbolResolver_CppPtr(resolver))); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisInstructionFormatter.h b/Bindings/C/ZydisInstructionFormatter.h deleted file mode 100644 index cc51b38..0000000 --- a/Bindings/C/ZydisInstructionFormatter.h +++ /dev/null @@ -1,104 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_INSTRUCTIONFORMATTER_H_ -#define _ZYDIS_INSTRUCTIONFORMATTER_H_ - -#include "ZydisTypes.h" -#include "ZydisSymbolResolver.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* BaseInstructionFormatter ================================================================== */ - -typedef struct _ZydisBaseInstructionFormatterContext {int a;} ZydisBaseInstructionFormatterContext; - -/** - * @brief Formats a decoded instruction. - * @param ctx The instruction formatter context. - * @param info The instruction info. - * @return Pointer to the formatted instruction string. This pointer remains valid until - * this function is called again or the context is released. - */ -const char* ZydisBaseInstructionFormatter_FormatInstruction( - ZydisBaseInstructionFormatterContext *ctx, const ZydisInstructionInfo *info); - -/** - * @brief Returns a pointer to the current symbol resolver. - * @param ctx The instruction formatter context. - * @return Pointer to the current symbol resolver or @c NULL if no symbol resolver is used. - */ -ZydisBaseSymbolResolverContext* ZydisBaseInstructionFormatter_GetSymbolResolver( - const ZydisBaseInstructionFormatterContext *ctx); - -/** - * @brief Sets a new symbol resolver. - * @param ctx The instruction formatter context. - * @param symbolResolver Pointer to a symbol resolver instance or @c NULL, if no smybol - * resolver should be used. - */ -void ZydisBaseInstructionFormatter_SetSymbolResolver(ZydisBaseInstructionFormatterContext *ctx, - ZydisBaseSymbolResolverContext *resolver); - -/** - * @brief Releases an instruction formatter. - * @param ctx The context of the instruction formatter to release. - * The context may no longer used after it has been released. - */ -void ZydisBaseInstructionFormatter_Release(ZydisBaseInstructionFormatterContext *ctx); - -/* IntelInstructionFormatter ================================================================ */ - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see BaseInstructionFormatter_Release - */ -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_Create(void); - -/** - * @brief Creates an Intel-syntax instruction formatter. - * @param resolver The symbol resolver consulted to resolve symbols on formatting. - * @return @c NULL if it fails, else an Intel instruction formatter context. - * @see BaseInstructionFormatter_Release - */ -ZydisBaseInstructionFormatterContext* ZydisIntelInstructionFormatter_CreateEx( - ZydisBaseSymbolResolverContext *resolver); - -/* ============================================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_INSTRUCTIONFORMATTER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisOpcodeTable.cpp b/Bindings/C/ZydisOpcodeTable.cpp deleted file mode 100644 index 6724ea4..0000000 --- a/Bindings/C/ZydisOpcodeTable.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisOpcodeTable.h" -#include "ZydisOpcodeTable.hpp" diff --git a/Bindings/C/ZydisOpcodeTable.h b/Bindings/C/ZydisOpcodeTable.h deleted file mode 100644 index 3f9ab5f..0000000 --- a/Bindings/C/ZydisOpcodeTable.h +++ /dev/null @@ -1,961 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_OPCODETABLE_H_ -#define _ZYDIS_OPCODETABLE_H_ - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Values that represent an instruction mnemonic. - */ -typedef enum _ZydisInstructionMnemonic /* : uint16_t */ -{ - /* 000 */ ZYDIS_MNEM_INVALID, - /* 001 */ ZYDIS_MNEM_AAA, - /* 002 */ ZYDIS_MNEM_AAD, - /* 003 */ ZYDIS_MNEM_AAM, - /* 004 */ ZYDIS_MNEM_AAS, - /* 005 */ ZYDIS_MNEM_ADC, - /* 006 */ ZYDIS_MNEM_ADD, - /* 007 */ ZYDIS_MNEM_ADDPD, - /* 008 */ ZYDIS_MNEM_ADDPS, - /* 009 */ ZYDIS_MNEM_ADDSD, - /* 00A */ ZYDIS_MNEM_ADDSS, - /* 00B */ ZYDIS_MNEM_ADDSUBPD, - /* 00C */ ZYDIS_MNEM_ADDSUBPS, - /* 00D */ ZYDIS_MNEM_AESDEC, - /* 00E */ ZYDIS_MNEM_AESDECLAST, - /* 00F */ ZYDIS_MNEM_AESENC, - /* 010 */ ZYDIS_MNEM_AESENCLAST, - /* 011 */ ZYDIS_MNEM_AESIMC, - /* 012 */ ZYDIS_MNEM_AESKEYGENASSIST, - /* 013 */ ZYDIS_MNEM_AND, - /* 014 */ ZYDIS_MNEM_ANDNPD, - /* 015 */ ZYDIS_MNEM_ANDNPS, - /* 016 */ ZYDIS_MNEM_ANDPD, - /* 017 */ ZYDIS_MNEM_ANDPS, - /* 018 */ ZYDIS_MNEM_ARPL, - /* 019 */ ZYDIS_MNEM_BLENDPD, - /* 01A */ ZYDIS_MNEM_BLENDPS, - /* 01B */ ZYDIS_MNEM_BLENDVPD, - /* 01C */ ZYDIS_MNEM_BLENDVPS, - /* 01D */ ZYDIS_MNEM_BOUND, - /* 01E */ ZYDIS_MNEM_BSF, - /* 01F */ ZYDIS_MNEM_BSR, - /* 020 */ ZYDIS_MNEM_BSWAP, - /* 021 */ ZYDIS_MNEM_BT, - /* 022 */ ZYDIS_MNEM_BTC, - /* 023 */ ZYDIS_MNEM_BTR, - /* 024 */ ZYDIS_MNEM_BTS, - /* 025 */ ZYDIS_MNEM_CALL, - /* 026 */ ZYDIS_MNEM_CBW, - /* 027 */ ZYDIS_MNEM_CDQ, - /* 028 */ ZYDIS_MNEM_CDQE, - /* 029 */ ZYDIS_MNEM_CLC, - /* 02A */ ZYDIS_MNEM_CLD, - /* 02B */ ZYDIS_MNEM_CLFLUSH, - /* 02C */ ZYDIS_MNEM_CLGI, - /* 02D */ ZYDIS_MNEM_CLI, - /* 02E */ ZYDIS_MNEM_CLTS, - /* 02F */ ZYDIS_MNEM_CMC, - /* 030 */ ZYDIS_MNEM_CMOVA, - /* 031 */ ZYDIS_MNEM_CMOVAE, - /* 032 */ ZYDIS_MNEM_CMOVB, - /* 033 */ ZYDIS_MNEM_CMOVBE, - /* 034 */ ZYDIS_MNEM_CMOVE, - /* 035 */ ZYDIS_MNEM_CMOVG, - /* 036 */ ZYDIS_MNEM_CMOVGE, - /* 037 */ ZYDIS_MNEM_CMOVL, - /* 038 */ ZYDIS_MNEM_CMOVLE, - /* 039 */ ZYDIS_MNEM_CMOVNE, - /* 03A */ ZYDIS_MNEM_CMOVNO, - /* 03B */ ZYDIS_MNEM_CMOVNP, - /* 03C */ ZYDIS_MNEM_CMOVNS, - /* 03D */ ZYDIS_MNEM_CMOVO, - /* 03E */ ZYDIS_MNEM_CMOVP, - /* 03F */ ZYDIS_MNEM_CMOVS, - /* 040 */ ZYDIS_MNEM_CMP, - /* 041 */ ZYDIS_MNEM_CMPPD, - /* 042 */ ZYDIS_MNEM_CMPPS, - /* 043 */ ZYDIS_MNEM_CMPSB, - /* 044 */ ZYDIS_MNEM_CMPSD, - /* 045 */ ZYDIS_MNEM_CMPSQ, - /* 046 */ ZYDIS_MNEM_CMPSS, - /* 047 */ ZYDIS_MNEM_CMPSW, - /* 048 */ ZYDIS_MNEM_CMPXCHG, - /* 049 */ ZYDIS_MNEM_CMPXCHG16B, - /* 04A */ ZYDIS_MNEM_CMPXCHG8B, - /* 04B */ ZYDIS_MNEM_COMISD, - /* 04C */ ZYDIS_MNEM_COMISS, - /* 04D */ ZYDIS_MNEM_CPUID, - /* 04E */ ZYDIS_MNEM_CQO, - /* 04F */ ZYDIS_MNEM_CRC32, - /* 050 */ ZYDIS_MNEM_CVTDQ2PD, - /* 051 */ ZYDIS_MNEM_CVTDQ2PS, - /* 052 */ ZYDIS_MNEM_CVTPD2DQ, - /* 053 */ ZYDIS_MNEM_CVTPD2PI, - /* 054 */ ZYDIS_MNEM_CVTPD2PS, - /* 055 */ ZYDIS_MNEM_CVTPI2PD, - /* 056 */ ZYDIS_MNEM_CVTPI2PS, - /* 057 */ ZYDIS_MNEM_CVTPS2DQ, - /* 058 */ ZYDIS_MNEM_CVTPS2PD, - /* 059 */ ZYDIS_MNEM_CVTPS2PI, - /* 05A */ ZYDIS_MNEM_CVTSD2SI, - /* 05B */ ZYDIS_MNEM_CVTSD2SS, - /* 05C */ ZYDIS_MNEM_CVTSI2SD, - /* 05D */ ZYDIS_MNEM_CVTSI2SS, - /* 05E */ ZYDIS_MNEM_CVTSS2SD, - /* 05F */ ZYDIS_MNEM_CVTSS2SI, - /* 060 */ ZYDIS_MNEM_CVTTPD2DQ, - /* 061 */ ZYDIS_MNEM_CVTTPD2PI, - /* 062 */ ZYDIS_MNEM_CVTTPS2DQ, - /* 063 */ ZYDIS_MNEM_CVTTPS2PI, - /* 064 */ ZYDIS_MNEM_CVTTSD2SI, - /* 065 */ ZYDIS_MNEM_CVTTSS2SI, - /* 066 */ ZYDIS_MNEM_CWD, - /* 067 */ ZYDIS_MNEM_CWDE, - /* 068 */ ZYDIS_MNEM_DAA, - /* 069 */ ZYDIS_MNEM_DAS, - /* 06A */ ZYDIS_MNEM_DEC, - /* 06B */ ZYDIS_MNEM_DIV, - /* 06C */ ZYDIS_MNEM_DIVPD, - /* 06D */ ZYDIS_MNEM_DIVPS, - /* 06E */ ZYDIS_MNEM_DIVSD, - /* 06F */ ZYDIS_MNEM_DIVSS, - /* 070 */ ZYDIS_MNEM_DPPD, - /* 071 */ ZYDIS_MNEM_DPPS, - /* 072 */ ZYDIS_MNEM_EMMS, - /* 073 */ ZYDIS_MNEM_ENTER, - /* 074 */ ZYDIS_MNEM_EXTRACTPS, - /* 075 */ ZYDIS_MNEM_F2XM1, - /* 076 */ ZYDIS_MNEM_FABS, - /* 077 */ ZYDIS_MNEM_FADD, - /* 078 */ ZYDIS_MNEM_FADDP, - /* 079 */ ZYDIS_MNEM_FBLD, - /* 07A */ ZYDIS_MNEM_FBSTP, - /* 07B */ ZYDIS_MNEM_FCHS, - /* 07C */ ZYDIS_MNEM_FCLEX, - /* 07D */ ZYDIS_MNEM_FCMOVB, - /* 07E */ ZYDIS_MNEM_FCMOVBE, - /* 07F */ ZYDIS_MNEM_FCMOVE, - /* 080 */ ZYDIS_MNEM_FCMOVNB, - /* 081 */ ZYDIS_MNEM_FCMOVNBE, - /* 082 */ ZYDIS_MNEM_FCMOVNE, - /* 083 */ ZYDIS_MNEM_FCMOVNU, - /* 084 */ ZYDIS_MNEM_FCMOVU, - /* 085 */ ZYDIS_MNEM_FCOM, - /* 086 */ ZYDIS_MNEM_FCOM2, - /* 087 */ ZYDIS_MNEM_FCOMI, - /* 088 */ ZYDIS_MNEM_FCOMIP, - /* 089 */ ZYDIS_MNEM_FCOMP, - /* 08A */ ZYDIS_MNEM_FCOMP3, - /* 08B */ ZYDIS_MNEM_FCOMP5, - /* 08C */ ZYDIS_MNEM_FCOMPP, - /* 08D */ ZYDIS_MNEM_FCOS, - /* 08E */ ZYDIS_MNEM_FDECSTP, - /* 08F */ ZYDIS_MNEM_FDIV, - /* 090 */ ZYDIS_MNEM_FDIVP, - /* 091 */ ZYDIS_MNEM_FDIVR, - /* 092 */ ZYDIS_MNEM_FDIVRP, - /* 093 */ ZYDIS_MNEM_FEMMS, - /* 094 */ ZYDIS_MNEM_FFREE, - /* 095 */ ZYDIS_MNEM_FFREEP, - /* 096 */ ZYDIS_MNEM_FIADD, - /* 097 */ ZYDIS_MNEM_FICOM, - /* 098 */ ZYDIS_MNEM_FICOMP, - /* 099 */ ZYDIS_MNEM_FIDIV, - /* 09A */ ZYDIS_MNEM_FIDIVR, - /* 09B */ ZYDIS_MNEM_FILD, - /* 09C */ ZYDIS_MNEM_FIMUL, - /* 09D */ ZYDIS_MNEM_FINCSTP, - /* 09E */ ZYDIS_MNEM_FIST, - /* 09F */ ZYDIS_MNEM_FISTP, - /* 0A0 */ ZYDIS_MNEM_FISTTP, - /* 0A1 */ ZYDIS_MNEM_FISUB, - /* 0A2 */ ZYDIS_MNEM_FISUBR, - /* 0A3 */ ZYDIS_MNEM_FLD, - /* 0A4 */ ZYDIS_MNEM_FLD1, - /* 0A5 */ ZYDIS_MNEM_FLDCW, - /* 0A6 */ ZYDIS_MNEM_FLDENV, - /* 0A7 */ ZYDIS_MNEM_FLDL2E, - /* 0A8 */ ZYDIS_MNEM_FLDL2T, - /* 0A9 */ ZYDIS_MNEM_FLDLG2, - /* 0AA */ ZYDIS_MNEM_FLDLN2, - /* 0AB */ ZYDIS_MNEM_FLDPI, - /* 0AC */ ZYDIS_MNEM_FLDZ, - /* 0AD */ ZYDIS_MNEM_FMUL, - /* 0AE */ ZYDIS_MNEM_FMULP, - /* 0AF */ ZYDIS_MNEM_FNDISI, - /* 0B0 */ ZYDIS_MNEM_FNENI, - /* 0B1 */ ZYDIS_MNEM_FNINIT, - /* 0B2 */ ZYDIS_MNEM_FNOP, - /* 0B3 */ ZYDIS_MNEM_FNSAVE, - /* 0B4 */ ZYDIS_MNEM_FNSETPM, - /* 0B5 */ ZYDIS_MNEM_FNSTCW, - /* 0B6 */ ZYDIS_MNEM_FNSTENV, - /* 0B7 */ ZYDIS_MNEM_FNSTSW, - /* 0B8 */ ZYDIS_MNEM_FPATAN, - /* 0B9 */ ZYDIS_MNEM_FPREM, - /* 0BA */ ZYDIS_MNEM_FPREM1, - /* 0BB */ ZYDIS_MNEM_FPTAN, - /* 0BC */ ZYDIS_MNEM_FRNDINT, - /* 0BD */ ZYDIS_MNEM_FRSTOR, - /* 0BE */ ZYDIS_MNEM_FRSTPM, - /* 0BF */ ZYDIS_MNEM_FSCALE, - /* 0C0 */ ZYDIS_MNEM_FSIN, - /* 0C1 */ ZYDIS_MNEM_FSINCOS, - /* 0C2 */ ZYDIS_MNEM_FSQRT, - /* 0C3 */ ZYDIS_MNEM_FST, - /* 0C4 */ ZYDIS_MNEM_FSTP, - /* 0C5 */ ZYDIS_MNEM_FSTP1, - /* 0C6 */ ZYDIS_MNEM_FSTP8, - /* 0C7 */ ZYDIS_MNEM_FSTP9, - /* 0C8 */ ZYDIS_MNEM_FSUB, - /* 0C9 */ ZYDIS_MNEM_FSUBP, - /* 0CA */ ZYDIS_MNEM_FSUBR, - /* 0CB */ ZYDIS_MNEM_FSUBRP, - /* 0CC */ ZYDIS_MNEM_FTST, - /* 0CD */ ZYDIS_MNEM_FUCOM, - /* 0CE */ ZYDIS_MNEM_FUCOMI, - /* 0CF */ ZYDIS_MNEM_FUCOMIP, - /* 0D0 */ ZYDIS_MNEM_FUCOMP, - /* 0D1 */ ZYDIS_MNEM_FUCOMPP, - /* 0D2 */ ZYDIS_MNEM_FXAM, - /* 0D3 */ ZYDIS_MNEM_FXCH, - /* 0D4 */ ZYDIS_MNEM_FXCH4, - /* 0D5 */ ZYDIS_MNEM_FXCH7, - /* 0D6 */ ZYDIS_MNEM_FXRSTOR, - /* 0D7 */ ZYDIS_MNEM_FXSAVE, - /* 0D8 */ ZYDIS_MNEM_FXTRACT, - /* 0D9 */ ZYDIS_MNEM_FYL2X, - /* 0DA */ ZYDIS_MNEM_FYL2XP1, - /* 0DB */ ZYDIS_MNEM_GETSEC, - /* 0DC */ ZYDIS_MNEM_HADDPD, - /* 0DD */ ZYDIS_MNEM_HADDPS, - /* 0DE */ ZYDIS_MNEM_HLT, - /* 0DF */ ZYDIS_MNEM_HSUBPD, - /* 0E0 */ ZYDIS_MNEM_HSUBPS, - /* 0E1 */ ZYDIS_MNEM_IDIV, - /* 0E2 */ ZYDIS_MNEM_IMUL, - /* 0E3 */ ZYDIS_MNEM_IN, - /* 0E4 */ ZYDIS_MNEM_INC, - /* 0E5 */ ZYDIS_MNEM_INSB, - /* 0E6 */ ZYDIS_MNEM_INSD, - /* 0E7 */ ZYDIS_MNEM_INSERTPS, - /* 0E8 */ ZYDIS_MNEM_INSW, - /* 0E9 */ ZYDIS_MNEM_INT, - /* 0EA */ ZYDIS_MNEM_INT1, - /* 0EB */ ZYDIS_MNEM_INT3, - /* 0EC */ ZYDIS_MNEM_INTO, - /* 0ED */ ZYDIS_MNEM_INVD, - /* 0EE */ ZYDIS_MNEM_INVEPT, - /* 0EF */ ZYDIS_MNEM_INVLPG, - /* 0F0 */ ZYDIS_MNEM_INVLPGA, - /* 0F1 */ ZYDIS_MNEM_INVVPID, - /* 0F2 */ ZYDIS_MNEM_IRETD, - /* 0F3 */ ZYDIS_MNEM_IRETQ, - /* 0F4 */ ZYDIS_MNEM_IRETW, - /* 0F5 */ ZYDIS_MNEM_JA, - /* 0F6 */ ZYDIS_MNEM_JB, - /* 0F7 */ ZYDIS_MNEM_JBE, - /* 0F8 */ ZYDIS_MNEM_JCXZ, - /* 0F9 */ ZYDIS_MNEM_JE, - /* 0FA */ ZYDIS_MNEM_JECXZ, - /* 0FB */ ZYDIS_MNEM_JG, - /* 0FC */ ZYDIS_MNEM_JGE, - /* 0FD */ ZYDIS_MNEM_JL, - /* 0FE */ ZYDIS_MNEM_JLE, - /* 0FF */ ZYDIS_MNEM_JMP, - /* 100 */ ZYDIS_MNEM_JNB, - /* 101 */ ZYDIS_MNEM_JNE, - /* 102 */ ZYDIS_MNEM_JNO, - /* 103 */ ZYDIS_MNEM_JNP, - /* 104 */ ZYDIS_MNEM_JNS, - /* 105 */ ZYDIS_MNEM_JO, - /* 106 */ ZYDIS_MNEM_JP, - /* 107 */ ZYDIS_MNEM_JRCXZ, - /* 108 */ ZYDIS_MNEM_JS, - /* 109 */ ZYDIS_MNEM_LAHF, - /* 10A */ ZYDIS_MNEM_LAR, - /* 10B */ ZYDIS_MNEM_LDDQU, - /* 10C */ ZYDIS_MNEM_LDMXCSR, - /* 10D */ ZYDIS_MNEM_LDS, - /* 10E */ ZYDIS_MNEM_LEA, - /* 10F */ ZYDIS_MNEM_LEAVE, - /* 110 */ ZYDIS_MNEM_LES, - /* 111 */ ZYDIS_MNEM_LFENCE, - /* 112 */ ZYDIS_MNEM_LFS, - /* 113 */ ZYDIS_MNEM_LGDT, - /* 114 */ ZYDIS_MNEM_LGS, - /* 115 */ ZYDIS_MNEM_LIDT, - /* 116 */ ZYDIS_MNEM_LLDT, - /* 117 */ ZYDIS_MNEM_LMSW, - /* 118 */ ZYDIS_MNEM_LOCK, - /* 119 */ ZYDIS_MNEM_LODSB, - /* 11A */ ZYDIS_MNEM_LODSD, - /* 11B */ ZYDIS_MNEM_LODSQ, - /* 11C */ ZYDIS_MNEM_LODSW, - /* 11D */ ZYDIS_MNEM_LOOP, - /* 11E */ ZYDIS_MNEM_LOOPE, - /* 11F */ ZYDIS_MNEM_LOOPNE, - /* 120 */ ZYDIS_MNEM_LSL, - /* 121 */ ZYDIS_MNEM_LSS, - /* 122 */ ZYDIS_MNEM_LTR, - /* 123 */ ZYDIS_MNEM_MASKMOVDQU, - /* 124 */ ZYDIS_MNEM_MASKMOVQ, - /* 125 */ ZYDIS_MNEM_MAXPD, - /* 126 */ ZYDIS_MNEM_MAXPS, - /* 127 */ ZYDIS_MNEM_MAXSD, - /* 128 */ ZYDIS_MNEM_MAXSS, - /* 129 */ ZYDIS_MNEM_MFENCE, - /* 12A */ ZYDIS_MNEM_MINPD, - /* 12B */ ZYDIS_MNEM_MINPS, - /* 12C */ ZYDIS_MNEM_MINSD, - /* 12D */ ZYDIS_MNEM_MINSS, - /* 12E */ ZYDIS_MNEM_MONITOR, - /* 12F */ ZYDIS_MNEM_MONTMUL, - /* 130 */ ZYDIS_MNEM_MOV, - /* 131 */ ZYDIS_MNEM_MOVAPD, - /* 132 */ ZYDIS_MNEM_MOVAPS, - /* 133 */ ZYDIS_MNEM_MOVBE, - /* 134 */ ZYDIS_MNEM_MOVD, - /* 135 */ ZYDIS_MNEM_MOVDDUP, - /* 136 */ ZYDIS_MNEM_MOVDQ2Q, - /* 137 */ ZYDIS_MNEM_MOVDQA, - /* 138 */ ZYDIS_MNEM_MOVDQU, - /* 139 */ ZYDIS_MNEM_MOVHLPS, - /* 13A */ ZYDIS_MNEM_MOVHPD, - /* 13B */ ZYDIS_MNEM_MOVHPS, - /* 13C */ ZYDIS_MNEM_MOVLHPS, - /* 13D */ ZYDIS_MNEM_MOVLPD, - /* 13E */ ZYDIS_MNEM_MOVLPS, - /* 13F */ ZYDIS_MNEM_MOVMSKPD, - /* 140 */ ZYDIS_MNEM_MOVMSKPS, - /* 141 */ ZYDIS_MNEM_MOVNTDQ, - /* 142 */ ZYDIS_MNEM_MOVNTDQA, - /* 143 */ ZYDIS_MNEM_MOVNTI, - /* 144 */ ZYDIS_MNEM_MOVNTPD, - /* 145 */ ZYDIS_MNEM_MOVNTPS, - /* 146 */ ZYDIS_MNEM_MOVNTQ, - /* 147 */ ZYDIS_MNEM_MOVQ, - /* 148 */ ZYDIS_MNEM_MOVQ2DQ, - /* 149 */ ZYDIS_MNEM_MOVSB, - /* 14A */ ZYDIS_MNEM_MOVSD, - /* 14B */ ZYDIS_MNEM_MOVSHDUP, - /* 14C */ ZYDIS_MNEM_MOVSLDUP, - /* 14D */ ZYDIS_MNEM_MOVSQ, - /* 14E */ ZYDIS_MNEM_MOVSS, - /* 14F */ ZYDIS_MNEM_MOVSW, - /* 150 */ ZYDIS_MNEM_MOVSX, - /* 151 */ ZYDIS_MNEM_MOVSXD, - /* 152 */ ZYDIS_MNEM_MOVUPD, - /* 153 */ ZYDIS_MNEM_MOVUPS, - /* 154 */ ZYDIS_MNEM_MOVZX, - /* 155 */ ZYDIS_MNEM_MPSADBW, - /* 156 */ ZYDIS_MNEM_MUL, - /* 157 */ ZYDIS_MNEM_MULPD, - /* 158 */ ZYDIS_MNEM_MULPS, - /* 159 */ ZYDIS_MNEM_MULSD, - /* 15A */ ZYDIS_MNEM_MULSS, - /* 15B */ ZYDIS_MNEM_MWAIT, - /* 15C */ ZYDIS_MNEM_NEG, - /* 15D */ ZYDIS_MNEM_NOP, - /* 15E */ ZYDIS_MNEM_NOT, - /* 15F */ ZYDIS_MNEM_OR, - /* 160 */ ZYDIS_MNEM_ORPD, - /* 161 */ ZYDIS_MNEM_ORPS, - /* 162 */ ZYDIS_MNEM_OUT, - /* 163 */ ZYDIS_MNEM_OUTSB, - /* 164 */ ZYDIS_MNEM_OUTSD, - /* 165 */ ZYDIS_MNEM_OUTSW, - /* 166 */ ZYDIS_MNEM_PABSB, - /* 167 */ ZYDIS_MNEM_PABSD, - /* 168 */ ZYDIS_MNEM_PABSW, - /* 169 */ ZYDIS_MNEM_PACKSSDW, - /* 16A */ ZYDIS_MNEM_PACKSSWB, - /* 16B */ ZYDIS_MNEM_PACKUSDW, - /* 16C */ ZYDIS_MNEM_PACKUSWB, - /* 16D */ ZYDIS_MNEM_PADDB, - /* 16E */ ZYDIS_MNEM_PADDD, - /* 16F */ ZYDIS_MNEM_PADDQ, - /* 170 */ ZYDIS_MNEM_PADDSB, - /* 171 */ ZYDIS_MNEM_PADDSW, - /* 172 */ ZYDIS_MNEM_PADDUSB, - /* 173 */ ZYDIS_MNEM_PADDUSW, - /* 174 */ ZYDIS_MNEM_PADDW, - /* 175 */ ZYDIS_MNEM_PALIGNR, - /* 176 */ ZYDIS_MNEM_PAND, - /* 177 */ ZYDIS_MNEM_PANDN, - /* 178 */ ZYDIS_MNEM_PAUSE, - /* 179 */ ZYDIS_MNEM_PAVGB, - /* 17A */ ZYDIS_MNEM_PAVGUSB, - /* 17B */ ZYDIS_MNEM_PAVGW, - /* 17C */ ZYDIS_MNEM_PBLENDVB, - /* 17D */ ZYDIS_MNEM_PBLENDW, - /* 17E */ ZYDIS_MNEM_PCLMULQDQ, - /* 17F */ ZYDIS_MNEM_PCMPEQB, - /* 180 */ ZYDIS_MNEM_PCMPEQD, - /* 181 */ ZYDIS_MNEM_PCMPEQQ, - /* 182 */ ZYDIS_MNEM_PCMPEQW, - /* 183 */ ZYDIS_MNEM_PCMPESTRI, - /* 184 */ ZYDIS_MNEM_PCMPESTRM, - /* 185 */ ZYDIS_MNEM_PCMPGTB, - /* 186 */ ZYDIS_MNEM_PCMPGTD, - /* 187 */ ZYDIS_MNEM_PCMPGTQ, - /* 188 */ ZYDIS_MNEM_PCMPGTW, - /* 189 */ ZYDIS_MNEM_PCMPISTRI, - /* 18A */ ZYDIS_MNEM_PCMPISTRM, - /* 18B */ ZYDIS_MNEM_PEXTRB, - /* 18C */ ZYDIS_MNEM_PEXTRD, - /* 18D */ ZYDIS_MNEM_PEXTRQ, - /* 18E */ ZYDIS_MNEM_PEXTRW, - /* 18F */ ZYDIS_MNEM_PF2ID, - /* 190 */ ZYDIS_MNEM_PF2IW, - /* 191 */ ZYDIS_MNEM_PFACC, - /* 192 */ ZYDIS_MNEM_PFADD, - /* 193 */ ZYDIS_MNEM_PFCMPEQ, - /* 194 */ ZYDIS_MNEM_PFCMPGE, - /* 195 */ ZYDIS_MNEM_PFCMPGT, - /* 196 */ ZYDIS_MNEM_PFMAX, - /* 197 */ ZYDIS_MNEM_PFMIN, - /* 198 */ ZYDIS_MNEM_PFMUL, - /* 199 */ ZYDIS_MNEM_PFNACC, - /* 19A */ ZYDIS_MNEM_PFPNACC, - /* 19B */ ZYDIS_MNEM_PFRCP, - /* 19C */ ZYDIS_MNEM_PFRCPIT1, - /* 19D */ ZYDIS_MNEM_PFRCPIT2, - /* 19E */ ZYDIS_MNEM_PFRSQIT1, - /* 19F */ ZYDIS_MNEM_PFRSQRT, - /* 1A0 */ ZYDIS_MNEM_PFSUB, - /* 1A1 */ ZYDIS_MNEM_PFSUBR, - /* 1A2 */ ZYDIS_MNEM_PHADDD, - /* 1A3 */ ZYDIS_MNEM_PHADDSW, - /* 1A4 */ ZYDIS_MNEM_PHADDW, - /* 1A5 */ ZYDIS_MNEM_PHMINPOSUW, - /* 1A6 */ ZYDIS_MNEM_PHSUBD, - /* 1A7 */ ZYDIS_MNEM_PHSUBSW, - /* 1A8 */ ZYDIS_MNEM_PHSUBW, - /* 1A9 */ ZYDIS_MNEM_PI2FD, - /* 1AA */ ZYDIS_MNEM_PI2FW, - /* 1AB */ ZYDIS_MNEM_PINSRB, - /* 1AC */ ZYDIS_MNEM_PINSRD, - /* 1AD */ ZYDIS_MNEM_PINSRQ, - /* 1AE */ ZYDIS_MNEM_PINSRW, - /* 1AF */ ZYDIS_MNEM_PMADDUBSW, - /* 1B0 */ ZYDIS_MNEM_PMADDWD, - /* 1B1 */ ZYDIS_MNEM_PMAXSB, - /* 1B2 */ ZYDIS_MNEM_PMAXSD, - /* 1B3 */ ZYDIS_MNEM_PMAXSW, - /* 1B4 */ ZYDIS_MNEM_PMAXUB, - /* 1B5 */ ZYDIS_MNEM_PMAXUD, - /* 1B6 */ ZYDIS_MNEM_PMAXUW, - /* 1B7 */ ZYDIS_MNEM_PMINSB, - /* 1B8 */ ZYDIS_MNEM_PMINSD, - /* 1B9 */ ZYDIS_MNEM_PMINSW, - /* 1BA */ ZYDIS_MNEM_PMINUB, - /* 1BB */ ZYDIS_MNEM_PMINUD, - /* 1BC */ ZYDIS_MNEM_PMINUW, - /* 1BD */ ZYDIS_MNEM_PMOVMSKB, - /* 1BE */ ZYDIS_MNEM_PMOVSXBD, - /* 1BF */ ZYDIS_MNEM_PMOVSXBQ, - /* 1C0 */ ZYDIS_MNEM_PMOVSXBW, - /* 1C1 */ ZYDIS_MNEM_PMOVSXDQ, - /* 1C2 */ ZYDIS_MNEM_PMOVSXWD, - /* 1C3 */ ZYDIS_MNEM_PMOVSXWQ, - /* 1C4 */ ZYDIS_MNEM_PMOVZXBD, - /* 1C5 */ ZYDIS_MNEM_PMOVZXBQ, - /* 1C6 */ ZYDIS_MNEM_PMOVZXBW, - /* 1C7 */ ZYDIS_MNEM_PMOVZXDQ, - /* 1C8 */ ZYDIS_MNEM_PMOVZXWD, - /* 1C9 */ ZYDIS_MNEM_PMOVZXWQ, - /* 1CA */ ZYDIS_MNEM_PMULDQ, - /* 1CB */ ZYDIS_MNEM_PMULHRSW, - /* 1CC */ ZYDIS_MNEM_PMULHRW, - /* 1CD */ ZYDIS_MNEM_PMULHUW, - /* 1CE */ ZYDIS_MNEM_PMULHW, - /* 1CF */ ZYDIS_MNEM_PMULLD, - /* 1D0 */ ZYDIS_MNEM_PMULLW, - /* 1D1 */ ZYDIS_MNEM_PMULUDQ, - /* 1D2 */ ZYDIS_MNEM_POP, - /* 1D3 */ ZYDIS_MNEM_POPA, - /* 1D4 */ ZYDIS_MNEM_POPAD, - /* 1D5 */ ZYDIS_MNEM_POPCNT, - /* 1D6 */ ZYDIS_MNEM_POPFD, - /* 1D7 */ ZYDIS_MNEM_POPFQ, - /* 1D8 */ ZYDIS_MNEM_POPFW, - /* 1D9 */ ZYDIS_MNEM_POR, - /* 1DA */ ZYDIS_MNEM_PREFETCH, - /* 1DB */ ZYDIS_MNEM_PREFETCHNTA, - /* 1DC */ ZYDIS_MNEM_PREFETCHT0, - /* 1DD */ ZYDIS_MNEM_PREFETCHT1, - /* 1DE */ ZYDIS_MNEM_PREFETCHT2, - /* 1DF */ ZYDIS_MNEM_PSADBW, - /* 1E0 */ ZYDIS_MNEM_PSHUFB, - /* 1E1 */ ZYDIS_MNEM_PSHUFD, - /* 1E2 */ ZYDIS_MNEM_PSHUFHW, - /* 1E3 */ ZYDIS_MNEM_PSHUFLW, - /* 1E4 */ ZYDIS_MNEM_PSHUFW, - /* 1E5 */ ZYDIS_MNEM_PSIGNB, - /* 1E6 */ ZYDIS_MNEM_PSIGND, - /* 1E7 */ ZYDIS_MNEM_PSIGNW, - /* 1E8 */ ZYDIS_MNEM_PSLLD, - /* 1E9 */ ZYDIS_MNEM_PSLLDQ, - /* 1EA */ ZYDIS_MNEM_PSLLQ, - /* 1EB */ ZYDIS_MNEM_PSLLW, - /* 1EC */ ZYDIS_MNEM_PSRAD, - /* 1ED */ ZYDIS_MNEM_PSRAW, - /* 1EE */ ZYDIS_MNEM_PSRLD, - /* 1EF */ ZYDIS_MNEM_PSRLDQ, - /* 1F0 */ ZYDIS_MNEM_PSRLQ, - /* 1F1 */ ZYDIS_MNEM_PSRLW, - /* 1F2 */ ZYDIS_MNEM_PSUBB, - /* 1F3 */ ZYDIS_MNEM_PSUBD, - /* 1F4 */ ZYDIS_MNEM_PSUBQ, - /* 1F5 */ ZYDIS_MNEM_PSUBSB, - /* 1F6 */ ZYDIS_MNEM_PSUBSW, - /* 1F7 */ ZYDIS_MNEM_PSUBUSB, - /* 1F8 */ ZYDIS_MNEM_PSUBUSW, - /* 1F9 */ ZYDIS_MNEM_PSUBW, - /* 1FA */ ZYDIS_MNEM_PSWAPD, - /* 1FB */ ZYDIS_MNEM_PTEST, - /* 1FC */ ZYDIS_MNEM_PUNPCKHBW, - /* 1FD */ ZYDIS_MNEM_PUNPCKHDQ, - /* 1FE */ ZYDIS_MNEM_PUNPCKHQDQ, - /* 1FF */ ZYDIS_MNEM_PUNPCKHWD, - /* 200 */ ZYDIS_MNEM_PUNPCKLBW, - /* 201 */ ZYDIS_MNEM_PUNPCKLDQ, - /* 202 */ ZYDIS_MNEM_PUNPCKLQDQ, - /* 203 */ ZYDIS_MNEM_PUNPCKLWD, - /* 204 */ ZYDIS_MNEM_PUSH, - /* 205 */ ZYDIS_MNEM_PUSHA, - /* 206 */ ZYDIS_MNEM_PUSHAD, - /* 207 */ ZYDIS_MNEM_PUSHFD, - /* 208 */ ZYDIS_MNEM_PUSHFQ, - /* 209 */ ZYDIS_MNEM_PUSHFW, - /* 20A */ ZYDIS_MNEM_PXOR, - /* 20B */ ZYDIS_MNEM_RCL, - /* 20C */ ZYDIS_MNEM_RCPPS, - /* 20D */ ZYDIS_MNEM_RCPSS, - /* 20E */ ZYDIS_MNEM_RCR, - /* 20F */ ZYDIS_MNEM_RDMSR, - /* 210 */ ZYDIS_MNEM_RDPMC, - /* 211 */ ZYDIS_MNEM_RDRAND, - /* 212 */ ZYDIS_MNEM_RDTSC, - /* 213 */ ZYDIS_MNEM_RDTSCP, - /* 214 */ ZYDIS_MNEM_REP, - /* 215 */ ZYDIS_MNEM_REPNE, - /* 216 */ ZYDIS_MNEM_RET, - /* 217 */ ZYDIS_MNEM_RETF, - /* 218 */ ZYDIS_MNEM_ROL, - /* 219 */ ZYDIS_MNEM_ROR, - /* 21A */ ZYDIS_MNEM_ROUNDPD, - /* 21B */ ZYDIS_MNEM_ROUNDPS, - /* 21C */ ZYDIS_MNEM_ROUNDSD, - /* 21D */ ZYDIS_MNEM_ROUNDSS, - /* 21E */ ZYDIS_MNEM_RSM, - /* 21F */ ZYDIS_MNEM_RSQRTPS, - /* 220 */ ZYDIS_MNEM_RSQRTSS, - /* 221 */ ZYDIS_MNEM_SAHF, - /* 222 */ ZYDIS_MNEM_SALC, - /* 223 */ ZYDIS_MNEM_SAR, - /* 224 */ ZYDIS_MNEM_SBB, - /* 225 */ ZYDIS_MNEM_SCASB, - /* 226 */ ZYDIS_MNEM_SCASD, - /* 227 */ ZYDIS_MNEM_SCASQ, - /* 228 */ ZYDIS_MNEM_SCASW, - /* 229 */ ZYDIS_MNEM_SETA, - /* 22A */ ZYDIS_MNEM_SETAE, - /* 22B */ ZYDIS_MNEM_SETB, - /* 22C */ ZYDIS_MNEM_SETBE, - /* 22D */ ZYDIS_MNEM_SETE, - /* 22E */ ZYDIS_MNEM_SETG, - /* 22F */ ZYDIS_MNEM_SETGE, - /* 230 */ ZYDIS_MNEM_SETL, - /* 231 */ ZYDIS_MNEM_SETLE, - /* 232 */ ZYDIS_MNEM_SETNE, - /* 233 */ ZYDIS_MNEM_SETNO, - /* 234 */ ZYDIS_MNEM_SETNP, - /* 235 */ ZYDIS_MNEM_SETNS, - /* 236 */ ZYDIS_MNEM_SETO, - /* 237 */ ZYDIS_MNEM_SETP, - /* 238 */ ZYDIS_MNEM_SETS, - /* 239 */ ZYDIS_MNEM_SFENCE, - /* 23A */ ZYDIS_MNEM_SGDT, - /* 23B */ ZYDIS_MNEM_SHL, - /* 23C */ ZYDIS_MNEM_SHLD, - /* 23D */ ZYDIS_MNEM_SHR, - /* 23E */ ZYDIS_MNEM_SHRD, - /* 23F */ ZYDIS_MNEM_SHUFPD, - /* 240 */ ZYDIS_MNEM_SHUFPS, - /* 241 */ ZYDIS_MNEM_SIDT, - /* 242 */ ZYDIS_MNEM_SKINIT, - /* 243 */ ZYDIS_MNEM_SLDT, - /* 244 */ ZYDIS_MNEM_SMSW, - /* 245 */ ZYDIS_MNEM_SQRTPD, - /* 246 */ ZYDIS_MNEM_SQRTPS, - /* 247 */ ZYDIS_MNEM_SQRTSD, - /* 248 */ ZYDIS_MNEM_SQRTSS, - /* 249 */ ZYDIS_MNEM_STC, - /* 24A */ ZYDIS_MNEM_STD, - /* 24B */ ZYDIS_MNEM_STGI, - /* 24C */ ZYDIS_MNEM_STI, - /* 24D */ ZYDIS_MNEM_STMXCSR, - /* 24E */ ZYDIS_MNEM_STOSB, - /* 24F */ ZYDIS_MNEM_STOSD, - /* 250 */ ZYDIS_MNEM_STOSQ, - /* 251 */ ZYDIS_MNEM_STOSW, - /* 252 */ ZYDIS_MNEM_STR, - /* 253 */ ZYDIS_MNEM_SUB, - /* 254 */ ZYDIS_MNEM_SUBPD, - /* 255 */ ZYDIS_MNEM_SUBPS, - /* 256 */ ZYDIS_MNEM_SUBSD, - /* 257 */ ZYDIS_MNEM_SUBSS, - /* 258 */ ZYDIS_MNEM_SWAPGS, - /* 259 */ ZYDIS_MNEM_SYSCALL, - /* 25A */ ZYDIS_MNEM_SYSENTER, - /* 25B */ ZYDIS_MNEM_SYSEXIT, - /* 25C */ ZYDIS_MNEM_SYSRET, - /* 25D */ ZYDIS_MNEM_TEST, - /* 25E */ ZYDIS_MNEM_UCOMISD, - /* 25F */ ZYDIS_MNEM_UCOMISS, - /* 260 */ ZYDIS_MNEM_UD2, - /* 261 */ ZYDIS_MNEM_UNPCKHPD, - /* 262 */ ZYDIS_MNEM_UNPCKHPS, - /* 263 */ ZYDIS_MNEM_UNPCKLPD, - /* 264 */ ZYDIS_MNEM_UNPCKLPS, - /* 265 */ ZYDIS_MNEM_VADDPD, - /* 266 */ ZYDIS_MNEM_VADDPS, - /* 267 */ ZYDIS_MNEM_VADDSD, - /* 268 */ ZYDIS_MNEM_VADDSS, - /* 269 */ ZYDIS_MNEM_VADDSUBPD, - /* 26A */ ZYDIS_MNEM_VADDSUBPS, - /* 26B */ ZYDIS_MNEM_VAESDEC, - /* 26C */ ZYDIS_MNEM_VAESDECLAST, - /* 26D */ ZYDIS_MNEM_VAESENC, - /* 26E */ ZYDIS_MNEM_VAESENCLAST, - /* 26F */ ZYDIS_MNEM_VAESIMC, - /* 270 */ ZYDIS_MNEM_VAESKEYGENASSIST, - /* 271 */ ZYDIS_MNEM_VANDNPD, - /* 272 */ ZYDIS_MNEM_VANDNPS, - /* 273 */ ZYDIS_MNEM_VANDPD, - /* 274 */ ZYDIS_MNEM_VANDPS, - /* 275 */ ZYDIS_MNEM_VBLENDPD, - /* 276 */ ZYDIS_MNEM_VBLENDPS, - /* 277 */ ZYDIS_MNEM_VBLENDVPD, - /* 278 */ ZYDIS_MNEM_VBLENDVPS, - /* 279 */ ZYDIS_MNEM_VBROADCASTSD, - /* 27A */ ZYDIS_MNEM_VBROADCASTSS, - /* 27B */ ZYDIS_MNEM_VCMPPD, - /* 27C */ ZYDIS_MNEM_VCMPPS, - /* 27D */ ZYDIS_MNEM_VCMPSD, - /* 27E */ ZYDIS_MNEM_VCMPSS, - /* 27F */ ZYDIS_MNEM_VCOMISD, - /* 280 */ ZYDIS_MNEM_VCOMISS, - /* 281 */ ZYDIS_MNEM_VCVTDQ2PD, - /* 282 */ ZYDIS_MNEM_VCVTDQ2PS, - /* 283 */ ZYDIS_MNEM_VCVTPD2DQ, - /* 284 */ ZYDIS_MNEM_VCVTPD2PS, - /* 285 */ ZYDIS_MNEM_VCVTPS2DQ, - /* 286 */ ZYDIS_MNEM_VCVTPS2PD, - /* 287 */ ZYDIS_MNEM_VCVTSD2SI, - /* 288 */ ZYDIS_MNEM_VCVTSD2SS, - /* 289 */ ZYDIS_MNEM_VCVTSI2SD, - /* 28A */ ZYDIS_MNEM_VCVTSI2SS, - /* 28B */ ZYDIS_MNEM_VCVTSS2SD, - /* 28C */ ZYDIS_MNEM_VCVTSS2SI, - /* 28D */ ZYDIS_MNEM_VCVTTPD2DQ, - /* 28E */ ZYDIS_MNEM_VCVTTPS2DQ, - /* 28F */ ZYDIS_MNEM_VCVTTSD2SI, - /* 290 */ ZYDIS_MNEM_VCVTTSS2SI, - /* 291 */ ZYDIS_MNEM_VDIVPD, - /* 292 */ ZYDIS_MNEM_VDIVPS, - /* 293 */ ZYDIS_MNEM_VDIVSD, - /* 294 */ ZYDIS_MNEM_VDIVSS, - /* 295 */ ZYDIS_MNEM_VDPPD, - /* 296 */ ZYDIS_MNEM_VDPPS, - /* 297 */ ZYDIS_MNEM_VERR, - /* 298 */ ZYDIS_MNEM_VERW, - /* 299 */ ZYDIS_MNEM_VEXTRACTF128, - /* 29A */ ZYDIS_MNEM_VEXTRACTPS, - /* 29B */ ZYDIS_MNEM_VHADDPD, - /* 29C */ ZYDIS_MNEM_VHADDPS, - /* 29D */ ZYDIS_MNEM_VHSUBPD, - /* 29E */ ZYDIS_MNEM_VHSUBPS, - /* 29F */ ZYDIS_MNEM_VINSERTF128, - /* 2A0 */ ZYDIS_MNEM_VINSERTPS, - /* 2A1 */ ZYDIS_MNEM_VLDDQU, - /* 2A2 */ ZYDIS_MNEM_VMASKMOVDQU, - /* 2A3 */ ZYDIS_MNEM_VMASKMOVPD, - /* 2A4 */ ZYDIS_MNEM_VMASKMOVPS, - /* 2A5 */ ZYDIS_MNEM_VMAXPD, - /* 2A6 */ ZYDIS_MNEM_VMAXPS, - /* 2A7 */ ZYDIS_MNEM_VMAXSD, - /* 2A8 */ ZYDIS_MNEM_VMAXSS, - /* 2A9 */ ZYDIS_MNEM_VMCALL, - /* 2AA */ ZYDIS_MNEM_VMCLEAR, - /* 2AB */ ZYDIS_MNEM_VMINPD, - /* 2AC */ ZYDIS_MNEM_VMINPS, - /* 2AD */ ZYDIS_MNEM_VMINSD, - /* 2AE */ ZYDIS_MNEM_VMINSS, - /* 2AF */ ZYDIS_MNEM_VMLAUNCH, - /* 2B0 */ ZYDIS_MNEM_VMLOAD, - /* 2B1 */ ZYDIS_MNEM_VMMCALL, - /* 2B2 */ ZYDIS_MNEM_VMOVAPD, - /* 2B3 */ ZYDIS_MNEM_VMOVAPS, - /* 2B4 */ ZYDIS_MNEM_VMOVD, - /* 2B5 */ ZYDIS_MNEM_VMOVDDUP, - /* 2B6 */ ZYDIS_MNEM_VMOVDQA, - /* 2B7 */ ZYDIS_MNEM_VMOVDQU, - /* 2B8 */ ZYDIS_MNEM_VMOVHLPS, - /* 2B9 */ ZYDIS_MNEM_VMOVHPD, - /* 2BA */ ZYDIS_MNEM_VMOVHPS, - /* 2BB */ ZYDIS_MNEM_VMOVLHPS, - /* 2BC */ ZYDIS_MNEM_VMOVLPD, - /* 2BD */ ZYDIS_MNEM_VMOVLPS, - /* 2BE */ ZYDIS_MNEM_VMOVMSKPD, - /* 2BF */ ZYDIS_MNEM_VMOVMSKPS, - /* 2C0 */ ZYDIS_MNEM_VMOVNTDQ, - /* 2C1 */ ZYDIS_MNEM_VMOVNTDQA, - /* 2C2 */ ZYDIS_MNEM_VMOVNTPD, - /* 2C3 */ ZYDIS_MNEM_VMOVNTPS, - /* 2C4 */ ZYDIS_MNEM_VMOVQ, - /* 2C5 */ ZYDIS_MNEM_VMOVSD, - /* 2C6 */ ZYDIS_MNEM_VMOVSHDUP, - /* 2C7 */ ZYDIS_MNEM_VMOVSLDUP, - /* 2C8 */ ZYDIS_MNEM_VMOVSS, - /* 2C9 */ ZYDIS_MNEM_VMOVUPD, - /* 2CA */ ZYDIS_MNEM_VMOVUPS, - /* 2CB */ ZYDIS_MNEM_VMPSADBW, - /* 2CC */ ZYDIS_MNEM_VMPTRLD, - /* 2CD */ ZYDIS_MNEM_VMPTRST, - /* 2CE */ ZYDIS_MNEM_VMREAD, - /* 2CF */ ZYDIS_MNEM_VMRESUME, - /* 2D0 */ ZYDIS_MNEM_VMRUN, - /* 2D1 */ ZYDIS_MNEM_VMSAVE, - /* 2D2 */ ZYDIS_MNEM_VMULPD, - /* 2D3 */ ZYDIS_MNEM_VMULPS, - /* 2D4 */ ZYDIS_MNEM_VMULSD, - /* 2D5 */ ZYDIS_MNEM_VMULSS, - /* 2D6 */ ZYDIS_MNEM_VMWRITE, - /* 2D7 */ ZYDIS_MNEM_VMXOFF, - /* 2D8 */ ZYDIS_MNEM_VMXON, - /* 2D9 */ ZYDIS_MNEM_VORPD, - /* 2DA */ ZYDIS_MNEM_VORPS, - /* 2DB */ ZYDIS_MNEM_VPABSB, - /* 2DC */ ZYDIS_MNEM_VPABSD, - /* 2DD */ ZYDIS_MNEM_VPABSW, - /* 2DE */ ZYDIS_MNEM_VPACKSSDW, - /* 2DF */ ZYDIS_MNEM_VPACKSSWB, - /* 2E0 */ ZYDIS_MNEM_VPACKUSDW, - /* 2E1 */ ZYDIS_MNEM_VPACKUSWB, - /* 2E2 */ ZYDIS_MNEM_VPADDB, - /* 2E3 */ ZYDIS_MNEM_VPADDD, - /* 2E4 */ ZYDIS_MNEM_VPADDQ, - /* 2E5 */ ZYDIS_MNEM_VPADDSB, - /* 2E6 */ ZYDIS_MNEM_VPADDSW, - /* 2E7 */ ZYDIS_MNEM_VPADDUSB, - /* 2E8 */ ZYDIS_MNEM_VPADDUSW, - /* 2E9 */ ZYDIS_MNEM_VPADDW, - /* 2EA */ ZYDIS_MNEM_VPALIGNR, - /* 2EB */ ZYDIS_MNEM_VPAND, - /* 2EC */ ZYDIS_MNEM_VPANDN, - /* 2ED */ ZYDIS_MNEM_VPAVGB, - /* 2EE */ ZYDIS_MNEM_VPAVGW, - /* 2EF */ ZYDIS_MNEM_VPBLENDVB, - /* 2F0 */ ZYDIS_MNEM_VPBLENDW, - /* 2F1 */ ZYDIS_MNEM_VPCLMULQDQ, - /* 2F2 */ ZYDIS_MNEM_VPCMPEQB, - /* 2F3 */ ZYDIS_MNEM_VPCMPEQD, - /* 2F4 */ ZYDIS_MNEM_VPCMPEQQ, - /* 2F5 */ ZYDIS_MNEM_VPCMPEQW, - /* 2F6 */ ZYDIS_MNEM_VPCMPESTRI, - /* 2F7 */ ZYDIS_MNEM_VPCMPESTRM, - /* 2F8 */ ZYDIS_MNEM_VPCMPGTB, - /* 2F9 */ ZYDIS_MNEM_VPCMPGTD, - /* 2FA */ ZYDIS_MNEM_VPCMPGTQ, - /* 2FB */ ZYDIS_MNEM_VPCMPGTW, - /* 2FC */ ZYDIS_MNEM_VPCMPISTRI, - /* 2FD */ ZYDIS_MNEM_VPCMPISTRM, - /* 2FE */ ZYDIS_MNEM_VPERM2F128, - /* 2FF */ ZYDIS_MNEM_VPERMILPD, - /* 300 */ ZYDIS_MNEM_VPERMILPS, - /* 301 */ ZYDIS_MNEM_VPEXTRB, - /* 302 */ ZYDIS_MNEM_VPEXTRD, - /* 303 */ ZYDIS_MNEM_VPEXTRQ, - /* 304 */ ZYDIS_MNEM_VPEXTRW, - /* 305 */ ZYDIS_MNEM_VPHADDD, - /* 306 */ ZYDIS_MNEM_VPHADDSW, - /* 307 */ ZYDIS_MNEM_VPHADDW, - /* 308 */ ZYDIS_MNEM_VPHMINPOSUW, - /* 309 */ ZYDIS_MNEM_VPHSUBD, - /* 30A */ ZYDIS_MNEM_VPHSUBSW, - /* 30B */ ZYDIS_MNEM_VPHSUBW, - /* 30C */ ZYDIS_MNEM_VPINSRB, - /* 30D */ ZYDIS_MNEM_VPINSRD, - /* 30E */ ZYDIS_MNEM_VPINSRQ, - /* 30F */ ZYDIS_MNEM_VPINSRW, - /* 310 */ ZYDIS_MNEM_VPMADDUBSW, - /* 311 */ ZYDIS_MNEM_VPMADDWD, - /* 312 */ ZYDIS_MNEM_VPMAXSB, - /* 313 */ ZYDIS_MNEM_VPMAXSD, - /* 314 */ ZYDIS_MNEM_VPMAXSW, - /* 315 */ ZYDIS_MNEM_VPMAXUB, - /* 316 */ ZYDIS_MNEM_VPMAXUD, - /* 317 */ ZYDIS_MNEM_VPMAXUW, - /* 318 */ ZYDIS_MNEM_VPMINSB, - /* 319 */ ZYDIS_MNEM_VPMINSD, - /* 31A */ ZYDIS_MNEM_VPMINSW, - /* 31B */ ZYDIS_MNEM_VPMINUB, - /* 31C */ ZYDIS_MNEM_VPMINUD, - /* 31D */ ZYDIS_MNEM_VPMINUW, - /* 31E */ ZYDIS_MNEM_VPMOVMSKB, - /* 31F */ ZYDIS_MNEM_VPMOVSXBD, - /* 320 */ ZYDIS_MNEM_VPMOVSXBQ, - /* 321 */ ZYDIS_MNEM_VPMOVSXBW, - /* 322 */ ZYDIS_MNEM_VPMOVSXWD, - /* 323 */ ZYDIS_MNEM_VPMOVSXWQ, - /* 324 */ ZYDIS_MNEM_VPMOVZXBD, - /* 325 */ ZYDIS_MNEM_VPMOVZXBQ, - /* 326 */ ZYDIS_MNEM_VPMOVZXBW, - /* 327 */ ZYDIS_MNEM_VPMOVZXDQ, - /* 328 */ ZYDIS_MNEM_VPMOVZXWD, - /* 329 */ ZYDIS_MNEM_VPMOVZXWQ, - /* 32A */ ZYDIS_MNEM_VPMULDQ, - /* 32B */ ZYDIS_MNEM_VPMULHRSW, - /* 32C */ ZYDIS_MNEM_VPMULHUW, - /* 32D */ ZYDIS_MNEM_VPMULHW, - /* 32E */ ZYDIS_MNEM_VPMULLD, - /* 32F */ ZYDIS_MNEM_VPMULLW, - /* 330 */ ZYDIS_MNEM_VPOR, - /* 331 */ ZYDIS_MNEM_VPSADBW, - /* 332 */ ZYDIS_MNEM_VPSHUFB, - /* 333 */ ZYDIS_MNEM_VPSHUFD, - /* 334 */ ZYDIS_MNEM_VPSHUFHW, - /* 335 */ ZYDIS_MNEM_VPSHUFLW, - /* 336 */ ZYDIS_MNEM_VPSIGNB, - /* 337 */ ZYDIS_MNEM_VPSIGND, - /* 338 */ ZYDIS_MNEM_VPSIGNW, - /* 339 */ ZYDIS_MNEM_VPSLLD, - /* 33A */ ZYDIS_MNEM_VPSLLDQ, - /* 33B */ ZYDIS_MNEM_VPSLLQ, - /* 33C */ ZYDIS_MNEM_VPSLLW, - /* 33D */ ZYDIS_MNEM_VPSRAD, - /* 33E */ ZYDIS_MNEM_VPSRAW, - /* 33F */ ZYDIS_MNEM_VPSRLD, - /* 340 */ ZYDIS_MNEM_VPSRLDQ, - /* 341 */ ZYDIS_MNEM_VPSRLQ, - /* 342 */ ZYDIS_MNEM_VPSRLW, - /* 343 */ ZYDIS_MNEM_VPSUBB, - /* 344 */ ZYDIS_MNEM_VPSUBD, - /* 345 */ ZYDIS_MNEM_VPSUBQ, - /* 346 */ ZYDIS_MNEM_VPSUBSB, - /* 347 */ ZYDIS_MNEM_VPSUBSW, - /* 348 */ ZYDIS_MNEM_VPSUBUSB, - /* 349 */ ZYDIS_MNEM_VPSUBUSW, - /* 34A */ ZYDIS_MNEM_VPSUBW, - /* 34B */ ZYDIS_MNEM_VPTEST, - /* 34C */ ZYDIS_MNEM_VPUNPCKHBW, - /* 34D */ ZYDIS_MNEM_VPUNPCKHDQ, - /* 34E */ ZYDIS_MNEM_VPUNPCKHQDQ, - /* 34F */ ZYDIS_MNEM_VPUNPCKHWD, - /* 350 */ ZYDIS_MNEM_VPUNPCKLBW, - /* 351 */ ZYDIS_MNEM_VPUNPCKLDQ, - /* 352 */ ZYDIS_MNEM_VPUNPCKLQDQ, - /* 353 */ ZYDIS_MNEM_VPUNPCKLWD, - /* 354 */ ZYDIS_MNEM_VPXOR, - /* 355 */ ZYDIS_MNEM_VRCPPS, - /* 356 */ ZYDIS_MNEM_VRCPSS, - /* 357 */ ZYDIS_MNEM_VROUNDPD, - /* 358 */ ZYDIS_MNEM_VROUNDPS, - /* 359 */ ZYDIS_MNEM_VROUNDSD, - /* 35A */ ZYDIS_MNEM_VROUNDSS, - /* 35B */ ZYDIS_MNEM_VRSQRTPS, - /* 35C */ ZYDIS_MNEM_VRSQRTSS, - /* 35D */ ZYDIS_MNEM_VSHUFPD, - /* 35E */ ZYDIS_MNEM_VSHUFPS, - /* 35F */ ZYDIS_MNEM_VSQRTPD, - /* 360 */ ZYDIS_MNEM_VSQRTPS, - /* 361 */ ZYDIS_MNEM_VSQRTSD, - /* 362 */ ZYDIS_MNEM_VSQRTSS, - /* 363 */ ZYDIS_MNEM_VSTMXCSR, - /* 364 */ ZYDIS_MNEM_VSUBPD, - /* 365 */ ZYDIS_MNEM_VSUBPS, - /* 366 */ ZYDIS_MNEM_VSUBSD, - /* 367 */ ZYDIS_MNEM_VSUBSS, - /* 368 */ ZYDIS_MNEM_VTESTPD, - /* 369 */ ZYDIS_MNEM_VTESTPS, - /* 36A */ ZYDIS_MNEM_VUCOMISD, - /* 36B */ ZYDIS_MNEM_VUCOMISS, - /* 36C */ ZYDIS_MNEM_VUNPCKHPD, - /* 36D */ ZYDIS_MNEM_VUNPCKHPS, - /* 36E */ ZYDIS_MNEM_VUNPCKLPD, - /* 36F */ ZYDIS_MNEM_VUNPCKLPS, - /* 370 */ ZYDIS_MNEM_VXORPD, - /* 371 */ ZYDIS_MNEM_VXORPS, - /* 372 */ ZYDIS_MNEM_VZEROALL, - /* 373 */ ZYDIS_MNEM_VZEROUPPER, - /* 374 */ ZYDIS_MNEM_WAIT, - /* 375 */ ZYDIS_MNEM_WBINVD, - /* 376 */ ZYDIS_MNEM_WRMSR, - /* 377 */ ZYDIS_MNEM_XADD, - /* 378 */ ZYDIS_MNEM_XCHG, - /* 379 */ ZYDIS_MNEM_XCRYPTCBC, - /* 37A */ ZYDIS_MNEM_XCRYPTCFB, - /* 37B */ ZYDIS_MNEM_XCRYPTCTR, - /* 37C */ ZYDIS_MNEM_XCRYPTECB, - /* 37D */ ZYDIS_MNEM_XCRYPTOFB, - /* 37E */ ZYDIS_MNEM_XGETBV, - /* 37F */ ZYDIS_MNEM_XLATB, - /* 380 */ ZYDIS_MNEM_XOR, - /* 381 */ ZYDIS_MNEM_XORPD, - /* 382 */ ZYDIS_MNEM_XORPS, - /* 383 */ ZYDIS_MNEM_XRSTOR, - /* 384 */ ZYDIS_MNEM_XSAVE, - /* 385 */ ZYDIS_MNEM_XSETBV, - /* 386 */ ZYDIS_MNEM_XSHA1, - /* 387 */ ZYDIS_MNEM_XSHA256, - /* 388 */ ZYDIS_MNEM_XSTORE, - - ZYDIS_MNEM_FORCE_WORD = 0x7FFF -} ZydisInstructionMnemonic; - -/* TODO: Port instruction definition types */ - -#ifdef __cplusplus -} -#endif - -#endif // _ZYDIS_OPCODETABLE_H_ \ No newline at end of file diff --git a/Bindings/C/ZydisSymbolResolver.cpp b/Bindings/C/ZydisSymbolResolver.cpp deleted file mode 100644 index 6d8277a..0000000 --- a/Bindings/C/ZydisSymbolResolver.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisSymbolResolver.h" -#include - -/* CustomSymbolResolver ========================================================================= */ - -inline Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline const Zydis::BaseSymbolResolver* ZydisBaseSymbolResolver_CppPtr( - const ZydisBaseSymbolResolverContext *ctx) -{ - return reinterpret_cast(ctx); -} - -inline ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisBaseSymbolResolverContext* ZydisBaseSymbolResolver_CPtr( - const Zydis::BaseSymbolResolver *ptr) -{ - return reinterpret_cast(ptr); -} - -inline Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline const Zydis::InstructionInfo* ZydisInstructionInfo_CppPtr( - const ZydisInstructionInfo *ptr) -{ - static_assert(sizeof(*ptr) == sizeof(Zydis::InstructionInfo), "broken struct"); - return reinterpret_cast(ptr); -} - -inline ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -inline const ZydisInstructionInfo* ZydisInstructionInfo_CPtr( - const Zydis::InstructionInfo *ptr) -{ - return reinterpret_cast(ptr); -} - -/* Internal helper class ----------------------------------------------------------------------- */ - -namespace -{ - -class ZydisCustomSymbolResolver : public Zydis::BaseSymbolResolver -{ - ZydisResolveSymbol_t m_resolverCb; - void* m_userData; -public: - /** - * @brief Constructor. - * @param resolverCb The resolver callback. - * @param userData User provided pointer to arbitrary data passed to resolve callback. - */ - ZydisCustomSymbolResolver(ZydisResolveSymbol_t resolverCb, void *userData); - /** - * @brief Destructor. - */ - ~ZydisCustomSymbolResolver() override = default; -public: - /** - * @brief Resolves a symbol. - * @param info The instruction info. - * @param address The address. - * @param offset Reference to an unsigned 64 bit integer that receives an offset - * relative to the base address of the symbol. - * @return The name of the symbol, if the symbol was found, @c NULL if not. - */ - const char* resolveSymbol(const Zydis::InstructionInfo &info, uint64_t address, - uint64_t &offset) override; -}; - -ZydisCustomSymbolResolver::ZydisCustomSymbolResolver(ZydisResolveSymbol_t resolverCb, - void *userData) - : m_resolverCb(resolverCb) - , m_userData(userData) -{ - -} - -const char* ZydisCustomSymbolResolver::resolveSymbol( - const Zydis::InstructionInfo &info, uint64_t address, uint64_t &offset) -{ - return m_resolverCb(ZydisInstructionInfo_CPtr(&info), address, &offset, m_userData); -} - -} // anon namespace - -/* C API implementation ------------------------------------------------------------------------ */ - -ZydisBaseSymbolResolverContext* ZydisCustomSymbolResolver_Create( - ZydisResolveSymbol_t resolverCb, - void *userData) -{ - return ZydisBaseSymbolResolver_CPtr(new ZydisCustomSymbolResolver(resolverCb, userData)); -} - -/* ============================================================================================= */ \ No newline at end of file diff --git a/Bindings/C/ZydisSymbolResolver.h b/Bindings/C/ZydisSymbolResolver.h deleted file mode 100644 index 371a121..0000000 --- a/Bindings/C/ZydisSymbolResolver.h +++ /dev/null @@ -1,126 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_SYMBOLRESOLVER_H_ -#define _ZYDIS_SYMBOLRESOLVER_H_ - -#include "ZydisTypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* BaseSymbolResolver ======================================================================== */ - -typedef struct _ZydisBaseSymbolResolverContext { int a; } ZydisBaseSymbolResolverContext; - -/** - * @brief Releases a symbol resolver. - * @param ctx The context of the symbol resolver to free. - * The context may no longer used after it was released. - */ -void ZydisBaseSymbolResolver_Release(ZydisBaseSymbolResolverContext *ctx); - -/** - * @brief Resolves a symbol. - * @param ctx The symbol resolver context. - * @param info The instruction info. - * @param address The address. - * @param offset Pointer to an unsigned 64 bit integer that receives an offset relative to - * the base address of the symbol. - * @return The name of the symbol if the symbol was found, else @c NULL. - */ -const char* ZydisBaseSymbolResolver_ResolveSymbol(ZydisBaseSymbolResolverContext *ctx, - const ZydisInstructionInfo *info, uint64_t address, uint64_t *offset); - -/* ExactSymbolResolver ======================================================================= */ - -/** - * @brief Creates an exact symbol resolver. - * @return @c NULL if it fails, else a symbol resolver context. - * @see BaseSymbolResolver_Release - * An exact resolver is a simple symbol resolver that only matches exact addresses. - */ -// TODO: verify return value -ZydisBaseSymbolResolverContext* ZydisExactSymbolResolver_Create(void); - -/** - * @brief Query if the given address is a known symbol. - * @param ctx The exact symbol resolver context. - * @param address The address. - * @return @c true if the address is known, @c false if not. - */ -bool ZydisExactSymbolResolver_ContainsSymbol(ZydisBaseSymbolResolverContext *ctx, uint64_t address); - -/** - * @brief Adds or changes a symbol. - * @param ctx The exact symbol resolver context. - * @param address The address. - * @param name The symbol name. - */ -void ZydisExactSymbolResolverContext_SetSymbol(ZydisBaseSymbolResolverContext *ctx, - uint64_t address, const char* name); - -/** - * @brief Removes the symbol described by address. - * @param ctx The exact symbol resolver context. - * @param address The address. - * This will invalidate all char-pointers to the affected symbol name. - */ -void ZydisExactSymbolResolverContext_RemoveSymbol(ZydisBaseSymbolResolverContext *ctx, - uint64_t address); - -/** - * @brief Clears the symbol tree. - * @param ctx The exact symbol resolver context. - */ -void ExactSymbolResolverContext_Clear(ZydisBaseSymbolResolverContext *ctx); - -/* CustomSymbolResolver ====================================================================== */ - -typedef const char* (*ZydisResolveSymbol_t)(const ZydisInstructionInfo *info, uint64_t address, - uint64_t *offset, void *userData); - -/** - * @brief Creates a custom symbol resolver. - * @param resolverCb The resolver callback consulted when symbols need to be resolved. - * @param userData A pointer to arbitrary data passed to the resolver callback. - * May also be @c NULL. - * @return @c NULL if it fails, else a symbol resolver context. - */ -ZydisBaseSymbolResolverContext* CustomSymbolResolver_Create(ZydisResolveSymbol_t resolverCb, - void *userData); - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_SYMBOLRESOLVER_H_ */ \ No newline at end of file diff --git a/Bindings/C/ZydisUtils.cpp b/Bindings/C/ZydisUtils.cpp deleted file mode 100644 index 70e40f8..0000000 --- a/Bindings/C/ZydisUtils.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#include "ZydisUtils.h" -#include "ZydisUtils.hpp" - -static_assert( - sizeof(ZydisInstructionInfo) == sizeof(Zydis::InstructionInfo), - "struct size mismatch"); -static_assert( - sizeof(ZydisOperandInfo) == sizeof(Zydis::OperandInfo), - "struct size mismatch"); - -uint64_t ZydisCalcAbsoluteTarget(const ZydisInstructionInfo *info, const ZydisOperandInfo *operand) -{ - return Zydis::CalcAbsoluteTarget( - *reinterpret_cast(info), - *reinterpret_cast(operand)); -} \ No newline at end of file diff --git a/Bindings/C/ZydisUtils.h b/Bindings/C/ZydisUtils.h deleted file mode 100644 index 8e29541..0000000 --- a/Bindings/C/ZydisUtils.h +++ /dev/null @@ -1,54 +0,0 @@ -/*************************************************************************************************** - - Zyan Disassembler Engine - Version 1.0 - - Remarks : Freeware, Copyright must be included - - Original Author : Florian Bernd - Modifications : Joel Höner - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - -***************************************************************************************************/ - -#ifndef _ZYDIS_UTILS_H_ -#define _ZYDIS_UTILS_H_ - -#include -#include "ZydisTypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Calculates the absolute target address of a relative instruction operand. - * @param info The instruction info. - * @param operand The operand. - * @return The absolute target address. - */ -uint64_t ZydisCalcAbsoluteTarget(const ZydisInstructionInfo* info, const ZydisOperandInfo* operand); - -#ifdef __cplusplus -} -#endif - -#endif /* _ZYDIS_UTILS_H_ */ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index fdccb77..8496c59 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,54 +44,40 @@ endif () # Library set(headers - "ZyDis/ZydisSymbolResolver.hpp" - "ZyDis/ZydisOpcodeTable.hpp" - "ZyDis/ZydisInstructionDecoder.hpp" - "ZyDis/ZydisInstructionFormatter.hpp" - "ZyDis/ZydisTypes.hpp" - "ZyDis/ZydisUtils.hpp" - "ZyDis/Zydis.hpp") + "Zydis/Zydis.hpp" + "Zydis/ZydisInstructionDecoder.hpp" + "Zydis/ZydisInstructionFormatter.hpp" + "Zydis/ZydisOpcodeTable.hpp" + "Zydis/ZydisSymbolResolver.hpp" + "Zydis/ZydisTypes.hpp" + "Zydis/ZydisUtils.hpp") set(sources - "ZyDis/ZydisInstructionDecoder.cpp" - "ZyDis/ZydisInstructionFormatter.cpp" - "ZyDis/ZydisOpcodeTable.cpp" - "ZyDis/ZydisSymbolResolver.cpp" - "ZyDis/ZydisUtils.cpp") + "Zydis/ZydisInstructionDecoder.cpp" + "Zydis/ZydisInstructionFormatter.cpp" + "Zydis/ZydisOpcodeTable.cpp" + "Zydis/ZydisSymbolResolver.cpp" + "Zydis/ZydisUtils.cpp") + +if (BUILD_C_BINDINGS) + set(headers ${headers} + "Zydis/ZydisAPI.h") + set(sources ${sources} + "Zydis/ZydisAPI.cpp") +endif () add_library("Zydis" ${headers} ${sources}) generate_export_header( "Zydis" - BASE_NAME "Zydis" + BASE_NAME "ZYDIS" EXPORT_FILE_NAME "ZydisExportConfig.h") include_directories(${PROJECT_BINARY_DIR}) -# C bindings -if (BUILD_C_BINDINGS) - set(c_headers - "Bindings/C/Zydis.h" - "Bindings/C/ZydisInstructionDecoder.h" - "Bindings/C/ZydisTypes.h" - "Bindings/C/ZydisInstructionFormatter.h" - "Bindings/C/ZydisUtils.h" - "Bindings/C/ZydisSymbolResolver.h" - "Bindings/C/ZydisOpcodeTable.h") - set(c_sources - "Bindings/C/ZydisSymbolResolver.cpp" - "Bindings/C/ZydisOpcodeTable.cpp" - "Bindings/C/ZydisInstructionFormatter.cpp" - "Bindings/C/ZydisInstructionDecoder.cpp" - "Bindings/C/ZydisUtils.cpp") - add_library("ZydisC" ${c_headers} ${c_sources}) - include_directories("Zydis") - target_link_libraries("ZydisC" "Zydis") -endif () - # Examples if (BUILD_EXAMPLES) - include_directories("Bindings/C") + include_directories("Zydis") add_executable("C_SimpleDemo" "Examples/C/SimpleDemo/SimpleDemo.c") - target_link_libraries("C_SimpleDemo" "ZydisC") + target_link_libraries("C_SimpleDemo" "Zydis") endif () set(CONFIGURED_ONCE TRUE CACHE INTERNAL "CMake has configured at least once.") diff --git a/Examples/C/SimpleDemo/SimpleDemo.c b/Examples/C/SimpleDemo/SimpleDemo.c index 94949b9..700e260 100644 --- a/Examples/C/SimpleDemo/SimpleDemo.c +++ b/Examples/C/SimpleDemo/SimpleDemo.c @@ -1,8 +1,58 @@ -#include +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include #include #include +void PrintZydisError() +{ + puts("Zydis error: "); + switch (ZydisGetLastError()) + { + case ZYDIS_ERROR_SUCCESS: + puts("success"); + break; + case ZYDIS_ERROR_UNKNOWN: + puts("unknown error"); + break; + case ZYDIS_ERROR_NOT_ENOUGH_MEMORY: + puts("not enough memory"); + break; + case ZYDIS_ERROR_INVALID_PARAMETER: + puts("invalid parameter"); + break; + } +} + int main() { uint8_t data32[] = @@ -34,22 +84,42 @@ int main() ZydisInstructionInfo info; ZydisInstructionDecoderContext* decoder = NULL; - ZydisBaseInstructionFormatterContext* formatter = NULL; - ZydisBaseInputContext* input32 = NULL; - ZydisBaseInputContext* input64 = NULL; + ZydisInstructionFormatterContext* formatter = NULL; + ZydisInputContext* input32 = NULL; + ZydisInputContext* input64 = NULL; - decoder = ZydisInstructionDecoder_Create(); - formatter = ZydisIntelInstructionFormatter_Create(); + // Create decoder and formatter instances + decoder = ZydisCreateInstructionDecoder(); + if (!decoder) + { + goto FreeZydisDecoder; + } + formatter = ZydisCreateIntelInstructionFormatter(); + if (!formatter) + { + goto FreeZydisFormatter; + } - input32 = ZydisMemoryInput_Create(&data32[0], sizeof(data32)); - input64 = ZydisMemoryInput_Create(&data64[0], sizeof(data64)); + // Create memory data sources + input32 = ZydisCreateMemoryInput(&data32[0], sizeof(data32)); + if (!input32) + { + goto FreeZydisInput32; + } + input64 = ZydisCreateMemoryInput(&data64[0], sizeof(data64)); + if (!input64) + { + goto FreeZydisInput64; + } - ZydisInstructionDecoder_SetDisassemblerMode(decoder, DM_M32BIT); - ZydisInstructionDecoder_SetDataSource(decoder, input32); - ZydisInstructionDecoder_SetInstructionPointer(decoder, 0x77091852); + // Set decoder properties + ZydisSetDisassemblerMode(decoder, ZYDIS_DM_M32BIT); + ZydisSetDataSource(decoder, input32); + ZydisSetInstructionPointer(decoder, 0x77091852); + // Decode and format all instructions puts("32 bit test ...\n\n"); - while (ZydisInstructionDecoder_DecodeInstruction(decoder, &info)) + while (ZydisDecodeInstruction(decoder, &info)) { printf("%08X ", (uint32_t)(info.instrAddress & 0xFFFFFFFF)); if (info.flags & ZYDIS_IF_ERROR_MASK) @@ -58,17 +128,28 @@ int main() } else { - printf("%s\n", ZydisBaseInstructionFormatter_FormatInstruction(formatter, &info)); + const char* instructionText; + if (!ZydisFormatInstruction(formatter, &info, &instructionText)) + { + goto FreeZydisInput64; + } + printf("%s\n", instructionText); } } + // Check if an error occured in ZydisDecodeInstruction or the end of the input was reached. + if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) + { + goto FreeZydisInput64; + } puts("\n"); - ZydisInstructionDecoder_SetDisassemblerMode(decoder, DM_M64BIT); - ZydisInstructionDecoder_SetDataSource(decoder, input64); - ZydisInstructionDecoder_SetInstructionPointer(decoder, 0x00007FFA39A81930ull); + // Set decoder properties + ZydisSetDisassemblerMode(decoder, ZYDIS_DM_M64BIT); + ZydisSetDataSource(decoder, input64); + ZydisSetInstructionPointer(decoder, 0x00007FFA39A81930ull); puts("64 bit test ...\n\n"); - while (ZydisInstructionDecoder_DecodeInstruction(decoder, &info)) + while (ZydisDecodeInstruction(decoder, &info)) { printf("%016llX ", info.instrAddress); if (info.flags & ZYDIS_IF_ERROR_MASK) @@ -77,10 +158,38 @@ int main() } else { - printf("%s\n", ZydisBaseInstructionFormatter_FormatInstruction(formatter, &info)); + const char* instructionText; + if (!ZydisFormatInstruction(formatter, &info, &instructionText)) + { + goto FreeZydisInput64; + } + printf("%s\n", instructionText); } + } + // Check if an error occured in ZydisDecodeInstruction or the end of the input was reached. + if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) + { + goto FreeZydisInput64; + } + + // Cleanup code +FreeZydisInput64: + ZydisFreeInput(input64); +FreeZydisInput32: + ZydisFreeInput(input32); +FreeZydisFormatter: + ZydisFreeInstructionFormatter(formatter); +FreeZydisDecoder: + ZydisFreeInstructionDecoder(decoder); + + if (ZydisGetLastError() != ZYDIS_ERROR_SUCCESS) + { + PrintZydisError(); + getchar(); + return 1; } getchar(); + return 0; } \ No newline at end of file diff --git a/Zydis/ZydisAPI.cpp b/Zydis/ZydisAPI.cpp new file mode 100644 index 0000000..4771676 --- /dev/null +++ b/Zydis/ZydisAPI.cpp @@ -0,0 +1,421 @@ +/*************************************************************************************************** + + Zyan Disassembler Engine + Version 1.0 + + Remarks : Freeware, Copyright must be included + + Original Author : Florian Bernd + Modifications : Joel Höner + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + +***************************************************************************************************/ + +#include "ZydisAPI.h" +#include "ZydisInstructionDecoder.hpp" +#include "ZydisInstructionFormatter.hpp" + +static_assert( + sizeof(ZydisOperandInfo) == sizeof(Zydis::OperandInfo), + "struct size mismatch"); + +static_assert( + sizeof(ZydisInstructionInfo) == sizeof(Zydis::InstructionInfo), + "struct size mismatch"); + +/* Error Handling =============================================================================== */ + +static uint32_t g_zydisLastError = ZYDIS_ERROR_SUCCESS; + +uint32_t ZydisGetLastError() +{ + return g_zydisLastError; +} + +void ZydisSetLastError(uint32_t errorCode) +{ + g_zydisLastError = errorCode; +} + +/* Conversion Helper ============================================================================ */ + +template +ContextT* ZydisCreateContextInplace(uint8_t contextType, InstanceCtorArgsT... args) +{ + ContextT* context = new (std::nothrow) ContextT; + if (!context) + { + ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); + return nullptr; + } + context->type = contextType; + context->object = new (std::nothrow) InstanceT(args...); + if (!context->object) + { + delete context; + ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); + return nullptr; + } + return context; +} + +template +ContextT* ZydisCreateContext(uint8_t contextType, InstanceT* instance) +{ + ContextT* context = new (std::nothrow) ContextT; + if (!context) + { + ZydisSetLastError(ZYDIS_ERROR_NOT_ENOUGH_MEMORY); + return nullptr; + } + context->type = contextType; + context->object = instance; + return context; +} + +template +bool ZydisFreeContext(const ContextT* context, uint8_t expectedType) +{ + InstanceT* instance = ZydisCast(context, expectedType); + if (!instance) + { + return false; + } + delete instance; + delete context; + return true; +} + +template +InstanceT* ZydisCast(const ContextT* input, uint8_t expectedType) +{ + if (!input || !input->object || ((input->type & expectedType) != expectedType)) + { + ZydisSetLastError(ZYDIS_ERROR_INVALID_PARAMETER); + return nullptr; + } + return reinterpret_cast(input->object); +} + +/* Input ======================================================================================== */ + +ZydisInputContext* ZydisCreateCustomInput(/* TODO */) +{ + return nullptr; +} + +ZydisInputContext* ZydisCreateMemoryInput(const void* buffer, size_t bufferLen) +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_INPUT | ZYDIS_CONTEXT_INPUT_MEMORY, buffer, bufferLen); +} + +bool ZydisIsEndOfInput(const ZydisInputContext* input, bool* isEndOfInput) +{ + Zydis::BaseInput* instance = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!instance) + { + return false; + } + *isEndOfInput = instance->isEndOfInput(); + return true; +} + +bool ZydisGetInputPosition(const ZydisInputContext* input, uint64_t* position) +{ + Zydis::BaseInput* instance = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!instance) + { + return false; + } + *position = instance->getPosition(); + return true; +} + +bool ZydisSetInputPosition(const ZydisInputContext* input, uint64_t position) +{ + Zydis::BaseInput* instance = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!instance) + { + return false; + } + ZydisSetLastError(ZYDIS_ERROR_SUCCESS); + return instance->setPosition(position); +} + +bool ZydisFreeInput(const ZydisInputContext* input) +{ + return ZydisFreeContext(input, ZYDIS_CONTEXT_INPUT); +} + +/* InstructionDecoder =========================================================================== */ + +ZydisInstructionDecoderContext* ZydisCreateInstructionDecoder() +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_INSTRUCTIONDECODER); +} + +bool ZydisDecodeInstruction(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionInfo* info) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + ZydisSetLastError(ZYDIS_ERROR_SUCCESS); + return instance->decodeInstruction(*reinterpret_cast(info)); +} + +bool ZydisGetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext** input) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *input = ZydisCreateContext(ZYDIS_CONTEXT_INPUT, instance->getDataSource()); + if (!input) + { + return false; + } + return true; +} + +bool ZydisSetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext* input) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + Zydis::BaseInput* object = + ZydisCast(input, ZYDIS_CONTEXT_INPUT); + if (!object) + { + return false; + } + instance->setDataSource(object); + return true; +} + +bool ZydisGetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode* disassemblerMode) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *disassemblerMode = static_cast(instance->getDisassemblerMode()); + return true; +} + +bool ZydisSetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode disassemblerMode) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + instance->setDisassemblerMode(static_cast(disassemblerMode)); + return true; +} + +bool ZydisGetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor* preferredVendor) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *preferredVendor = static_cast(instance->getPreferredVendor()); + return true; +} + +bool ZydisSetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor preferredVendor) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + instance->setPreferredVendor(static_cast(preferredVendor)); + return true; +} + + bool ZydisGetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t* instructionPointer) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + *instructionPointer = instance->getInstructionPointer(); + return true; +} + +bool ZydisSetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t instructionPointer) +{ + Zydis::InstructionDecoder* instance = + ZydisCast(decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); + if (!instance) + { + return false; + } + instance->setInstructionPointer(instructionPointer); + return true; +} + +bool ZydisFreeInstructionDecoder(const ZydisInstructionDecoderContext* decoder) +{ + return ZydisFreeContext< + ZydisInstructionDecoderContext, Zydis::InstructionDecoder>( + decoder, ZYDIS_CONTEXT_INSTRUCTIONDECODER); +} + +/* InstructionFormatter ========================================================================= */ + +ZydisInstructionFormatterContext* ZydisCreateCustomInstructionFormatter(/* TODO */) +{ + return nullptr; +} + +ZydisInstructionFormatterContext* ZydisCreateIntelInstructionFormatter() +{ + return ZydisCreateContextInplace( + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER | ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL); +} + +bool ZydisFormatInstruction(const ZydisInstructionFormatterContext* formatter, + const ZydisInstructionInfo* info, const char** instructionText) +{ + Zydis::IntelInstructionFormatter* instance = + ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + if (!instance) + { + return false; + } + *instructionText = + instance->formatInstruction(*reinterpret_cast(info)); + return true; +} + +bool ZydisGetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext** resolver) +{ + Zydis::IntelInstructionFormatter* instance = + ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + if (!instance) + { + return false; + } + *resolver = ZydisCreateContext(ZYDIS_CONTEXT_SYMBOLRESOLVER, instance->getSymbolResolver()); + if (!resolver) + { + return false; + } + return true; +} + +bool ZydisSetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext* resolver) +{ + Zydis::IntelInstructionFormatter* instance = + ZydisCast(formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); + if (!instance) + { + return false; + } + Zydis::BaseSymbolResolver* object = + ZydisCast(resolver, ZYDIS_CONTEXT_SYMBOLRESOLVER); + if (!object) + { + return false; + } + instance->setSymbolResolver(object); + return true; +} + +bool ZydisFreeInstructionFormatter(const ZydisInstructionFormatterContext* formatter) +{ + return ZydisFreeContext< + ZydisInstructionFormatterContext, Zydis::BaseInstructionFormatter>( + formatter, ZYDIS_CONTEXT_INSTRUCTIONFORMATTER); +} + +/* SymbolResolver =============================================================================== */ + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/); + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver(); + +ZYDIS_EXPORT bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, + const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverContainsSymbol( + const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address, const char* symbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver); + +ZYDIS_EXPORT bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver); + +/* ============================================================================================== */ \ No newline at end of file diff --git a/Bindings/C/ZydisTypes.h b/Zydis/ZydisAPI.h similarity index 74% rename from Bindings/C/ZydisTypes.h rename to Zydis/ZydisAPI.h index 5c9527c..107ba5f 100644 --- a/Bindings/C/ZydisTypes.h +++ b/Zydis/ZydisAPI.h @@ -28,18 +28,22 @@ ***************************************************************************************************/ -#ifndef _ZYDIS_TYPES_H_ -#define _ZYDIS_TYPES_H_ +#ifndef _ZYDIS_API_H_ +#define _ZYDIS_API_H_ +#define Zydis_EXPORTS + +#include #include -#include -#include "ZydisOpcodeTable.h" +#include "ZydisExportConfig.h" #ifdef __cplusplus extern "C" { #endif +/* Types ======================================================================================== */ + /** * @brief Values that represent additional flags of a decoded instruction. */ @@ -539,8 +543,168 @@ typedef struct _ZydisInstructionInfo uint64_t instrPointer; } ZydisInstructionInfo; +/* Context Types ================================================================================ */ + +typedef enum _ZydisContextType +{ + ZYDIS_CONTEXT_INPUT = 0x0080, + ZYDIS_CONTEXT_INPUT_CUSTOM = 0x0001, + ZYDIS_CONTEXT_INPUT_MEMORY = 0x0002, + ZYDIS_CONTEXT_INSTRUCTIONDECODER = 0x0040, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER = 0x0020, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_CUSTOM = 0x0001, + ZYDIS_CONTEXT_INSTRUCTIONFORMATTER_INTEL = 0x0002, + ZYDIS_CONTEXT_SYMBOLRESOLVER = 0x0010, + ZYDIS_CONTEXT_SYMBOLRESOLVER_CUSTOM = 0x0001, + ZYDIS_CONTEXT_SYMBOLRESOLVER_EXACT = 0x0002 +} ZydisContextType; + +typedef struct _ZydisInputContext +{ + uint8_t type; + void* object; +} ZydisInputContext; + +typedef struct _ZydisInstructionDecoderContext +{ + uint8_t type; + void* object; +} ZydisInstructionDecoderContext; + +typedef struct _ZydisInstructionFormatterContext +{ + uint8_t type; + void* object; +} ZydisInstructionFormatterContext; + +typedef struct _ZydisSymbolResolverContext +{ + uint8_t type; + void* object; +} ZydisSymbolResolverContext; + +/* Error Handling =============================================================================== */ + +typedef enum _ZydisErrorCode /* : uint8_t */ +{ + ZYDIS_ERROR_SUCCESS, + ZYDIS_ERROR_UNKNOWN, + ZYDIS_ERROR_NOT_ENOUGH_MEMORY, + ZYDIS_ERROR_INVALID_PARAMETER +} ZydisErrorCode; + +ZYDIS_EXPORT uint32_t ZydisGetLastError(); + +/* Input ======================================================================================== */ + +ZYDIS_EXPORT ZydisInputContext* ZydisCreateCustomInput(/* TODO */); + +ZYDIS_EXPORT ZydisInputContext* ZydisCreateMemoryInput(const void* buffer, size_t bufferLen); + +ZYDIS_EXPORT bool ZydisIsEndOfInput(const ZydisInputContext* input, bool* isEndOfInput); + +ZYDIS_EXPORT bool ZydisGetInputPosition(const ZydisInputContext* input, uint64_t* position); + +ZYDIS_EXPORT bool ZydisSetInputPosition(const ZydisInputContext* input, uint64_t position); + +ZYDIS_EXPORT bool ZydisFreeInput(const ZydisInputContext* input); + +/* InstructionDecoder =========================================================================== */ + +/** + * @brief Values that represent a disassembler mode. + */ +typedef enum _ZydisDisassemblerMode /* : uint8_t */ +{ + ZYDIS_DM_M16BIT, + ZYDIS_DM_M32BIT, + ZYDIS_DM_M64BIT +} ZydisDisassemblerMode; + +/** + * @brief Values that represent an instruction-set vendor. + */ +typedef enum _ZydisInstructionSetVendor /* : uint8_t */ +{ + ZYDIS_ISV_ANY, + ZYDIS_ISV_INTEL, + ZYDIS_ISV_AMD +} ZydisInstructionSetVendor; + +ZYDIS_EXPORT ZydisInstructionDecoderContext* ZydisCreateInstructionDecoder(); + +ZYDIS_EXPORT bool ZydisDecodeInstruction(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionInfo* info); + +ZYDIS_EXPORT bool ZydisGetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext** input); + +ZYDIS_EXPORT bool ZydisSetDataSource(const ZydisInstructionDecoderContext* decoder, + ZydisInputContext* input); + +ZYDIS_EXPORT bool ZydisGetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode* disassemblerMode); + +ZYDIS_EXPORT bool ZydisSetDisassemblerMode(const ZydisInstructionDecoderContext* decoder, + ZydisDisassemblerMode disassemblerMode); + +ZYDIS_EXPORT bool ZydisGetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor* preferredVendor); + +ZYDIS_EXPORT bool ZydisSetPreferredVendor(const ZydisInstructionDecoderContext* decoder, + ZydisInstructionSetVendor preferredVendor); + + ZYDIS_EXPORT bool ZydisGetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t* instructionPointer); + +ZYDIS_EXPORT bool ZydisSetInstructionPointer(const ZydisInstructionDecoderContext* decoder, + uint64_t instructionPointer); + +ZYDIS_EXPORT bool ZydisFreeInstructionDecoder(const ZydisInstructionDecoderContext* decoder); + +/* InstructionFormatter ========================================================================= */ + +ZYDIS_EXPORT ZydisInstructionFormatterContext* ZydisCreateCustomInstructionFormatter(/*TODO*/); + +ZYDIS_EXPORT ZydisInstructionFormatterContext* ZydisCreateIntelInstructionFormatter(); + +ZYDIS_EXPORT bool ZydisFormatInstruction(const ZydisInstructionFormatterContext* formatter, + const ZydisInstructionInfo* info, const char** instructionText); + +ZYDIS_EXPORT bool ZydisGetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext** resolver); + +ZYDIS_EXPORT bool ZydisSetSymbolResolver(const ZydisInstructionFormatterContext* formatter, + ZydisSymbolResolverContext* resolver); + +ZYDIS_EXPORT bool ZydisFreeInstructionFormatter(const ZydisInstructionFormatterContext* formatter); + +/* SymbolResolver =============================================================================== */ + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateCustomSymbolResolver(/*TODO*/); + +ZYDIS_EXPORT ZydisSymbolResolverContext* ZydisCreateExactSymbolResolver(); + +ZYDIS_EXPORT bool ZydisResolveSymbol(const ZydisSymbolResolverContext* resolver, + const ZydisInstructionInfo* info, uint64_t address, const char** symbol, uint64_t* offset); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverContainsSymbol( + const ZydisSymbolResolverContext* resolver, uint64_t address, bool* containsSymbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverSetSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address, const char** symbol); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverRemoveSymbol(const ZydisSymbolResolverContext* resolver, + uint64_t address); + +ZYDIS_EXPORT bool ZydisExactSymbolResolverClear(const ZydisSymbolResolverContext* resolver); + +ZYDIS_EXPORT bool ZydisFreeSymbolResolver(const ZydisSymbolResolverContext* resolver); + +/* ============================================================================================== */ + #ifdef __cplusplus } #endif -#endif /* _ZYDIS_TYPES_H_ */ \ No newline at end of file +#endif /* _ZYDIS_API_H_ */ diff --git a/Zydis/ZydisInstructionFormatter.cpp b/Zydis/ZydisInstructionFormatter.cpp index 6420b9b..a09b1a5 100644 --- a/Zydis/ZydisInstructionFormatter.cpp +++ b/Zydis/ZydisInstructionFormatter.cpp @@ -117,7 +117,7 @@ BaseInstructionFormatter::BaseInstructionFormatter( } -const char *BaseInstructionFormatter::formatInstruction(const InstructionInfo& info) +const char* BaseInstructionFormatter::formatInstruction(const InstructionInfo& info) { // Clears the internal string buffer outputClear(); @@ -202,8 +202,7 @@ char const *BaseInstructionFormatter::outputString() } // Write the formatted text to the output buffer assert((bufLen - offset) > 0); - strLen = - vsnprintf_s(&m_outputBuffer[offset], bufLen - offset, _TRUNCATE, format, arguments); + strLen = std::vsnprintf(&m_outputBuffer[offset], bufLen - offset, format, arguments); } while (strLen < 0); // Increase the string length m_outputStringLen = offset + strLen + 1; diff --git a/Zydis/ZydisSymbolResolver.hpp b/Zydis/ZydisSymbolResolver.hpp index b8bf0ca..d825863 100644 --- a/Zydis/ZydisSymbolResolver.hpp +++ b/Zydis/ZydisSymbolResolver.hpp @@ -58,7 +58,7 @@ public: * relative to the base address of the symbol. * @return The name of the symbol, if the symbol was found, @c NULL if not. */ - virtual const char *resolveSymbol(const InstructionInfo& info, uint64_t address, + virtual const char* resolveSymbol(const InstructionInfo& info, uint64_t address, uint64_t& offset); }; @@ -99,7 +99,7 @@ public: * @param address The address. * @param name The symbol name. */ - void setSymbol(uint64_t address, const char *name); + void setSymbol(uint64_t address, const char* name); /** * @brief Removes the symbol described by address. This will invalidate all char pointers * to the specific symbol name.