Ejemplo n.º 1
0
//--------------------------------------------------------------------------
static int create_seg(
        ea_t base,
        ea_t start,
        ea_t end,
        const char *name,
        const char *sclass)
{
  if ( start != BADADDR && end < start )
    return 0;
  segment_t s;
  s.sel    = setup_selector(base);
  s.startEA= start;
  s.endEA  = end;
  s.align  = saRelByte;
  s.comb   = (sclass != NULL && strcmp(sclass,"STACK") == 0) ? scStack : scPub;
  s.bitness = 0;
  return add_segm_ex(&s,name,sclass,ADDSEG_NOSREG);
}
Ejemplo n.º 2
0
//--------------------------------------------------------------------------
static bool create_idata_segm(const area_t &impdir)
{
  segment_t ns;
  segment_t *s = getseg(impdir.startEA);
  if ( s != NULL )
    ns = *s;
  else
    ns.sel = setup_selector(0);

  ns.startEA = impdir.startEA;
  ns.endEA   = impdir.endEA;
  ns.type    = SEG_XTRN;
  ns.set_loader_segm(true);
  bool ok = add_segm_ex(&ns, ".idata", "XTRN", ADDSEG_NOSREG) != 0;
  if ( !ok )
    ok = askyn_c(0, "HIDECANCEL\nCan not create the import segment. Continue anyway?") == 1;

  return ok;
}
Ejemplo n.º 3
0
static void copy(ea_t &ea, ea_t &top)
{
  if ( sea == BADADDR )
  {
    if ( neflag & NEF_SEGS )
    {
      const char *sname = iscode ? "CODE" : "DATA";
      sel = setup_selector(0);
      add_segm(sel, ea, top, sname, sname);
    }
    sea = ea;
    eea = top;
  }
  else
  {
    if ( eea < top )
    {
      eea = top;
      set_segm_end(sea, eea, SEGMOD_KILL);
    }
  }
  mem2base(bytes, ea, top, -1);
}