using Ryujinx.HLE.HOS.Tamper.Operations;
using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Tamper
{
class CompilationContext
public OperationBlock CurrentBlock => BlockStack.Peek();
public List<IOperation> CurrentOperations => CurrentBlock.Operations;
public ITamperedProcess Process { get; }
public Parameter<long> PressedKeys { get; }
public Stack<OperationBlock> BlockStack { get; }
public Dictionary<byte, Register> Registers { get; }
public Dictionary<byte, Register> SavedRegisters { get; }
public Dictionary<byte, Register> StaticRegisters { get; }
public ulong ExeAddress { get; }
public ulong HeapAddress { get; }
public ulong AliasAddress { get; }
public ulong AslrAddress { get; }
public CompilationContext(ulong exeAddress, ulong heapAddress, ulong aliasAddress, ulong aslrAddress, ITamperedProcess process)
Process = process;
PressedKeys = new Parameter<long>(0);
BlockStack = new Stack<OperationBlock>();
Registers = new Dictionary<byte, Register>();
SavedRegisters = new Dictionary<byte, Register>();
StaticRegisters = new Dictionary<byte, Register>();
ExeAddress = exeAddress;
HeapAddress = heapAddress;
AliasAddress = aliasAddress;
AslrAddress = aslrAddress;
}
public Register GetRegister(byte index)
if (Registers.TryGetValue(index, out Register register))
return register;
register = new Register($"R_{index:X2}");
Registers.Add(index, register);
public Register GetSavedRegister(byte index)
if (SavedRegisters.TryGetValue(index, out Register register))
register = new Register($"S_{index:X2}");
SavedRegisters.Add(index, register);
public Register GetStaticRegister(byte index)
register = new Register($"T_{index:X2}");