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