support cs_option() for arm64 module

This commit is contained in:
Nguyen Anh Quynh 2013-12-22 11:10:56 +08:00
parent 39a42eddfb
commit d345839bce
6 changed files with 30 additions and 21 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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
View File

@ -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)

View File

@ -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;