Newer
Older
#ifndef STARS_IDA_Function_h
#define STARS_IDA_Function_h
class STARS_IDA_Function_t : public STARS_Function_t
{
public:
STARS_IDA_Function_t(func_t* func) :
the_func(func),
frsize(the_func->frsize),
SharedChunks(false),
UnsharedChunks(false)
{}
virtual STARS_ea_t get_startEA() { return the_func->startEA; }
virtual STARS_ea_t get_endEA() { return the_func->endEA; }
virtual char* GetFunctionName(const char* name, const int len) const
{ return ::get_func_name(the_func->startEA,(char*)name,len); }
virtual size_t GetFrameSize() { return frsize; }
virtual void SetFrameSize(size_t fs) { frsize=fs;}
virtual size_t GetSavedRegSize() { return the_func->frregs; }
virtual size_t GetIncomingArgumentSize() { return the_func->argsize; }
virtual size_t GetFrameReturnAddressSize() { return ::get_frame_retsize(the_func); }
virtual bool FunctionUsesFP() { return (0 != (the_func->flags & (FUNC_FRAME | FUNC_BOTTOMBP))); }
virtual bool IsStaticFunction() { return (0 != (the_func->flags & FUNC_STATIC)); }
virtual bool IsLibraryFunction() { return (0 != (the_func->flags & FUNC_LIB)); }
virtual bool IsStackPointerAnalyzed() { return the_func->analyzed_sp(); }
virtual uint64_t get_spd(STARS_ea_t ea) { return ::get_spd(the_func,ea); }
virtual bool HasReturnPoints() { return the_func->does_return(); }
virtual bool IsMultiEntry();
virtual void MarkSharedChunks();
virtual bool HasSharedChunks() const {return SharedChunks; }
virtual void SetSharedChunks(bool v) { SharedChunks=v; }
virtual void BuildFuncIR(SMPFunction *func);
virtual bool FindDistantCodeFragment(SMPFunction* func, STARS_ea_t TargetAddr);
/* temporary cast operator for testing */
operator func_t* () { return the_func; }
private:
func_t* the_func;