Esempio n. 1
0
        public void SetRef <T>(int level, int slot, ref T r)
        {
            var baseAddress = Levels[level].BaseAddress;

            if (baseAddress != IntPtr.Zero)
            {
                var slotAddress = baseAddress;
                if (GetStackDir() > 0)
                {
                    slotAddress -= (slot) * IntPtr.Size;
                }
                else
                {
                    slotAddress += (slot) * IntPtr.Size;
                }
                while (true)
                {
                    RawRef source = new RawRef();
                    source.SetRef(ref r);
                    var sourceAddress = source.Address;

                    RawRef dest = new RawRef();
                    dest.Address = slotAddress;
                    dest.SetValue(sourceAddress);

                    source.SetRef(ref r);
                    if (sourceAddress == source.Address)
                    {
                        return;
                    }
                }
            }
        }
Esempio n. 2
0
        public ref T GetRef <T>(int level, int slot)
        {
            var baseAddress = Levels[level].BaseAddress;

            if (baseAddress != IntPtr.Zero)
            {
                var slotAddress = baseAddress;
                if (GetStackDir() > 0)
                {
                    slotAddress -= (slot) * IntPtr.Size;
                }
                else
                {
                    slotAddress += (slot) * IntPtr.Size;
                }
                while (true)
                {
                    RawRef dest = new RawRef();
                    dest.Address = slotAddress;
                    var destAddress = dest.GetValue <IntPtr>();

                    RawRef real = new RawRef();
                    real.Address = destAddress;
                    ref T r = ref real.GetRef <T>();

                    if (destAddress == dest.GetValue <IntPtr>())
                    {
                        return(ref r);
                    }
                }
            }
Esempio n. 3
0
        public static int GetStackDir()
        {
            RawRef r1 = new RawRef();

            r1.SetRef(ref r1);
            RawRef r2 = new RawRef();

            r2.SetRef(ref r2);
            return((int)(((long)r2.Address) - ((long)r1.Address)));
        }