NeKernel dev
Loading...
Searching...
No Matches
IPEFDylibObject.h
Go to the documentation of this file.
1/*
2 * ========================================================
3 *
4 * Kernel
5 * Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
6 *
7 * ========================================================
8 */
9
10#ifndef __KERNELKIT_PEF_SHARED_OBJECT_H__
11#define __KERNELKIT_PEF_SHARED_OBJECT_H__
12
14#include <KernelKit/PEF.h>
17#include <NeKit/Config.h>
18
19namespace Kernel {
25 public:
26 explicit IPEFDylibObject() = default;
27 ~IPEFDylibObject() = default;
28
29 public:
31
32 private:
33 DylibTraits* fMounted{nullptr};
34
35 public:
36 DylibTraits** GetAddressOf() { return &fMounted; }
37
38 DylibTraits* Get() { return fMounted; }
39
40 public:
41 void Mount(DylibTraits* to_mount) {
42 if (!to_mount || !to_mount->ImageObject) return;
43
44 fMounted = to_mount;
45
46 if (fLoader && to_mount) {
47 delete fLoader;
48 fLoader = nullptr;
49 }
50
51 if (!fLoader) {
52 fLoader = new PEFLoader(fMounted->ImageObject);
53 }
54 }
55
56 void Unmount() {
57 if (fMounted) fMounted = nullptr;
58 };
59
60 template <typename SymbolType>
61 SymbolType Load(const Char* symbol_name, const SizeT& len, const UInt32& kind) {
62 if (symbol_name == nullptr || *symbol_name == 0) return nullptr;
63 if (len > kPathLen || len < 1) return nullptr;
64
65 auto ret = reinterpret_cast<SymbolType>(fLoader->FindSymbol(symbol_name, kind).Leak().Leak());
66
67 if (!ret) {
68 if (kind == kPefCode) return (VoidPtr) &__ne_pure_call;
69
70 return nullptr;
71 }
72
73 return ret;
74 }
75
76 private:
77 PEFLoader* fLoader{nullptr};
78};
79
80typedef IPEFDylibObject* IDylibRef;
81
83EXTERN_C Void rtl_fini_dylib_pef(USER_PROCESS& header, IDylibRef lib, Bool* successful);
84} // namespace Kernel
85
86#endif /* ifndef __KERNELKIT_PEF_SHARED_OBJECT_H__ */
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define kPathLen
#define EXTERN_C
PEF Code Manager header file.
Shared Library class Load library from this class.
Definition IPEFDylibObject.h:24
DylibTraits ** GetAddressOf()
Definition IPEFDylibObject.h:36
void Mount(DylibTraits *to_mount)
Definition IPEFDylibObject.h:41
PEFLoader * fLoader
Definition IPEFDylibObject.h:77
DylibTraits * Get()
Definition IPEFDylibObject.h:38
DylibTraits * fMounted
Definition IPEFDylibObject.h:33
void Unmount()
Definition IPEFDylibObject.h:56
SymbolType Load(const Char *symbol_name, const SizeT &len, const UInt32 &kind)
Definition IPEFDylibObject.h:61
Definition PEFCodeMgr.h:30
UPS inline definitions.
Definition Device.h:12
char Char
Definition Config.h:51
void Void
Definition Config.h:87
EXTERN_C IDylibRef rtl_init_dylib_pef(USER_PROCESS &header)
IPEFDylibObject * IDylibRef
Definition IPEFDylibObject.h:80
__SIZE_TYPE__ SizeT
Definition Config.h:60
__UINT32_TYPE__ UInt32
Definition Config.h:44
void * VoidPtr
Definition Config.h:33
EXTERN_C Void __ne_pure_call(USER_PROCESS *process)
Unimplemented function (crashes by default).
Definition HalSchedulerCorePrimitives.cc:16
@ kPefCode
Definition PEF.h:109
EXTERN_C Void rtl_fini_dylib_pef(USER_PROCESS &header, IDylibRef lib, Bool *successful)
bool Bool
Definition Config.h:50