summaryrefslogtreecommitdiffstats
path: root/src/core/memory/cheat_engine.cpp
diff options
context:
space:
mode:
authorgerman77 <juangerman-13@hotmail.com>2024-02-05 18:06:25 +0100
committergerman77 <juangerman-13@hotmail.com>2024-02-05 18:08:24 +0100
commit8113f55f4bf32d7bae7defecd037a544d96fc719 (patch)
treef1e30ad1d286e79823beabc8e62dff6732b1b555 /src/core/memory/cheat_engine.cpp
parentdmnt: cheats: Update cheat vm to latest version (diff)
downloadyuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.tar
yuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.tar.gz
yuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.tar.bz2
yuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.tar.lz
yuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.tar.xz
yuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.tar.zst
yuzu-8113f55f4bf32d7bae7defecd037a544d96fc719.zip
Diffstat (limited to '')
-rw-r--r--src/core/memory/cheat_engine.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/core/memory/cheat_engine.cpp b/src/core/memory/cheat_engine.cpp
index 7a8c14c2b..14d1a3840 100644
--- a/src/core/memory/cheat_engine.cpp
+++ b/src/core/memory/cheat_engine.cpp
@@ -47,12 +47,23 @@ StandardVmCallbacks::StandardVmCallbacks(System& system_, const CheatProcessMeta
StandardVmCallbacks::~StandardVmCallbacks() = default;
-void StandardVmCallbacks::MemoryRead(VAddr address, void* data, u64 size) {
- system.ApplicationMemory().ReadBlock(SanitizeAddress(address), data, size);
+void StandardVmCallbacks::MemoryReadUnsafe(VAddr address, void* data, u64 size) {
+ // Return zero on invalid address
+ if (!IsAddressInRange(address) || !system.ApplicationMemory().IsValidVirtualAddress(address)) {
+ std::memset(data, 0, size);
+ return;
+ }
+
+ system.ApplicationMemory().ReadBlock(address, data, size);
}
-void StandardVmCallbacks::MemoryWrite(VAddr address, const void* data, u64 size) {
- system.ApplicationMemory().WriteBlock(SanitizeAddress(address), data, size);
+void StandardVmCallbacks::MemoryWriteUnsafe(VAddr address, const void* data, u64 size) {
+ // Skip invalid memory write address
+ if (!IsAddressInRange(address) || !system.ApplicationMemory().IsValidVirtualAddress(address)) {
+ return;
+ }
+
+ system.ApplicationMemory().WriteBlock(address, data, size);
}
u64 StandardVmCallbacks::HidKeysDown() {
@@ -82,7 +93,7 @@ void StandardVmCallbacks::CommandLog(std::string_view data) {
data.back() == '\n' ? data.substr(0, data.size() - 1) : data);
}
-VAddr StandardVmCallbacks::SanitizeAddress(VAddr in) const {
+bool StandardVmCallbacks::IsAddressInRange(VAddr in) const {
if ((in < metadata.main_nso_extents.base ||
in >= metadata.main_nso_extents.base + metadata.main_nso_extents.size) &&
(in < metadata.heap_extents.base ||
@@ -97,10 +108,10 @@ VAddr StandardVmCallbacks::SanitizeAddress(VAddr in) const {
"the cheat may be incorrect. However, this may be normal early in execution if "
"the game has not properly set up yet.",
in);
- return 0; ///< Invalid addresses will hard crash
+ return false; ///< Invalid addresses will hard crash
}
- return in;
+ return true;
}
CheatParser::~CheatParser() = default;