コード例 #1
0
ファイル: PyObject.cs プロジェクト: Tarolion/ProjectMelrose
 public PyObject(
     Int64 BaseAddress,
     IMemoryReader MemoryReader)
 {
     this.BaseAddress = BaseAddress;
     ob_refcnt        = MemoryReader.ReadUInt32(BaseAddress + Offset_ob_refcnt);
     ob_type          = MemoryReader.ReadUInt32(BaseAddress + Offset_ob_type);
 }
コード例 #2
0
 public PyObjectWithRefToDictAt8(
     Int64 BaseAddress,
     IMemoryReader MemoryReader)
     :
     base(BaseAddress, MemoryReader)
 {
     ref_dict = MemoryReader.ReadUInt32(BaseAddress + Offset_dict);
 }
コード例 #3
0
 public PyObjectVar(
     Int64 BaseAddress,
     IMemoryReader MemoryReader)
     :
     base(BaseAddress, MemoryReader)
 {
     ob_size = MemoryReader.ReadUInt32(BaseAddress + Offset_ob_size);
 }
コード例 #4
0
ファイル: PyUnicode.cs プロジェクト: Tarolion/ProjectMelrose
 public PyUnicode(
     Int64 BaseAddress,
     IMemoryReader MemoryReader)
     :
     base(BaseAddress, MemoryReader)
 {
     Length    = (int)MemoryReader.ReadInt(BaseAddress + 8);
     StringPtr = MemoryReader.ReadUInt32(BaseAddress + 12);
     String    = MemoryReader.ReadUnicodeString((Int64)StringPtr, Length);
 }
コード例 #5
0
ファイル: PyList.cs プロジェクト: theroadninja/Sanderling
        public PyList(
            Int64 BaseAddress,
            IMemoryReader MemoryReader)
            :
            base(BaseAddress, MemoryReader)
        {
            ob_item = MemoryReader.ReadUInt32(BaseAddress + Offset_ob_item);

            if (ob_item.HasValue && ob_size.HasValue)
            {
                Items = MemoryReader.ReadArray <UInt32>(ob_item.Value, (int)ob_size.Value * 4);
            }
        }
コード例 #6
0
        public PyTypeObject(
            Int64 BaseAddress,
            IMemoryReader MemoryReader)
            :
            base(
                BaseAddress,
                MemoryReader)
        {
            tp_name = MemoryReader.ReadUInt32(BaseAddress + Offset_tp_name);

            if (tp_name < int.MaxValue)
            {
                tp_name_Val = MemoryReader.ReadStringAsciiNullTerminated(tp_name.Value, 0x100);
            }
        }
コード例 #7
0
ファイル: PyDict.cs プロジェクト: theroadninja/Sanderling
        public PyDict(
            Int64 BaseAddress,
            IMemoryReader MemoryReader,
            int?SlotsCountMax = null)
            :
            base(BaseAddress, MemoryReader)
        {
            ma_fill  = MemoryReader.ReadUInt32(BaseAddress + Offset_ma_fill);
            ma_used  = MemoryReader.ReadUInt32(BaseAddress + Offset_ma_used);
            ma_mask  = MemoryReader.ReadUInt32(BaseAddress + Offset_ma_mask);
            ma_table = MemoryReader.ReadUInt32(BaseAddress + Offset_ma_table);

            SlotsCount = ma_mask + 1;

            if (ma_table.HasValue && SlotsCount.HasValue)
            {
                var SlotsToReadCount = (int)Math.Min(SlotsCountMax ?? int.MaxValue, SlotsCount.Value);

                Slots =
                    Enumerable.Range(0, SlotsToReadCount)
                    .Select((SlotIndex) => new PyDictEntry(ma_table.Value + SlotIndex * 12, MemoryReader))
                    .ToArray();
            }
        }
コード例 #8
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());
        }
コード例 #9
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);
        }