//-------------------------------------------------------------------------- ssize_t rpc_debmod_t::dbg_write_memory(ea_t ea, const void *buffer, size_t size) { qstring cmd = prepare_rpc_packet(RPC_WRITE_MEMORY); append_ea(cmd, ea); append_long(cmd, (uint32)size); append_memory(cmd, buffer, size); return process_long(cmd); }
//-------------------------------------------------------------------------- int rpc_debmod_t::dbg_del_bpt(ea_t ea, const uchar *orig_bytes, int len) { qstring cmd = prepare_rpc_packet(RPC_DEL_BPT); append_ea(cmd, ea); append_long(cmd, len); append_memory(cmd, orig_bytes, len); return process_long(cmd); }
//-------------------------------------------------------------------------- int rpc_debmod_t::bpt(uchar code, bpttype_t type, ea_t ea, int len) { qstring cmd = prepare_rpc_packet(code); append_long(cmd, type); append_ea(cmd, ea); append_long(cmd, len); return process_long(cmd); }
bool save_class(class_t * clas) { bytevec_t buffer; append_ea(buffer, clas->virt_table_ea); append_dd(buffer, clas->flags); append_eavec(buffer, 0, clas->functions_ea); append_eavec(buffer, 0, clas->parents_tid); netnode n = netnode(clas->tid); n.setblob(&buffer.front(), buffer.size(), 0, 'm'); return true; }
//-------------------------------------------------------------------------- ssize_t rpc_debmod_t::dbg_read_memory(ea_t ea, void *buffer, size_t size) { qstring cmd = prepare_rpc_packet(RPC_READ_MEMORY); append_ea(cmd, ea); append_long(cmd, (uint32)size); rpc_packet_t *rp = process_request(cmd); if ( rp == NULL ) return -1; const uchar *answer = (uchar *)(rp+1); const uchar *end = answer + rp->length; int result = extract_long(&answer, end); extract_memory(&answer, end, buffer, size); qfree(rp); return result; }
//-------------------------------------------------------------------------- ea_t rpc_debmod_t::dbg_appcall( ea_t func_ea, thid_t tid, const struct func_type_info_t *fti, int nargs, const struct regobjs_t *regargs, struct relobj_t *stkargs, struct regobjs_t *retregs, qstring *errbuf, debug_event_t *event, int flags) { qstring cmd = prepare_rpc_packet(RPC_APPCALL); append_ea(cmd, func_ea); append_long(cmd, tid); append_long(cmd, nargs); append_long(cmd, flags); regobjs_t *rr = (flags & APPCALL_MANUAL) == 0 ? retregs : NULL; append_appcall(cmd, *fti, *regargs, *stkargs, rr); rpc_packet_t *rp = process_request(cmd); if ( rp == NULL ) return BADADDR; const uchar *answer = (uchar *)(rp+1); const uchar *end = answer + rp->length; ea_t sp = extract_ea(&answer, end); if ( sp == BADADDR ) { if ( (flags & APPCALL_DEBEV) != 0 ) extract_debug_event(&answer, end, event); if ( errbuf != NULL ) *errbuf = extract_str(&answer, end); } else if ( (flags & APPCALL_MANUAL) == 0 ) { if ( retregs != NULL ) extract_regobjs(&answer, end, retregs, true); } qfree(rp); return sp; }