/* distorm.c :[diStorm64}: C Library Interface The ultimate disassembler library (80x86, AMD64) Copyright (C) 2003-2006 Gil Dabah, http://ragestorm.net/distorm/ This library is licensed under the BSD license. See the file COPYING. */ #include "decoder.h" #include "x86defs.h" // C LIBRARY EXPORTS // _DLLEXPORT_ _DecodeResult distorm_decode(_OffsetType codeOffset, const unsigned char* code, long codeLen, _DecodeType dt, _DecodedInst result[], unsigned long maxInstructions, unsigned long* usedInstructionsCount) { *usedInstructionsCount = 0; // I use codeLen as a signed variable in order to ease detection of underflow... and besides - if ((unsigned long)codeLen > 0x7fffffff) { // What is the chance for this??! return DECRES_INPUTERR; } if ((dt != Decode16Bits) && (dt != Decode32Bits) && (dt != Decode64Bits)) { return DECRES_INPUTERR; } if (code == NULL || result == NULL) { return DECRES_INPUTERR; } // Assume length=0 is success. if (codeLen == 0) { return DECRES_SUCCESS; } // We need to supply at least 15 entries so the internal_decoder could return anything possible. if (maxInstructions < INST_MAXIMUM_SIZE) { return DECRES_MEMORYERR; } return internal_decode(codeOffset, code, codeLen, dt, result, maxInstructions, usedInstructionsCount); }