示例#1
0
        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);
        }
示例#3
0
        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
                });
            }
        }