├── .gitattributes
├── .gitignore
├── About.Designer.cs
├── About.cs
├── About.resx
├── CodeToIl.Designer.cs
├── CodeToIl.cs
├── CodeToIl.resx
├── Controls
├── MethodInstructions.cs
└── OfficeBackPanel.cs
├── Dlls
├── Fireball.CodeEditor.SyntaxFiles.dll
├── Fireball.CodeEditor.dll
├── Fireball.Core.dll
├── Fireball.SyntaxDocument.dll
├── Fireball.Win32.dll
├── Fireball.Windows.Forms.dll
└── Mono.Cecil.dll
├── EditCode.Designer.cs
├── EditCode.cs
├── EditCode.resx
├── InsertInstruction.Designer.cs
├── InsertInstruction.cs
├── InsertInstruction.resx
├── MSIL.cs
├── Main.Designer.cs
├── Main.cs
├── Main.resx
├── NetDasm.csproj
├── Program.cs
├── Programacion.ico
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
└── Resources
└── BackgroundGlossy.png
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 | *.sln merge=union
7 | *.csproj merge=union
8 | *.vbproj merge=union
9 | *.fsproj merge=union
10 | *.dbproj merge=union
11 |
12 | # Standard to msysgit
13 | *.doc diff=astextplain
14 | *.DOC diff=astextplain
15 | *.docx diff=astextplain
16 | *.DOCX diff=astextplain
17 | *.dot diff=astextplain
18 | *.DOT diff=astextplain
19 | *.pdf diff=astextplain
20 | *.PDF diff=astextplain
21 | *.rtf diff=astextplain
22 | *.RTF diff=astextplain
23 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | #################
2 | ## Eclipse
3 | #################
4 |
5 | *.pydevproject
6 | .project
7 | .metadata
8 | bin/
9 | tmp/
10 | *.tmp
11 | *.bak
12 | *.swp
13 | *~.nib
14 | local.properties
15 | .classpath
16 | .settings/
17 | .loadpath
18 |
19 | # External tool builders
20 | .externalToolBuilders/
21 |
22 | # Locally stored "Eclipse launch configurations"
23 | *.launch
24 |
25 | # CDT-specific
26 | .cproject
27 |
28 | # PDT-specific
29 | .buildpath
30 |
31 |
32 | #################
33 | ## Visual Studio
34 | #################
35 |
36 | ## Ignore Visual Studio temporary files, build results, and
37 | ## files generated by popular Visual Studio add-ons.
38 |
39 | # User-specific files
40 | *.suo
41 | *.user
42 | *.sln.docstates
43 |
44 | # Build results
45 | [Dd]ebug/
46 | [Rr]elease/
47 | *_i.c
48 | *_p.c
49 | *.ilk
50 | *.meta
51 | *.obj
52 | *.pch
53 | *.pdb
54 | *.pgc
55 | *.pgd
56 | *.rsp
57 | *.sbr
58 | *.tlb
59 | *.tli
60 | *.tlh
61 | *.tmp
62 | *.vspscc
63 | .builds
64 | *.dotCover
65 |
66 | ## TODO: If you have NuGet Package Restore enabled, uncomment this
67 | #packages/
68 |
69 | # Visual C++ cache files
70 | ipch/
71 | *.aps
72 | *.ncb
73 | *.opensdf
74 | *.sdf
75 |
76 | # Visual Studio profiler
77 | *.psess
78 | *.vsp
79 |
80 | # ReSharper is a .NET coding add-in
81 | _ReSharper*
82 |
83 | # Installshield output folder
84 | [Ee]xpress
85 |
86 | # DocProject is a documentation generator add-in
87 | DocProject/buildhelp/
88 | DocProject/Help/*.HxT
89 | DocProject/Help/*.HxC
90 | DocProject/Help/*.hhc
91 | DocProject/Help/*.hhk
92 | DocProject/Help/*.hhp
93 | DocProject/Help/Html2
94 | DocProject/Help/html
95 |
96 | # Click-Once directory
97 | publish
98 |
99 | # Others
100 | [Bb]in
101 | [Oo]bj
102 | sql
103 | TestResults
104 | *.Cache
105 | ClientBin
106 | stylecop.*
107 | ~$*
108 | *.dbmdl
109 | Generated_Code #added for RIA/Silverlight projects
110 |
111 | # Backup & report files from converting an old project file to a newer
112 | # Visual Studio version. Backup files are not needed, because we have git ;-)
113 | _UpgradeReport_Files/
114 | Backup*/
115 | UpgradeLog*.XML
116 |
117 |
118 |
119 | ############
120 | ## Windows
121 | ############
122 |
123 | # Windows image file caches
124 | Thumbs.db
125 |
126 | # Folder config file
127 | Desktop.ini
128 |
129 |
130 | #############
131 | ## Python
132 | #############
133 |
134 | *.py[co]
135 |
136 | # Packages
137 | *.egg
138 | *.egg-info
139 | dist
140 | build
141 | eggs
142 | parts
143 | bin
144 | var
145 | sdist
146 | develop-eggs
147 | .installed.cfg
148 |
149 | # Installer logs
150 | pip-log.txt
151 |
152 | # Unit test / coverage reports
153 | .coverage
154 | .tox
155 |
156 | #Translations
157 | *.mo
158 |
159 | #Mr Developer
160 | .mr.developer.cfg
161 |
162 | # Mac crap
163 | .DS_Store
164 |
--------------------------------------------------------------------------------
/About.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NetDasm
2 | {
3 | partial class About
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
32 | this.label1 = new System.Windows.Forms.Label();
33 | this.linkLabel1 = new System.Windows.Forms.LinkLabel();
34 | this.label2 = new System.Windows.Forms.Label();
35 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
36 | this.SuspendLayout();
37 | //
38 | // pictureBox1
39 | //
40 | this.pictureBox1.Location = new System.Drawing.Point(13, 13);
41 | this.pictureBox1.Name = "pictureBox1";
42 | this.pictureBox1.Size = new System.Drawing.Size(128, 128);
43 | this.pictureBox1.TabIndex = 0;
44 | this.pictureBox1.TabStop = false;
45 | //
46 | // label1
47 | //
48 | this.label1.AutoSize = true;
49 | this.label1.Font = new System.Drawing.Font("Tahoma", 16.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
50 | this.label1.Location = new System.Drawing.Point(147, 13);
51 | this.label1.Name = "label1";
52 | this.label1.Size = new System.Drawing.Size(145, 34);
53 | this.label1.TabIndex = 1;
54 | this.label1.Text = "NetDasm";
55 | //
56 | // linkLabel1
57 | //
58 | this.linkLabel1.AutoSize = true;
59 | this.linkLabel1.Location = new System.Drawing.Point(150, 121);
60 | this.linkLabel1.Name = "linkLabel1";
61 | this.linkLabel1.Size = new System.Drawing.Size(68, 17);
62 | this.linkLabel1.TabIndex = 2;
63 | this.linkLabel1.TabStop = true;
64 | this.linkLabel1.Text = "by ideatic";
65 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
66 | //
67 | // label2
68 | //
69 | this.label2.Location = new System.Drawing.Point(150, 56);
70 | this.label2.Name = "label2";
71 | this.label2.Size = new System.Drawing.Size(256, 65);
72 | this.label2.TabIndex = 3;
73 | this.label2.Text = "A tool to disassemble and patch .NET assemblies";
74 | //
75 | // About
76 | //
77 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
78 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
79 | this.ClientSize = new System.Drawing.Size(418, 150);
80 | this.Controls.Add(this.label2);
81 | this.Controls.Add(this.linkLabel1);
82 | this.Controls.Add(this.label1);
83 | this.Controls.Add(this.pictureBox1);
84 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
85 | this.MaximizeBox = false;
86 | this.MinimizeBox = false;
87 | this.Name = "About";
88 | this.Text = "About";
89 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
90 | this.ResumeLayout(false);
91 | this.PerformLayout();
92 |
93 | }
94 |
95 | #endregion
96 |
97 | private System.Windows.Forms.PictureBox pictureBox1;
98 | private System.Windows.Forms.Label label1;
99 | private System.Windows.Forms.LinkLabel linkLabel1;
100 | private System.Windows.Forms.Label label2;
101 | }
102 | }
--------------------------------------------------------------------------------
/About.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Text;
7 | using System.Windows.Forms;
8 |
9 | namespace NetDasm
10 | {
11 | public partial class About : Form
12 | {
13 | public About()
14 | {
15 | InitializeComponent();
16 | pictureBox1.Image = Icon.ExtractAssociatedIcon(Application.ExecutablePath).ToBitmap();
17 | }
18 |
19 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
20 | {
21 | System.Diagnostics.Process.Start("http://www.ideatic.net/");
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/About.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/CodeToIl.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NetDasm
2 | {
3 | partial class CodeToIl
4 | {
5 | ///
6 | /// Variable del diseñador requerida.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Limpiar los recursos que se estén utilizando.
12 | ///
13 | /// true si los recursos administrados se deben eliminar; false en caso contrario, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Código generado por el Diseñador de Windows Forms
24 |
25 | ///
26 | /// Método necesario para admitir el Diseñador. No se puede modificar
27 | /// el contenido del método con el editor de código.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | Fireball.Windows.Forms.LineMarginRender lineMarginRender1 = new Fireball.Windows.Forms.LineMarginRender();
33 | this.label1 = new System.Windows.Forms.Label();
34 | this.textBox1 = new Fireball.Windows.Forms.CodeEditorControl();
35 | this.button1 = new System.Windows.Forms.Button();
36 | this.label2 = new System.Windows.Forms.Label();
37 | this.splitContainer1 = new System.Windows.Forms.SplitContainer();
38 | this.button2 = new System.Windows.Forms.Button();
39 | this.label4 = new System.Windows.Forms.Label();
40 | this.splitContainer2 = new System.Windows.Forms.SplitContainer();
41 | this.listBox1 = new System.Windows.Forms.ListBox();
42 | this.label3 = new System.Windows.Forms.Label();
43 | this.methodInstructions1 = new NetDasm.Controls.MethodInstructions();
44 | this.splitContainer1.Panel1.SuspendLayout();
45 | this.splitContainer1.Panel2.SuspendLayout();
46 | this.splitContainer1.SuspendLayout();
47 | this.splitContainer2.Panel1.SuspendLayout();
48 | this.splitContainer2.Panel2.SuspendLayout();
49 | this.splitContainer2.SuspendLayout();
50 | this.SuspendLayout();
51 | //
52 | // label1
53 | //
54 | this.label1.AutoSize = true;
55 | this.label1.Location = new System.Drawing.Point(9, 10);
56 | this.label1.Name = "label1";
57 | this.label1.Size = new System.Drawing.Size(71, 13);
58 | this.label1.TabIndex = 0;
59 | this.label1.Text = "Source code:";
60 | //
61 | // textBox1
62 | //
63 | this.textBox1.ActiveView = Fireball.Windows.Forms.CodeEditor.ActiveView.BottomRight;
64 | this.textBox1.AllowBreakPoints = false;
65 | this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
66 | | System.Windows.Forms.AnchorStyles.Left)
67 | | System.Windows.Forms.AnchorStyles.Right)));
68 | this.textBox1.AutoListPosition = null;
69 | this.textBox1.AutoListSelectedText = "a123";
70 | this.textBox1.AutoListVisible = false;
71 | this.textBox1.CopyAsRTF = false;
72 | this.textBox1.InfoTipCount = 1;
73 | this.textBox1.InfoTipPosition = null;
74 | this.textBox1.InfoTipSelectedIndex = 1;
75 | this.textBox1.InfoTipVisible = false;
76 | lineMarginRender1.Bounds = new System.Drawing.Rectangle(0, 0, 19, 16);
77 | this.textBox1.LineMarginRender = lineMarginRender1;
78 | this.textBox1.Location = new System.Drawing.Point(8, 27);
79 | this.textBox1.LockCursorUpdate = false;
80 | this.textBox1.Name = "textBox1";
81 | this.textBox1.Saved = false;
82 | this.textBox1.ShowGutterMargin = false;
83 | this.textBox1.ShowScopeIndicator = false;
84 | this.textBox1.Size = new System.Drawing.Size(373, 251);
85 | this.textBox1.SmoothScroll = false;
86 | this.textBox1.SplitviewH = -4;
87 | this.textBox1.SplitviewV = -4;
88 | this.textBox1.TabGuideColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(233)))), ((int)(((byte)(233)))));
89 | this.textBox1.TabIndex = 1;
90 | this.textBox1.WhitespaceColor = System.Drawing.SystemColors.ControlDark;
91 | //
92 | // button1
93 | //
94 | this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
95 | this.button1.FlatStyle = System.Windows.Forms.FlatStyle.System;
96 | this.button1.Location = new System.Drawing.Point(8, 284);
97 | this.button1.Name = "button1";
98 | this.button1.Size = new System.Drawing.Size(97, 23);
99 | this.button1.TabIndex = 2;
100 | this.button1.Text = "Generate IL";
101 | this.button1.UseVisualStyleBackColor = true;
102 | this.button1.Click += new System.EventHandler(this.button1_Click);
103 | //
104 | // label2
105 | //
106 | this.label2.AutoSize = true;
107 | this.label2.Location = new System.Drawing.Point(3, 9);
108 | this.label2.Name = "label2";
109 | this.label2.Size = new System.Drawing.Size(46, 13);
110 | this.label2.TabIndex = 3;
111 | this.label2.Text = "IL code:";
112 | //
113 | // splitContainer1
114 | //
115 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
116 | this.splitContainer1.Location = new System.Drawing.Point(0, 0);
117 | this.splitContainer1.Name = "splitContainer1";
118 | //
119 | // splitContainer1.Panel1
120 | //
121 | this.splitContainer1.Panel1.Controls.Add(this.button2);
122 | this.splitContainer1.Panel1.Controls.Add(this.label1);
123 | this.splitContainer1.Panel1.Controls.Add(this.textBox1);
124 | this.splitContainer1.Panel1.Controls.Add(this.button1);
125 | //
126 | // splitContainer1.Panel2
127 | //
128 | this.splitContainer1.Panel2.Controls.Add(this.label4);
129 | this.splitContainer1.Panel2.Controls.Add(this.methodInstructions1);
130 | this.splitContainer1.Panel2.Controls.Add(this.label2);
131 | this.splitContainer1.Size = new System.Drawing.Size(692, 319);
132 | this.splitContainer1.SplitterDistance = 388;
133 | this.splitContainer1.TabIndex = 5;
134 | //
135 | // button2
136 | //
137 | this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
138 | this.button2.FlatStyle = System.Windows.Forms.FlatStyle.System;
139 | this.button2.Location = new System.Drawing.Point(285, 284);
140 | this.button2.Name = "button2";
141 | this.button2.Size = new System.Drawing.Size(96, 23);
142 | this.button2.TabIndex = 3;
143 | this.button2.Text = "Restore code";
144 | this.button2.UseVisualStyleBackColor = true;
145 | this.button2.Click += new System.EventHandler(this.button2_Click);
146 | //
147 | // label4
148 | //
149 | this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
150 | | System.Windows.Forms.AnchorStyles.Right)));
151 | this.label4.Location = new System.Drawing.Point(6, 193);
152 | this.label4.Name = "label4";
153 | this.label4.Size = new System.Drawing.Size(282, 123);
154 | this.label4.TabIndex = 6;
155 | //
156 | // splitContainer2
157 | //
158 | this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
159 | this.splitContainer2.Location = new System.Drawing.Point(0, 0);
160 | this.splitContainer2.Name = "splitContainer2";
161 | this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
162 | //
163 | // splitContainer2.Panel1
164 | //
165 | this.splitContainer2.Panel1.Controls.Add(this.splitContainer1);
166 | //
167 | // splitContainer2.Panel2
168 | //
169 | this.splitContainer2.Panel2.Controls.Add(this.listBox1);
170 | this.splitContainer2.Panel2.Controls.Add(this.label3);
171 | this.splitContainer2.Size = new System.Drawing.Size(692, 441);
172 | this.splitContainer2.SplitterDistance = 319;
173 | this.splitContainer2.TabIndex = 6;
174 | //
175 | // listBox1
176 | //
177 | this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
178 | | System.Windows.Forms.AnchorStyles.Left)
179 | | System.Windows.Forms.AnchorStyles.Right)));
180 | this.listBox1.FormattingEnabled = true;
181 | this.listBox1.Location = new System.Drawing.Point(13, 21);
182 | this.listBox1.Name = "listBox1";
183 | this.listBox1.Size = new System.Drawing.Size(667, 82);
184 | this.listBox1.TabIndex = 1;
185 | //
186 | // label3
187 | //
188 | this.label3.AutoSize = true;
189 | this.label3.Location = new System.Drawing.Point(12, 4);
190 | this.label3.Name = "label3";
191 | this.label3.Size = new System.Drawing.Size(97, 13);
192 | this.label3.TabIndex = 0;
193 | this.label3.Text = "Compilation results:";
194 | //
195 | // methodInstructions1
196 | //
197 | this.methodInstructions1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
198 | | System.Windows.Forms.AnchorStyles.Left)
199 | | System.Windows.Forms.AnchorStyles.Right)));
200 | this.methodInstructions1.FormattingEnabled = true;
201 | this.methodInstructions1.Location = new System.Drawing.Point(6, 27);
202 | this.methodInstructions1.Name = "methodInstructions1";
203 | this.methodInstructions1.Size = new System.Drawing.Size(282, 147);
204 | this.methodInstructions1.TabIndex = 5;
205 | //
206 | // CodeToIl
207 | //
208 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
209 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
210 | this.ClientSize = new System.Drawing.Size(692, 441);
211 | this.Controls.Add(this.splitContainer2);
212 | this.Name = "CodeToIl";
213 | this.Text = "IL generator";
214 | this.splitContainer1.Panel1.ResumeLayout(false);
215 | this.splitContainer1.Panel1.PerformLayout();
216 | this.splitContainer1.Panel2.ResumeLayout(false);
217 | this.splitContainer1.Panel2.PerformLayout();
218 | this.splitContainer1.ResumeLayout(false);
219 | this.splitContainer2.Panel1.ResumeLayout(false);
220 | this.splitContainer2.Panel2.ResumeLayout(false);
221 | this.splitContainer2.Panel2.PerformLayout();
222 | this.splitContainer2.ResumeLayout(false);
223 | this.ResumeLayout(false);
224 |
225 | }
226 |
227 | #endregion
228 |
229 | private System.Windows.Forms.Label label1;
230 | private Fireball.Windows.Forms.CodeEditorControl textBox1;
231 | private System.Windows.Forms.Button button1;
232 | private System.Windows.Forms.Label label2;
233 | private System.Windows.Forms.SplitContainer splitContainer1;
234 | private System.Windows.Forms.SplitContainer splitContainer2;
235 | private System.Windows.Forms.ListBox listBox1;
236 | private System.Windows.Forms.Label label3;
237 | private NetDasm.Controls.MethodInstructions methodInstructions1;
238 | private System.Windows.Forms.Label label4;
239 | private System.Windows.Forms.Button button2;
240 | }
241 | }
--------------------------------------------------------------------------------
/CodeToIl.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/CodeToIl.cs
--------------------------------------------------------------------------------
/CodeToIl.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/Controls/MethodInstructions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.Windows.Forms;
5 | using Mono.Cecil;
6 | using Mono.Cecil.Cil;
7 | using System.Text.RegularExpressions;
8 | using System.Reflection;
9 |
10 | namespace NetDasm.Controls
11 | {
12 | class MethodInstructions : ListBox
13 | {
14 | public AssemblyDefinition assembly;
15 | public MethodDefinition method;
16 | public Label labelInfo;
17 | public string filter;
18 |
19 | public MethodInstructions()
20 | {
21 | this.SelectedIndexChanged += new EventHandler(MethodInstructions_SelectedIndexChanged);
22 | }
23 |
24 | public void Load()
25 | {
26 | this.Items.Clear();
27 | if (method.Body != null)
28 | {
29 | Regex regex = filter != null ? new Regex(filter, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled) : null;
30 |
31 | int contador = 0;
32 | foreach (Instruction inst in method.Body.Instructions)
33 | {
34 | string text = InstructionText(inst);
35 | if (filter == null || regex.Match(text).Success)
36 | {
37 | ListItem nodo = new ListItem();
38 | nodo.Text = contador + ": " + text;
39 | nodo.Tag = inst;
40 | nodo.Index = contador;
41 | this.Items.Add(nodo);
42 | }
43 | contador++;
44 | }
45 | }
46 | else MessageBox.Show("The method body is empty!");
47 | }
48 |
49 | public void RemoveSelected()
50 | {
51 | object[] lista = new object[this.SelectedItems.Count];
52 | this.SelectedItems.CopyTo(lista, 0);
53 |
54 | int contador = 0;
55 | foreach (object item in lista)
56 | {
57 | method.Body.Instructions.RemoveAt(((ListItem)item).Index);
58 | this.Items.Remove(item);
59 | contador++;
60 | }
61 | assembly.MainModule.Import(method.DeclaringType);
62 | Load();
63 | }
64 |
65 | public Instruction SelectedInstruction
66 | {
67 | get {
68 | return ((NetDasm.Controls.MethodInstructions.ListItem)this.SelectedItem).Tag;
69 | }
70 | }
71 |
72 | public class ListItem
73 | {
74 | public T Tag;
75 | public string Text;
76 | public int Index;
77 |
78 | public override string ToString()
79 | {
80 | return Text;
81 | }
82 | }
83 |
84 | public static string InstructionText(Instruction inst)
85 | {
86 | if (inst.Operand is Mono.Cecil.Cil.Instruction)
87 | {
88 | Mono.Cecil.Cil.Instruction instruccion = (Instruction)inst.Operand;
89 | return string.Format("{0} {1}", inst.OpCode.ToString(), instruccion.Offset.ToString());
90 | }
91 | else if (inst.Operand is string)
92 | {
93 | return string.Format("{0} \"{1}\"", inst.OpCode.ToString(), inst.Operand.ToString());
94 | }
95 | else if (inst.Operand is MethodReference)
96 | {
97 | MethodReference metodo = (MethodReference)inst.Operand;
98 | return inst.OpCode.ToString() + " " + metodo.ToString();
99 | }
100 | else if (inst.Operand != null)
101 | {
102 | return inst.OpCode.ToString() + " " + inst.Operand.ToString();
103 | }
104 | else
105 | {
106 | return inst.OpCode.ToString();
107 | }
108 | }
109 |
110 | public void InsertInstruction(InsertInstruction insert)
111 | {
112 | CilWorker worker = this.method.Body.CilWorker;
113 |
114 | OpCode opcode = OpCodes.Add;
115 | foreach (MemberInfo miembro in typeof(OpCodes).GetMembers())
116 | {
117 | if (miembro.MemberType.ToString() == "Field" &&
118 | insert.comboBox1.SelectedItem.ToString() == miembro.Name)
119 | {
120 | FieldInfo info = (FieldInfo)miembro;
121 | opcode = (OpCode)info.GetValue(null);
122 | }
123 | }
124 |
125 | Instruction sentence;
126 |
127 | if (insert.textBox1.TextLength == 0)
128 | {
129 | sentence = worker.Create(opcode);
130 | }
131 | else
132 | {
133 | int valor;
134 | if (int.TryParse(insert.textBox1.Text, out valor))
135 | {
136 | if (opcode.OperandType == OperandType.ShortInlineI)
137 | {
138 | sbyte x = (sbyte) valor;
139 | sentence = worker.Create(opcode, x);
140 | }
141 | else
142 | {
143 | sentence = worker.Create(opcode, valor);
144 | }
145 | }
146 | else
147 | {
148 | sentence = worker.Create(opcode, insert.textBox1.Text);
149 | }
150 | }
151 |
152 | method.Body.CilWorker.InsertBefore(method.Body.Instructions[(int)insert.numericUpDown1.Value], sentence);
153 |
154 | assembly.MainModule.Import(method.DeclaringType);
155 | this.Load();
156 | }
157 |
158 | void MethodInstructions_SelectedIndexChanged(object sender, EventArgs e)
159 | {
160 | if (labelInfo != null)
161 | {
162 | if (this.SelectedItem != null)
163 | {
164 | Instruction inst = SelectedInstruction;
165 | MsilInstruction ins = MsilInstruction.GetInstruction(inst.OpCode.ToString());
166 |
167 | labelInfo.Text = string.Format(@"Instruction info:
168 | Code: {0}", MethodInstructions.InstructionText(inst));
169 |
170 | if (ins != null)
171 | {
172 | labelInfo.Text += string.Format(@"
173 | ByteCode: {0}
174 | Format: {1}
175 | Description: {2}
176 | ", ins.ByteCode, ins.Format, ins.Description);
177 | }
178 | }
179 | else
180 | labelInfo.Text = "Instruction info:";
181 | }
182 | }
183 |
184 | }
185 | }
186 |
--------------------------------------------------------------------------------
/Controls/OfficeBackPanel.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Controls/OfficeBackPanel.cs
--------------------------------------------------------------------------------
/Dlls/Fireball.CodeEditor.SyntaxFiles.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Fireball.CodeEditor.SyntaxFiles.dll
--------------------------------------------------------------------------------
/Dlls/Fireball.CodeEditor.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Fireball.CodeEditor.dll
--------------------------------------------------------------------------------
/Dlls/Fireball.Core.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Fireball.Core.dll
--------------------------------------------------------------------------------
/Dlls/Fireball.SyntaxDocument.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Fireball.SyntaxDocument.dll
--------------------------------------------------------------------------------
/Dlls/Fireball.Win32.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Fireball.Win32.dll
--------------------------------------------------------------------------------
/Dlls/Fireball.Windows.Forms.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Fireball.Windows.Forms.dll
--------------------------------------------------------------------------------
/Dlls/Mono.Cecil.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Dlls/Mono.Cecil.dll
--------------------------------------------------------------------------------
/EditCode.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NetDasm
2 | {
3 | partial class EditCode
4 | {
5 | ///
6 | /// Variable del diseñador requerida.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Limpiar los recursos que se estén utilizando.
12 | ///
13 | /// true si los recursos administrados se deben eliminar; false en caso contrario, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Código generado por el Diseñador de Windows Forms
24 |
25 | ///
26 | /// Método necesario para admitir el Diseñador. No se puede modificar
27 | /// el contenido del método con el editor de código.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.splitContainer1 = new System.Windows.Forms.SplitContainer();
32 | this.textBox3 = new System.Windows.Forms.TextBox();
33 | this.label2 = new System.Windows.Forms.Label();
34 | this.methodInstructions1 = new NetDasm.Controls.MethodInstructions();
35 | this.button3 = new System.Windows.Forms.Button();
36 | this.button2 = new System.Windows.Forms.Button();
37 | this.button1 = new System.Windows.Forms.Button();
38 | this.label1 = new System.Windows.Forms.Label();
39 | this.splitContainer1.Panel1.SuspendLayout();
40 | this.splitContainer1.Panel2.SuspendLayout();
41 | this.splitContainer1.SuspendLayout();
42 | this.SuspendLayout();
43 | //
44 | // splitContainer1
45 | //
46 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
47 | this.splitContainer1.Location = new System.Drawing.Point(0, 0);
48 | this.splitContainer1.Name = "splitContainer1";
49 | this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
50 | //
51 | // splitContainer1.Panel1
52 | //
53 | this.splitContainer1.Panel1.Controls.Add(this.textBox3);
54 | this.splitContainer1.Panel1.Controls.Add(this.label2);
55 | this.splitContainer1.Panel1.Controls.Add(this.methodInstructions1);
56 | //
57 | // splitContainer1.Panel2
58 | //
59 | this.splitContainer1.Panel2.Controls.Add(this.button3);
60 | this.splitContainer1.Panel2.Controls.Add(this.button2);
61 | this.splitContainer1.Panel2.Controls.Add(this.button1);
62 | this.splitContainer1.Panel2.Controls.Add(this.label1);
63 | this.splitContainer1.Size = new System.Drawing.Size(664, 403);
64 | this.splitContainer1.SplitterDistance = 265;
65 | this.splitContainer1.TabIndex = 1;
66 | //
67 | // textBox3
68 | //
69 | this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
70 | | System.Windows.Forms.AnchorStyles.Right)));
71 | this.textBox3.Location = new System.Drawing.Point(98, 8);
72 | this.textBox3.Name = "textBox3";
73 | this.textBox3.Size = new System.Drawing.Size(116, 20);
74 | this.textBox3.TabIndex = 5;
75 | this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged);
76 | //
77 | // label2
78 | //
79 | this.label2.AutoSize = true;
80 | this.label2.Location = new System.Drawing.Point(11, 11);
81 | this.label2.Name = "label2";
82 | this.label2.Size = new System.Drawing.Size(81, 13);
83 | this.label2.TabIndex = 4;
84 | this.label2.Text = "Instruction filter:";
85 | //
86 | // methodInstructions1
87 | //
88 | this.methodInstructions1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
89 | | System.Windows.Forms.AnchorStyles.Left)
90 | | System.Windows.Forms.AnchorStyles.Right)));
91 | this.methodInstructions1.FormattingEnabled = true;
92 | this.methodInstructions1.Location = new System.Drawing.Point(13, 34);
93 | this.methodInstructions1.Name = "methodInstructions1";
94 | this.methodInstructions1.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
95 | this.methodInstructions1.Size = new System.Drawing.Size(639, 225);
96 | this.methodInstructions1.TabIndex = 2;
97 | //
98 | // button3
99 | //
100 | this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
101 | this.button3.Location = new System.Drawing.Point(8, 99);
102 | this.button3.Name = "button3";
103 | this.button3.Size = new System.Drawing.Size(114, 23);
104 | this.button3.TabIndex = 3;
105 | this.button3.Text = "Edit instruction";
106 | this.button3.UseVisualStyleBackColor = true;
107 | this.button3.Click += new System.EventHandler(this.button3_Click);
108 | //
109 | // button2
110 | //
111 | this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
112 | this.button2.Location = new System.Drawing.Point(248, 99);
113 | this.button2.Name = "button2";
114 | this.button2.Size = new System.Drawing.Size(114, 23);
115 | this.button2.TabIndex = 2;
116 | this.button2.Text = "Insert instruction";
117 | this.button2.UseVisualStyleBackColor = true;
118 | this.button2.Click += new System.EventHandler(this.button2_Click);
119 | //
120 | // button1
121 | //
122 | this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
123 | this.button1.Location = new System.Drawing.Point(128, 99);
124 | this.button1.Name = "button1";
125 | this.button1.Size = new System.Drawing.Size(114, 23);
126 | this.button1.TabIndex = 1;
127 | this.button1.Text = "Remove instruction";
128 | this.button1.UseVisualStyleBackColor = true;
129 | this.button1.Click += new System.EventHandler(this.button1_Click);
130 | //
131 | // label1
132 | //
133 | this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
134 | | System.Windows.Forms.AnchorStyles.Left)
135 | | System.Windows.Forms.AnchorStyles.Right)));
136 | this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
137 | this.label1.Location = new System.Drawing.Point(8, 6);
138 | this.label1.Name = "label1";
139 | this.label1.Size = new System.Drawing.Size(649, 90);
140 | this.label1.TabIndex = 0;
141 | this.label1.Text = "Instruction info:";
142 | //
143 | // EditCode
144 | //
145 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
146 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
147 | this.ClientSize = new System.Drawing.Size(664, 403);
148 | this.Controls.Add(this.splitContainer1);
149 | this.Name = "EditCode";
150 | this.Text = "Code editor";
151 | this.splitContainer1.Panel1.ResumeLayout(false);
152 | this.splitContainer1.Panel1.PerformLayout();
153 | this.splitContainer1.Panel2.ResumeLayout(false);
154 | this.splitContainer1.ResumeLayout(false);
155 | this.ResumeLayout(false);
156 |
157 | }
158 |
159 | #endregion
160 |
161 | private System.Windows.Forms.SplitContainer splitContainer1;
162 | private System.Windows.Forms.Label label1;
163 | private System.Windows.Forms.Button button1;
164 | private System.Windows.Forms.Button button2;
165 | private NetDasm.Controls.MethodInstructions methodInstructions1;
166 | private System.Windows.Forms.TextBox textBox3;
167 | private System.Windows.Forms.Label label2;
168 | private System.Windows.Forms.Button button3;
169 |
170 | }
171 | }
--------------------------------------------------------------------------------
/EditCode.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Text;
7 | using System.Windows.Forms;
8 | using Mono.Cecil;
9 | using Mono.Cecil.Cil;
10 | using System.Reflection;
11 | using NetDasm.Controls;
12 |
13 | namespace NetDasm
14 | {
15 | public partial class EditCode : Form
16 | {
17 | private AssemblyDefinition assembly;
18 | private MethodDefinition method;
19 |
20 | public EditCode(MethodDefinition metodo, AssemblyDefinition assembly)
21 | {
22 | InitializeComponent();
23 | this.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application.ExecutablePath);
24 |
25 | this.assembly = assembly;
26 | this.method = metodo;
27 |
28 | methodInstructions1.assembly = assembly;
29 | methodInstructions1.method = metodo;
30 | methodInstructions1.labelInfo = label1;
31 | methodInstructions1.Load();
32 | }
33 |
34 |
35 |
36 | private void button1_Click(object sender, EventArgs e)
37 | {
38 | methodInstructions1.RemoveSelected();
39 | }
40 |
41 | private void button2_Click(object sender, EventArgs e)
42 | {
43 | InsertInstruction insert = new InsertInstruction(method.Body.Instructions.Count - 1);
44 | insert.ShowDialog();
45 |
46 | if (insert.DialogResult == DialogResult.OK)
47 | {
48 | methodInstructions1.InsertInstruction(insert);
49 | }
50 | }
51 |
52 | private void textBox3_TextChanged(object sender, EventArgs e)
53 | {
54 | methodInstructions1.filter = textBox3.Text;
55 | methodInstructions1.Load();
56 | }
57 |
58 | private void button3_Click(object sender, EventArgs e)
59 | {
60 | if (methodInstructions1.SelectedItem != null)
61 | {
62 | InsertInstruction insert = new InsertInstruction(method.Body.Instructions.Count - 1);
63 | insert.numericUpDown1.Value = methodInstructions1.SelectedIndex;
64 | insert.comboBox1.SelectedItem = methodInstructions1.SelectedInstruction.OpCode.Code.ToString();
65 | if (methodInstructions1.SelectedInstruction.Operand != null)
66 | insert.textBox1.Text = methodInstructions1.SelectedInstruction.Operand.ToString();
67 | insert.button1.Text = "Modify";
68 | insert.ShowDialog();
69 |
70 | if (insert.DialogResult == DialogResult.OK)
71 | {
72 | methodInstructions1.RemoveSelected();
73 | methodInstructions1.InsertInstruction(insert);
74 | }
75 | }
76 | }
77 | }
78 | }
--------------------------------------------------------------------------------
/EditCode.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/InsertInstruction.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NetDasm
2 | {
3 | partial class InsertInstruction
4 | {
5 | ///
6 | /// Variable del diseñador requerida.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Limpiar los recursos que se estén utilizando.
12 | ///
13 | /// true si los recursos administrados se deben eliminar; false en caso contrario, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Código generado por el Diseñador de Windows Forms
24 |
25 | ///
26 | /// Método necesario para admitir el Diseñador. No se puede modificar
27 | /// el contenido del método con el editor de código.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.button1 = new System.Windows.Forms.Button();
32 | this.label1 = new System.Windows.Forms.Label();
33 | this.comboBox1 = new System.Windows.Forms.ComboBox();
34 | this.label2 = new System.Windows.Forms.Label();
35 | this.textBox1 = new System.Windows.Forms.TextBox();
36 | this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
37 | this.label3 = new System.Windows.Forms.Label();
38 | this.label4 = new System.Windows.Forms.Label();
39 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
40 | this.SuspendLayout();
41 | //
42 | // button1
43 | //
44 | this.button1.Location = new System.Drawing.Point(123, 93);
45 | this.button1.Name = "button1";
46 | this.button1.Size = new System.Drawing.Size(75, 23);
47 | this.button1.TabIndex = 0;
48 | this.button1.Text = "Insert";
49 | this.button1.UseVisualStyleBackColor = true;
50 | this.button1.Click += new System.EventHandler(this.button1_Click);
51 | //
52 | // label1
53 | //
54 | this.label1.AutoSize = true;
55 | this.label1.Location = new System.Drawing.Point(15, 14);
56 | this.label1.Name = "label1";
57 | this.label1.Size = new System.Drawing.Size(45, 13);
58 | this.label1.TabIndex = 1;
59 | this.label1.Text = "Opcode";
60 | //
61 | // comboBox1
62 | //
63 | this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
64 | this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
65 | this.comboBox1.FormattingEnabled = true;
66 | this.comboBox1.Location = new System.Drawing.Point(67, 10);
67 | this.comboBox1.Name = "comboBox1";
68 | this.comboBox1.Size = new System.Drawing.Size(131, 21);
69 | this.comboBox1.TabIndex = 2;
70 | this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
71 | //
72 | // label2
73 | //
74 | this.label2.AutoSize = true;
75 | this.label2.Location = new System.Drawing.Point(11, 45);
76 | this.label2.Name = "label2";
77 | this.label2.Size = new System.Drawing.Size(48, 13);
78 | this.label2.TabIndex = 3;
79 | this.label2.Text = "Operand";
80 | //
81 | // textBox1
82 | //
83 | this.textBox1.Location = new System.Drawing.Point(67, 41);
84 | this.textBox1.Name = "textBox1";
85 | this.textBox1.Size = new System.Drawing.Size(131, 20);
86 | this.textBox1.TabIndex = 4;
87 | //
88 | // numericUpDown1
89 | //
90 | this.numericUpDown1.Location = new System.Drawing.Point(67, 67);
91 | this.numericUpDown1.Name = "numericUpDown1";
92 | this.numericUpDown1.Size = new System.Drawing.Size(131, 20);
93 | this.numericUpDown1.TabIndex = 5;
94 | //
95 | // label3
96 | //
97 | this.label3.AutoSize = true;
98 | this.label3.Location = new System.Drawing.Point(23, 71);
99 | this.label3.Name = "label3";
100 | this.label3.Size = new System.Drawing.Size(33, 13);
101 | this.label3.TabIndex = 6;
102 | this.label3.Text = "Index";
103 | //
104 | // label4
105 | //
106 | this.label4.Location = new System.Drawing.Point(205, 13);
107 | this.label4.Name = "label4";
108 | this.label4.Size = new System.Drawing.Size(161, 103);
109 | this.label4.TabIndex = 7;
110 | this.label4.Text = "Instruction info:";
111 | //
112 | // InsertInstruction
113 | //
114 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
115 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
116 | this.ClientSize = new System.Drawing.Size(378, 126);
117 | this.Controls.Add(this.label4);
118 | this.Controls.Add(this.label3);
119 | this.Controls.Add(this.numericUpDown1);
120 | this.Controls.Add(this.textBox1);
121 | this.Controls.Add(this.label2);
122 | this.Controls.Add(this.comboBox1);
123 | this.Controls.Add(this.label1);
124 | this.Controls.Add(this.button1);
125 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
126 | this.Name = "InsertInstruction";
127 | this.Text = "Insert instruction";
128 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
129 | this.ResumeLayout(false);
130 | this.PerformLayout();
131 |
132 | }
133 |
134 | #endregion
135 |
136 | private System.Windows.Forms.Label label1;
137 | private System.Windows.Forms.Label label2;
138 | public System.Windows.Forms.ComboBox comboBox1;
139 | public System.Windows.Forms.TextBox textBox1;
140 | private System.Windows.Forms.Label label3;
141 | public System.Windows.Forms.NumericUpDown numericUpDown1;
142 | private System.Windows.Forms.Label label4;
143 | public System.Windows.Forms.Button button1;
144 | }
145 | }
--------------------------------------------------------------------------------
/InsertInstruction.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Text;
7 | using System.Windows.Forms;
8 | using Mono.Cecil.Cil;
9 | using System.Reflection;
10 |
11 | namespace NetDasm
12 | {
13 | public partial class InsertInstruction : Form
14 | {
15 | public InsertInstruction(int maxIndex)
16 | {
17 | InitializeComponent();
18 |
19 | foreach (MemberInfo miembro in typeof(OpCodes).GetMembers())
20 | {
21 | if(miembro.MemberType.ToString()=="Field")
22 | comboBox1.Items.Add(miembro.Name);
23 | }
24 | comboBox1.SelectedIndex = 0;
25 |
26 | numericUpDown1.Maximum = maxIndex;
27 | }
28 |
29 | private void button1_Click(object sender, EventArgs e)
30 | {
31 | this.DialogResult = DialogResult.OK;
32 | this.Close();
33 | }
34 |
35 | private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
36 | {
37 | MsilInstruction ins=MsilInstruction.GetInstruction(comboBox1.Text);
38 |
39 | if(ins!=null)
40 | {
41 | label4.Text = string.Format(@"Instruction info:
42 | ByteCode: {0}
43 | Format: {1}
44 | Description: {2}
45 | ", ins.ByteCode,ins.Format,ins.Description);
46 | }
47 | else
48 | label4.Text = "Instruction info:";
49 | }
50 | }
51 | }
--------------------------------------------------------------------------------
/InsertInstruction.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MSIL.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/MSIL.cs
--------------------------------------------------------------------------------
/Main.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NetDasm
2 | {
3 | partial class Main
4 | {
5 | ///
6 | /// Variable del diseñador requerida.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Limpiar los recursos que se estén utilizando.
12 | ///
13 | /// true si los recursos administrados se deben eliminar; false en caso contrario, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Código generado por el Diseñador de Windows Forms
24 |
25 | ///
26 | /// Método necesario para admitir el Diseñador. No se puede modificar
27 | /// el contenido del método con el editor de código.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | this.menuStrip1 = new System.Windows.Forms.MenuStrip();
33 | this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
34 | this.loadAssemblyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
35 | this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
36 | this.themeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
37 | this.lunaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
38 | this.vistaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
39 | this.whiteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
40 | this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
41 | this.codeToILToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
42 | this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
43 | this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
44 | this.toolTip = new System.Windows.Forms.ToolTip(this.components);
45 | this.textBox3 = new System.Windows.Forms.TextBox();
46 | this.label1 = new System.Windows.Forms.Label();
47 | this.textBox4 = new System.Windows.Forms.TextBox();
48 | this.label3 = new System.Windows.Forms.Label();
49 | this.officeBackPanel1 = new System.Windows.FutureStyle.Office2007.OfficeBackPanel();
50 | this.splitContainer1 = new System.Windows.Forms.SplitContainer();
51 | this.treeView1 = new System.Windows.Forms.TreeView();
52 | this.button3 = new System.Windows.Forms.Button();
53 | this.button2 = new System.Windows.Forms.Button();
54 | this.button1 = new System.Windows.Forms.Button();
55 | this.label4 = new System.Windows.Forms.Label();
56 | this.treeView2 = new System.Windows.Forms.TreeView();
57 | this.label2 = new System.Windows.Forms.Label();
58 | this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
59 | this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
60 | this.menuStrip1.SuspendLayout();
61 | this.officeBackPanel1.SuspendLayout();
62 | this.splitContainer1.Panel1.SuspendLayout();
63 | this.splitContainer1.Panel2.SuspendLayout();
64 | this.splitContainer1.SuspendLayout();
65 | this.SuspendLayout();
66 | //
67 | // menuStrip1
68 | //
69 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
70 | this.fileToolStripMenuItem,
71 | this.themeToolStripMenuItem,
72 | this.toolsToolStripMenuItem});
73 | this.menuStrip1.Location = new System.Drawing.Point(0, 0);
74 | this.menuStrip1.Name = "menuStrip1";
75 | this.menuStrip1.Padding = new System.Windows.Forms.Padding(8, 2, 0, 2);
76 | this.menuStrip1.Size = new System.Drawing.Size(848, 28);
77 | this.menuStrip1.TabIndex = 0;
78 | this.menuStrip1.Text = "menuStrip1";
79 | //
80 | // fileToolStripMenuItem
81 | //
82 | this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
83 | this.loadAssemblyToolStripMenuItem,
84 | this.saveToolStripMenuItem});
85 | this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
86 | this.fileToolStripMenuItem.Size = new System.Drawing.Size(84, 24);
87 | this.fileToolStripMenuItem.Text = "Assembly";
88 | //
89 | // loadAssemblyToolStripMenuItem
90 | //
91 | this.loadAssemblyToolStripMenuItem.Name = "loadAssemblyToolStripMenuItem";
92 | this.loadAssemblyToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
93 | this.loadAssemblyToolStripMenuItem.Text = "Load";
94 | this.loadAssemblyToolStripMenuItem.Click += new System.EventHandler(this.loadAssemblyToolStripMenuItem_Click);
95 | //
96 | // saveToolStripMenuItem
97 | //
98 | this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
99 | this.saveToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
100 | this.saveToolStripMenuItem.Text = "Save";
101 | this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
102 | //
103 | // themeToolStripMenuItem
104 | //
105 | this.themeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
106 | this.lunaToolStripMenuItem,
107 | this.vistaToolStripMenuItem,
108 | this.whiteToolStripMenuItem});
109 | this.themeToolStripMenuItem.Name = "themeToolStripMenuItem";
110 | this.themeToolStripMenuItem.Size = new System.Drawing.Size(66, 24);
111 | this.themeToolStripMenuItem.Text = "Theme";
112 | //
113 | // lunaToolStripMenuItem
114 | //
115 | this.lunaToolStripMenuItem.Name = "lunaToolStripMenuItem";
116 | this.lunaToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
117 | this.lunaToolStripMenuItem.Text = "Luna";
118 | this.lunaToolStripMenuItem.Click += new System.EventHandler(this.lunaToolStripMenuItem_Click);
119 | //
120 | // vistaToolStripMenuItem
121 | //
122 | this.vistaToolStripMenuItem.Name = "vistaToolStripMenuItem";
123 | this.vistaToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
124 | this.vistaToolStripMenuItem.Text = "Vista";
125 | this.vistaToolStripMenuItem.Click += new System.EventHandler(this.vistaToolStripMenuItem_Click);
126 | //
127 | // whiteToolStripMenuItem
128 | //
129 | this.whiteToolStripMenuItem.Name = "whiteToolStripMenuItem";
130 | this.whiteToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
131 | this.whiteToolStripMenuItem.Text = "White";
132 | this.whiteToolStripMenuItem.Click += new System.EventHandler(this.whiteToolStripMenuItem_Click);
133 | //
134 | // toolsToolStripMenuItem
135 | //
136 | this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
137 | this.codeToILToolStripMenuItem,
138 | this.toolStripSeparator1,
139 | this.aboutToolStripMenuItem});
140 | this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
141 | this.toolsToolStripMenuItem.Size = new System.Drawing.Size(57, 24);
142 | this.toolsToolStripMenuItem.Text = "Tools";
143 | //
144 | // codeToILToolStripMenuItem
145 | //
146 | this.codeToILToolStripMenuItem.Name = "codeToILToolStripMenuItem";
147 | this.codeToILToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
148 | this.codeToILToolStripMenuItem.Text = "Code to IL";
149 | this.codeToILToolStripMenuItem.Click += new System.EventHandler(this.codeToILToolStripMenuItem_Click);
150 | //
151 | // openFileDialog
152 | //
153 | this.openFileDialog.FileName = "openFileDialog1";
154 | this.openFileDialog.Filter = ".Net assemblies|*.exe;*.dll|All files|*.*";
155 | //
156 | // saveFileDialog
157 | //
158 | this.saveFileDialog.Filter = ".Net assemblies|*.exe;*.dll|All files|*.*";
159 | //
160 | // textBox3
161 | //
162 | this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
163 | | System.Windows.Forms.AnchorStyles.Right)));
164 | this.textBox3.Location = new System.Drawing.Point(101, 12);
165 | this.textBox3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
166 | this.textBox3.Name = "textBox3";
167 | this.textBox3.Size = new System.Drawing.Size(152, 22);
168 | this.textBox3.TabIndex = 3;
169 | this.toolTip.SetToolTip(this.textBox3, "Filter for search the type name. Regex can be used.");
170 | this.textBox3.TextChanged += new System.EventHandler(this.filtroCambiado);
171 | //
172 | // label1
173 | //
174 | this.label1.AutoSize = true;
175 | this.label1.Location = new System.Drawing.Point(12, 16);
176 | this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
177 | this.label1.Name = "label1";
178 | this.label1.Size = new System.Drawing.Size(82, 17);
179 | this.label1.TabIndex = 2;
180 | this.label1.Text = "Types filter:";
181 | this.toolTip.SetToolTip(this.label1, "Filter for search the type name. Regex can be used.");
182 | //
183 | // textBox4
184 | //
185 | this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
186 | | System.Windows.Forms.AnchorStyles.Right)));
187 | this.textBox4.Location = new System.Drawing.Point(115, 187);
188 | this.textBox4.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
189 | this.textBox4.Name = "textBox4";
190 | this.textBox4.Size = new System.Drawing.Size(437, 22);
191 | this.textBox4.TabIndex = 6;
192 | this.toolTip.SetToolTip(this.textBox4, "Filter for search the type name. Regex can be used.");
193 | this.textBox4.TextChanged += new System.EventHandler(this.textBox4_TextChanged);
194 | //
195 | // label3
196 | //
197 | this.label3.AutoSize = true;
198 | this.label3.Location = new System.Drawing.Point(4, 191);
199 | this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
200 | this.label3.Name = "label3";
201 | this.label3.Size = new System.Drawing.Size(104, 17);
202 | this.label3.TabIndex = 5;
203 | this.label3.Text = "Members filters";
204 | this.toolTip.SetToolTip(this.label3, "Filter for search the type name. Regex can be used.");
205 | //
206 | // officeBackPanel1
207 | //
208 | this.officeBackPanel1.BackColor = System.Drawing.Color.Transparent;
209 | this.officeBackPanel1.Controls.Add(this.splitContainer1);
210 | this.officeBackPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
211 | this.officeBackPanel1.DrawShadows = false;
212 | this.officeBackPanel1.Location = new System.Drawing.Point(0, 28);
213 | this.officeBackPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
214 | this.officeBackPanel1.Name = "officeBackPanel1";
215 | this.officeBackPanel1.ShadowOpacity = ((byte)(0));
216 | this.officeBackPanel1.ShadowSize = 0;
217 | this.officeBackPanel1.Size = new System.Drawing.Size(848, 541);
218 | this.officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Luna;
219 | this.officeBackPanel1.TabIndex = 11;
220 | //
221 | // splitContainer1
222 | //
223 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
224 | this.splitContainer1.Location = new System.Drawing.Point(0, 0);
225 | this.splitContainer1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
226 | this.splitContainer1.Name = "splitContainer1";
227 | //
228 | // splitContainer1.Panel1
229 | //
230 | this.splitContainer1.Panel1.Controls.Add(this.textBox3);
231 | this.splitContainer1.Panel1.Controls.Add(this.label1);
232 | this.splitContainer1.Panel1.Controls.Add(this.treeView1);
233 | //
234 | // splitContainer1.Panel2
235 | //
236 | this.splitContainer1.Panel2.Controls.Add(this.button3);
237 | this.splitContainer1.Panel2.Controls.Add(this.button2);
238 | this.splitContainer1.Panel2.Controls.Add(this.button1);
239 | this.splitContainer1.Panel2.Controls.Add(this.label4);
240 | this.splitContainer1.Panel2.Controls.Add(this.textBox4);
241 | this.splitContainer1.Panel2.Controls.Add(this.label3);
242 | this.splitContainer1.Panel2.Controls.Add(this.treeView2);
243 | this.splitContainer1.Panel2.Controls.Add(this.label2);
244 | this.splitContainer1.Size = new System.Drawing.Size(848, 541);
245 | this.splitContainer1.SplitterDistance = 274;
246 | this.splitContainer1.SplitterWidth = 5;
247 | this.splitContainer1.TabIndex = 3;
248 | //
249 | // treeView1
250 | //
251 | this.treeView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
252 | | System.Windows.Forms.AnchorStyles.Left)
253 | | System.Windows.Forms.AnchorStyles.Right)));
254 | this.treeView1.Location = new System.Drawing.Point(11, 46);
255 | this.treeView1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
256 | this.treeView1.Name = "treeView1";
257 | this.treeView1.Size = new System.Drawing.Size(243, 482);
258 | this.treeView1.TabIndex = 1;
259 | this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TypeSelected);
260 | //
261 | // button3
262 | //
263 | this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
264 | this.button3.Location = new System.Drawing.Point(429, 321);
265 | this.button3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
266 | this.button3.Name = "button3";
267 | this.button3.Size = new System.Drawing.Size(125, 28);
268 | this.button3.TabIndex = 10;
269 | this.button3.Text = "Remove method";
270 | this.button3.UseVisualStyleBackColor = true;
271 | this.button3.Click += new System.EventHandler(this.button3_Click);
272 | //
273 | // button2
274 | //
275 | this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
276 | this.button2.Location = new System.Drawing.Point(429, 12);
277 | this.button2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
278 | this.button2.Name = "button2";
279 | this.button2.Size = new System.Drawing.Size(125, 28);
280 | this.button2.TabIndex = 9;
281 | this.button2.Text = "Remove type";
282 | this.button2.UseVisualStyleBackColor = true;
283 | this.button2.Click += new System.EventHandler(this.button2_Click);
284 | //
285 | // button1
286 | //
287 | this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
288 | this.button1.Location = new System.Drawing.Point(429, 356);
289 | this.button1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
290 | this.button1.Name = "button1";
291 | this.button1.Size = new System.Drawing.Size(125, 28);
292 | this.button1.TabIndex = 8;
293 | this.button1.Text = "Edit code";
294 | this.button1.UseVisualStyleBackColor = true;
295 | this.button1.Click += new System.EventHandler(this.button1_Click);
296 | //
297 | // label4
298 | //
299 | this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
300 | | System.Windows.Forms.AnchorStyles.Right)));
301 | this.label4.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
302 | this.label4.Location = new System.Drawing.Point(8, 321);
303 | this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
304 | this.label4.Name = "label4";
305 | this.label4.Size = new System.Drawing.Size(413, 208);
306 | this.label4.TabIndex = 7;
307 | this.label4.Text = "Method info:";
308 | //
309 | // treeView2
310 | //
311 | this.treeView2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
312 | | System.Windows.Forms.AnchorStyles.Left)
313 | | System.Windows.Forms.AnchorStyles.Right)));
314 | this.treeView2.Location = new System.Drawing.Point(8, 215);
315 | this.treeView2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
316 | this.treeView2.Name = "treeView2";
317 | this.treeView2.Size = new System.Drawing.Size(544, 95);
318 | this.treeView2.TabIndex = 4;
319 | this.treeView2.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.MemberSelected);
320 | //
321 | // label2
322 | //
323 | this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
324 | | System.Windows.Forms.AnchorStyles.Right)));
325 | this.label2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
326 | this.label2.Location = new System.Drawing.Point(8, 15);
327 | this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
328 | this.label2.Name = "label2";
329 | this.label2.Size = new System.Drawing.Size(413, 169);
330 | this.label2.TabIndex = 4;
331 | this.label2.Text = "Type info:";
332 | //
333 | // toolStripSeparator1
334 | //
335 | this.toolStripSeparator1.Name = "toolStripSeparator1";
336 | this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6);
337 | //
338 | // aboutToolStripMenuItem
339 | //
340 | this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
341 | this.aboutToolStripMenuItem.Size = new System.Drawing.Size(152, 24);
342 | this.aboutToolStripMenuItem.Text = "About";
343 | this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
344 | //
345 | // Main
346 | //
347 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
348 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
349 | this.ClientSize = new System.Drawing.Size(848, 569);
350 | this.Controls.Add(this.officeBackPanel1);
351 | this.Controls.Add(this.menuStrip1);
352 | this.MainMenuStrip = this.menuStrip1;
353 | this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
354 | this.Name = "Main";
355 | this.Text = "NetDasm";
356 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Principal_FormClosing);
357 | this.menuStrip1.ResumeLayout(false);
358 | this.menuStrip1.PerformLayout();
359 | this.officeBackPanel1.ResumeLayout(false);
360 | this.splitContainer1.Panel1.ResumeLayout(false);
361 | this.splitContainer1.Panel1.PerformLayout();
362 | this.splitContainer1.Panel2.ResumeLayout(false);
363 | this.splitContainer1.Panel2.PerformLayout();
364 | this.splitContainer1.ResumeLayout(false);
365 | this.ResumeLayout(false);
366 | this.PerformLayout();
367 |
368 | }
369 |
370 | #endregion
371 |
372 | private System.Windows.Forms.MenuStrip menuStrip1;
373 | private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
374 | private System.Windows.Forms.ToolStripMenuItem loadAssemblyToolStripMenuItem;
375 | private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
376 | private System.Windows.Forms.OpenFileDialog openFileDialog;
377 | private System.Windows.Forms.SaveFileDialog saveFileDialog;
378 | private System.Windows.Forms.TreeView treeView1;
379 | private System.Windows.Forms.SplitContainer splitContainer1;
380 | private System.Windows.Forms.TextBox textBox3;
381 | private System.Windows.Forms.ToolTip toolTip;
382 | private System.Windows.Forms.Label label1;
383 | private System.Windows.Forms.Label label2;
384 | private System.Windows.Forms.TreeView treeView2;
385 | private System.Windows.Forms.TextBox textBox4;
386 | private System.Windows.Forms.Label label3;
387 | private System.Windows.Forms.Label label4;
388 | private System.Windows.Forms.Button button1;
389 | private System.Windows.Forms.Button button2;
390 | private System.Windows.Forms.Button button3;
391 | private System.Windows.FutureStyle.Office2007.OfficeBackPanel officeBackPanel1;
392 | private System.Windows.Forms.ToolStripMenuItem themeToolStripMenuItem;
393 | private System.Windows.Forms.ToolStripMenuItem lunaToolStripMenuItem;
394 | private System.Windows.Forms.ToolStripMenuItem vistaToolStripMenuItem;
395 | private System.Windows.Forms.ToolStripMenuItem whiteToolStripMenuItem;
396 | private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
397 | private System.Windows.Forms.ToolStripMenuItem codeToILToolStripMenuItem;
398 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
399 | private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
400 | }
401 | }
402 |
403 |
--------------------------------------------------------------------------------
/Main.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Text;
7 | using System.Windows.Forms;
8 | using Mono.Cecil;
9 | using System.Text.RegularExpressions;
10 |
11 | namespace NetDasm
12 | {
13 | public partial class Main : Form
14 | {
15 | public Main()
16 | {
17 | InitializeComponent();
18 | this.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application.ExecutablePath);
19 | }
20 |
21 | AssemblyDefinition assembly;
22 | private void loadAssemblyToolStripMenuItem_Click(object sender, EventArgs e)
23 | {
24 | if (openFileDialog.ShowDialog() == DialogResult.OK)
25 | {
26 | assembly = AssemblyFactory.GetAssembly(openFileDialog.FileName);
27 | LoadAssembly();
28 | }
29 | }
30 | private void saveToolStripMenuItem_Click(object sender, EventArgs e)
31 | {
32 | if (saveFileDialog.ShowDialog() == DialogResult.OK)
33 | {
34 | AssemblyFactory.SaveAssembly(assembly, saveFileDialog.FileName);
35 | }
36 | }
37 |
38 | private void filtroCambiado(object sender, EventArgs e)
39 | {
40 | LoadAssembly();
41 | }
42 |
43 | private void LoadAssembly()
44 | {
45 | Regex filter = textBox3.TextLength > 0 ? new Regex(textBox3.Text, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled) : null;
46 | treeView1.Nodes.Clear();
47 | foreach (TypeDefinition type in this.assembly.MainModule.Types)
48 | {
49 | if (type.Name != "")
50 | {
51 | if (filter == null || filter.Match(type.Name).Success)
52 | {
53 | TreeNode nodo = new TreeNode();
54 | nodo.Text = type.Name;
55 | nodo.Tag = type;
56 |
57 | treeView1.Nodes.Add(nodo);
58 | }
59 | }
60 | }
61 | }
62 |
63 | private void button2_Click(object sender, EventArgs e)
64 | {
65 | if (treeView1.SelectedNode != null)
66 | {
67 | TypeDefinition type = (TypeDefinition)treeView1.SelectedNode.Tag;
68 | assembly.MainModule.Types.Remove(type);
69 | int index = treeView1.Nodes.IndexOf(treeView1.SelectedNode);
70 | treeView1.Nodes.Remove(treeView1.SelectedNode);
71 |
72 | if (treeView1.Nodes.Count > index)
73 | treeView1.SelectedNode = treeView1.Nodes[index];
74 | else if (treeView1.Nodes.Count > 0)
75 | treeView1.SelectedNode = treeView1.Nodes[0];
76 | }
77 | }
78 |
79 | private void TypeSelected(object sender, TreeViewEventArgs e)
80 | {
81 | TypeDefinition type = (TypeDefinition)treeView1.SelectedNode.Tag;
82 |
83 | label2.Text = string.Format(@"Type info:
84 | Name: {0}
85 | Namespace: {1}
86 | Base type: {2}
87 | Fullname: {3}
88 | Methods: {4}
89 | Properties: {5}", type.Name, type.Namespace, type.BaseType != null ? type.BaseType.Name : string.Empty, type.FullName, type.Methods.Count
90 | , type.Properties.Count);
91 | treeView2.Nodes.Clear();
92 | Regex filter = textBox4.TextLength > 0 ? new Regex(textBox4.Text, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled) : null;
93 |
94 | foreach (MethodDefinition method in type.Methods)
95 | {
96 | if (filter == null || filter.Match(method.Name).Success)
97 | {
98 | TreeNode nodo = new TreeNode();
99 | nodo.Text = method.Name;
100 | nodo.Tag = method;
101 |
102 | treeView2.Nodes.Add(nodo);
103 | }
104 | }
105 | }
106 |
107 | private void textBox4_TextChanged(object sender, EventArgs e)
108 | {
109 | TypeSelected(null, null);
110 | }
111 |
112 | private void button3_Click(object sender, EventArgs e)
113 | {
114 | if (treeView1.SelectedNode != null && treeView2.SelectedNode != null)
115 | {
116 | TypeDefinition type = (TypeDefinition)treeView1.SelectedNode.Tag;
117 | MethodDefinition metodo = (MethodDefinition)treeView2.SelectedNode.Tag;
118 | type.Methods.Remove(metodo);
119 |
120 | int index = treeView2.Nodes.IndexOf(treeView2.SelectedNode);
121 | treeView2.Nodes.Remove(treeView2.SelectedNode);
122 |
123 | if (treeView2.Nodes.Count > index)
124 | treeView2.SelectedNode = treeView2.Nodes[index];
125 | else if (treeView2.Nodes.Count > 0)
126 | treeView2.SelectedNode = treeView2.Nodes[0];
127 | }
128 | }
129 |
130 | private void MemberSelected(object sender, TreeViewEventArgs e)
131 | {
132 | MethodDefinition metodo = (MethodDefinition)treeView2.SelectedNode.Tag;
133 | label4.Text = string.Format(@"Method info:
134 | Name: {0}
135 | Return type: {1}
136 | Parametros: {2}
137 | Instrucciones: {3}", metodo.Name, metodo.ReturnType.ReturnType.Name, metodo.Parameters.Count, metodo.Body != null ? metodo.Body.Instructions.Count : 0);
138 | }
139 |
140 | private void button1_Click(object sender, EventArgs e)
141 | {
142 | if (treeView2.SelectedNode != null)
143 | {
144 | MethodDefinition metodo = (MethodDefinition)treeView2.SelectedNode.Tag;
145 |
146 | EditCode edit = new EditCode(metodo, assembly);
147 | edit.Show();
148 | }
149 | }
150 |
151 | private void Principal_FormClosing(object sender, FormClosingEventArgs e)
152 | {
153 | e.Cancel = MessageBox.Show("Are you sure that want to close the application?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No;
154 | }
155 |
156 | private void lunaToolStripMenuItem_Click(object sender, EventArgs e)
157 | {
158 | officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Luna;
159 | }
160 |
161 | private void vistaToolStripMenuItem_Click(object sender, EventArgs e)
162 | {
163 | officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Vista;
164 | }
165 |
166 | private void whiteToolStripMenuItem_Click(object sender, EventArgs e)
167 | {
168 | officeBackPanel1.Style = System.Windows.FutureStyle.Office2007.OfficeBackPanelStyles.Transparent;
169 | }
170 |
171 | private void codeToILToolStripMenuItem_Click(object sender, EventArgs e)
172 | {
173 | CodeToIl window = new CodeToIl();
174 | window.Show();
175 | }
176 |
177 | private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
178 | {
179 | new About().ShowDialog();
180 | }
181 | }
182 | }
--------------------------------------------------------------------------------
/Main.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 132, 17
125 |
126 |
127 | 272, 17
128 |
129 |
130 | 408, 17
131 |
132 |
--------------------------------------------------------------------------------
/NetDasm.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 8.0.50727
7 | 2.0
8 | {333C5F4D-E5C8-4752-8A47-E8AD3F848702}
9 | WinExe
10 | Properties
11 | NetDasm
12 | NetDasm
13 | Programacion.ico
14 | false
15 |
16 |
17 | v2.0
18 |
19 |
20 |
21 |
22 | 2.0
23 | publish\
24 | true
25 | Disk
26 | false
27 | Foreground
28 | 7
29 | Days
30 | false
31 | false
32 | true
33 | 0
34 | 1.0.0.%2a
35 | false
36 | false
37 | true
38 |
39 |
40 | true
41 | full
42 | false
43 | bin\Debug\
44 | DEBUG;TRACE
45 | prompt
46 | 4
47 |
48 |
49 | pdbonly
50 | true
51 | bin\Release\
52 | TRACE
53 | prompt
54 | 4
55 |
56 |
57 |
58 | False
59 | Dlls\Fireball.CodeEditor.dll
60 |
61 |
62 | False
63 | Dlls\Fireball.CodeEditor.SyntaxFiles.dll
64 |
65 |
66 | False
67 | Dlls\Fireball.Core.dll
68 |
69 |
70 | False
71 | Dlls\Fireball.SyntaxDocument.dll
72 |
73 |
74 | False
75 | Dlls\Fireball.Win32.dll
76 |
77 |
78 | False
79 | Dlls\Fireball.Windows.Forms.dll
80 |
81 |
82 | False
83 | Dlls\Mono.Cecil.dll
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | Form
95 |
96 |
97 | About.cs
98 |
99 |
100 | Form
101 |
102 |
103 | CodeToIl.cs
104 |
105 |
106 | Component
107 |
108 |
109 | Form
110 |
111 |
112 | EditCode.cs
113 |
114 |
115 | Form
116 |
117 |
118 | InsertInstruction.cs
119 |
120 |
121 |
122 | Component
123 |
124 |
125 | Form
126 |
127 |
128 | Main.cs
129 |
130 |
131 |
132 |
133 | About.cs
134 |
135 |
136 | Designer
137 | CodeToIl.cs
138 |
139 |
140 | Designer
141 | EditCode.cs
142 |
143 |
144 | Designer
145 | InsertInstruction.cs
146 |
147 |
148 | Designer
149 | Main.cs
150 |
151 |
152 | ResXFileCodeGenerator
153 | Resources.Designer.cs
154 | Designer
155 |
156 |
157 | True
158 | Resources.resx
159 | True
160 |
161 |
162 | SettingsSingleFileGenerator
163 | Settings.Designer.cs
164 |
165 |
166 | True
167 | Settings.settings
168 | True
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 | False
178 | .NET Framework 3.5 SP1 Client Profile
179 | false
180 |
181 |
182 | False
183 | .NET Framework 3.5 SP1
184 | true
185 |
186 |
187 |
188 |
195 |
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Windows.Forms;
4 |
5 | namespace NetDasm
6 | {
7 | static class Program
8 | {
9 | ///
10 | /// Punto de entrada principal para la aplicación.
11 | ///
12 | [STAThread]
13 | static void Main()
14 | {
15 | Application.EnableVisualStyles();
16 | Application.SetCompatibleTextRenderingDefault(false);
17 | Application.Run(new Main());
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/Programacion.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Programacion.ico
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // La información general sobre un ensamblado se controla mediante el siguiente
6 | // conjunto de atributos. Cambie estos atributos para modificar la información
7 | // asociada con un ensamblado.
8 | [assembly: AssemblyTitle("NetDasm")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("NetDasm")]
13 | [assembly: AssemblyCopyright("© 2007")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Si establece ComVisible como false hace que los tipos de este ensamblado no sean visibles
18 | // a los componentes COM. Si necesita obtener acceso a un tipo en este ensamblado desde
19 | // COM, establezca el atributo ComVisible como true en este tipo.
20 | [assembly: ComVisible(false)]
21 |
22 | // El siguiente GUID sirve como identificador de la biblioteca de tipos si este proyecto se expone a COM
23 | [assembly: Guid("99fd6019-9601-4628-bb32-bab34319144c")]
24 |
25 | // La información de versión de un ensamblado consta de los cuatro valores siguientes:
26 | //
27 | // Versión principal
28 | // Versión secundaria
29 | // Número de versión de compilación
30 | // Revisión
31 | //
32 | [assembly: AssemblyVersion("1.0.0.0")]
33 | [assembly: AssemblyFileVersion("1.0.0.0")]
34 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.18033
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NetDasm.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NetDasm.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap BackgroundGlossy {
67 | get {
68 | object obj = ResourceManager.GetObject("BackgroundGlossy", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\BackgroundGlossy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.18033
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NetDasm.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Resources/BackgroundGlossy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ideatic/NetDasm/6447cc13956592375f6f769d29723b91f34b7a6b/Resources/BackgroundGlossy.png
--------------------------------------------------------------------------------