summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-18 09:16:30 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-18 09:16:30 +0100
commitfa80d7dd589261b56a241f31ff00c9ccef0922a1 (patch)
treea76e7f9670c5400813cdd788a696379f84124b15
parent0b8628827a66d532fdeb7a294ca74cd9d8de60c5 (diff)
Kernel: PEF:Loader: Improve runtime mangler.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
-rw-r--r--Private/Source/PEFCodeManager.cxx23
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;
}
}