33 lines
850 B
C#
33 lines
850 B
C#
|
using Ryujinx.Common.Logging;
|
||
|
using Ryujinx.HLE.HOS.Tamper.Operations;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
|
||
|
namespace Ryujinx.HLE.HOS.Tamper
|
||
|
{
|
||
|
class Pointer : IOperand
|
||
|
{
|
||
|
private IOperand _position;
|
||
|
private ITamperedProcess _process;
|
||
|
|
||
|
public Pointer(IOperand position, ITamperedProcess process)
|
||
|
{
|
||
|
_position = position;
|
||
|
_process = process;
|
||
|
}
|
||
|
|
||
|
public T Get<T>() where T : unmanaged
|
||
|
{
|
||
|
return _process.ReadMemory<T>(_position.Get<ulong>());
|
||
|
}
|
||
|
|
||
|
public void Set<T>(T value) where T : unmanaged
|
||
|
{
|
||
|
ulong position = _position.Get<ulong>();
|
||
|
|
||
|
Logger.Debug?.Print(LogClass.TamperMachine, $"0x{position:X16}@{Unsafe.SizeOf<T>()}: {value:X}");
|
||
|
|
||
|
_process.WriteMemory(position, value);
|
||
|
}
|
||
|
}
|
||
|
}
|