CorModuleDefFile FindDynamic(DnModule dnModule) { if (dnModule == null) return null; var mod = dnModule.GetOrCreateCorModuleDef(); return AllCorModuleDefFiles.FirstOrDefault(a => a.ModuleDef == mod); }
void OnModuleAdded(DnModule module) { // If an assembly is visible in the treeview, and a new netmodule gets added, add a // new netmodule node to the assembly in the treeview. var manifestModule = module.Assembly.Modules[0]; // If it's the manifest module, it can't possibly have been inserted in the treeview already if (manifestModule == module) return; // Update a dynamic assembly, if one exists { var manifestKey = CorModuleDefFile.CreateKey(manifestModule); var manifestFile = FindAssemblyByKey(manifestKey); var manifestNode = DnSpyFileListTreeNode.FindAssemblyNode(manifestFile); if (manifestNode != null) { var cmdf = (CorModuleDefFile)manifestFile; var moduleKey = CorModuleDefFile.CreateKey(module); manifestNode.EnsureChildrenFiltered(); Debug.Assert(manifestNode.Children.Count >= 1); var moduleNode = manifestNode.Children.OfType<AssemblyTreeNode>().FirstOrDefault(a => moduleKey.Equals(a.DnSpyFile.Key)); Debug.Assert(moduleNode == null); if (moduleNode == null) { var newFile = new CorModuleDefFile(cmdf.Dictionary, module, UseDebugSymbols); UpdateResolver(module.GetOrCreateCorModuleDef()); cmdf.Dictionary.Add(newFile.ModuleDef, newFile); Initialize(new[] { newFile.DnModule.CorModuleDef }); manifestNode.Children.Add(new AssemblyTreeNode(newFile)); } } } // Update an in-memory assembly, if one exists if (manifestModule.Address != 0 && module.Address != 0) { var manifestKey = MemoryModuleDefFile.CreateKey(manifestModule.Process, manifestModule.Address); var manifestFile = FindAssemblyByKey(manifestKey); var manifestNode = DnSpyFileListTreeNode.FindAssemblyNode(manifestFile); if (manifestNode != null) { var mmdf = (MemoryModuleDefFile)manifestFile; var moduleKey = MemoryModuleDefFile.CreateKey(module.Process, module.Address); manifestNode.EnsureChildrenFiltered(); Debug.Assert(manifestNode.Children.Count >= 1); var moduleNode = manifestNode.Children.OfType<AssemblyTreeNode>().FirstOrDefault(a => moduleKey.Equals(a.DnSpyFile.Key)); Debug.Assert(moduleNode == null); if (moduleNode == null) { MemoryModuleDefFile newFile = null; try { newFile = MemoryModuleDefFile.Create(mmdf.Dictionary, module, UseDebugSymbols); } catch { } Debug.Assert(newFile != null); if (newFile != null) { UpdateResolver(newFile.ModuleDef); mmdf.Dictionary.Add(newFile.ModuleDef, newFile); manifestNode.DnSpyFile.ModuleDef.Assembly.Modules.Add(newFile.ModuleDef); manifestNode.Children.Add(new AssemblyTreeNode(newFile)); } } } } }
public CorModuleDefFile(Dictionary<ModuleDef, CorModuleDefFile> dict, DnModule dnModule, bool loadSyms) : base(dnModule.GetOrCreateCorModuleDef(), loadSyms) { this.dict = dict; this.dnModule = dnModule; this.lastValidRids = new LastValidRids(); }
public CorModuleDefFile(DnModule dnModule, bool loadSyms) : base(dnModule.GetOrCreateCorModuleDef(), loadSyms) { this.dnModule = dnModule; this.lastValidRids = new LastValidRids(); }
void OnModuleAdded(DnModule module) { // If an assembly is visible in the treeview, and a new netmodule gets added, add a // new netmodule node to the assembly in the treeview. var manifestModule = module.Assembly.Modules[0]; // If it's the manifest module, it can't possibly have been inserted in the treeview already if (manifestModule == module) return; // Update a dynamic assembly, if one exists { var manifestKey = CorModuleDefFile.CreateKey(manifestModule); var asmFile = FindAssemblyByKey(manifestKey); var asmNode = documentTreeView.FindNode(asmFile) as AssemblyDocumentNode; if (asmNode != null) { var cmdf = (CorModuleDefFile)asmNode.Document; var moduleKey = CorModuleDefFile.CreateKey(module); asmNode.TreeNode.EnsureChildrenLoaded(); Debug.Assert(asmNode.TreeNode.Children.Count >= 1); var moduleNode = asmNode.TreeNode.DataChildren.OfType<ModuleDocumentNode>().FirstOrDefault(a => moduleKey.Equals(a.Document.Key)); Debug.Assert(moduleNode == null); if (moduleNode == null) { var newFile = new CorModuleDefFile(module, UseDebugSymbols); UpdateResolver(module.GetOrCreateCorModuleDef()); cmdf.Children.Add(newFile); Initialize(module.Debugger, new[] { newFile.DnModule.CorModuleDef }); asmNode.TreeNode.Children.Add(documentTreeView.TreeView.Create(documentTreeView.CreateNode(asmNode, newFile))); } } } // Update an in-memory assembly, if one exists if (manifestModule.Address != 0 && module.Address != 0) { var manifestKey = MemoryModuleDefFile.CreateKey(manifestModule.Process, manifestModule.Address); var asmFile = FindAssemblyByKey(manifestKey); var asmNode = documentTreeView.FindNode(asmFile) as AssemblyDocumentNode; if (asmNode != null) { var mmdf = (MemoryModuleDefFile)asmNode.Document; var moduleKey = MemoryModuleDefFile.CreateKey(module.Process, module.Address); asmNode.TreeNode.EnsureChildrenLoaded(); Debug.Assert(asmNode.TreeNode.Children.Count >= 1); var moduleNode = asmNode.TreeNode.DataChildren.OfType<ModuleDocumentNode>().FirstOrDefault(a => moduleKey.Equals(a.Document.Key)); Debug.Assert(moduleNode == null); if (moduleNode == null) { MemoryModuleDefFile newFile = null; try { newFile = MemoryModuleDefFile.Create(simpleProcessReader, module, UseDebugSymbols); } catch { } Debug.Assert(newFile != null); if (newFile != null) { UpdateResolver(newFile.ModuleDef); mmdf.Children.Add(newFile); RemoveFromAssembly(newFile.ModuleDef); asmNode.Document.ModuleDef.Assembly.Modules.Add(newFile.ModuleDef); asmNode.TreeNode.Children.Add(documentTreeView.TreeView.Create(documentTreeView.CreateNode(asmNode, newFile))); } } } } }