Esempio n. 1
0
static int debug_gdb_read_at(ut8 *buf, int sz, ut64 addr) {
	ut32 size_max = 500;
	ut32 packets = sz / size_max;
	ut32 last = sz % size_max;
	ut32 x;
	if (c_buff && addr != UT64_MAX && addr == c_addr) {
		memcpy (buf, c_buff, sz);
		return sz;
	}
	if (sz < 1 || addr >= UT64_MAX) return -1;
	for (x = 0; x < packets; x++) {
		gdbr_read_memory (desc, addr + x * size_max, size_max);
		memcpy ((buf + x * size_max), desc->data + x * size_max, size_max);
	}
	if (last) {
		gdbr_read_memory (desc, addr + x * size_max, last);
		memcpy ((buf + x * size_max), desc->data + x * size_max, last);
	}
	c_addr = addr;
	c_size = sz;
#if SILLY_CACHE
	free (c_buff);
	c_buff = r_mem_dup (buf, sz);
#endif
	return sz;
}
Esempio n. 2
0
static int debug_gdb_read_at(ut8 *buf, int sz, ut64 addr) {
	ut32 size_max = 500;
	ut32 packets = sz / size_max;
	ut32 last = sz % size_max;
	ut32 x;
	if (sz < 1 || addr >= UT64_MAX) return -1;
	for (x = 0; x < packets; x++) {
		gdbr_read_memory(desc, addr + x * size_max, size_max);
		memcpy((buf + x * size_max), desc->data + x * size_max, size_max);
	}
	if (last) {
		gdbr_read_memory(desc, addr + x * size_max, last);
		memcpy((buf + x * size_max), desc->data + x * size_max, last);
	}
	return sz;
}