mirror of https://github.com/x64dbg/zydis
implemented VXCustomSymbolResolver
made internal routines in VXInstructionFormatterC.c static
This commit is contained in:
parent
ff09bd32eb
commit
d851e83a59
|
@ -45,12 +45,13 @@
|
||||||
|
|
||||||
/* VXBaseSymbolResolver ------------------------------------------------------------------------ */
|
/* VXBaseSymbolResolver ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
typedef const char* (*VXBaseSymbolResolver_DestructionCallback)(
|
typedef void (*VXBaseSymbolResolver_DestructionCallback)(
|
||||||
VXBaseSymbolResolverContext *ctx);
|
VXBaseSymbolResolverContext *ctx);
|
||||||
typedef const char* (*VXBaseSymbolResolver_ResolveSymbolCallback)(
|
typedef const char* (*VXBaseSymbolResolver_ResolveSymbolCallback)(
|
||||||
VXBaseSymbolResolverContext *ctx,
|
VXBaseSymbolResolverContext *ctx,
|
||||||
const VXInstructionInfo *info,
|
const VXInstructionInfo *info,
|
||||||
uint64_t address, uint64_t *offset);
|
uint64_t address,
|
||||||
|
uint64_t *offset);
|
||||||
|
|
||||||
typedef struct _VXBaseSymbolResolver
|
typedef struct _VXBaseSymbolResolver
|
||||||
{
|
{
|
||||||
|
@ -58,6 +59,8 @@ typedef struct _VXBaseSymbolResolver
|
||||||
VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback;
|
VXBaseSymbolResolver_ResolveSymbolCallback resolveCallback;
|
||||||
} VXBaseSymbolResolver;
|
} VXBaseSymbolResolver;
|
||||||
|
|
||||||
|
void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx);
|
||||||
|
void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx);
|
||||||
void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx);
|
void VXBaseSymbolResolver_Release(VXBaseSymbolResolverContext *ctx);
|
||||||
const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset);
|
const char* VXBaseSymbolResolver_ResolveSymbol(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset);
|
||||||
|
|
||||||
|
@ -96,6 +99,20 @@ void VXBaseInstructionFormatter_OutputAppendAddress(VXBaseInstructionFormatterCo
|
||||||
void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols);
|
void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols);
|
||||||
void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand);
|
void VXBaseInstructionFormatter_OutputAppendDisplacement(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand);
|
||||||
|
|
||||||
|
/* VXCustomSymbolResolver ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
typedef struct _VXCustomSymbolResolver
|
||||||
|
{
|
||||||
|
VXBaseSymbolResolver super;
|
||||||
|
VXCustomSymbolResolver_ResolveSymbolCallback resolve;
|
||||||
|
void *userData;
|
||||||
|
} VXCustomSymbolResolver;
|
||||||
|
|
||||||
|
void VXCustomSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx, VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData);
|
||||||
|
void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx);
|
||||||
|
VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(VXCustomSymbolResolver_ResolveSymbolCallback resolverCb, void *userData);
|
||||||
|
const char* VXCustomSymbolResolver_Resolve(VXBaseSymbolResolverContext *ctx, const VXInstructionInfo *info, uint64_t address, uint64_t *offset);
|
||||||
|
|
||||||
/* VXIntelInstructionFormatter ----------------------------------------------------------------- */
|
/* VXIntelInstructionFormatter ----------------------------------------------------------------- */
|
||||||
|
|
||||||
typedef struct _VXIntelInstructionFormatter
|
typedef struct _VXIntelInstructionFormatter
|
||||||
|
@ -109,19 +126,20 @@ void VXIntelInstructionFormatter_OutputAppendOperandCast(VXBaseInstructionFormat
|
||||||
void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand);
|
void VXIntelInstructionFormatter_FormatOperand(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info, const VXOperandInfo *operand);
|
||||||
void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info);
|
void VXIntelInstructionFormatter_InternalFormatInstruction(VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info);
|
||||||
|
|
||||||
/* VXExactSymbolResolver ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
typedef struct _VXExactSymbolResolver
|
|
||||||
{
|
|
||||||
VXBaseSymbolResolver super;
|
|
||||||
} VXExactSymbolResolver;
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
|
|
||||||
/* Implementation ============================================================================== */
|
/* Implementation ============================================================================== */
|
||||||
|
|
||||||
/* VXBaseSymbolResolver ------------------------------------------------------------------------ */
|
/* VXBaseSymbolResolver ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
void VXBaseSymbolResolver_Construct(VXBaseSymbolResolverContext *ctx)
|
||||||
|
{
|
||||||
|
memset(VXBaseSymbolResolver_thiz(ctx), 0, sizeof(VXBaseSymbolResolver));
|
||||||
|
}
|
||||||
|
|
||||||
|
void VXBaseSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void VXBaseSymbolResolver_Release(
|
void VXBaseSymbolResolver_Release(
|
||||||
VXBaseSymbolResolverContext *ctx)
|
VXBaseSymbolResolverContext *ctx)
|
||||||
{
|
{
|
||||||
|
@ -146,9 +164,54 @@ const char* VXBaseSymbolResolver_ResolveSymbol(
|
||||||
return VXBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset);
|
return VXBaseSymbolResolver_thiz(ctx)->resolveCallback(ctx, info, address, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* VXCustomSymbolResolver ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static void VXCustomSymbolResolver_Construct(
|
||||||
|
VXBaseSymbolResolverContext *ctx,
|
||||||
|
VXCustomSymbolResolver_ResolveSymbolCallback resolverCb,
|
||||||
|
void *userData)
|
||||||
|
{
|
||||||
|
VXBaseSymbolResolver_Construct(ctx);
|
||||||
|
VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx);
|
||||||
|
|
||||||
|
thiz->super.destruct = &VXCustomSymbolResolver_Destruct;
|
||||||
|
thiz->super.resolveCallback = &VXCustomSymbolResolver_Resolve;
|
||||||
|
|
||||||
|
thiz->resolve = resolverCb;
|
||||||
|
thiz->userData = userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VXCustomSymbolResolver_Destruct(VXBaseSymbolResolverContext *ctx)
|
||||||
|
{
|
||||||
|
VXBaseSymbolResolver_Destruct(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(
|
||||||
|
VXCustomSymbolResolver_ResolveSymbolCallback resolverCb,
|
||||||
|
void *userData)
|
||||||
|
{
|
||||||
|
VXCustomSymbolResolver *thiz = malloc(sizeof(VXCustomSymbolResolver));
|
||||||
|
VXBaseSymbolResolverContext *ctx = malloc(sizeof(VXBaseSymbolResolverContext));
|
||||||
|
|
||||||
|
ctx->d.type = TYPE_CUSTOMSYMBOLRESOLVER;
|
||||||
|
ctx->d.ptr = thiz;
|
||||||
|
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* VXCustomSymbolResolver_Resolve(
|
||||||
|
VXBaseSymbolResolverContext *ctx,
|
||||||
|
const VXInstructionInfo *info,
|
||||||
|
uint64_t address,
|
||||||
|
uint64_t *offset)
|
||||||
|
{
|
||||||
|
VXCustomSymbolResolver *thiz = VXCustomSymbolResolver_thiz(ctx);
|
||||||
|
return thiz->resolve(info, address, offset, thiz->userData);
|
||||||
|
}
|
||||||
|
|
||||||
/* VXBaseInstructionFormatter ------------------------------------------------------------------ */
|
/* VXBaseInstructionFormatter ------------------------------------------------------------------ */
|
||||||
|
|
||||||
const char* VXBaseInstructionFormatter_registerStrings[] =
|
static const char* VXBaseInstructionFormatter_registerStrings[] =
|
||||||
{
|
{
|
||||||
/* 8 bit general purpose registers */
|
/* 8 bit general purpose registers */
|
||||||
"al", "cl", "dl", "bl",
|
"al", "cl", "dl", "bl",
|
||||||
|
@ -204,7 +267,7 @@ const char* VXBaseInstructionFormatter_registerStrings[] =
|
||||||
"rip"
|
"rip"
|
||||||
};
|
};
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_Construct(
|
static void VXBaseInstructionFormatter_Construct(
|
||||||
VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver)
|
VXBaseInstructionFormatterContext *ctx, VXBaseSymbolResolverContext *symbolResolver)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
||||||
|
@ -218,7 +281,7 @@ void VXBaseInstructionFormatter_Construct(
|
||||||
thiz->outputBuffer = malloc(thiz->outputBufferCapacity);
|
thiz->outputBuffer = malloc(thiz->outputBufferCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx)
|
static void VXBaseInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
||||||
|
|
||||||
|
@ -243,13 +306,13 @@ void VXBaseInstructionFormatter_Release(
|
||||||
free(ctx);
|
free(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx,
|
static void VXBaseInstructionFormatter_OutputSetUppercase(VXBaseInstructionFormatterContext *ctx,
|
||||||
bool uppercase)
|
bool uppercase)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase;
|
VXBaseInstructionFormatter_thiz(ctx)->outputUppercase = uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const* VXBaseInstructionFormatter_RegisterToString(
|
static char const* VXBaseInstructionFormatter_RegisterToString(
|
||||||
const VXBaseInstructionFormatterContext *ctx, VXRegister reg)
|
const VXBaseInstructionFormatterContext *ctx, VXRegister reg)
|
||||||
{
|
{
|
||||||
if (reg == REG_NONE)
|
if (reg == REG_NONE)
|
||||||
|
@ -259,7 +322,7 @@ char const* VXBaseInstructionFormatter_RegisterToString(
|
||||||
return VXBaseInstructionFormatter_registerStrings[reg - 1];
|
return VXBaseInstructionFormatter_registerStrings[reg - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
char const* VXBaseInstructionFormatter_ResolveSymbol(
|
static char const* VXBaseInstructionFormatter_ResolveSymbol(
|
||||||
const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
const VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
||||||
uint64_t address, uint64_t *offset)
|
uint64_t address, uint64_t *offset)
|
||||||
{
|
{
|
||||||
|
@ -307,17 +370,17 @@ const char* VXBaseInstructionFormatter_FormatInstruction(
|
||||||
return VXBaseInstructionFormatter_OutputString(ctx);
|
return VXBaseInstructionFormatter_OutputString(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx)
|
static void VXBaseInstructionFormatter_OutputClear(VXBaseInstructionFormatterContext *ctx)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0;
|
VXBaseInstructionFormatter_thiz(ctx)->outputStringLen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx)
|
static char const* VXBaseInstructionFormatter_OutputString(VXBaseInstructionFormatterContext *ctx)
|
||||||
{
|
{
|
||||||
return &VXBaseInstructionFormatter_thiz(ctx)->outputBuffer[0];
|
return &VXBaseInstructionFormatter_thiz(ctx)->outputBuffer[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputAppend(
|
static void VXBaseInstructionFormatter_OutputAppend(
|
||||||
VXBaseInstructionFormatterContext *ctx, char const *text)
|
VXBaseInstructionFormatterContext *ctx, char const *text)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
||||||
|
@ -356,7 +419,7 @@ void VXBaseInstructionFormatter_OutputAppend(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputAppendFormatted(
|
static void VXBaseInstructionFormatter_OutputAppendFormatted(
|
||||||
VXBaseInstructionFormatterContext *ctx, char const *format, ...)
|
VXBaseInstructionFormatterContext *ctx, char const *format, ...)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
||||||
|
@ -410,7 +473,7 @@ void VXBaseInstructionFormatter_OutputAppendFormatted(
|
||||||
va_end(arguments);
|
va_end(arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputAppendAddress(
|
static void VXBaseInstructionFormatter_OutputAppendAddress(
|
||||||
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
||||||
uint64_t address, bool resolveSymbols)
|
uint64_t address, bool resolveSymbols)
|
||||||
{
|
{
|
||||||
|
@ -454,8 +517,11 @@ void VXBaseInstructionFormatter_OutputAppendAddress(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatterContext *ctx,
|
static void VXBaseInstructionFormatter_OutputAppendImmediate(
|
||||||
const VXInstructionInfo *info, const VXOperandInfo *operand, bool resolveSymbols)
|
VXBaseInstructionFormatterContext *ctx,
|
||||||
|
const VXInstructionInfo *info,
|
||||||
|
const VXOperandInfo *operand,
|
||||||
|
bool resolveSymbols)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
VXBaseInstructionFormatter *thiz = VXBaseInstructionFormatter_thiz(ctx);
|
||||||
|
|
||||||
|
@ -523,7 +589,7 @@ void VXBaseInstructionFormatter_OutputAppendImmediate(VXBaseInstructionFormatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXBaseInstructionFormatter_OutputAppendDisplacement(
|
static void VXBaseInstructionFormatter_OutputAppendDisplacement(
|
||||||
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
||||||
const VXOperandInfo *operand)
|
const VXOperandInfo *operand)
|
||||||
{
|
{
|
||||||
|
@ -551,7 +617,8 @@ void VXBaseInstructionFormatter_OutputAppendDisplacement(
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value);
|
VXBaseInstructionFormatter_OutputAppendFormatted(ctx, "%.2llX", value);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// The displacement value might be negative
|
// The displacement value might be negative
|
||||||
assert(operand->offset != 64);
|
assert(operand->offset != 64);
|
||||||
|
@ -583,7 +650,7 @@ void VXBaseInstructionFormatter_OutputAppendDisplacement(
|
||||||
|
|
||||||
/* VXIntelInstructionFormatter ----------------------------------------------------------------- */
|
/* VXIntelInstructionFormatter ----------------------------------------------------------------- */
|
||||||
|
|
||||||
void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx,
|
static void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ctx,
|
||||||
VXBaseSymbolResolverContext* symbolResolver)
|
VXBaseSymbolResolverContext* symbolResolver)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter_Construct(ctx, symbolResolver);
|
VXBaseInstructionFormatter_Construct(ctx, symbolResolver);
|
||||||
|
@ -593,7 +660,7 @@ void VXIntelInstructionFormatter_Construct(VXBaseInstructionFormatterContext *ct
|
||||||
thiz->super.internalFormat = &VXIntelInstructionFormatter_InternalFormatInstruction;
|
thiz->super.internalFormat = &VXIntelInstructionFormatter_InternalFormatInstruction;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx)
|
static void VXIntelInstructionFormatter_Destruct(VXBaseInstructionFormatterContext *ctx)
|
||||||
{
|
{
|
||||||
VXBaseInstructionFormatter_Destruct(ctx);
|
VXBaseInstructionFormatter_Destruct(ctx);
|
||||||
}
|
}
|
||||||
|
@ -617,8 +684,9 @@ VXBaseInstructionFormatterContext* VXIntelInstructionFormatter_CreateEx(
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXIntelInstructionFormatter_OutputAppendOperandCast(
|
static void VXIntelInstructionFormatter_OutputAppendOperandCast(
|
||||||
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
VXBaseInstructionFormatterContext *ctx,
|
||||||
|
const VXInstructionInfo *info,
|
||||||
const VXOperandInfo *operand)
|
const VXOperandInfo *operand)
|
||||||
{
|
{
|
||||||
switch(operand->size)
|
switch(operand->size)
|
||||||
|
@ -649,8 +717,9 @@ void VXIntelInstructionFormatter_OutputAppendOperandCast(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXIntelInstructionFormatter_FormatOperand(
|
static void VXIntelInstructionFormatter_FormatOperand(
|
||||||
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info,
|
VXBaseInstructionFormatterContext *ctx,
|
||||||
|
const VXInstructionInfo *info,
|
||||||
const VXOperandInfo *operand)
|
const VXOperandInfo *operand)
|
||||||
{
|
{
|
||||||
switch (operand->type)
|
switch (operand->type)
|
||||||
|
@ -738,7 +807,7 @@ void VXIntelInstructionFormatter_FormatOperand(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VXIntelInstructionFormatter_InternalFormatInstruction(
|
static void VXIntelInstructionFormatter_InternalFormatInstruction(
|
||||||
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info)
|
VXBaseInstructionFormatterContext *ctx, const VXInstructionInfo *info)
|
||||||
{
|
{
|
||||||
// Append string prefixes
|
// Append string prefixes
|
||||||
|
|
|
@ -73,7 +73,7 @@ const char* VXBaseSymbolResolver_ResolveSymbol(
|
||||||
|
|
||||||
/* VXCustomSymbolResolver ====================================================================== */
|
/* VXCustomSymbolResolver ====================================================================== */
|
||||||
|
|
||||||
typedef const char* (*VXResolveSymbol_t)(
|
typedef const char* (*VXCustomSymbolResolver_ResolveSymbolCallback)(
|
||||||
const VXInstructionInfo *info,
|
const VXInstructionInfo *info,
|
||||||
uint64_t address,
|
uint64_t address,
|
||||||
uint64_t *offset,
|
uint64_t *offset,
|
||||||
|
@ -87,7 +87,7 @@ typedef const char* (*VXResolveSymbol_t)(
|
||||||
* @return @c NULL if it fails, else a symbol resolver context.
|
* @return @c NULL if it fails, else a symbol resolver context.
|
||||||
*/
|
*/
|
||||||
VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(
|
VXBaseSymbolResolverContext* VXCustomSymbolResolver_Create(
|
||||||
VXResolveSymbol_t resolverCb,
|
VXCustomSymbolResolver_ResolveSymbolCallback resolverCb,
|
||||||
void *userData);
|
void *userData);
|
||||||
|
|
||||||
/* VXBaseInstructionFormatter ================================================================== */
|
/* VXBaseInstructionFormatter ================================================================== */
|
||||||
|
|
|
@ -49,7 +49,7 @@ typedef enum _VXTypeId
|
||||||
TYPE_MEMORYDATASOURCE,
|
TYPE_MEMORYDATASOURCE,
|
||||||
TYPE_INSTRUCTIONDECODER,
|
TYPE_INSTRUCTIONDECODER,
|
||||||
TYPE_BASESYMBOLRESOLVER,
|
TYPE_BASESYMBOLRESOLVER,
|
||||||
TYPE_EXACTSYMBOLRESOLVER,
|
TYPE_CUSTOMSYMBOLRESOLVER,
|
||||||
TYPE_BASEINSTRUCTIONFORMATTER,
|
TYPE_BASEINSTRUCTIONFORMATTER,
|
||||||
TYPE_INTELINSTRUCTIONFORMATTER,
|
TYPE_INTELINSTRUCTIONFORMATTER,
|
||||||
} VXTypeId;
|
} VXTypeId;
|
||||||
|
@ -105,29 +105,31 @@ __inline const struct _VXInstructionDecoder* VXInstructionDecoder_cthiz(
|
||||||
__inline struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz(
|
__inline struct _VXBaseSymbolResolver* VXBaseSymbolResolver_thiz(
|
||||||
VXBaseSymbolResolverContext *ctx)
|
VXBaseSymbolResolverContext *ctx)
|
||||||
{
|
{
|
||||||
assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER);
|
assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER
|
||||||
|
|| ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER);
|
||||||
return (struct _VXBaseSymbolResolver*)ctx->d.ptr;
|
return (struct _VXBaseSymbolResolver*)ctx->d.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
__inline const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz(
|
__inline const struct _VXBaseSymbolResolver* VXBaseSymbolResolver_cthiz(
|
||||||
const VXBaseSymbolResolverContext *ctx)
|
const VXBaseSymbolResolverContext *ctx)
|
||||||
{
|
{
|
||||||
assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER);
|
assert(ctx->d.type == TYPE_BASESYMBOLRESOLVER
|
||||||
|
|| ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER);
|
||||||
return (const struct _VXBaseSymbolResolver*)ctx->d.ptr;
|
return (const struct _VXBaseSymbolResolver*)ctx->d.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
__inline struct _VXExactSymbolResolver* VXExactSymbolResolver_thiz(
|
__inline struct _VXCustomSymbolResolver* VXCustomSymbolResolver_thiz(
|
||||||
VXBaseSymbolResolverContext *ctx)
|
VXBaseSymbolResolverContext *ctx)
|
||||||
{
|
{
|
||||||
assert(ctx->d.type == TYPE_EXACTSYMBOLRESOLVER);
|
assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER);
|
||||||
return (struct _VXExactSymbolResolver*)ctx->d.ptr;
|
return (struct _VXCustomSymbolResolver*)ctx->d.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
__inline const struct _VXExactSymbolResolver* VXExactSymbolResolver_cthiz(
|
__inline const struct _VXCustomSymbolResolver* VXCustomSymbolResolver_cthiz(
|
||||||
const VXBaseSymbolResolverContext *ctx)
|
const VXBaseSymbolResolverContext *ctx)
|
||||||
{
|
{
|
||||||
assert(ctx->d.type == TYPE_EXACTSYMBOLRESOLVER);
|
assert(ctx->d.type == TYPE_CUSTOMSYMBOLRESOLVER);
|
||||||
return (const struct _VXExactSymbolResolver*)ctx->d.ptr;
|
return (const struct _VXCustomSymbolResolver*)ctx->d.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
__inline struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz(
|
__inline struct _VXBaseInstructionFormatter* VXBaseInstructionFormatter_thiz(
|
||||||
|
|
Loading…
Reference in New Issue