From cba79b8359193df7da106d049731ed4df0e80e24 Mon Sep 17 00:00:00 2001 From: DanielSvoboda Date: Tue, 18 Feb 2025 18:38:28 -0300 Subject: [PATCH] fix qt/sdl --- src/common/memory_patcher.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/common/memory_patcher.cpp b/src/common/memory_patcher.cpp index 11f97c42a..5091bf1d9 100644 --- a/src/common/memory_patcher.cpp +++ b/src/common/memory_patcher.cpp @@ -388,11 +388,7 @@ void PatchMemory(std::string modNameStr, std::string offsetStr, std::string valu } if (patchMask == PatchMask::Mask_Jump32) { - QString valuePart = QString::fromStdString(valueStr); - QString targetPart = QString::fromStdString(targetStr); - QString sizeStrQt = QString::fromStdString(sizeStr); - - int jumpSize = sizeStrQt.toInt(); + int jumpSize = std::stoi(sizeStr); constexpr int MAX_PATTERN_LENGTH = 256; if (jumpSize < 5) { @@ -417,20 +413,22 @@ void PatchMemory(std::string modNameStr, std::string offsetStr, std::string valu std::memcpy(reinterpret_cast(patchAddress), nopBytes.data(), nopBytes.size()); // Use "Target" to locate the start of the code cave - uintptr_t jump_target = PatternScan(targetPart.toStdString()); + uintptr_t jump_target = PatternScan(targetStr); if (jump_target == 0) { - LOG_ERROR(Loader, "PatternScan failed to Target with pattern: {}", - targetPart.toStdString()); + LOG_ERROR(Loader, "PatternScan failed to Target with pattern: {}", targetStr); return; } // Converts the Value attribute to a byte array (payload) std::vector payload; - for (int i = 0; i < valuePart.length(); i += 2) { - bool ok; - unsigned int byteVal = valuePart.mid(i, 2).toUInt(&ok, 16); - if (!ok) { - LOG_ERROR(Loader, "Invalid byte in Value: {}", valuePart.mid(i, 2).toStdString()); + for (size_t i = 0; i < valueStr.length(); i += 2) { + + const char* byteStr = valueStr.substr(i, 2).c_str(); + char* endPtr; + unsigned int byteVal = std::strtoul(byteStr, &endPtr, 16); + + if (endPtr != byteStr + 2) { + LOG_ERROR(Loader, "Invalid byte in Value: {}", valueStr.substr(i, 2)); return; } payload.push_back(static_cast(byteVal)); @@ -460,7 +458,7 @@ void PatchMemory(std::string modNameStr, std::string offsetStr, std::string valu std::memcpy(reinterpret_cast(code_cave_end), jumpBack, sizeof(jumpBack)); LOG_INFO(Loader, - "Patch mask_jump32 aplicada: {}, PatchAddress: {:#x}, JumpTarget: {:#x}, " + "Applied Patch mask_jump32: {}, PatchAddress: {:#x}, JumpTarget: {:#x}, " "CodeCaveEnd: {:#x}, JumpSize: {}", modNameStr, patchAddress, jump_target, code_cave_end, jumpSize); return;