diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-18 09:16:30 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-18 09:16:30 +0100 |
| commit | fa80d7dd589261b56a241f31ff00c9ccef0922a1 (patch) | |
| tree | a76e7f9670c5400813cdd788a696379f84124b15 /Private | |
| parent | 0b8628827a66d532fdeb7a294ca74cd9d8de60c5 (diff) | |
Kernel: PEF:Loader: Improve runtime mangler.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private')
| -rw-r--r-- | Private/Source/PEFCodeManager.cxx | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx index 563dc019..68c5b556 100644 --- a/Private/Source/PEFCodeManager.cxx +++ b/Private/Source/PEFCodeManager.cxx @@ -19,6 +19,7 @@ #include <NewKit/String.hpp> #include "KernelKit/PEF.hpp" +#include "NewKit/Utils.hpp" namespace HCore { namespace Detail { @@ -94,37 +95,37 @@ VoidPtr PEFLoader::FindSymbol(const char *name, Int32 kind) { switch (kind) { case kPefCode: { - errOrSym = StringBuilder::Construct(".text"); + errOrSym = StringBuilder::Construct(".text$"); break; } case kPefData: { - errOrSym = StringBuilder::Construct(".data"); + errOrSym = StringBuilder::Construct(".data$"); break; } case kPefZero: { - errOrSym = StringBuilder::Construct(".page_zero"); + errOrSym = StringBuilder::Construct(".page_zero$"); break; } default: return nullptr; } + char *unconstSymbol = const_cast<char *>(name); + + for (SizeT i = 0UL; i < rt_string_len(name, 0); ++i) { + if (unconstSymbol[i] == ' ') { + unconstSymbol[i] = '$'; + } + } + 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, errOrSym.Leak().Leak().CData())) { - kcout << "Found potential container, checking for validity.\n"; - if (container_header->Kind == kind) return (VoidPtr)(static_cast<UIntPtr *>(fCachedBlob) + container_header->Offset); - - continue; } } |
