Ejemplo n.º 1
0
        public static uint?ReadPointerPath32(this IMemoryReader memoryReader, string rootModuleName, uint[] listOffset)
        {
            if (memoryReader == null)
            {
                return(null);
            }
            if (listOffset == null)
            {
                return(null);
            }
            if (listOffset.Length < 1)
            {
                return(null);
            }
            uint num = 0u;

            if (rootModuleName != null)
            {
                MemoryReaderModuleInfo[] array = memoryReader.Modules();
                if (array == null)
                {
                    return(null);
                }
                MemoryReaderModuleInfo memoryReaderModuleInfo = array.FirstOrDefault((MemoryReaderModuleInfo module) => module.ModuleName.EqualsIgnoreCase(rootModuleName));
                if (memoryReaderModuleInfo == null)
                {
                    return(null);
                }
                num = (uint)memoryReaderModuleInfo.BaseAddress;
            }
            uint num2 = num;

            for (int i = 0; i < listOffset.Length - 1; i++)
            {
                uint num3 = listOffset[i];
                num2 += num3;
                uint?num4 = memoryReader.ReadUInt32(num2);
                if (!num4.HasValue)
                {
                    return(null);
                }
                num2 = num4.Value;
            }
            return(num2 + listOffset.LastOrDefault());
        }
Ejemplo n.º 2
0
 MemoryReaderModuleInfo[] IMemoryReader.Modules()
 {
     return(MemoryReader.Modules());
 }
Ejemplo n.º 3
0
        static public UInt32?ReadPointerPath32(
            this    IMemoryReader MemoryReader,
            string RootModuleName,
            UInt32[] ListOffset)
        {
            if (null == MemoryReader)
            {
                return(null);
            }

            if (null == ListOffset)
            {
                return(null);
            }

            if (ListOffset.Length < 1)
            {
                return(null);
            }

            UInt32 RootModuleOffset = 0;

            if (null != RootModuleName)
            {
                var Modules = MemoryReader.Modules();

                if (null == Modules)
                {
                    return(null);
                }

                var RootModule = Modules.FirstOrDefault((Module) => string.Equals(Module.ModuleName, RootModuleName, StringComparison.InvariantCultureIgnoreCase));

                if (null == RootModule)
                {
                    return(null);
                }

                RootModuleOffset = (UInt32)RootModule.BaseAddress;
            }

            var CurrentAddress = RootModuleOffset;

            for (int NodeIndex = 0; NodeIndex < ListOffset.Length - 1; NodeIndex++)
            {
                var NodeOffset = ListOffset[NodeIndex];

                CurrentAddress += NodeOffset;

                var NodePointer = MemoryReader.ReadUInt32(CurrentAddress);

                if (!NodePointer.HasValue)
                {
                    return(null);
                }

                CurrentAddress = NodePointer.Value;
            }

            CurrentAddress += ListOffset.LastOrDefault();

            return(CurrentAddress);
        }