diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-17 14:02:25 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-17 14:02:59 +0100 |
| commit | 0b8628827a66d532fdeb7a294ca74cd9d8de60c5 (patch) | |
| tree | 4e464f3c4cef210547741e9ed3be78c3b2259f49 /Private/Source | |
| parent | 44cb9590d86a507b226a7157b1c8d10ee4a63bb4 (diff) | |
Kernel\PEFCodeManager: Format symbol according to type or return
nullptr.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/Source')
| -rw-r--r-- | Private/Source/PEFCodeManager.cxx | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx index 530667cf..563dc019 100644 --- a/Private/Source/PEFCodeManager.cxx +++ b/Private/Source/PEFCodeManager.cxx @@ -18,6 +18,8 @@ #include <NewKit/RuntimeCheck.hpp> #include <NewKit/String.hpp> +#include "KernelKit/PEF.hpp" + namespace HCore { namespace Detail { UInt32 rt_get_pef_platform(void) noexcept { @@ -88,12 +90,34 @@ VoidPtr PEFLoader::FindSymbol(const char *name, Int32 kind) { PEFCommandHeader *container_header = reinterpret_cast<PEFCommandHeader *>( (UIntPtr)fCachedBlob + sizeof(PEFContainer)); + ErrorOr<StringView> errOrSym; + + switch (kind) { + case kPefCode: { + errOrSym = StringBuilder::Construct(".text"); + break; + } + case kPefData: { + errOrSym = StringBuilder::Construct(".data"); + break; + } + case kPefZero: { + errOrSym = StringBuilder::Construct(".page_zero"); + break; + } + default: + return nullptr; + } + + errOrSym.Leak().Leak() += name; + for (SizeT index = 0; index < container->Count; ++index) { kcout << "Iterating over container at index: " << StringBuilder::FromInt("%", index) << ", name: " << container_header->Name << "\n"; - if (StringBuilder::Equals(container_header->Name, name)) { + if (StringBuilder::Equals(container_header->Name, + errOrSym.Leak().Leak().CData())) { kcout << "Found potential container, checking for validity.\n"; if (container_header->Kind == kind) |
