aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs')
-rw-r--r--Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs152
1 files changed, 0 insertions, 152 deletions
diff --git a/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs b/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs
deleted file mode 100644
index 7d7af208..00000000
--- a/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-using Ryujinx.Common.Logging;
-using Ryujinx.HLE.Exceptions;
-using Ryujinx.HLE.HOS.Tamper.CodeEmitters;
-using Ryujinx.HLE.HOS.Tamper.Operations;
-using System;
-using System.Collections.Generic;
-
-namespace Ryujinx.HLE.HOS.Tamper
-{
- class AtmosphereCompiler
- {
- private ulong _exeAddress;
- private ulong _heapAddress;
- private ulong _aliasAddress;
- private ulong _aslrAddress;
- private ITamperedProcess _process;
-
- public AtmosphereCompiler(ulong exeAddress, ulong heapAddress, ulong aliasAddress, ulong aslrAddress, ITamperedProcess process)
- {
- _exeAddress = exeAddress;
- _heapAddress = heapAddress;
- _aliasAddress = aliasAddress;
- _aslrAddress = aslrAddress;
- _process = process;
- }
-
- public ITamperProgram Compile(string name, IEnumerable<string> rawInstructions)
- {
- string[] addresses = new string[]
- {
- $" Executable address: 0x{_exeAddress:X16}",
- $" Heap address : 0x{_heapAddress:X16}",
- $" Alias address : 0x{_aliasAddress:X16}",
- $" Aslr address : 0x{_aslrAddress:X16}"
- };
-
- Logger.Debug?.Print(LogClass.TamperMachine, $"Compiling Atmosphere cheat {name}...\n{string.Join('\n', addresses)}");
-
- try
- {
- return CompileImpl(name, rawInstructions);
- }
- catch(TamperCompilationException exception)
- {
- // Just print the message without the stack trace.
- Logger.Error?.Print(LogClass.TamperMachine, exception.Message);
- }
- catch (Exception exception)
- {
- Logger.Error?.Print(LogClass.TamperMachine, exception.ToString());
- }
-
- Logger.Error?.Print(LogClass.TamperMachine, "There was a problem while compiling the Atmosphere cheat");
-
- return null;
- }
-
- private ITamperProgram CompileImpl(string name, IEnumerable<string> rawInstructions)
- {
- CompilationContext context = new CompilationContext(_exeAddress, _heapAddress, _aliasAddress, _aslrAddress, _process);
- context.BlockStack.Push(new OperationBlock(null));
-
- // Parse the instructions.
-
- foreach (string rawInstruction in rawInstructions)
- {
- Logger.Debug?.Print(LogClass.TamperMachine, $"Compiling instruction {rawInstruction}");
-
- byte[] instruction = InstructionHelper.ParseRawInstruction(rawInstruction);
- CodeType codeType = InstructionHelper.GetCodeType(instruction);
-
- switch (codeType)
- {
- case CodeType.StoreConstantToAddress:
- StoreConstantToAddress.Emit(instruction, context);
- break;
- case CodeType.BeginMemoryConditionalBlock:
- BeginConditionalBlock.Emit(instruction, context);
- break;
- case CodeType.EndConditionalBlock:
- EndConditionalBlock.Emit(instruction, context);
- break;
- case CodeType.StartEndLoop:
- StartEndLoop.Emit(instruction, context);
- break;
- case CodeType.LoadRegisterWithContant:
- LoadRegisterWithConstant.Emit(instruction, context);
- break;
- case CodeType.LoadRegisterWithMemory:
- LoadRegisterWithMemory.Emit(instruction, context);
- break;
- case CodeType.StoreConstantToMemory:
- StoreConstantToMemory.Emit(instruction, context);
- break;
- case CodeType.LegacyArithmetic:
- LegacyArithmetic.Emit(instruction, context);
- break;
- case CodeType.BeginKeypressConditionalBlock:
- BeginConditionalBlock.Emit(instruction, context);
- break;
- case CodeType.Arithmetic:
- Arithmetic.Emit(instruction, context);
- break;
- case CodeType.StoreRegisterToMemory:
- StoreRegisterToMemory.Emit(instruction, context);
- break;
- case CodeType.BeginRegisterConditionalBlock:
- BeginConditionalBlock.Emit(instruction, context);
- break;
- case CodeType.SaveOrRestoreRegister:
- SaveOrRestoreRegister.Emit(instruction, context);
- break;
- case CodeType.SaveOrRestoreRegisterWithMask:
- SaveOrRestoreRegisterWithMask.Emit(instruction, context);
- break;
- case CodeType.ReadOrWriteStaticRegister:
- ReadOrWriteStaticRegister.Emit(instruction, context);
- break;
- case CodeType.PauseProcess:
- PauseProcess.Emit(instruction, context);
- break;
- case CodeType.ResumeProcess:
- ResumeProcess.Emit(instruction, context);
- break;
- case CodeType.DebugLog:
- DebugLog.Emit(instruction, context);
- break;
- default:
- throw new TamperCompilationException($"Code type {codeType} not implemented in Atmosphere cheat");
- }
- }
-
- // Initialize only the registers used.
-
- Value<ulong> zero = new Value<ulong>(0UL);
- int position = 0;
-
- foreach (Register register in context.Registers.Values)
- {
- context.CurrentOperations.Insert(position, new OpMov<ulong>(register, zero));
- position++;
- }
-
- if (context.BlockStack.Count != 1)
- {
- throw new TamperCompilationException($"Reached end of compilation with unmatched conditional(s) or loop(s)");
- }
-
- return new AtmosphereProgram(name, _process, context.PressedKeys, new Block(context.CurrentOperations));
- }
- }
-}