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