diff options
author | german77 <juangerman-13@hotmail.com> | 2024-02-05 18:06:25 +0100 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2024-02-05 18:08:24 +0100 |
commit | 8113f55f4bf32d7bae7defecd037a544d96fc719 (patch) | |
tree | f1e30ad1d286e79823beabc8e62dff6732b1b555 /src/core/memory/cheat_engine.cpp | |
parent | dmnt: cheats: Update cheat vm to latest version (diff) | |
download | yuzu-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 'src/core/memory/cheat_engine.cpp')
-rw-r--r-- | src/core/memory/cheat_engine.cpp | 25 |
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; |