Пример #1
0
/*********************************************************************
 *	ターゲット側メモリーを逆アセンブルする.
 *********************************************************************
 *	int            adr :ターゲット側のメモリーアドレス
 *	int          arena :ターゲット側のメモリー種別(現在未使用)
 *	int            cnt :読み取りサイズ.
 */
int UsbDisasm (int adr, int arena, int cnt)
{
	unsigned char buf[16];
	int size = 8;
	int done = 0;
	int endadr = adr + cnt;
	int rc,disbytes;

	code_buf_init();

	while(adr < endadr) {
		int rsize = check_region(adr,4);
		if(	rsize < 0) break;

#if	USE_CODE_BUF		
		rc = code_buf_read(adr,size,buf);	//メモリー内容の読み出し.
#else
		rc = dumpmem(adr,AREA_PGMEM,size,buf);	//メモリー内容の読み出し.
#endif
		if(rc != size) return done;
		disbytes = disasm_print(buf,size,adr);	//結果印字.
		adr += disbytes;
		done+= disbytes;
	}
	return done;
}
Пример #2
0
/*********************************************************************
 *	ターゲット側メモリーを逆アセンブルする.
 *********************************************************************
 *	int            adr :ターゲット側のメモリーアドレス
 *	int          arena :ターゲット側のメモリー種別(現在未使用)
 *	int            cnt :読み取りサイズ.
 */
int UsbDisasm (int adr, int arena, int cnt)
{
	unsigned char buf[16];
	int size = 8;
	int done = 0;
	int endadr = adr + cnt;
	int rc,disbytes;
	while(adr < endadr) {
		rc = dumpmem(adr,AREA_PGMEM,size,buf);	//メモリー内容の読み出し.
		if(rc != size) return done;
		disbytes = disasm_print(buf,size,adr);	//結果印字.
		adr += disbytes;
		done+= disbytes;
	}
	return done;
}
Пример #3
0
APR_DECLARE(apr_status_t) port_disasm_to_file(port_disassembler_t * disassembler,
                                              const char * code,
                                              unsigned int len,
                                              apr_file_t * thefile) {
#if defined(_IA32_)
    // check if nothing should be printed
    if (disassembler->line_size == 0) {
        return APR_SUCCESS;
    } 
    
    if (disassembler->num_bytes_total == 0) {
        // Calculate required number of bytes
        disassembler->num_bytes_total = disassembler->line_size * BYTES_TOTAL / BYTES_PER_LINE;
        // initialize stream
        disassembler->real_stream = apr_palloc(disassembler->user_pool,
            disassembler->num_bytes_total);
    }
    
    // initialize file
    disassembler->user_file = thefile;

    strcpy(disassembler->real_stream, "");

    disassembler->fprintf_func = disasm_fprint_default;

    disasm_print(disassembler, code, len);

    // flush
    apr_file_write(disassembler->user_file, disassembler->real_stream,
        &disassembler->num_bytes_used);
    apr_file_flush(disassembler->user_file);

    disassembler->user_file = NULL;
    disassembler->num_bytes_used = 0;

	return APR_SUCCESS;
#else
    return APR_ENOTIMPL;
#endif
}
Пример #4
0
APR_DECLARE(apr_status_t) port_disasm(port_disassembler_t * disassembler,
                                      const char * code, 
                                      unsigned int len,
                                      char ** disasm_code) {
#if defined(_IA32_)    
    // check if nothing should be printed
    if (disassembler->line_size == 0) {
        *disasm_code = NULL;
        return APR_SUCCESS;
    } 

    if (disassembler->num_bytes_total == 0) {
        // Calculate required number of bytes
        disassembler->num_bytes_total = disassembler->line_size * len / BYTES_PER_LINE;
        // initialize stream
        disassembler->real_stream = apr_palloc(disassembler->user_pool,
            disassembler->num_bytes_total);
    }

    strcpy(disassembler->real_stream, "");
    
    disassembler->fprintf_func = disasm_sprint_default;

    disasm_print(disassembler, code, len);

    *disasm_code = disassembler->real_stream;

    disassembler->real_stream = NULL;
    disassembler->num_bytes_total = 0;
    disassembler->num_bytes_used = 0;

	return APR_SUCCESS;
#else
    return APR_ENOTIMPL;
#endif
}