diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-09 08:37:29 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-09 08:37:29 +0100 |
| commit | 3e607e871b1b20e14527845a511ae2a6739fcaac (patch) | |
| tree | 973c617f634367af2229e2ad2c10bce3e3df6aaa /Private/KernelKit/PE.hpp | |
| parent | 5bf99218f0cad958868e662cf99192811060f95f (diff) | |
See below.
- HCoreKrnl:
- Improve interrupt handler for AMD64 targets.
- Wrapped AHCI and PE types into a namespace.
- Replace L0 with the label MainLoop.
- Reworked C++Kit and NetBoot modules.
- Put INewFSIterator constructor as explicit.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Private/KernelKit/PE.hpp')
| -rw-r--r-- | Private/KernelKit/PE.hpp | 144 |
1 files changed, 74 insertions, 70 deletions
diff --git a/Private/KernelKit/PE.hpp b/Private/KernelKit/PE.hpp index 9ab094d9..3a2db99f 100644 --- a/Private/KernelKit/PE.hpp +++ b/Private/KernelKit/PE.hpp @@ -17,23 +17,26 @@ #include <NewKit/Defines.hpp> #include <KernelKit/PE.hpp> -typedef HCore::UIntPtr U64; -typedef HCore::UInt32 U32; -typedef HCore::UInt16 U16; -typedef HCore::UInt8 U8; -typedef U8 BYTE; +namespace Detail +{ + typedef HCore::UIntPtr U64; + typedef HCore::UInt32 U32; + typedef HCore::UInt16 U16; + typedef HCore::UInt8 U8; + typedef Detail::U8 BYTE; +} // namespace Detail #define kPeMagic 0x00004550 typedef struct ExecHeader final { - U32 mMagic; // PE\0\0 or 0x00004550 - U16 mMachine; - U16 mNumberOfSections; - U32 mTimeDateStamp; - U32 mPointerToSymbolTable; - U32 mNumberOfSymbols; - U16 mSizeOfOptionalHeader; - U16 mCharacteristics; + Detail::U32 mMagic; // PE\0\0 or 0x00004550 + Detail::U16 mMachine; + Detail::U16 mNumberOfSections; + Detail::U32 mTimeDateStamp; + Detail::U32 mPointerToSymbolTable; + Detail::U32 mNumberOfSymbols; + Detail::U16 mSizeOfOptionalHeader; + Detail::U16 mCharacteristics; } ALIGN(8) ExecHeader, *ExecHeaderPtr; #define kMagPE32 0x010b @@ -43,79 +46,80 @@ typedef struct ExecHeader final { #define kPEMachineARM64 0xaa64 typedef struct ExecOptionalHeader final { - U16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) - U8 mMajorLinkerVersion; - U8 mMinorLinkerVersion; - U64 mSizeOfCode; - U64 mSizeOfInitializedData; - U64 mSizeOfUninitializedData; - U32 mAddressOfEntryPoint; - U32 mBaseOfCode; - U64 mImageBase; - U32 mSectionAlignment; - U32 mFileAlignment; - U16 mMajorOperatingSystemVersion; - U16 mMinorOperatingSystemVersion; - U16 mMajorImageVersion; - U16 mMinorImageVersion; - U16 mMajorSubsystemVersion; - U16 mMinorSubsystemVersion; - U32 mWin32VersionValue; - U64 mSizeOfImage; - U64 mSizeOfHeaders; - U32 mCheckSum; - U16 mSubsystem; - U16 mDllCharacteristics; - U64 mSizeOfStackReserve; - U64 mSizeOfStackCommit; - U64 mSizeOfHeapReserve; - U64 mSizeOfHeapCommit; - U32 mLoaderFlags; - U32 mNumberOfRvaAndSizes; + Detail::U16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) + Detail::U8 mMajorLinkerVersion; + Detail::U8 mMinorLinkerVersion; + Detail::U64 mSizeOfCode; + Detail::U64 mSizeOfInitializedData; + Detail::U64 mSizeOfUninitializedData; + Detail::U32 mAddressOfEntryPoint; + Detail::U32 mBaseOfCode; + Detail::U64 mImageBase; + Detail::U32 mSectionAlignment; + Detail::U32 mFileAlignment; + Detail::U16 mMajorOperatingSystemVersion; + Detail::U16 mMinorOperatingSystemVersion; + Detail::U16 mMajorImageVersion; + Detail::U16 mMinorImageVersion; + Detail::U16 mMajorSubsystemVersion; + Detail::U16 mMinorSubsystemVersion; + Detail::U32 mWin32VersionValue; + Detail::U64 mSizeOfImage; + Detail::U64 mSizeOfHeaders; + Detail::U32 mCheckSum; + Detail::U16 mSubsystem; + Detail::U16 mDllCharacteristics; + Detail::U64 mSizeOfStackReserve; + Detail::U64 mSizeOfStackCommit; + Detail::U64 mSizeOfHeapReserve; + Detail::U64 mSizeOfHeapCommit; + Detail::U32 mLoaderFlags; + Detail::U32 mNumberOfRvaAndSizes; } ExecOptionalHeader, *ExecOptionalHeaderPtr; typedef struct ExecSectionHeader final { - BYTE mName[8]; - U32 mVirtualSize; - U32 mVirtualAddress; - U32 mSizeOfRawData; - U32 mPointerToRawData; - U32 mPointerToRelocations; - U32 mPointerToLinenumbers; - U16 mNumberOfRelocations; - U16 mNumberOfLinenumbers; - U32 mCharacteristics; + Detail::BYTE mName[8]; + Detail::U32 mVirtualSize; + Detail::U32 mVirtualAddress; + Detail::U32 mSizeOfRawData; + Detail::U32 mPointerToRawData; + Detail::U32 mPointerToRelocations; + Detail::U32 mPointerToLinenumbers; + Detail::U16 mNumberOfRelocations; + Detail::U16 mNumberOfLinenumbers; + Detail::U32 mCharacteristics; } ExecSectionHeader, *ExecSectionHeaderPtr; enum kExecDataDirParams { kExecExport, kExecImport, - kExecCnt, + kExecInvalid, + kExecCount, }; typedef struct ExecExportDirectory { - U32 mCharacteristics; - U32 mTimeDateStamp; - U16 mMajorVersion; - U16 mMinorVersion; - U32 mName; - U32 mBase; - U32 mNumberOfFunctions; - U32 mNumberOfNames; - U32 mAddressOfFunctions; // export table rva - U32 mAddressOfNames; - U32 mAddressOfNameOrdinal; // ordinal table rva + Detail::U32 mCharacteristics; + Detail::U32 mTimeDateStamp; + Detail::U16 mMajorVersion; + Detail::U16 mMinorVersion; + Detail::U32 mName; + Detail::U32 mBase; + Detail::U32 mNumberOfFunctions; + Detail::U32 mNumberOfNames; + Detail::U32 mAddressOfFunctions; // export table rva + Detail::U32 mAddressOfNames; + Detail::U32 mAddressOfNameOrdinal; // ordinal table rva } ExecExportDirectory, *ExecExportDirectoryPtr; typedef struct ExecImportDirectory { union { - U32 mCharacteristics; - U32 mOriginalFirstThunk; + Detail::U32 mCharacteristics; + Detail::U32 mOriginalFirstThunk; }; - U32 mTimeDateStamp; - U32 mForwarderChain; - U32 mNameRva; - U32 mThunkTableRva; + Detail::U32 mTimeDateStamp; + Detail::U32 mForwarderChain; + Detail::U32 mNameRva; + Detail::U32 mThunkTableRva; } ExecImportDirectory, *ExecImportDirectoryPtr; #define kPeStart "__hcore_subsys_start" |
