コード例 #1
0
ファイル: rpc_debmod.cpp プロジェクト: nealey/vera
//--------------------------------------------------------------------------
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);
}
コード例 #2
0
ファイル: rpc_debmod.cpp プロジェクト: nealey/vera
//--------------------------------------------------------------------------
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);
}
コード例 #3
0
ファイル: rpc_debmod.cpp プロジェクト: nealey/vera
//--------------------------------------------------------------------------
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);
}
コード例 #4
0
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;
}
コード例 #5
0
ファイル: rpc_debmod.cpp プロジェクト: nealey/vera
//--------------------------------------------------------------------------
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;
}
コード例 #6
0
ファイル: rpc_debmod.cpp プロジェクト: nealey/vera
//--------------------------------------------------------------------------
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;
}