/// <summary> /// Get/create the modules dictionary. /// </summary> protected override Dictionary <ulong, IModule> GetModulesInner() { var modules = new Dictionary <ulong, IModule>(); int moduleIndex = 0; foreach (ModuleInfo moduleInfo in _dataReader.EnumerateModules().OrderBy((info) => info.ImageBase)) { var module = new ModuleFromDataReader(this, moduleIndex, moduleInfo); try { modules.Add(moduleInfo.ImageBase, module); } catch (ArgumentException) { Trace.TraceError($"GetModules(): duplicate module base '{module}' dup '{modules[moduleInfo.ImageBase]}'"); } moduleIndex++; } return(modules); }
/// <summary> /// Get/create the modules dictionary. /// </summary> protected override Dictionary <ulong, IModule> GetModulesInner() { var modules = new Dictionary <ulong, IModule>(); int moduleIndex = 0; foreach (ModuleInfo moduleInfo in _dataReader.EnumerateModules().OrderBy((info) => info.ImageBase)) { var module = new ModuleFromDataReader(this, moduleIndex, moduleInfo); if (!modules.TryGetValue(moduleInfo.ImageBase, out IModule dup)) { modules.Add(moduleInfo.ImageBase, module); } else { Trace.TraceError($"GetModules(): duplicate module base '{module}' dup '{dup}'"); } moduleIndex++; } return(modules); }
/// <summary> /// Get/create the modules dictionary. /// </summary> protected override Dictionary <ulong, IModule> GetModulesInner() { var modules = new Dictionary <ulong, IModule>(); int moduleIndex = 0; IExportReader exportReader = _dataReader as IExportReader; ModuleInfo[] moduleInfos = _dataReader.EnumerateModules().OrderBy((info) => info.ImageBase).ToArray(); for (int i = 0; i < moduleInfos.Length; i++) { ModuleInfo moduleInfo = moduleInfos[i]; ulong imageSize = (uint)moduleInfo.IndexFileSize; if ((i + 1) < moduleInfos.Length) { ModuleInfo moduleInfoNext = moduleInfos[i + 1]; ulong start = moduleInfo.ImageBase; ulong end = moduleInfo.ImageBase + imageSize; ulong startNext = moduleInfoNext.ImageBase; if (end > startNext) { Trace.TraceWarning($"Module {moduleInfo.FileName} {start:X16} - {end:X16} ({imageSize:X8})"); Trace.TraceWarning($" overlaps with {moduleInfoNext.FileName} {startNext:X16}"); imageSize = startNext - start; } } var module = new ModuleFromDataReader(this, exportReader, moduleIndex, moduleInfo, imageSize); try { modules.Add(moduleInfo.ImageBase, module); } catch (ArgumentException) { Trace.TraceError($"GetModules(): duplicate module base '{module}' dup '{modules[moduleInfo.ImageBase]}'"); } moduleIndex++; } return(modules); }