ea_t resolve_label(ea_t base, uint16 id)
{
	ea_t ea = base;
	OutHdr oh;
	// first search down, then search up
	for(;;) {
		if (netnode(ea).supval(PSEUDO_NETNODE_SUPVAL,&oh,sizeof(oh)) == -1) return NULL;
		if (oh.label == id)
			return ea;
		if (oh.flags & 1)
			break;
		ea--;
	}

	ea = base;
	// first search down, then search up
	for(;;) {
		if (netnode(ea).supval(PSEUDO_NETNODE_SUPVAL,&oh,sizeof(oh)) == -1) return NULL;
		if (oh.label == id)
			return ea;
		if (oh.flags & 2)
			break;
		ea++;
	}

	return 0;
}
Пример #2
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;
}
inline bool     is_ghost_enum(enum_t id)                  { return (netnode(id).altval(ENUM_FLAGS) & ENUM_FLAGS_GHOST) != 0; }
Пример #4
0
//same as get_struc_name for now
inline ssize_t get_class_name(tid_t id, char *buf, size_t bufsize) { return netnode(id).name(buf, bufsize); }
inline DEPRECATED uchar get_const_serial(const_t cid) { return uchar(netnode(cid).altval(CONST_SERIAL)); }
inline DEPRECATED bmask_t  get_const_bmask(const_t id)             { return id > MAXADDR ? netnode(id).altval(CONST_BMASK)-1 : BADNODE; }
inline DEPRECATED uval_t   get_const_value(const_t id)             { return id > MAXADDR ? netnode(id).altval(CONST_VALUE) : 0; }
inline bool set_enum_flag(enum_t id, flags_t flag) { return netnode(id).altset(ENUM_FLG_IDX,flag) != 0; }
inline enum_t   get_enum_member_enum(const_t id)              { return id > MAXADDR ? netnode(id).altval(CONST_ENUM)-1 : BADNODE; }
inline uval_t   get_enum_member_value(const_t id)             { return id > MAXADDR ? netnode(id).altval(CONST_VALUE) : 0; }
inline flags_t  get_enum_flag(enum_t id)                { return id > MAXADDR ? flags_t(netnode(id).altval(ENUM_FLG_IDX)) : 0; }
inline size_t   get_enum_size(enum_t id)                { return id > MAXADDR ? size_t(netnode(id).altval(ENUM_QTY_IDX)) : 0; }
inline ssize_t  get_enum_cmt(enum_t id, bool repeatable, char *buf, size_t bufsize) { return id > MAXADDR ? netnode(id).supstr(repeatable != 0, buf, bufsize) : -1; }
inline size_t   get_enum_width(enum_t id)                { return id > MAXADDR ? size_t((netnode(id).altval(ENUM_FLAGS) & ENUM_FLAGS_WIDTH) >> 3) : 0; }
inline ssize_t  get_enum_name(qstring *out, enum_t id) { return id > MAXADDR ? netnode(id).get_name(out) : -1;  }
inline int32 get_enum_type_ordinal(enum_t id) { return int32(netnode(id).altval(ENUM_ORDINAL)-1); }
inline void set_enum_type_ordinal(enum_t id, int32 ord) { netnode(id).altset(ENUM_ORDINAL, ord+1); }
inline bmask_t  get_enum_member_bmask(const_t id)             { return id > MAXADDR ? netnode(id).altval(CONST_BMASK)-1 : BADNODE; }
inline netnode get_bmask_node(enum_t id, bmask_t bmask)
{
  if ( !is_bf(id) ) return BADNODE;
  return netnode(id).altval(bmask, ENUM_MASKS)-1;
}
inline bmask_t  get_last_bmask(enum_t id)               { return netnode(id).altlast(ENUM_MASKS); }
inline DEPRECATED enum_t   get_const_enum(const_t id)              { return id > MAXADDR ? netnode(id).altval(CONST_ENUM)-1 : BADNODE; }
inline bmask_t  get_next_bmask(enum_t id,bmask_t bmask) { return netnode(id).altnxt(bmask,ENUM_MASKS); }
inline DEPRECATED ssize_t get_const_cmt(const_t id, bool repeatable, char *buf, size_t bufsize) { return netnode(id).supstr(repeatable != 0, buf, bufsize); }
inline bmask_t  get_prev_bmask(enum_t id,bmask_t bmask) { return netnode(id).altprev(bmask,ENUM_MASKS); }
Пример #25
0
inline tid_t get_class_id(const char *name)              // get struct id by name
{
  tid_t id = netnode(name);
  return get_class(id) == NULL ? BADADDR : id;
}
inline ssize_t  get_enum_member_name(qstring *out, const_t id) { return netnode(id).get_name(out); }
Пример #27
0
//same as get_struc_cmt
inline ssize_t get_class_cmt(tid_t id, bool repeatable, char *buf, size_t bufsize) { return netnode(id).supstr(repeatable != 0, buf, bufsize); }
inline ssize_t  get_enum_member_cmt(const_t id, bool repeatable, char *buf, size_t bufsize) { return netnode(id).supstr(repeatable != 0, buf, bufsize); }
Пример #29
0
//--------------------------------------------------------------------------
static int idaapi init(void)
{
  add_menu_item("Edit/Other/Create", "Specify switch idiom", "", SETMENU_INS, callback, NULL);
  ignore_micro = netnode("$ ignore micro");
  return PLUGIN_KEEP;
}
inline uchar get_enum_member_serial(const_t cid) { return uchar(netnode(cid).altval(CONST_SERIAL)); }