Beispiel #1
0
R_API void r_print_code(RPrint *p, ut64 addr, ut8 *buf, int len, char lang) {
	int i, w = p->cols*0.7;
	switch (lang) {
	case '?':
		eprintf ("Valid print code formats are: C and Python\n");
		break;
	case 'P':
	case 'p':
		p->printf ("import struct\nbuf = struct.pack (\"%dB\", ", len);
		for (i=0; !p->interrupt && i<len; i++) {
			if (!(i%w))
				p->printf ("\n");
			r_print_cursor (p, i, 1);
			p->printf ("0x%02x%c", buf[i], (i+1<len)?',':')');
			r_print_cursor (p, i, 0);
		}
		p->printf ("\n");
		break;
	default:
		p->printf ("#define _BUFFER_SIZE %d\n", len);
		p->printf ("unsigned char buffer[%d] = {", len);
		p->interrupt = 0;
		for (i=0; !p->interrupt && i<len; i++) {
			if (!(i%w))
				p->printf ("\n  ");
			r_print_cursor (p, i, 1);
			p->printf ("0x%02x, ", buf[i]);
			r_print_cursor (p, i, 0);
		}
		p->printf ("};\n");
	}
}
Beispiel #2
0
R_API void r_print_code(RPrint *p, ut64 addr, ut8 *buf, int len) {
	int i, w = p->cols*0.7;
	p->printf ("#define _BUFFER_SIZE %d\n", len);
	p->printf ("unsigned char buffer[%d] = {", len);
	p->interrupt = 0;
	for (i=0; !p->interrupt && i<len; i++) {
		if (!(i%w))
			p->printf ("\n  ");
		r_print_cursor (p, i, 1);
		p->printf ("0x%02x, ", buf[i]);
		r_print_cursor (p, i, 0);
	}
	p->printf ("};\n");
}
Beispiel #3
0
R_API void r_print_byte(RPrint *p, const char *fmt, int idx, ut8 ch) {
	ut8 rch = ch;
	if (!IS_PRINTABLE (ch) && fmt[0]=='%'&&fmt[1]=='c')
		rch = '.';
	r_print_cursor (p, idx, 1);
	//if (p->flags & R_PRINT_FLAGS_CURSOR && idx == p->cur) {
	if (p->flags & R_PRINT_FLAGS_COLOR) {
		char *pre = NULL;
		switch (ch) {
		case 0x00: pre = Color_GREEN; break;
		case 0x7F: pre = Color_YELLOW; break;
		case 0xFF: pre = Color_RED; break;
		default:
			if (IS_PRINTABLE (ch))
				pre = Color_MAGENTA;
		}
		if (pre) p->printf (pre);
		p->printf (fmt, rch);
		if (pre) p->printf (Color_RESET);
	} else p->printf (fmt, rch);
	r_print_cursor (p, idx, 0);
}
Beispiel #4
0
R_API int r_print_string(RPrint *p, ut64 seek, const ut8 *buf, int len, int wide, int zeroend, int urlencode) {
	int i;
	//if (p->flags & R_PRINT_FLAGS_OFFSET)
		// r_print_addr(p, seek);
	p->interrupt = 0;
	for (i=0; !p->interrupt && i<len; i++) {
		if (zeroend && buf[i]=='\0')
			break;
		r_print_cursor (p, i, 1);
		if (urlencode) {
			// TODO: some ascii can be bypassed here
			p->printf ("%%%02x", buf[i]);
		} else {
			if (buf[i]=='\n' || IS_PRINTABLE (buf[i]))
				p->printf ("%c", buf[i]);
			else p->printf ("\\x%02x", buf[i]);
		}
		r_print_cursor (p, i, 0);
		if (wide) i++;
	}
	p->printf ("\n");
	return i;
}