From 384300904e6cf9187e5e4c4d9a8fad740592cacb Mon Sep 17 00:00:00 2001 From: Amlal Date: Thu, 18 Jul 2024 09:43:27 +0200 Subject: [IMP] BootJump has been fixed, LoaderUtils API for CFKit. (Kernel's CoreFoundation like API) [IMP] Add Write for UChar* types. (BTextWriter) Signed-off-by: Amlal --- Kernel/KernelKit/MSDOS.hxx | 18 ------ Kernel/KernelKit/PE.hxx | 24 ++++---- Kernel/KernelKit/PEF.hpp | 113 ----------------------------------- Kernel/KernelKit/PEF.hxx | 113 +++++++++++++++++++++++++++++++++++ Kernel/KernelKit/PEFCodeManager.hxx | 2 +- Kernel/KernelKit/PEFSharedObject.hxx | 2 +- 6 files changed, 127 insertions(+), 145 deletions(-) delete mode 100644 Kernel/KernelKit/PEF.hpp create mode 100644 Kernel/KernelKit/PEF.hxx (limited to 'Kernel/KernelKit') diff --git a/Kernel/KernelKit/MSDOS.hxx b/Kernel/KernelKit/MSDOS.hxx index a7da9e86..62fc1c64 100644 --- a/Kernel/KernelKit/MSDOS.hxx +++ b/Kernel/KernelKit/MSDOS.hxx @@ -49,22 +49,4 @@ typedef struct _DosHeader DosLong eLfanew; } DosHeader, *DosHeaderPtr; -namespace Kernel -{ - /// @brief Find the PE header inside the the blob. - inline auto rt_find_exec_header(DosHeaderPtr ptrDos) -> VoidPtr - { - if (!ptrDos) - return nullptr; - - if (ptrDos->eMagic[0] != kMagMz0) - return nullptr; - - if (ptrDos->eMagic[1] != kMagMz1) - return nullptr; - - return (VoidPtr)(&ptrDos->eLfanew + 1); - } -} // namespace Kernel - #endif /* ifndef __MSDOS_EXEC__ */ diff --git a/Kernel/KernelKit/PE.hxx b/Kernel/KernelKit/PE.hxx index d494c5aa..debd6aba 100644 --- a/Kernel/KernelKit/PE.hxx +++ b/Kernel/KernelKit/PE.hxx @@ -11,13 +11,19 @@ ------------------------------------------- */ -#ifndef __PE__ -#define __PE__ +#ifndef __KERNELKIT_INC_PE_HXX__ +#define __KERNELKIT_INC_PE_HXX__ #include #define kPeMagic 0x00004550 +#define kMagPE32 0x010b +#define kMagPE64 0x020b + +#define kPEMachineAMD64 0x8664 +#define kPEMachineARM64 0xaa64 + typedef struct ExecHeader final { Kernel::UInt32 mMagic; // PE\0\0 or 0x00004550 @@ -30,12 +36,6 @@ typedef struct ExecHeader final Kernel::UInt16 mCharacteristics; } PACKED ExecHeader, *ExecHeaderPtr; -#define kMagPE32 0x010b -#define kMagPE64 0x020b - -#define kPEMachineAMD64 0x8664 -#define kPEMachineARM64 0xaa64 - typedef struct ExecOptionalHeader final { Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) @@ -71,17 +71,17 @@ typedef struct ExecOptionalHeader final typedef struct ExecSectionHeader final { - CONST Kernel::UChar mName[8]; + Kernel::UChar mName[8]; Kernel::UInt32 mVirtualSize; Kernel::UInt32 mVirtualAddress; Kernel::UInt32 mSizeOfRawData; Kernel::UInt32 mPointerToRawData; Kernel::UInt32 mPointerToRelocations; - Kernel::UInt32 mPointerToLinenumbers; + Kernel::UInt32 mPointerToLineNumbers; Kernel::UInt16 mNumberOfRelocations; Kernel::UInt16 mNumberOfLinenumbers; Kernel::UInt32 mCharacteristics; -} PACKED ExecSectionHeader, *ExecSectionHeaderPtr; +} ExecSectionHeader, *ExecSectionHeaderPtr; enum kExecDataDirParams { @@ -120,4 +120,4 @@ typedef struct ExecImportDirectory #define kPeStart "__ImageStart" -#endif /* ifndef __PE__ */ +#endif /* ifndef __KERNELKIT_INC_PE_HXX__ */ diff --git a/Kernel/KernelKit/PEF.hpp b/Kernel/KernelKit/PEF.hpp deleted file mode 100644 index da8d7aa0..00000000 --- a/Kernel/KernelKit/PEF.hpp +++ /dev/null @@ -1,113 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies - - File: PEF.hpp - Purpose: Preferred Executable Format for Kernel. - - Revision History: - - ?/?/23: Added file (amlel) - -------------------------------------------- */ - -#ifndef __INC_PEF_HPP__ -#define __INC_PEF_HPP__ - -#include -#include -#include - -#define kPefMagic "Joy!" -#define kPefMagicFat "yoJ!" - -#define kPefMagicLen 5 - -#define kPefVersion 1 -#define kPefNameLen 255 - -namespace Kernel -{ - enum - { - kPefArchIntel86S, - kPefArchAMD64, - kPefArchRISCV, - kPefArch64x0, /* 64x0. ISA */ - kPefArch32x0, /* 32x0. ISA */ - kPefArchPowerPC, - kPefArchARM64, - kPefArchCount = (kPefArchPowerPC - kPefArchIntel86S) + 1, - kPefArchInvalid = 0xFF, - }; - - enum - { - kPefSubArchAMD, - kPefSubArchIntel, - kPefSubArchGeneric, - kPefSubArchIBM, - }; - - enum - { - kPefKindExec = 1, /* .exe */ - kPefKindSharedObject = 2, /* .lib */ - kPefKindObject = 4, /* .obj */ - kPefKindDebug = 5, /* .dbg */ - kPefKindDriver = 6, - kPefKindCount, - }; - - typedef struct PEFContainer final - { - Char Magic[kPefMagicLen]; - UInt32 Linker; - UInt32 Version; - UInt32 Kind; - UInt32 Abi; - UInt32 Cpu; - UInt32 SubCpu; /* Cpu specific information */ - UIntPtr Start; - SizeT HdrSz; /* Size of header */ - SizeT Count; /* container header count */ - } PACKED PEFContainer; - - /* First PEFCommandHeader starts after PEFContainer */ - - typedef struct PEFCommandHeader final - { - Char Name[kPefNameLen]; /* container name */ - UInt32 Cpu; /* container cpu */ - UInt32 SubCpu; /* container sub-cpu */ - UInt32 Flags; /* container flags */ - UInt16 Kind; /* container kind */ - UIntPtr Offset; /* content offset */ - SizeT Size; /* content Size */ - } PACKED PEFCommandHeader; - - enum - { - kPefCode = 0xC, - kPefData = 0xD, - kPefZero = 0xE, - kPefLinkerID = 0x1, - }; -} // namespace Kernel - -/* not mandatory, only for non fork based filesystems */ -#define kPefExt ".exec" -#define kPefDylibExt ".lib" -#define kPefLibExt ".slib" -#define kPefObjectExt ".obj" -#define kPefDebugExt ".dbg" - -// Kernel System Binary Interface. -#define kPefAbi (0x5046) - -#define kPefStart "__ImageStart" - -#define kPefForkKind kPefMagic -#define kPefForkKindFAT kPefMagicFat - -#endif /* ifndef __INC_PEF_HPP__ */ diff --git a/Kernel/KernelKit/PEF.hxx b/Kernel/KernelKit/PEF.hxx new file mode 100644 index 00000000..c3b1b94b --- /dev/null +++ b/Kernel/KernelKit/PEF.hxx @@ -0,0 +1,113 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + + File: PEF.hxx + Purpose: Preferred Executable Format for Kernel. + + Revision History: + + ?/?/23: Added file (amlel) + +------------------------------------------- */ + +#ifndef __KERNELKIT_INC_PEF_HXX__ +#define __KERNELKIT_INC_PEF_HXX__ + +#include +#include +#include + +#define kPefMagic "Joy!" +#define kPefMagicFat "yoJ!" + +#define kPefMagicLen 5 + +#define kPefVersion 1 +#define kPefNameLen 255 + +namespace Kernel +{ + enum + { + kPefArchIntel86S, + kPefArchAMD64, + kPefArchRISCV, + kPefArch64x0, /* 64x0. ISA */ + kPefArch32x0, /* 32x0. ISA */ + kPefArchPowerPC, + kPefArchARM64, + kPefArchCount = (kPefArchPowerPC - kPefArchIntel86S) + 1, + kPefArchInvalid = 0xFF, + }; + + enum + { + kPefSubArchAMD, + kPefSubArchIntel, + kPefSubArchGeneric, + kPefSubArchIBM, + }; + + enum + { + kPefKindExec = 1, /* .exe */ + kPefKindSharedObject = 2, /* .lib */ + kPefKindObject = 4, /* .obj */ + kPefKindDebug = 5, /* .dbg */ + kPefKindDriver = 6, + kPefKindCount, + }; + + typedef struct PEFContainer final + { + Char Magic[kPefMagicLen]; + UInt32 Linker; + UInt32 Version; + UInt32 Kind; + UInt32 Abi; + UInt32 Cpu; + UInt32 SubCpu; /* Cpu specific information */ + UIntPtr Start; + SizeT HdrSz; /* Size of header */ + SizeT Count; /* container header count */ + } PACKED PEFContainer; + + /* First PEFCommandHeader starts after PEFContainer */ + + typedef struct PEFCommandHeader final + { + Char Name[kPefNameLen]; /* container name */ + UInt32 Cpu; /* container cpu */ + UInt32 SubCpu; /* container sub-cpu */ + UInt32 Flags; /* container flags */ + UInt16 Kind; /* container kind */ + UIntPtr Offset; /* content offset */ + SizeT Size; /* content Size */ + } PACKED PEFCommandHeader; + + enum + { + kPefCode = 0xC, + kPefData = 0xD, + kPefZero = 0xE, + kPefLinkerID = 0x1, + }; +} // namespace Kernel + +/* not mandatory, only for non fork based filesystems */ +#define kPefExt ".exec" +#define kPefDylibExt ".lib" +#define kPefLibExt ".slib" +#define kPefObjectExt ".obj" +#define kPefDebugExt ".dbg" + +// Kernel System Binary Interface. +#define kPefAbi (0x5046) + +#define kPefStart "__ImageStart" + +#define kPefForkKind kPefMagic +#define kPefForkKindFAT kPefMagicFat + +#endif /* ifndef __KERNELKIT_INC_PEF_HXX__ */ diff --git a/Kernel/KernelKit/PEFCodeManager.hxx b/Kernel/KernelKit/PEFCodeManager.hxx index 79c9d0ab..5e48331a 100644 --- a/Kernel/KernelKit/PEFCodeManager.hxx +++ b/Kernel/KernelKit/PEFCodeManager.hxx @@ -7,7 +7,7 @@ #ifndef _INC_CODE_MANAGER_PEF_HXX_ #define _INC_CODE_MANAGER_PEF_HXX_ -#include +#include #include #include #include diff --git a/Kernel/KernelKit/PEFSharedObject.hxx b/Kernel/KernelKit/PEFSharedObject.hxx index a583ad70..f8119971 100644 --- a/Kernel/KernelKit/PEFSharedObject.hxx +++ b/Kernel/KernelKit/PEFSharedObject.hxx @@ -11,7 +11,7 @@ #define __KERNELKIT_SHARED_OBJECT_HXX__ #include -#include +#include #include #include -- cgit v1.2.3