internal int GetNumberModules( IntPtr self, out uint loaded, out uint unloaded) { loaded = (uint)ModuleService.EnumerateModules().Count(); unloaded = 0; return(HResult.S_OK); }
public override void Invoke() { Regex regex = ModuleName is not null ? new Regex(ModuleName, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant) : null; ulong totalSize = 0; foreach (IModule module in ModuleService.EnumerateModules().OrderBy((m) => m.ModuleIndex)) { totalSize += module.ImageSize; if (regex is null || regex.IsMatch(Path.GetFileName(module.FileName))) { if (Verbose) { WriteLine("{0} {1}", module.ModuleIndex, module.FileName); WriteLine(" Address: {0:X16}", module.ImageBase); WriteLine(" ImageSize: {0:X8}", module.ImageSize); WriteLine(" IsPEImage: {0}", module.IsPEImage); WriteLine(" IsManaged: {0}", module.IsManaged); WriteLine(" IsFileLayout: {0}", module.IsFileLayout?.ToString() ?? "<unknown>"); WriteLine(" IndexFileSize: {0}", module.IndexFileSize?.ToString("X8") ?? "<none>"); WriteLine(" IndexTimeStamp: {0}", module.IndexTimeStamp?.ToString("X8") ?? "<none>"); WriteLine(" Version: {0}", module.VersionData?.ToString() ?? "<none>"); string versionString = module.VersionString; if (!string.IsNullOrEmpty(versionString)) { WriteLine(" {0}", versionString); } foreach (PdbFileInfo pdbFileInfo in module.PdbFileInfos) { WriteLine(" PdbInfo: {0}", pdbFileInfo); } WriteLine(" BuildId: {0}", !module.BuildId.IsDefaultOrEmpty ? string.Concat(module.BuildId.Select((b) => b.ToString("x2"))) : "<none>"); } else { WriteLine("{0:X16} {1:X8} {2}", module.ImageBase, module.ImageSize, module.FileName); } if (Segment) { DisplaySegments(module.ImageBase); } } } WriteLine("Total image size: {0}", totalSize); }