Files
hasherezade-bearparser/parser/pe/DOSExe.h
T
2015-02-22 14:24:01 +01:00

52 lines
1.5 KiB
C++

#pragma once
#include "../MappedExe.h"
#include "DosHdrWrapper.h"
class DOSExeBuilder: public ExeBuilder {
public:
DOSExeBuilder() : ExeBuilder() {}
virtual bool signatureMatches(AbstractByteBuffer *buf);
virtual Executable* build(AbstractByteBuffer *buf);
QString typeName() { return "MZ"; }
};
//-------------------------------------------------------------
class DOSExe : public MappedExe
{
public:
enum WRAPPERS {
WR_NONE = MappedExe::WR_NONE,
WR_DOS_HDR = 0,
COUNT_WRAPPERS
};
DOSExe(AbstractByteBuffer *v_buf);
virtual ~DOSExe() { TRACE(); }
// inherited from Executable:
//
// FileAddr <-> RVA
virtual offset_t rawToRva(offset_t raw) { return raw; } //TODO
virtual offset_t rvaToRaw(offset_t rva) { return rva; } //TODO
virtual bufsize_t getMappedSize(Executable::addr_type aType) { return this->getContentSize(); }
virtual bufsize_t getAlignment(Executable::addr_type aType) { return 0x1000; } //TODO
virtual offset_t getImageBase() { return 0; } //TODO
virtual offset_t getEntryPoint(Executable::addr_type aType = Executable::RVA) { return 0; } //TODO
Executable::addr_type detectAddrType(offset_t addr, Executable::addr_type hintType) { return Executable::RAW; }
//---
// DOS Exe only:
virtual offset_t dosHeaderOffset() { return 0; } //wrapper's mount point
offset_t peSignatureOffset();
protected:
virtual void wrap(AbstractByteBuffer *v_buf);
DosHdrWrapper *dosHdrWrapper;
};