#pragma once #include #include "Executable.h" #include "ExeElementWrapper.h" class ExeWrappersContainer { public: enum WRAPPERS { WR_NONE = size_t(-1), COUNT_WRAPPERS = 0 }; ExeWrappersContainer() { } virtual ~ExeWrappersContainer(void) { clearWrappers(); } virtual ExeElementWrapper* getWrapper(size_t wrapperId); size_t wrappersCount() { return wrappers.size(); } QString getWrapperName(size_t id); protected: virtual void wrap() = 0; void clearWrappers(); std::map wrappers; }; class MappedExe : public Executable, public ExeWrappersContainer { public: virtual bool canResize(bufsize_t newSize) { // disabled by default return false; } virtual bool resize(bufsize_t newSize) { if (!canResize(newSize)) return false; if (Executable::resize(newSize)) { wrap(); return true; } return false; } virtual void wrap() = 0; protected: MappedExe(AbstractByteBuffer *v_buf, exe_bits v_bitMode) : Executable(v_buf, v_bitMode), ExeWrappersContainer() { } virtual ~MappedExe(void) { } };