/
Main.cs
182 lines (158 loc) · 6.49 KB
/
Main.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Mono.Cecil;
using System.Text.RegularExpressions;
namespace NetDasm
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
this.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application.ExecutablePath);
}
AssemblyDefinition assembly;
private void loadAssemblyToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
assembly = AssemblyFactory.GetAssembly(openFileDialog.FileName);
LoadAssembly();
}
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
AssemblyFactory.SaveAssembly(assembly, saveFileDialog.FileName);
}
}
private void filtroCambiado(object sender, EventArgs e)
{
LoadAssembly();
}
private void LoadAssembly()
{
Regex filter = textBox3.TextLength > 0 ? new Regex(textBox3.Text, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled) : null;
treeView1.Nodes.Clear();
foreach (TypeDefinition type in this.assembly.MainModule.Types)
{
if (type.Name != "<Module>")
{
if (filter == null || filter.Match(type.Name).Success)
{
TreeNode nodo = new TreeNode();
nodo.Text = type.Name;
nodo.Tag = type;
treeView1.Nodes.Add(nodo);
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null)
{
TypeDefinition type = (TypeDefinition)treeView1.SelectedNode.Tag;
assembly.MainModule.Types.Remove(type);
int index = treeView1.Nodes.IndexOf(treeView1.SelectedNode);
treeView1.Nodes.Remove(treeView1.SelectedNode);
if (treeView1.Nodes.Count > index)
treeView1.SelectedNode = treeView1.Nodes[index];
else if (treeView1.Nodes.Count > 0)
treeView1.SelectedNode = treeView1.Nodes[0];
}
}
private void TypeSelected(object sender, TreeViewEventArgs e)
{
TypeDefinition type = (TypeDefinition)treeView1.SelectedNode.Tag;
label2.Text = string.Format(@"Type info:
Name: {0}
Namespace: {1}
Base type: {2}
Fullname: {3}
Methods: {4}
Properties: {5}", type.Name, type.Namespace, type.BaseType != null ? type.BaseType.Name : string.Empty, type.FullName, type.Methods.Count
, type.Properties.Count);
treeView2.Nodes.Clear();
Regex filter = textBox4.TextLength > 0 ? new Regex(textBox4.Text, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled) : null;
foreach (MethodDefinition method in type.Methods)
{
if (filter == null || filter.Match(method.Name).Success)
{
TreeNode nodo = new TreeNode();
nodo.Text = method.Name;
nodo.Tag = method;
treeView2.Nodes.Add(nodo);
}
}
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
TypeSelected(null, null);
}
private void button3_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null && treeView2.SelectedNode != null)
{
TypeDefinition type = (TypeDefinition)treeView1.SelectedNode.Tag;
MethodDefinition metodo = (MethodDefinition)treeView2.SelectedNode.Tag;
type.Methods.Remove(metodo);
int index = treeView2.Nodes.IndexOf(treeView2.SelectedNode);
treeView2.Nodes.Remove(treeView2.SelectedNode);
if (treeView2.Nodes.Count > index)
treeView2.SelectedNode = treeView2.Nodes[index];
else if (treeView2.Nodes.Count > 0)
treeView2.SelectedNode = treeView2.Nodes[0];
}
}
private void MemberSelected(object sender, TreeViewEventArgs e)
{
MethodDefinition metodo = (MethodDefinition)treeView2.SelectedNode.Tag;
label4.Text = string.Format(@"Method info:
Name: {0}
Return type: {1}
Parametros: {2}
Instrucciones: {3}", metodo.Name, metodo.ReturnType.ReturnType.Name, metodo.Parameters.Count, metodo.Body != null ? metodo.Body.Instructions.Count : 0);
}
private void button1_Click(object sender, EventArgs e)
{
if (treeView2.SelectedNode != null)
{
MethodDefinition metodo = (MethodDefinition)treeView2.SelectedNode.Tag;
EditCode edit = new EditCode(metodo, assembly);
edit.Show();
}
}
private void Principal_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = MessageBox.Show("Are you sure that want to close the application?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No;
}
private void lunaToolStripMenuItem_Click(object sender, EventArgs e)
{
officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Luna;
}
private void vistaToolStripMenuItem_Click(object sender, EventArgs e)
{
officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Vista;
}
private void whiteToolStripMenuItem_Click(object sender, EventArgs e)
{
officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Transparent;
}
private void codeToILToolStripMenuItem_Click(object sender, EventArgs e)
{
CodeToIl window = new CodeToIl();
window.Show();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
new About().ShowDialog();
}
}
}