summaryrefslogtreecommitdiffhomepage
path: root/Private/KernelKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-06 11:30:56 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-06 11:30:56 +0100
commit61492dc648412818e1f0e96dbc9522514b1fed2a (patch)
tree068fd8cca5e27cbe48990dae2e10cc618e6ae155 /Private/KernelKit
parent55eb89dde91318a6b7f37e824d383e0625cd53f1 (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.hpp2
-rw-r--r--Private/KernelKit/PE.hpp15
-rw-r--r--Private/KernelKit/PEF.hpp4
-rw-r--r--Private/KernelKit/ProcessManager.hpp6
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)