#ifndef STARS_ida_Interface_h #define STARS_ida_Interface_h #include <map> class STARS_IDA_Interface_t: public STARS_Interface_t { public: /* Segment getters */ STARS_IDA_Interface_t() {}; virtual STARS_Segment_t *getseg(const STARS_ea_t &addr) { segment_t* seg=::getseg(addr); return seg2Seg(seg); } virtual STARS_Segment_t *getnseg(const int &index) { segment_t* seg=::getnseg(index); return seg2Seg(seg); } virtual size_t get_segm_qty() { return ::get_segm_qty(); } virtual STARS_Segment_t *get_next_seg(const STARS_ea_t &addr) { segment_t* seg=::get_next_seg(addr); return seg2Seg(seg); } /* Function getters */ /* find out how many functions there is */ virtual size_t get_func_qty() { return ::get_func_qty(); } /* get the index-th function */ virtual STARS_Function_t *getn_func(int index) { func_t* seg=::getn_func(index); return func2Func(seg); } /* get the function at the given address */ virtual STARS_Function_t *get_func(STARS_ea_t ea) { func_t* f=::get_func(ea); return func2Func(f); } virtual void get_func_name(const STARS_ea_t &ea, char* name, const size_t &len) { func_t* f=::get_func(ea); if(f) { func2Func(f)->GetFunctionName(name,len); return; } /* empty name */ name[0]='\0'; return; } virtual void AuditTailChunkOwnership(void); virtual void AuditCodeTargets(void); private: STARS_Segment_t* seg2Seg(segment_t* seg) { if(!seg) return NULL; if(segmap[seg]==NULL) segmap[seg]=new STARS_IDA_Segment_t(seg); return segmap[seg]; } std::map<segment_t*, STARS_Segment_t*> segmap; STARS_Function_t* func2Func(func_t* f) { if(!f) return NULL; if(funcmap[f]==NULL) funcmap[f]=new STARS_IDA_Function_t(f); return funcmap[f]; } std::map<func_t*, STARS_Function_t*> funcmap; }; #endif