public MemoryProvider(MemoryReader reader) { BaseAddress = reader.Process.MainModule.BaseAddress.ToInt32(); Reader = reader; Scanner = new MemorySignatureScanner(this); }
public void InitTests() { if (Process.GetProcessesByName("rfactor").Length == 0) { Assert.Ignore(); } actionLogbook = new List <MemoryReadAction>(); GlobalEvents.Hook <MemoryReadAction>(x => { actionLogbook.Add(x); Debug.WriteLine(string.Format("Reading 0x{0:X}[0x{1:X}]", x.Address, x.Size)); }, true); reader = new DiagnosticMemoryReader(); reader.Open(Process.GetProcessesByName("rfactor")[0]); sigScan = new MemorySignatureScanner(reader); }
private void AdvancedMiner() { var reader = new MemoryReader(); reader.Open(ActiveProcess, true); miner = new MemoryProvider(reader); var scanner = new MemorySignatureScanner(reader); scanner.Enable(); var staticAddr = scanner.Scan <int>(MemoryRegionType.READWRITE, "75E98B0D????????5F5E"); var staticOffset = scanner.Scan <byte>(MemoryRegionType.READWRITE, "578B7E??8D04973BF8742F"); var ptr1Offset = 0; var spdOffset = scanner.Scan <byte>(MemoryRegionType.READWRITE, "DEC9D947??DECADEC1D955FC"); var cxOffset = scanner.Scan <byte>(MemoryRegionType.READWRITE, "F30F5C4E??F30F59C0F30F59"); var cyOffset = cxOffset + 4; // scanner.Scan<byte>(MemoryRegionType.READWRITE, "5F8B0A890E8B4A??894EXX8B4AXX894EXX"); var czOffset = cxOffset + 8; // scanner.Scan<byte>(MemoryRegionType.READWRITE, "8B4A08??894EXXD9420CD95E0C"); scanner.Disable(); var carsPool = new MemoryPool("Cars", MemoryAddress.StaticAbsolute, staticAddr, new int[] { 0, staticOffset }, 64 * 4); miner.Add(carsPool); for (int k = 0; k < 64; k++) { var carPool = new MemoryPool("Car " + k, MemoryAddress.Dynamic, carsPool, k * 4, 512); carPool.Add(new MemoryField <float>("Speed", MemoryAddress.Dynamic, carPool, spdOffset, 4)); carPool.Add(new MemoryField <float>("CoordinateX", MemoryAddress.Dynamic, carPool, cxOffset, 4)); carPool.Add(new MemoryField <float>("CoordinateY", MemoryAddress.Dynamic, carPool, cyOffset, 4)); carPool.Add(new MemoryField <float>("CoordinateZ", MemoryAddress.Dynamic, carPool, czOffset, 4)); miner.Add(carPool); Cars.Add(new Ets2Car { ID = k }); } }