diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-06 11:30:56 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-06 11:30:56 +0100 |
| commit | 61492dc648412818e1f0e96dbc9522514b1fed2a (patch) | |
| tree | 068fd8cca5e27cbe48990dae2e10cc618e6ae155 /Private/KernelKit | |
| parent | 55eb89dde91318a6b7f37e824d383e0625cd53f1 (diff) | |
HCR-15 : Load kernel into memory.
Progess have been done regarding PE/MZ support, also updated PEF impl to
not rely on compiler feature __attribute__
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/KernelKit')
| -rw-r--r-- | Private/KernelKit/MSDOS.hpp | 2 | ||||
| -rw-r--r-- | Private/KernelKit/PE.hpp | 15 | ||||
| -rw-r--r-- | Private/KernelKit/PEF.hpp | 4 | ||||
| -rw-r--r-- | Private/KernelKit/ProcessManager.hpp | 6 |
4 files changed, 17 insertions, 10 deletions
diff --git a/Private/KernelKit/MSDOS.hpp b/Private/KernelKit/MSDOS.hpp index 021d62aa..4f098249 100644 --- a/Private/KernelKit/MSDOS.hpp +++ b/Private/KernelKit/MSDOS.hpp @@ -20,7 +20,7 @@ typedef HCore::UInt32 DosWord; typedef HCore::Long DosLong; typedef struct _DosHeader { - DosWord eMagic; + HCore::UInt8 eMagic[2]; DosWord eMagLen; DosWord ePagesCount; DosWord eCrlc; diff --git a/Private/KernelKit/PE.hpp b/Private/KernelKit/PE.hpp index 6cc0ff60..99d6724f 100644 --- a/Private/KernelKit/PE.hpp +++ b/Private/KernelKit/PE.hpp @@ -27,7 +27,7 @@ typedef char CHAR; #define kPeMagic 0x00004550 typedef struct ExecHeader final { - U8 mMagic[4]; // PE\0\0 or 0x00004550 + U32 mMagic; // PE\0\0 or 0x00004550 U16 mMachine; U16 mNumberOfSections; U32 mTimeDateStamp; @@ -35,11 +35,14 @@ typedef struct ExecHeader final { U32 mNumberOfSymbols; U16 mSizeOfOptionalHeader; U16 mCharacteristics; -} PACKED ExecHeader, *ExecHeaderPtr; +} ALIGN(8) ExecHeader, *ExecHeaderPtr; #define kMagPE32 0x010b #define kMagPE64 0x020b +#define kPEMachineAMD64 0x8664 +#define kPEMachineARM64 0xaa64 + typedef struct ExecOptionalHeader final { U16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) U8 mMajorLinkerVersion; @@ -71,7 +74,7 @@ typedef struct ExecOptionalHeader final { U32 mSizeOfHeapCommit; U32 mLoaderFlags; U32 mNumberOfRvaAndSizes; -} PACKED ExecOptionalHeader, *ExecOptionalHeaderPtr; +} ExecOptionalHeader, *ExecOptionalHeaderPtr; typedef struct ExecSectionHeader final { CHAR mName[8]; @@ -84,7 +87,7 @@ typedef struct ExecSectionHeader final { U16 mNumberOfRelocations; U16 mNumberOfLinenumbers; U32 mCharacteristics; -} PACKED ExecSectionHeader, *ExecSectionHeaderPtr; +} ExecSectionHeader, *ExecSectionHeaderPtr; enum kExecDataDirParams { kExecExport, @@ -104,7 +107,7 @@ typedef struct ExecExportDirectory { U32 mAddressOfFunctions; // export table rva U32 mAddressOfNames; U32 mAddressOfNameOrdinal; // ordinal table rva -} PACKED ExecExportDirectory, *ExecExportDirectoryPtr; +} ExecExportDirectory, *ExecExportDirectoryPtr; typedef struct ExecImportDirectory { union { @@ -115,6 +118,6 @@ typedef struct ExecImportDirectory { U32 mForwarderChain; U32 mNameRva; U32 mThunkTableRva; -} PACKED ExecImportDirectory, *ExecImportDirectoryPtr; +} ExecImportDirectory, *ExecImportDirectoryPtr; #endif /* ifndef __PE__ */ diff --git a/Private/KernelKit/PEF.hpp b/Private/KernelKit/PEF.hpp index 2ffc057f..69919f93 100644 --- a/Private/KernelKit/PEF.hpp +++ b/Private/KernelKit/PEF.hpp @@ -63,7 +63,7 @@ typedef struct PEFContainer final { UIntPtr Start; SizeT HdrSz; /* Size of header */ SizeT Count; /* container header count */ -} __attribute__((packed)) PEFContainer; +} PACKED PEFContainer; /* First PEFCommandHeader starts after PEFContainer */ /* Last container is __exec_end */ @@ -76,7 +76,7 @@ typedef struct PEFCommandHeader final { UInt16 Kind; /* container kind */ UIntPtr Offset; /* content offset */ SizeT Size; /* content Size */ -} __attribute__((packed)) PEFCommandHeader; +} PACKED PEFCommandHeader; enum { kPefCode = 0xC, diff --git a/Private/KernelKit/ProcessManager.hpp b/Private/KernelKit/ProcessManager.hpp index ddde3d3c..a459dbbd 100644 --- a/Private/KernelKit/ProcessManager.hpp +++ b/Private/KernelKit/ProcessManager.hpp @@ -100,12 +100,16 @@ enum class ProcessSelector : Int { using ImagePtr = VoidPtr; using HeapPtr = VoidPtr; -// @brief Process header structure. +// @name Process +// @brief Process Information Header (PIH) +// Holds information about the running process. +// Thread execution is being abstracted away. class Process final { public: explicit Process(VoidPtr startImage = nullptr) : Image(startImage) { MUST_PASS(startImage); } + ~Process() = default; HCORE_COPY_DEFAULT(Process) |
