mirror of
https://github.com/hasherezade/bearparser
synced 2026-06-08 14:32:38 +00:00
57 lines
1.2 KiB
C++
57 lines
1.2 KiB
C++
#pragma once
|
|
#include <map>
|
|
|
|
#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<size_t, ExeElementWrapper*> 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) { }
|
|
};
|