/// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }