diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-04-07 21:51:07 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-04-07 21:51:07 +0200 |
| commit | f21456cae169f9d911cefe39f1b99615f3c39e5d (patch) | |
| tree | a913189ff3ecdb40e308d5960219af4db326f4fe | |
| parent | 0e1b114840bab254eec9f253095e3aed6d64b048 (diff) | |
Kernel: Add XCOFF header, update PE.hpp to PE.hxx.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
| -rw-r--r-- | Private/FirmwareKit/EFI/API.hxx | 2 | ||||
| -rw-r--r-- | Private/KernelKit/MSDOS.hpp | 2 | ||||
| -rw-r--r-- | Private/KernelKit/PE.hpp | 126 | ||||
| -rw-r--r-- | Private/KernelKit/PE.hxx | 117 | ||||
| -rw-r--r-- | Private/KernelKit/PECodeManager.hxx | 2 | ||||
| -rw-r--r-- | Private/KernelKit/PEF.hpp | 4 | ||||
| -rw-r--r-- | Private/KernelKit/XCOFF.hxx | 38 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootMain.cxx | 2 |
8 files changed, 161 insertions, 132 deletions
diff --git a/Private/FirmwareKit/EFI/API.hxx b/Private/FirmwareKit/EFI/API.hxx index 90503384..cfb3f425 100644 --- a/Private/FirmwareKit/EFI/API.hxx +++ b/Private/FirmwareKit/EFI/API.hxx @@ -9,7 +9,7 @@ #include <FirmwareKit/EFI/EFI.hxx> #include <KernelKit/MSDOS.hpp> -#include <KernelKit/PE.hpp> +#include <KernelKit/PE.hxx> inline EfiSystemTable *ST = nullptr; inline EfiBootServices *BS = nullptr; diff --git a/Private/KernelKit/MSDOS.hpp b/Private/KernelKit/MSDOS.hpp index 1fe99a60..8826c2c7 100644 --- a/Private/KernelKit/MSDOS.hpp +++ b/Private/KernelKit/MSDOS.hpp @@ -14,7 +14,7 @@ #ifndef __MSDOS_EXEC__ #define __MSDOS_EXEC__ -#include <KernelKit/PE.hpp> +#include <KernelKit/PE.hxx> #include <NewKit/Defines.hpp> // Last Rev diff --git a/Private/KernelKit/PE.hpp b/Private/KernelKit/PE.hpp deleted file mode 100644 index f397ff48..00000000 --- a/Private/KernelKit/PE.hpp +++ /dev/null @@ -1,126 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - - File: PE.hpp - Purpose: Portable Executable for NewOS. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#ifndef __PE__ -#define __PE__ - -#include <NewKit/Defines.hpp> -#include <KernelKit/PE.hpp> - -namespace Detail -{ - typedef NewOS::UIntPtr PE_QWORD; - typedef NewOS::UInt32 PE_DWORD; - typedef NewOS::UInt16 PE_WORD; - typedef NewOS::UChar PE_BYTE; -} // namespace Detail - -#define kPeMagic 0x00004550 - -typedef struct ExecHeader final { - Detail::PE_DWORD mMagic; // PE\0\0 or 0x00004550 - Detail::PE_WORD mMachine; - Detail::PE_WORD mNumberOfSections; - Detail::PE_DWORD mTimeDateStamp; - Detail::PE_DWORD mPointerToSymbolTable; - Detail::PE_DWORD mNumberOfSymbols; - Detail::PE_WORD mSizeOfOptionalHeader; - Detail::PE_WORD mCharacteristics; -} ALIGN(8) ExecHeader, *ExecHeaderPtr; - -#define kMagPE32 0x010b -#define kMagPE64 0x020b - -#define kPEMachineAMD64 0x8664 -#define kPEMachineARM64 0xaa64 - -typedef struct ExecOptionalHeader final { - Detail::PE_WORD mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) - Detail::PE_BYTE mMajorLinkerVersion; - Detail::PE_BYTE mMinorLinkerVersion; - Detail::PE_QWORD mSizeOfCode; - Detail::PE_QWORD mSizeOfInitializedData; - Detail::PE_QWORD mSizeOfUninitializedData; - Detail::PE_DWORD mAddressOfEntryPoint; - Detail::PE_DWORD mBaseOfCode; - Detail::PE_QWORD mImageBase; - Detail::PE_DWORD mSectionAlignment; - Detail::PE_DWORD mFileAlignment; - Detail::PE_WORD mMajorOperatingSystemVersion; - Detail::PE_WORD mMinorOperatingSystemVersion; - Detail::PE_WORD mMajorImageVersion; - Detail::PE_WORD mMinorImageVersion; - Detail::PE_WORD mMajorSubsystemVersion; - Detail::PE_WORD mMinorSubsystemVersion; - Detail::PE_DWORD mWin32VersionValue; - Detail::PE_QWORD mSizeOfImage; - Detail::PE_QWORD mSizeOfHeaders; - Detail::PE_DWORD mCheckSum; - Detail::PE_WORD mSubsystem; - Detail::PE_WORD mDllCharacteristics; - Detail::PE_QWORD mSizeOfStackReserve; - Detail::PE_QWORD mSizeOfStackCommit; - Detail::PE_QWORD mSizeOfHeapReserve; - Detail::PE_QWORD mSizeOfHeapCommit; - Detail::PE_DWORD mLoaderFlags; - Detail::PE_DWORD mNumberOfRvaAndSizes; -} ExecOptionalHeader, *ExecOptionalHeaderPtr; - -typedef struct ExecSectionHeader final { - CONST Detail::PE_BYTE mName[8]; - Detail::PE_DWORD mVirtualSize; - Detail::PE_DWORD mVirtualAddress; - Detail::PE_DWORD mSizeOfRawData; - Detail::PE_DWORD mPointerToRawData; - Detail::PE_DWORD mPointerToRelocations; - Detail::PE_DWORD mPointerToLinenumbers; - Detail::PE_WORD mNumberOfRelocations; - Detail::PE_WORD mNumberOfLinenumbers; - Detail::PE_DWORD mCharacteristics; -} ExecSectionHeader, *ExecSectionHeaderPtr; - -enum kExecDataDirParams { - kExecExport, - kExecImport, - kExecInvalid, - kExecCount, -}; - -typedef struct ExecExportDirectory { - Detail::PE_DWORD mCharacteristics; - Detail::PE_DWORD mTimeDateStamp; - Detail::PE_WORD mMajorVersion; - Detail::PE_WORD mMinorVersion; - Detail::PE_DWORD mName; - Detail::PE_DWORD mBase; - Detail::PE_DWORD mNumberOfFunctions; - Detail::PE_DWORD mNumberOfNames; - Detail::PE_DWORD mAddressOfFunctions; // export table rva - Detail::PE_DWORD mAddressOfNames; - Detail::PE_DWORD mAddressOfNameOrdinal; // ordinal table rva -} ExecExportDirectory, *ExecExportDirectoryPtr; - -typedef struct ExecImportDirectory { - union { - Detail::PE_DWORD mCharacteristics; - Detail::PE_DWORD mOriginalFirstThunk; - }; - Detail::PE_DWORD mTimeDateStamp; - Detail::PE_DWORD mForwarderChain; - Detail::PE_DWORD mNameRva; - Detail::PE_DWORD mThunkTableRva; -} ExecImportDirectory, *ExecImportDirectoryPtr; - -#define kPeStart "__hcore_subsys_start" - -#endif /* ifndef __PE__ */ diff --git a/Private/KernelKit/PE.hxx b/Private/KernelKit/PE.hxx new file mode 100644 index 00000000..57e224ca --- /dev/null +++ b/Private/KernelKit/PE.hxx @@ -0,0 +1,117 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + + File: PE.hxx + Purpose: Portable Executable for NewOS. + + Revision History: + + 30/01/24: Added file (amlel) + +------------------------------------------- */ + +#ifndef __PE__ +#define __PE__ + +#include <NewKit/Defines.hpp> + +#define kPeMagic 0x00004550 + +typedef struct ExecHeader final { + NewOS::UInt32 mMagic; // PE\0\0 or 0x00004550 + NewOS::UInt16 mMachine; + NewOS::UInt16 mNumberOfSections; + NewOS::UInt32 mTimeDateStamp; + NewOS::UInt32 mPointerToSymbolTable; + NewOS::UInt32 mNumberOfSymbols; + NewOS::UInt16 mSizeOfOptionalHeader; + NewOS::UInt16 mCharacteristics; +} ALIGN(8) ExecHeader, *ExecHeaderPtr; + +#define kMagPE32 0x010b +#define kMagPE64 0x020b + +#define kPEMachineAMD64 0x8664 +#define kPEMachineARM64 0xaa64 + +typedef struct ExecOptionalHeader final { + NewOS::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) + NewOS::UChar mMajorLinkerVersion; + NewOS::UChar mMinorLinkerVersion; + NewOS::UIntPtr mSizeOfCode; + NewOS::UIntPtr mSizeOfInitializedData; + NewOS::UIntPtr mSizeOfUninitializedData; + NewOS::UInt32 mAddressOfEntryPoint; + NewOS::UInt32 mBaseOfCode; + NewOS::UIntPtr mImageBase; + NewOS::UInt32 mSectionAlignment; + NewOS::UInt32 mFileAlignment; + NewOS::UInt16 mMajorOperatingSystemVersion; + NewOS::UInt16 mMinorOperatingSystemVersion; + NewOS::UInt16 mMajorImageVersion; + NewOS::UInt16 mMinorImageVersion; + NewOS::UInt16 mMajorSubsystemVersion; + NewOS::UInt16 mMinorSubsystemVersion; + NewOS::UInt32 mWin32VersionValue; + NewOS::UIntPtr mSizeOfImage; + NewOS::UIntPtr mSizeOfHeaders; + NewOS::UInt32 mCheckSum; + NewOS::UInt16 mSubsystem; + NewOS::UInt16 mDllCharacteristics; + NewOS::UIntPtr mSizeOfStackReserve; + NewOS::UIntPtr mSizeOfStackCommit; + NewOS::UIntPtr mSizeOfHeapReserve; + NewOS::UIntPtr mSizeOfHeapCommit; + NewOS::UInt32 mLoaderFlags; + NewOS::UInt32 mNumberOfRvaAndSizes; +} ExecOptionalHeader, *ExecOptionalHeaderPtr; + +typedef struct ExecSectionHeader final { + CONST NewOS::UChar mName[8]; + NewOS::UInt32 mVirtualSize; + NewOS::UInt32 mVirtualAddress; + NewOS::UInt32 mSizeOfRawData; + NewOS::UInt32 mPointerToRawData; + NewOS::UInt32 mPointerToRelocations; + NewOS::UInt32 mPointerToLinenumbers; + NewOS::UInt16 mNumberOfRelocations; + NewOS::UInt16 mNumberOfLinenumbers; + NewOS::UInt32 mCharacteristics; +} ExecSectionHeader, *ExecSectionHeaderPtr; + +enum kExecDataDirParams { + kExecExport, + kExecImport, + kExecInvalid, + kExecCount, +}; + +typedef struct ExecExportDirectory { + NewOS::UInt32 mCharacteristics; + NewOS::UInt32 mTimeDateStamp; + NewOS::UInt16 mMajorVersion; + NewOS::UInt16 mMinorVersion; + NewOS::UInt32 mName; + NewOS::UInt32 mBase; + NewOS::UInt32 mNumberOfFunctions; + NewOS::UInt32 mNumberOfNames; + NewOS::UInt32 mAddressOfFunctions; // export table rva + NewOS::UInt32 mAddressOfNames; + NewOS::UInt32 mAddressOfNameOrdinal; // ordinal table rva +} ExecExportDirectory, *ExecExportDirectoryPtr; + +typedef struct ExecImportDirectory { + union { + NewOS::UInt32 mCharacteristics; + NewOS::UInt32 mOriginalFirstThunk; + }; + NewOS::UInt32 mTimeDateStamp; + NewOS::UInt32 mForwarderChain; + NewOS::UInt32 mNameRva; + NewOS::UInt32 mThunkTableRva; +} ExecImportDirectory, *ExecImportDirectoryPtr; + +#define kPeStart "__hcore_subsys_start" + +#endif /* ifndef __PE__ */ diff --git a/Private/KernelKit/PECodeManager.hxx b/Private/KernelKit/PECodeManager.hxx index 1f15a742..47db2d04 100644 --- a/Private/KernelKit/PECodeManager.hxx +++ b/Private/KernelKit/PECodeManager.hxx @@ -19,6 +19,6 @@ //////////////////////////////////////////////////// -#include <KernelKit/PE.hpp> +#include <KernelKit/PE.hxx> #include <NewKit/ErrorOr.hpp> #include <NewKit/String.hpp> diff --git a/Private/KernelKit/PEF.hpp b/Private/KernelKit/PEF.hpp index 7009d5d8..c6883f0a 100644 --- a/Private/KernelKit/PEF.hpp +++ b/Private/KernelKit/PEF.hpp @@ -84,8 +84,8 @@ enum { } // namespace NewOS #define kPefExt ".exe" -#define kPefDylibExt ".dll" -#define kPefLibExt ".lib" +#define kPefDylibExt ".lib" +#define kPefLibExt ".slib" #define kPefObjectExt ".obj" #define kPefDebugExt ".dbg" diff --git a/Private/KernelKit/XCOFF.hxx b/Private/KernelKit/XCOFF.hxx new file mode 100644 index 00000000..35ca9896 --- /dev/null +++ b/Private/KernelKit/XCOFF.hxx @@ -0,0 +1,38 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + + File: XCOFF.hpp + Purpose: XCOFF for NewOS. + + Revision History: + + 04/07/24: Added file (amlel) + +------------------------------------------- */ + +#ifndef __XCOFF__ +#define __XCOFF__ + +#include <NewKit/Defines.hpp> + +#define kXCOFF64Magic 0x01F7 + +#define kXCOFFRelFlg 0x0001 +#define kXCOFFExecutable 0x0002 +#define kXCOFFLnno 0x0004 +#define kXCOFFLSyms 0x0008 + +/// @brief XCoff file header, meant for PowerPC programs. +typedef struct XCoffFileHeader +{ + NewOS::UInt16 fMagic; + NewOS::UInt16 fTarget; + NewOS::UInt16 fNumSecs; + NewOS::UInt32 fTimeDat; + NewOS::UIntPtr fSymPtr; + NewOS::UInt32 fNumSyms; + NewOS::UInt16 fOptHdr; // ?: Number of bytes in optional header +} XCoffFileHeader; + +#endif // ifndef __XCOFF__
\ No newline at end of file diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx index 8b10503a..f9ebcbbc 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx @@ -6,7 +6,7 @@ #include <BootKit/BootKit.hxx> #include <KernelKit/MSDOS.hpp> -#include <KernelKit/PE.hpp> +#include <KernelKit/PE.hxx> #include <NewKit/Ref.hpp> #ifdef __x86_64__ |
