コード例 #1
0
ファイル: MipsModule.c プロジェクト: 5df/capstone
static cs_err init(cs_struct *ud)
{
	MCRegisterInfo *mri;

	// verify if requested mode is valid
	if (ud->mode & ~(CS_MODE_LITTLE_ENDIAN | CS_MODE_32 | CS_MODE_64 |
				CS_MODE_MICRO | CS_MODE_N64 | CS_MODE_BIG_ENDIAN))
		return CS_ERR_MODE;

	mri = cs_mem_malloc(sizeof(*mri));

	Mips_init(mri);
	ud->printer = Mips_printInst;
	ud->printer_info = mri;
	ud->getinsn_info = mri;
	ud->reg_name = Mips_reg_name;
	ud->insn_id = Mips_get_insn_id;
	ud->insn_name = Mips_insn_name;

	if (ud->mode & CS_MODE_32)
		ud->disasm = Mips_getInstruction;
	else
		ud->disasm = Mips64_getInstruction;

	return CS_ERR_OK;
}
コード例 #2
0
ファイル: ARMModule.c プロジェクト: 1833183060/capstone
static cs_err init(cs_struct *ud)
{
	MCRegisterInfo *mri;

	// verify if requested mode is valid
	if (ud->mode & ~(CS_MODE_LITTLE_ENDIAN | CS_MODE_ARM | CS_MODE_V8 |
				CS_MODE_MCLASS | CS_MODE_THUMB | CS_MODE_BIG_ENDIAN))
		return CS_ERR_MODE;

	mri = cs_mem_malloc(sizeof(*mri));

	ARM_init(mri);
	ARM_getRegName(ud, 0);	// use default get_regname

	ud->printer = ARM_printInst;
	ud->printer_info = mri;
	ud->reg_name = ARM_reg_name;
	ud->insn_id = ARM_get_insn_id;
	ud->insn_name = ARM_insn_name;
	ud->group_name = ARM_group_name;
	ud->post_printer = ARM_post_printer;

	if (ud->mode & CS_MODE_THUMB)
		ud->disasm = Thumb_getInstruction;
	else
		ud->disasm = ARM_getInstruction;

	return CS_ERR_OK;
}
コード例 #3
0
ファイル: log.c プロジェクト: Undrizzle/yolanda
void cs_sys_log(const cs_int8 *String, ...)
{
    va_list   ptr;
    cs_int8 msg_buffer [4*CS_LOG_SIZE];
    cs_log_t *log;
    cs_int32 len=0;

    log = (cs_log_t *)cs_mem_malloc(sys_log_ctrl.mempool_id);
    if(log == NULL)
        return;
    memset(log , 0 , sizeof(cs_log_t));
    log->time = 0;
    log->log_type = CS_SYS_LOG_TYPE;

    memset(msg_buffer , 0 , sizeof(msg_buffer));
    va_start(ptr,String);
    vsprintf(msg_buffer , String, ptr);
    va_end(ptr);

    len = (strlen(msg_buffer) >= CS_LOG_SIZE)?CS_LOG_SIZE-1:strlen(msg_buffer);
    memcpy(log->a.log_buf , msg_buffer , len);

    if(CS_E_OSAL_OK != cs_queue_put(sys_log_ctrl.log_queue_id, (void *)&log, sizeof(cs_uint32) , CS_OSAL_NO_WAIT , 0))
    {
        cs_mem_free((cs_uint8 *)log);
        return;
    }

    return;
}
コード例 #4
0
ファイル: X86Module.c プロジェクト: HardlyHaki/ProDBG
static cs_err init(cs_struct *ud)
{
	MCRegisterInfo *mri;

	// verify if requested mode is valid
	if (ud->mode & ~(CS_MODE_LITTLE_ENDIAN | CS_MODE_32 | CS_MODE_64 | CS_MODE_16))
		return CS_ERR_MODE;

	mri = cs_mem_malloc(sizeof(*mri));

	X86_init(mri);

	// by default, we use Intel syntax
	ud->printer = X86_Intel_printInst;
	ud->syntax = CS_OPT_SYNTAX_INTEL;
	ud->printer_info = mri;
	ud->disasm = X86_getInstruction;
	ud->reg_name = X86_reg_name;
	ud->insn_id = X86_get_insn_id;
	ud->insn_name = X86_insn_name;
	ud->group_name = X86_group_name;
	ud->post_printer = NULL;;
#ifndef CAPSTONE_DIET
	ud->reg_access = X86_reg_access;
#endif

	if (ud->mode == CS_MODE_64)
		ud->regsize_map = regsize_map_64;
	else
		ud->regsize_map = regsize_map_32;

	return CS_ERR_OK;
}
コード例 #5
0
ファイル: PPCModule.c プロジェクト: HardlyHaki/ProDBG
static cs_err init(cs_struct *ud)
{
	MCRegisterInfo *mri;

	// verify if requested mode is valid
	if (ud->mode & ~(CS_MODE_LITTLE_ENDIAN | CS_MODE_32 | CS_MODE_64 |
				CS_MODE_BIG_ENDIAN | CS_MODE_QPX))
		return CS_ERR_MODE;

	mri = (MCRegisterInfo *) cs_mem_malloc(sizeof(*mri));

	PPC_init(mri);
	ud->printer = PPC_printInst;
	ud->printer_info = mri;
	ud->getinsn_info = mri;
	ud->disasm = PPC_getInstruction;
	ud->post_printer = PPC_post_printer;

	ud->reg_name = PPC_reg_name;
	ud->insn_id = PPC_get_insn_id;
	ud->insn_name = PPC_insn_name;
	ud->group_name = PPC_group_name;

	return CS_ERR_OK;
}
コード例 #6
0
ファイル: log.c プロジェクト: Undrizzle/yolanda
void cs_buffer_dump(cs_int8 *comment , cs_int8 *buf , cs_int32 len)
{
#ifdef HAVE_LOG_THREAD
    cs_log_t *log;
    cs_int32 comment_len=0;
    cs_int32 buf_len = 0;

    log = (cs_log_t *)cs_mem_malloc(sys_log_ctrl.mempool_id);
    if(log == NULL)
        return;
    memset(log , 0 , sizeof(cs_log_t));
    log->log_level = -1;
    log->module_id = -1;
    log->time = cs_current_time();
    log->log_type = CS_LOG_HEX_TYPE;

    comment_len = (strlen(comment) >= CS_LOG_COMMENT_LEN)?CS_LOG_COMMENT_LEN-1:strlen(comment);
    buf_len = (len >= CS_LOG_SIZE-CS_LOG_COMMENT_LEN-4)?CS_LOG_SIZE-CS_LOG_COMMENT_LEN-4-1:len;
    log->a.b.len = buf_len;
    memcpy(log->a.b.comment , comment , comment_len);
    memcpy(log->a.b.buf , buf , buf_len);

    if(CS_E_OSAL_OK != cs_queue_put(sys_log_ctrl.log_queue_id, (void *)&log, sizeof(cs_uint32) , CS_OSAL_NO_WAIT , 0))
    {
        cs_mem_free((cs_uint8 *)log);
        return;
    }
#else
    int i;
    cs_printf("\n\n#%s ",comment);
    for(i = 0 ; i < len ; i++)
    {
        if(i%16 == 0)
        {
            cs_printf("\n");
            cs_printf("%06x  ", i);
        }

        cs_printf("%02x ",buf[i]);
    }
#endif

    return;
}
コード例 #7
0
ファイル: XCoreModule.c プロジェクト: Kernal-GH/monitor
static cs_err init(cs_struct *ud)
{
	MCRegisterInfo *mri;

	mri = cs_mem_malloc(sizeof(*mri));

	XCore_init(mri);
	ud->printer = XCore_printInst;
	ud->printer_info = mri;
	ud->getinsn_info = mri;
	ud->disasm = XCore_getInstruction;
	ud->post_printer = XCore_post_printer;

	ud->reg_name = XCore_reg_name;
	ud->insn_id = XCore_get_insn_id;
	ud->insn_name = XCore_insn_name;

	return CS_ERR_OK;
}
コード例 #8
0
ファイル: AArch64Module.c プロジェクト: AmesianX/capstone
cs_err AArch64_global_init(cs_struct *ud)
{
	MCRegisterInfo *mri;
	mri = cs_mem_malloc(sizeof(*mri));

	AArch64_init(mri);
	ud->printer = AArch64_printInst;
	ud->printer_info = mri;
	ud->getinsn_info = mri;
	ud->disasm = AArch64_getInstruction;
	ud->reg_name = AArch64_reg_name;
	ud->insn_id = AArch64_get_insn_id;
	ud->insn_name = AArch64_insn_name;
	ud->group_name = AArch64_group_name;
	ud->post_printer = AArch64_post_printer;
#ifndef CAPSTONE_DIET
	ud->reg_access = AArch64_reg_access;
#endif

	return CS_ERR_OK;
}
コード例 #9
0
ファイル: log.c プロジェクト: Undrizzle/yolanda
void cs_sys_log(const cs_int8 *String, ...)
{
    va_list   ptr;
    cs_int8 msg_buffer [2*CS_LOG_SIZE];
    cs_log_t *log;
    cs_int32 len=0;
    cs_int32 hour=0,min=0,sec=0;

    log = (cs_log_t *)cs_mem_malloc(sys_log_ctrl.mempool_id);
    if(log == NULL)
        return;
    memset(log , 0 , sizeof(cs_log_t));
    log->time = cs_current_time();
    log->log_type = CS_SYS_LOG_TYPE;

    memset(msg_buffer , 0 , sizeof(msg_buffer));
    va_start(ptr,String);
    vsprintf(msg_buffer , String, ptr);
    va_end(ptr);
    /*12 bytes for timestamp*/
    len = (strlen(msg_buffer) >= CS_LOG_SIZE-12)?CS_LOG_SIZE-12-1:strlen(msg_buffer);
    #if 1
    hour = log->time/(100*3600);
    min = (log->time/(100*60))%60;
    sec = (log->time/100)%60;
    memset(log->a.log_buf , 0 , CS_LOG_SIZE);
    sprintf(log->a.log_buf,"[%dh%dm%ds] ",hour,min,sec);
    #endif
    memcpy(log->a.log_buf+strlen(log->a.log_buf) , msg_buffer , len);

    if(CS_E_OSAL_OK != cs_queue_put(sys_log_ctrl.log_queue_id, (void *)&log, sizeof(cs_uint32) , CS_OSAL_NO_WAIT , 0))
    {
        cs_mem_free((cs_uint8 *)log);
        return;
    }

    return;
}
コード例 #10
0
ファイル: SparcModule.c プロジェクト: CyberIntelMafia/monitor
static cs_err init(cs_struct *ud)
{
	MCRegisterInfo *mri;

	// verify if requested mode is valid
	if (ud->mode & ~(CS_MODE_BIG_ENDIAN | CS_MODE_V9))
		return CS_ERR_MODE;

	mri = cs_mem_malloc(sizeof(*mri));

	Sparc_init(mri);
	ud->printer = Sparc_printInst;
	ud->printer_info = mri;
	ud->getinsn_info = mri;
	ud->disasm = Sparc_getInstruction;
	ud->post_printer = Sparc_post_printer;

	ud->reg_name = Sparc_reg_name;
	ud->insn_id = Sparc_get_insn_id;
	ud->insn_name = Sparc_insn_name;

	return CS_ERR_OK;
}
コード例 #11
0
ファイル: log.c プロジェクト: Undrizzle/yolanda
void cs_log_msg(cs_uint32 level , cs_uint32 module_id , const cs_int8 *String, ...)
{
    va_list   ptr;
    cs_int8 msg_buffer [4*CS_LOG_SIZE];
#ifdef HAVE_LOG_THREAD
    cs_log_t *log;
    cs_int32 len=0;
    cs_int32 time_str_len=0;
#endif

    if(module_id >= CS_MAX_MODULE_NUMBER || level >= MAX_LOG_LEVEL)
        return;

#ifdef HAVE_LOG_THREAD
    if(level < sys_log_ctrl.mod_info[module_id].record_level &&
        level < sys_log_ctrl.mod_info[module_id].print_level)
        return;

    log = (cs_log_t *)cs_mem_malloc(sys_log_ctrl.mempool_id);
    if(log == NULL)
        return;
    memset(log , 0 , sizeof(cs_log_t));
    log->log_level = level;
    log->module_id = module_id;
    log->time = cs_current_time();
    log->log_type = CS_LOG_MSG_TYPE;
#endif

    memset(msg_buffer , 0 , sizeof(msg_buffer));
    va_start(ptr,String);
    vsprintf(msg_buffer , String, ptr);
    va_end(ptr);

#ifdef HAVE_LOG_THREAD
    if(log->log_level == IROS_LOG_LEVEL_CRI)
    {
        cs_int32 hour,min,sec;
        hour = log->time/(100*3600);
        min = (log->time/(100*60))%60;
        sec = (log->time/100)%60;
        sprintf(log->a.log_buf,"[%dh%dm%ds] ",hour,min,sec);
    }
    time_str_len = strlen(log->a.log_buf);
    #if 1
    len = (strlen(msg_buffer) >= CS_LOG_SIZE-time_str_len)?CS_LOG_SIZE-time_str_len-1:strlen(msg_buffer);
    #else
    len = (strlen(msg_buffer) >= MAX_SYS_LOG_LEN-time_str_len)?MAX_SYS_LOG_LEN-time_str_len-1:strlen(msg_buffer);
    #endif
    memcpy(log->a.log_buf+time_str_len , msg_buffer , len);

    if(CS_E_OSAL_OK != cs_queue_put(sys_log_ctrl.log_queue_id, (void *)&log, sizeof(cs_uint32) , CS_OSAL_NO_WAIT , 0))
    {
        cs_mem_free((cs_uint8 *)log);
        return;
    }
#else
    if(level >= sys_log_ctrl.mod_info[module_id].print_level)
        cs_printf("\r\n[%lld:%s:%d] %s",cs_current_time(),cs_sys_mod_desc_get(module_id),level, msg_buffer);
#endif

    return;
}