aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs
diff options
context:
space:
mode:
authorCaian Benedicto <caianbene@gmail.com>2021-08-04 17:05:17 -0300
committerGitHub <noreply@github.com>2021-08-04 22:05:17 +0200
commitff8849671af5ac14fc9cc9d37da30f53d3f13d89 (patch)
tree636e4e249084b20b871c158fdb8ff4f2b03f36e0 /Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs
parenta27986c31167d8ce60efcee7e901da241f63ed08 (diff)
Update TamperMachine and disable write-to-code prevention (#2506)
* Enable write to memory and improve logging * Update tamper machine opcodes and improve reporting * Add Else support * Add missing private statement
Diffstat (limited to 'Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs')
-rw-r--r--Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs12
1 files changed, 7 insertions, 5 deletions
diff --git a/Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs b/Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs
index e27c371a..be51264a 100644
--- a/Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs
+++ b/Ryujinx.HLE/HOS/Tamper/TamperedKProcess.cs
@@ -11,9 +11,11 @@ namespace Ryujinx.HLE.HOS.Tamper
public ProcessState State => _process.State;
+ public bool TamperedCodeMemory { get; set; } = false;
+
public TamperedKProcess(KProcess process)
{
- this._process = process;
+ _process = process;
}
private void AssertMemoryRegion<T>(ulong va, bool isWrite) where T : unmanaged
@@ -32,11 +34,11 @@ namespace Ryujinx.HLE.HOS.Tamper
return;
}
- // TODO (Caian): It is unknown how PPTC behaves if the tamper modifies memory regions
- // belonging to code. So for now just prevent code tampering.
- if ((va >= _process.MemoryManager.CodeRegionStart) && (va + size <= _process.MemoryManager.CodeRegionEnd))
+ // TODO (Caian): The JIT does not support invalidating a code region so writing to code memory may not work
+ // as intended, so taint the operation to issue a warning later.
+ if (isWrite && (va >= _process.MemoryManager.CodeRegionStart) && (va + size <= _process.MemoryManager.CodeRegionEnd))
{
- throw new CodeRegionTamperedException($"Writing {size} bytes to address 0x{va:X16} alters code");
+ TamperedCodeMemory = true;
}
}