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()); }
MemoryReaderModuleInfo[] IMemoryReader.Modules() { return(MemoryReader.Modules()); }
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); }