mirror of
https://github.com/hasherezade/bearparser
synced 2026-06-08 14:32:38 +00:00
70 lines
2.5 KiB
C++
70 lines
2.5 KiB
C++
#pragma once
|
|
|
|
#include <QtCore>
|
|
#include "CustomException.h"
|
|
#include "win_hdrs/win_types.h"
|
|
#include "Executable.h"
|
|
#include "WrappedValue.h"
|
|
|
|
#define FIELD_NONE (-1)
|
|
|
|
class ExeElementWrapper : public AbstractByteBuffer
|
|
{
|
|
public:
|
|
ExeElementWrapper(Executable *exe);
|
|
virtual ~ExeElementWrapper() {}
|
|
|
|
virtual bool wrap() { return true; }
|
|
|
|
/* inherited from: AbstractByteBuffer */
|
|
virtual bufsize_t getContentSize() { return getSize(); }
|
|
virtual BYTE* getContent() { return static_cast<BYTE*>(getPtr()); }
|
|
|
|
/* full structure boundaries */
|
|
virtual void* getPtr() = 0;
|
|
virtual bufsize_t getSize() = 0;
|
|
virtual QString getName() = 0;
|
|
|
|
virtual size_t getFieldsCount() = 0;
|
|
virtual size_t getSubFieldsCount() { return 1; }
|
|
|
|
virtual offset_t getOffset();
|
|
virtual offset_t getOffset(void *ptr, bool allowExceptions = false);
|
|
|
|
/* specific field boundaries */
|
|
virtual void* getFieldPtr(size_t fieldId, size_t subField) = 0;
|
|
void* getFieldPtr(size_t fieldId) { return getFieldPtr(fieldId, FIELD_NONE); }
|
|
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField = FIELD_NONE);
|
|
virtual offset_t getFieldOffset(size_t fieldId, size_t subField = FIELD_NONE);
|
|
|
|
virtual QString translateFieldContent(size_t fieldId) { return ""; }
|
|
virtual bool hasSubfieldWrapper(size_t parentType) { return false; }
|
|
|
|
virtual QString getFieldName(size_t fieldId) = 0;
|
|
virtual WrappedValue getWrappedValue(size_t fieldId, size_t subField);
|
|
virtual WrappedValue getWrappedValue(size_t fieldId) { return getWrappedValue(fieldId, FIELD_NONE); }
|
|
|
|
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField = FIELD_NONE) { return Executable::NOT_ADDR; }
|
|
virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField = FIELD_NONE) { return WrappedValue::INT; }
|
|
|
|
virtual uint64_t getNumValue(size_t fieldId, size_t subField, bool* isOk);
|
|
uint64_t getNumValue(size_t fieldId, bool* isOk) { return getNumValue(fieldId, FIELD_NONE, isOk); }
|
|
|
|
virtual bool setNumValue(size_t fieldId, size_t subField, uint64_t val);
|
|
bool setNumValue(size_t fieldId, uint64_t val) { return setNumValue(fieldId, FIELD_NONE, val); }
|
|
|
|
Executable* getExe() { return m_Exe; }
|
|
|
|
inline bool isBit64() { return Executable::isBit64(m_Exe); }
|
|
inline bool isBit32() { return Executable::isBit32(m_Exe); }
|
|
|
|
protected:
|
|
virtual bool canCopyToOffset(offset_t rawOffset);
|
|
bool copyToOffset(offset_t rawOffset);
|
|
|
|
Executable *m_Exe;
|
|
|
|
friend class Executable;
|
|
};
|
|
|