Exemplo n.º 1
0
 public ModuleFromDataReader(ModuleServiceFromDataReader moduleService, IExportReader exportReader, int moduleIndex, ModuleInfo moduleInfo, ulong imageSize)
     : base(moduleService.Target)
 {
     _moduleService = moduleService;
     _moduleInfo    = moduleInfo;
     _imageSize     = imageSize;
     _exportReader  = exportReader;
     ModuleIndex    = moduleIndex;
 }
 public ModuleFromDataReader(ModuleServiceFromDataReader moduleService, IExportReader exportReader, int moduleIndex, ModuleInfo moduleInfo, ulong imageSize)
     : base(moduleService.Target)
 {
     _moduleService = moduleService;
     _moduleInfo    = moduleInfo;
     _imageSize     = imageSize;
     _exportReader  = exportReader;
     ModuleIndex    = moduleIndex;
     if (exportReader is not null)
     {
         ServiceProvider.AddService <IExportSymbols>(this);
     }
 }
Exemplo 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);
        }