NeKernel dev
Loading...
Searching...
No Matches
PE32CodeMgr.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5 File: PE32CodeMgr.h
6 Purpose: PE32+ Code Mgr and Dylib mgr.
7
8 Revision History:
9
10 12/02/24: Added file (amlel)
11
12======================================== */
13
14#pragma once
15
17
18// LAST REV: Mon Feb 12 13:52:01 CET 2024
19
21
22#include <KernelKit/FileMgr.h>
23#include <KernelKit/ILoader.h>
24#include <KernelKit/PE.h>
25#include <NeKit/ErrorOr.h>
26#include <NeKit/KString.h>
27
28#ifndef INC_PROCESS_SCHEDULER_H
30#endif
31
32#define kPeStackSizeSymbol "__NESizeOfReserveStack"
33#define kPeHeapSizeSymbol "__NESizeOfReserveHeap"
34#define kPeNameSymbol "__NEProgramName"
35
36#define kPeApplicationMime "application/vnd-portable-executable"
37
38#define kPeImageStart "__ImageStart"
39
40namespace Kernel {
45class PE32Loader : public ILoader {
46 private:
47 explicit PE32Loader() = delete;
48
49 public:
50 explicit PE32Loader(const VoidPtr blob);
51 explicit PE32Loader(const Char* path);
52 ~PE32Loader() override;
53
54 public:
56
57 public:
58 const Char* Path() override;
59 const Char* AsString() override;
60 const Char* MIME() override;
61
62 public:
63 ErrorOr<VoidPtr> FindStart() override;
65 ErrorOr<VoidPtr> FindSymbol(const Char* name, Int32 kind) override;
66 ErrorOr<VoidPtr> GetBlob() override;
67
68 public:
69 bool IsLoaded();
70
71 private:
72#ifdef __FSKIT_INCLUDES_NEFS__
74#elif defined(__FSKIT_INCLUDES_OPENHEFS__)
76#else
78#endif // __FSKIT_INCLUDES_NEFS__
79
83};
84
87
89
91} // namespace Kernel
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define BOOL
File Manager System.
ErrorOr class for error handling.
Definition ErrorOr.h:22
ILoader()=default
Definition OwnPtr.h:23
Definition PE32CodeMgr.h:45
~PE32Loader() override
PE32+ destructor.
Definition PE32CodeMgr.cc:63
ErrorOr< VoidPtr > FindSymbol(const Char *name, Int32 kind) override
Finds the symbol according to it's name.
Definition PE32CodeMgr.cc:117
const Char * Path() override
Definition PE32CodeMgr.cc:190
VoidPtr fCachedBlob
Definition PE32CodeMgr.h:81
const Char * AsString() override
Definition PE32CodeMgr.cc:194
ErrorOr< VoidPtr > FindStart() override
Finds the executable entrypoint.
Definition PE32CodeMgr.cc:178
bool IsLoaded()
Tells if the executable is loaded or not.
Definition PE32CodeMgr.cc:186
BOOL fBad
Definition PE32CodeMgr.h:82
Ref< KString > fPath
Definition PE32CodeMgr.h:80
const Char * MIME() override
Definition PE32CodeMgr.cc:210
ErrorOr< VoidPtr > FindSectionByName(const Char *name)
Finds the section according to its name.
Definition PE32CodeMgr.cc:74
OwnPtr< FileStream< Char > > fFile
Definition PE32CodeMgr.h:77
ErrorOr< VoidPtr > GetBlob() override
Definition PE32CodeMgr.cc:214
Reference wrapper class. /// =========================================================== ///.
Definition Ref.h:22
UPS inline definitions.
Definition Device.h:12
char Char
Definition Config.h:51
Int64 ProcessID
Local Process Identifier type.
Definition CoreProcessScheduler.h:219
void * VoidPtr
Definition Config.h:33
__INT32_TYPE__ Int32
Definition Config.h:38
@ kPEPlatformInvalid
Definition PE32CodeMgr.h:85
@ kPEPlatformAMD64
Definition PE32CodeMgr.h:85
@ kPEPlatformARM64
Definition PE32CodeMgr.h:85
@ kPETypeData
Definition PE32CodeMgr.h:86
@ kPETypeText
Definition PE32CodeMgr.h:86
@ kPETypeBSS
Definition PE32CodeMgr.h:86
@ kPETypeInvalid
Definition PE32CodeMgr.h:86
LDR_SECTION_HEADER PE_SECTION_INFO
Definition PE32CodeMgr.h:88
ProcessID rtl_create_user_process(rtl_start_kind main, const Char *process_name)
Executes a new process from a function. User code only.
Definition CodeMgr.cc:31
Definition PE.h:70