public override object LoadAssembly(string path) { if (PathUtils.IsNetModule(path)) { return(null); } return(AssemblyDefinition.ReadAssembly(path)); }
private void cmAssembly_Opening(object sender, CancelEventArgs e) { ContextMenuStrip cms = sender as ContextMenuStrip; //nothing selected if (dgvData.SelectedRows.Count < 1) { for (int i = 0; i < cms.Items.Count; i++) { cms.Items[i].Enabled = false; } return; } //common menus cms.Items["cmCopyInfo"].Enabled = true; cms.Items["cmOpenFolder"].Enabled = true; cms.Items["cmDeleteFile"].Enabled = true; //checking selected rows bool oneSelected = dgvData.SelectedRows.Count == 1; bool isAllExe = true; bool isAllAssembly = true; bool hasNetModule = false; for (int i = 0; i < dgvData.SelectedRows.Count; i++) { string fileName = PathUtils.GetFileName(dgvData.SelectedRows[i]); isAllExe = isAllExe && PathUtils.IsExe(fileName); isAllAssembly = isAllAssembly && PathUtils.IsAssembly(fileName); hasNetModule = hasNetModule || PathUtils.IsNetModule(fileName); } bool isAllIL = !isAllAssembly; //standard menus if (isAllAssembly) { cms.Items["cmDasm"].Enabled = true; if (hasNetModule) { cms.Items["cmDeobf"].Enabled = false; cms.Items["cmVerify"].Enabled = false; cms.Items["cmStrongName"].Enabled = false; } else { cms.Items["cmDeobf"].Enabled = true; cms.Items["cmVerify"].Enabled = true; cms.Items["cmStrongName"].Enabled = true; } cms.Items["cmClassEditor"].Enabled = true; //disable this just because Reflector cannot load *same* assembly files if (oneSelected && !hasNetModule) { cms.Items["cmRunMethod"].Enabled = true; } else { cms.Items["cmRunMethod"].Enabled = false; } } else { cms.Items["cmDasm"].Enabled = false; cms.Items["cmDeobf"].Enabled = false; cms.Items["cmVerify"].Enabled = false; cms.Items["cmStrongName"].Enabled = false; cms.Items["cmClassEditor"].Enabled = false; cms.Items["cmRunMethod"].Enabled = false; } if (isAllIL) { cms.Items["cmAsm"].Enabled = true; } else { cms.Items["cmAsm"].Enabled = false; } if (isAllExe && oneSelected) { cms.Items["cmProfiler"].Enabled = true; } else { cms.Items["cmProfiler"].Enabled = false; } foreach (ToolStripItem item in cms.Items) { ToolStripMenuItem mi = item as ToolStripMenuItem; if (mi == null || mi.Tag == null) { continue; } IMainPlugin plugin = mi.Tag as IMainPlugin; if (plugin == null) { continue; } MainPluginInfo pi = plugin.PluginInfo; if (pi.RowType == RowTypes.One && !oneSelected) { mi.Enabled = false; } else { if (pi.SourceType == SourceTypes.Any) { mi.Enabled = true; } else if (pi.SourceType == SourceTypes.Assembly && isAllAssembly) { mi.Enabled = true; } else if (pi.SourceType == SourceTypes.Executable && isAllExe) { mi.Enabled = true; } else if (pi.SourceType == SourceTypes.ILFile && isAllIL) { mi.Enabled = true; } else { mi.Enabled = false; } } } e.Cancel = false; }
private void AddFiles(string path, string match) { try { escPressed = false; DirectoryInfo di = new DirectoryInfo(path + Path.DirectorySeparatorChar); FileInfo[] files = di.GetFiles(match); bool isAssembly = PathUtils.IsAssembly(match); foreach (FileInfo file in files) { if (escPressed) { break; } if (file.Length == 0) { continue; } SetStatusText(String.Format("Press ESC to cancel: {0}", file.FullName)); try { if (isAssembly) { //try //{ // AssemblyName an = AssemblyName.GetAssemblyName(file.FullName); // DataRow dr = dtFiles.NewRow(); // dr["file_name"] = file.Name; // dr["assembly_name"] = an.Name; // dr["version"] = an.Version.ToString(); // dr["public_token"] = TokenUtils.GetPublicKeyTokenString(an); // dr["processor_architecture"] = an.ProcessorArchitecture == ProcessorArchitecture.None ? String.Empty : an.ProcessorArchitecture.ToString(); // dr["full_name"] = an.FullName; // dtFiles.Rows.Add(dr); //} //catch (BadImageFormatException) if (PathUtils.IsNetModule(file.FullName)) { ModuleDefinition md = ModuleDefinition.ReadModule(file.FullName); DataRow dr = dtFiles.NewRow(); dr["file_name"] = file.Name; dr["assembly_name"] = String.Empty; dr["version"] = String.Empty; dr["public_token"] = null; dr["target_runtime"] = md.Runtime.ToString().Replace("Net_", "").Replace("_", "."); dr["processor_architecture"] = GetProcessorArchitecture(md); dr["full_name"] = md.FullyQualifiedName; dtFiles.Rows.Add(dr); } else { AssemblyDefinition ad = AssemblyDefinition.ReadAssembly(file.FullName); AssemblyNameDefinition an = ad.Name; DataRow dr = dtFiles.NewRow(); dr["file_name"] = file.Name; dr["assembly_name"] = an.Name; dr["version"] = an.Version.ToString(); dr["public_token"] = TokenUtils.GetPublicKeyTokenString(an.PublicKeyToken); dr["target_runtime"] = ad.MainModule.Runtime.ToString().Replace("Net_", "").Replace("_", "."); dr["processor_architecture"] = GetProcessorArchitecture(ad.MainModule); dr["full_name"] = an.FullName; dtFiles.Rows.Add(dr); } } else { DataRow dr = dtFiles.NewRow(); dr["file_name"] = file.Name; dr["full_name"] = file.FullName; dtFiles.Rows.Add(dr); } } catch { //not .net assembly } } } catch (Exception ex) { throw ex; } finally { SetStatusText(null); } }