123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- #pragma once
- #include "BeefySysLib/Common.h"
- struct CV_LVAR_ADDR_RANGE;
- struct CV_LVAR_ADDR_GAP;
- NS_BF_BEGIN
- #define PE_SIZEOF_SHORT_NAME 8
- #define PE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory
- #define PE_NUMBEROF_DIRECTORY_ENTRIES 16
- #define PE_NT_SIGNATURE 0x00004550 // PE00
- #define PE_DOS_SIGNATURE 0x5A4D // MZ
- #define PE_MACHINE_X86 0x14c
- #define PE_MACHINE_X64 0x8664
- // DOS .EXE header
- struct PEHeader
- {
- WORD e_magic; // Magic number
- WORD e_cblp; // Bytes on last page of file
- WORD e_cp; // Pages in file
- WORD e_crlc; // Relocations
- WORD e_cparhdr; // Size of header in paragraphs
- WORD e_minalloc; // Minimum extra paragraphs needed
- WORD e_maxalloc; // Maximum extra paragraphs needed
- WORD e_ss; // Initial (relative) SS value
- WORD e_sp; // Initial SP value
- WORD e_csum; // Checksum
- WORD e_ip; // Initial IP value
- WORD e_cs; // Initial (relative) CS value
- WORD e_lfarlc; // File address of relocation table
- WORD e_ovno; // Overlay number
- WORD e_res[4]; // Reserved words
- WORD e_oemid; // OEM identifier (for e_oeminfo)
- WORD e_oeminfo; // OEM information; e_oemid specific
- WORD e_res2[10]; // Reserved words
- LONG e_lfanew; // File address of new exe header
- };
- struct PEFileHeader
- {
- WORD mMachine;
- WORD mNumberOfSections;
- DWORD mTimeDateStamp;
- DWORD mPointerToSymbolTable;
- DWORD mNumberOfSymbols;
- WORD mSizeOfOptionalHeader;
- WORD mCharacteristics;
- };
- struct PEImportObjectHeader
- {
- WORD mSig1;
- WORD mSig2;
- WORD mVersion;
- WORD mMachine;
- DWORD mTimeDateStamp;
- DWORD mDataSize;
- WORD mHint;
- WORD mType;
- };
- struct PEDataDirectory
- {
- DWORD mVirtualAddress;
- DWORD mSize;
- };
- struct PEOptionalHeader32
- {
- //
- // Standard fields.
- //
- WORD mMagic;
- BYTE mMajorLinkerVersion;
- BYTE mMinorLinkerVersion;
- DWORD mSizeOfCode;
- DWORD mSizeOfInitializedData;
- DWORD mSizeOfUninitializedData;
- DWORD mAddressOfEntryPoint;
- DWORD mBaseOfCode;
- DWORD mBaseOfData;
- //
- // NT additional fields.
- //
- DWORD mImageBase;
- DWORD mSectionAlignment;
- DWORD mFileAlignment;
- WORD mMajorOperatingSystemVersion;
- WORD mMinorOperatingSystemVersion;
- WORD mMajorImageVersion;
- WORD mMinorImageVersion;
- WORD mMajorSubsystemVersion;
- WORD mMinorSubsystemVersion;
- DWORD mReserved1;
- DWORD mSizeOfImage;
- DWORD mSizeOfHeaders;
- DWORD mCheckSum;
- WORD mSubsystem;
- WORD mDllCharacteristics;
- DWORD mSizeOfStackReserve;
- DWORD mSizeOfStackCommit;
- DWORD mSizeOfHeapReserve;
- DWORD mSizeOfHeapCommit;
- DWORD mLoaderFlags;
- DWORD mNumberOfRvaAndSizes;
- PEDataDirectory mDataDirectory[16];
- };
- struct PEOptionalHeader64
- {
- //
- // Standard fields.
- //
- WORD mMagic;
- BYTE mMajorLinkerVersion;
- BYTE mMinorLinkerVersion;
- DWORD mSizeOfCode;
- DWORD mSizeOfInitializedData;
- DWORD mSizeOfUninitializedData;
- DWORD mAddressOfEntryPoint;
- DWORD mBaseOfCode;
- //
- // NT additional fields.
- //
- uint64 mImageBase;
- DWORD mSectionAlignment;
- DWORD mFileAlignment;
- WORD mMajorOperatingSystemVersion;
- WORD mMinorOperatingSystemVersion;
- WORD mMajorImageVersion;
- WORD mMinorImageVersion;
- WORD mMajorSubsystemVersion;
- WORD mMinorSubsystemVersion;
- DWORD mReserved1;
- DWORD mSizeOfImage;
- DWORD mSizeOfHeaders;
- DWORD mCheckSum;
- WORD mSubsystem;
- WORD mDllCharacteristics;
- uint64 mSizeOfStackReserve;
- uint64 mSizeOfStackCommit;
- uint64 mSizeOfHeapReserve;
- uint64 mSizeOfHeapCommit;
- DWORD mLoaderFlags;
- DWORD mNumberOfRvaAndSizes;
- PEDataDirectory mDataDirectory[16];
- };
- struct PE_NTHeaders32
- {
- DWORD mSignature;
- PEFileHeader mFileHeader;
- PEOptionalHeader32 mOptionalHeader;
- };
- struct PE_NTHeaders64
- {
- DWORD mSignature;
- PEFileHeader mFileHeader;
- PEOptionalHeader64 mOptionalHeader;
- };
- struct PESectionHeader
- {
- char mName[IMAGE_SIZEOF_SHORT_NAME];
- DWORD mVirtualSize;
- DWORD mVirtualAddress;
- DWORD mSizeOfRawData;
- DWORD mPointerToRawData;
- DWORD mPointerToRelocations;
- DWORD mPointerToLineNumbers;
- WORD mNumberOfRelocations;
- WORD mNumberOfLineNumbers;
- DWORD mCharacteristics;
- };
- #pragma pack(push, 1)
- struct COFFRelocation
- {
- uint32 mVirtualAddress;
- uint32 mSymbolTableIndex;
- uint16 mType;
- };
- struct PE_SymInfo
- {
- union
- {
- char mName[8];
- int32 mNameOfs[2];
- };
- int mValue;
- uint16 mSectionNum;
- uint16 mType;
- int8 mStorageClass;
- int8 mNumOfAuxSymbols;
- };
- struct PE_SymInfoAux
- {
- uint32 mLength;
- uint16 mNumberOfRelocations;
- uint16 mNumberOfLinenumbers;
- uint32 mCheckSum;
- uint16 mNumber;
- uint8 mSelection;
- char mUnused;
- char mUnused2;
- char mUnused3;
- };
- //struct COFFFrameDescriptor
- //{
- // int32 mOffset; // Offset 1st byte of function code
- // int32 mSize; // bytes in function
- // int32 mNumLocals; // # bytes in locals/4
- // int16 mNumParams; // # bytes in params/4
- // int16 mAttributes;
- //
- // // # bytes in prolog
- // int GetPrologSize() const { return mAttributes & 0xF; }
- //
- // // # regs saved
- // int GetNumSavedRegs() const { return (mAttributes >> 8) & 0x7; }
- // bool HasSEH() const { return (mAttributes >> 9) & 1; }
- // bool UseBP() const { return (mAttributes >> 10) & 1; }
- //
- // // cbFrame: frame pointer
- // int GetFP() const { return mAttributes >> 14; }
- //};
- struct COFFFrameDescriptor
- {
- uint32 mRvaStart;
- uint32 mCodeSize;
- uint32 mLocalSize;
- uint32 mParamsSize;
- uint32 mMaxStackSize;
- uint32 mFrameFunc;
- uint16 mPrologSize;
- uint16 mSavedRegsSize;
- uint32 mFlags;
- };
- struct COFFFrameProgram
- {
- enum Command : uint8
- {
- Command_None,
- Command_EIP,
- Command_ESP,
- Command_EBP,
- Command_EAX,
- Command_EBX,
- Command_ECX,
- Command_EDX,
- Command_ESI,
- Command_EDI,
- Command_T0,
- Command_T1,
- Command_T2,
- Command_T3,
- Command_RASearch,
- Command_Add,
- Command_Subtract,
- Command_Align,
- Command_Set,
- Command_Deref,
- Command_Value,
- Command_Value8
- };
- Command* mCommands;
- };
- struct COFFFrameDescriptorEntry
- {
- COFFFrameDescriptor* mFrameDescriptor;
- COFFFrameProgram mProgram;
- };
- #pragma pack(pop)
- NS_BF_END
|