From 5339d016c07bf717ee388f4feb73544087324af0 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 6 Jan 2024 09:14:11 +0100 Subject: git: port from mercurial repo. Signed-off-by: Amlal El Mahrouss --- KernelKit/CodeManager.hpp | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 KernelKit/CodeManager.hpp (limited to 'KernelKit/CodeManager.hpp') diff --git a/KernelKit/CodeManager.hpp b/KernelKit/CodeManager.hpp new file mode 100644 index 00000000..61b609c6 --- /dev/null +++ b/KernelKit/CodeManager.hpp @@ -0,0 +1,74 @@ +/* +* ======================================================== +* +* hCore +* Copyright Mahrouss Logic, all rights reserved. +* +* ======================================================== +*/ + +#ifndef _INC_CODE_MANAGER_ +#define _INC_CODE_MANAGER_ + +#include +#include +#include + +namespace hCore +{ + /// + /// \name PEFLoader + /// PEF container format implementation. + /// + class PEFLoader : public Loader + { + PEFLoader() = delete; + + public: + explicit PEFLoader(const char* path); + ~PEFLoader() override; + + public: + HCORE_COPY_DEFAULT(PEFLoader); + + public: + typedef void(*MainKind)(void); + + public: + const char* Path() override; + const char* Format() override; + const char* MIME() override; + + public: + ErrorOr LoadStart() override; + VoidPtr FindSymbol(const char* name, Int32 kind) override; + + public: + bool IsLoaded() noexcept; + + private: + Ref fPath; + VoidPtr fCachedBlob; + bool fBad; + + }; + + namespace Utils + { + /// \brief Much like Mac OS's UPP. + /// It cover other architecture code. + /// PowerPC <-> AMD64 for example. + typedef struct UniversalProcedureTable + { + public: + Char symbolName[kPefNameLen]; + VoidPtr symbolPtr; + SizeT symbolArchitecture; + + } UniversalProcedureTableType; + + bool execute_from_image(PEFLoader& exec); + } +} + +#endif // ifndef _INC_CODE_MANAGER_ -- cgit v1.2.3