support cs_option() for arm64 module
This commit is contained in:
parent
39a42eddfb
commit
d345839bce
|
@ -8,7 +8,7 @@
|
|||
#include "mapping.h"
|
||||
|
||||
|
||||
static void init_arm64(cs_struct *ud)
|
||||
static void init(cs_struct *ud)
|
||||
{
|
||||
MCRegisterInfo *mri = malloc(sizeof(*mri));
|
||||
|
||||
|
@ -26,7 +26,13 @@ static void init_arm64(cs_struct *ud)
|
|||
all_arch |= (1 << CS_ARCH_ARM64);
|
||||
}
|
||||
|
||||
static cs_err option(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
{
|
||||
return CS_ERR_OK;
|
||||
}
|
||||
|
||||
static void __attribute__ ((constructor)) __init_arm64__()
|
||||
{
|
||||
init_arch[CS_ARCH_ARM64] = init_arm64;
|
||||
arch_init[CS_ARCH_ARM64] = init;
|
||||
arch_option[CS_ARCH_ARM] = option;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "mapping.h"
|
||||
|
||||
|
||||
static void init_arm(cs_struct *ud)
|
||||
static void init(cs_struct *ud)
|
||||
{
|
||||
MCRegisterInfo *mri = malloc(sizeof(*mri));
|
||||
|
||||
|
@ -30,7 +30,7 @@ static void init_arm(cs_struct *ud)
|
|||
all_arch |= (1 << CS_ARCH_ARM);
|
||||
}
|
||||
|
||||
static cs_err option_arm(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
static cs_err option(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
{
|
||||
if (type == CS_OPT_MODE) {
|
||||
if (value & CS_MODE_THUMB)
|
||||
|
@ -45,6 +45,6 @@ static cs_err option_arm(cs_struct *handle, cs_opt_type type, size_t value)
|
|||
|
||||
static void __attribute__ ((constructor)) __init_arm__()
|
||||
{
|
||||
init_arch[CS_ARCH_ARM] = init_arm;
|
||||
option_arch[CS_ARCH_ARM] = option_arm;
|
||||
arch_init[CS_ARCH_ARM] = init;
|
||||
arch_option[CS_ARCH_ARM] = option;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "mapping.h"
|
||||
|
||||
|
||||
static void init_mips(cs_struct *ud)
|
||||
static void init(cs_struct *ud)
|
||||
{
|
||||
MCRegisterInfo *mri = malloc(sizeof(*mri));
|
||||
|
||||
|
@ -29,7 +29,7 @@ static void init_mips(cs_struct *ud)
|
|||
all_arch |= (1 << CS_ARCH_MIPS);
|
||||
}
|
||||
|
||||
static cs_err option_mips(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
static cs_err option(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
{
|
||||
if (type == CS_OPT_MODE) {
|
||||
if (value & CS_MODE_32)
|
||||
|
@ -44,6 +44,6 @@ static cs_err option_mips(cs_struct *handle, cs_opt_type type, size_t value)
|
|||
|
||||
static void __attribute__ ((constructor)) __init_mips__()
|
||||
{
|
||||
init_arch[CS_ARCH_MIPS] = init_mips;
|
||||
option_arch[CS_ARCH_MIPS] = option_mips;
|
||||
arch_init[CS_ARCH_MIPS] = init;
|
||||
arch_option[CS_ARCH_MIPS] = option;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "X86InstPrinter.h"
|
||||
#include "mapping.h"
|
||||
|
||||
static void init_x86(cs_struct *ud)
|
||||
static void init(cs_struct *ud)
|
||||
{
|
||||
// by default, we use Intel syntax
|
||||
ud->printer = X86_Intel_printInst;
|
||||
|
@ -22,7 +22,7 @@ static void init_x86(cs_struct *ud)
|
|||
all_arch |= (1 << CS_ARCH_X86);
|
||||
}
|
||||
|
||||
static cs_err option_x86(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
static cs_err option(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
{
|
||||
if (type == CS_OPT_SYNTAX) {
|
||||
switch(value) {
|
||||
|
@ -45,6 +45,6 @@ static cs_err option_x86(cs_struct *handle, cs_opt_type type, size_t value)
|
|||
|
||||
static void __attribute__ ((constructor)) __init_x86__()
|
||||
{
|
||||
init_arch[CS_ARCH_X86] = init_x86;
|
||||
option_arch[CS_ARCH_X86] = option_x86;
|
||||
arch_init[CS_ARCH_X86] = init;
|
||||
arch_option[CS_ARCH_X86] = option;
|
||||
}
|
||||
|
|
10
cs.c
10
cs.c
|
@ -12,8 +12,8 @@
|
|||
|
||||
#include "utils.h"
|
||||
|
||||
void (*init_arch[MAX_ARCH]) (cs_struct *);
|
||||
cs_err (*option_arch[MAX_ARCH]) (cs_struct*, cs_opt_type, size_t value);
|
||||
void (*arch_init[MAX_ARCH]) (cs_struct *);
|
||||
cs_err (*arch_option[MAX_ARCH]) (cs_struct*, cs_opt_type, size_t value);
|
||||
|
||||
unsigned int all_arch = 0;
|
||||
|
||||
|
@ -61,8 +61,8 @@ cs_err cs_open(cs_arch arch, cs_mode mode, csh *handle)
|
|||
ud->reg_name = NULL;
|
||||
ud->detail = CS_OPT_ON; // by default break instruction into details
|
||||
|
||||
if (init_arch[ud->arch])
|
||||
init_arch[ud->arch](ud);
|
||||
if (arch_init[ud->arch])
|
||||
arch_init[ud->arch](ud);
|
||||
else
|
||||
return CS_ERR_HANDLE;
|
||||
|
||||
|
@ -156,7 +156,7 @@ cs_err cs_option(csh ud, cs_opt_type type, size_t value)
|
|||
return CS_ERR_OK;
|
||||
}
|
||||
|
||||
return option_arch[handle->arch](handle, type, value);
|
||||
return arch_option[handle->arch](handle, type, value);
|
||||
}
|
||||
|
||||
size_t cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64_t offset, size_t count, cs_insn *insn)
|
||||
|
|
|
@ -46,8 +46,11 @@ typedef struct cs_struct {
|
|||
|
||||
#define MAX_ARCH 32
|
||||
|
||||
extern void (*init_arch[MAX_ARCH]) (cs_struct *);
|
||||
extern cs_err (*option_arch[MAX_ARCH]) (cs_struct*, cs_opt_type, size_t value);
|
||||
// constructor initialization for all archs
|
||||
extern void (*arch_init[MAX_ARCH]) (cs_struct *);
|
||||
|
||||
// support cs_option() for all archs
|
||||
extern cs_err (*arch_option[MAX_ARCH]) (cs_struct*, cs_opt_type, size_t value);
|
||||
|
||||
extern unsigned int all_arch;
|
||||
|
||||
|
|
Loading…
Reference in New Issue