├── dnEditor ├── icon.ico ├── Icons │ ├── App.ico │ ├── Copy.bmp │ ├── Edit.bmp │ ├── Save.bmp │ ├── Delete.bmp │ ├── NavBack.bmp │ ├── ildasm.ico │ ├── NavForward.bmp │ ├── reflector.ico │ ├── DeleteFolder.bmp │ ├── XP Drive 3.5.ico │ ├── XP No Access.ico │ ├── XP Drive CDROM.ico │ ├── XP Drive Fixed.ico │ ├── XP Folder Close.ico │ ├── XP Folder Open.ico │ ├── XP Drive Network.ico │ └── Class.Browser │ │ ├── Class.Browser16.png │ │ ├── Class.Browser16.1.bmp │ │ ├── Class.Browser16.10.bmp │ │ ├── Class.Browser16.11.bmp │ │ ├── Class.Browser16.12.bmp │ │ ├── Class.Browser16.13.bmp │ │ ├── Class.Browser16.14.bmp │ │ ├── Class.Browser16.15.bmp │ │ ├── Class.Browser16.16.bmp │ │ ├── Class.Browser16.17.bmp │ │ ├── Class.Browser16.18.bmp │ │ ├── Class.Browser16.19.bmp │ │ ├── Class.Browser16.2.bmp │ │ ├── Class.Browser16.20.bmp │ │ ├── Class.Browser16.21.bmp │ │ ├── Class.Browser16.22.bmp │ │ ├── Class.Browser16.23.bmp │ │ ├── Class.Browser16.24.bmp │ │ ├── Class.Browser16.25.bmp │ │ ├── Class.Browser16.26.bmp │ │ ├── Class.Browser16.27.bmp │ │ ├── Class.Browser16.28.bmp │ │ ├── Class.Browser16.29.bmp │ │ ├── Class.Browser16.3.bmp │ │ ├── Class.Browser16.30.bmp │ │ ├── Class.Browser16.31.bmp │ │ ├── Class.Browser16.32.bmp │ │ ├── Class.Browser16.33.bmp │ │ ├── Class.Browser16.34.bmp │ │ ├── Class.Browser16.35.bmp │ │ ├── Class.Browser16.36.bmp │ │ ├── Class.Browser16.37.bmp │ │ ├── Class.Browser16.38.bmp │ │ ├── Class.Browser16.39.bmp │ │ ├── Class.Browser16.4.bmp │ │ ├── Class.Browser16.40.bmp │ │ ├── Class.Browser16.41.bmp │ │ ├── Class.Browser16.42.bmp │ │ ├── Class.Browser16.43.bmp │ │ ├── Class.Browser16.44.bmp │ │ ├── Class.Browser16.45.bmp │ │ ├── Class.Browser16.46.bmp │ │ ├── Class.Browser16.47.bmp │ │ ├── Class.Browser16.48.bmp │ │ ├── Class.Browser16.49.bmp │ │ ├── Class.Browser16.5.bmp │ │ ├── Class.Browser16.50.bmp │ │ ├── Class.Browser16.51.bmp │ │ ├── Class.Browser16.52.bmp │ │ ├── Class.Browser16.53.bmp │ │ ├── Class.Browser16.54.bmp │ │ ├── Class.Browser16.55.bmp │ │ ├── Class.Browser16.56.bmp │ │ ├── Class.Browser16.57.bmp │ │ ├── Class.Browser16.58.bmp │ │ ├── Class.Browser16.59.bmp │ │ ├── Class.Browser16.6.bmp │ │ ├── Class.Browser16.60.bmp │ │ ├── Class.Browser16.61.bmp │ │ ├── Class.Browser16.62.bmp │ │ ├── Class.Browser16.63.bmp │ │ ├── Class.Browser16.64.bmp │ │ ├── Class.Browser16.65.bmp │ │ ├── Class.Browser16.66.bmp │ │ ├── Class.Browser16.67.bmp │ │ ├── Class.Browser16.68.bmp │ │ ├── Class.Browser16.69.bmp │ │ ├── Class.Browser16.7.bmp │ │ ├── Class.Browser16.70.bmp │ │ ├── Class.Browser16.71.bmp │ │ ├── Class.Browser16.72.bmp │ │ ├── Class.Browser16.73.bmp │ │ ├── Class.Browser16.74.bmp │ │ ├── Class.Browser16.75.bmp │ │ ├── Class.Browser16.76.bmp │ │ ├── Class.Browser16.77.bmp │ │ ├── Class.Browser16.78.bmp │ │ ├── Class.Browser16.79.bmp │ │ ├── Class.Browser16.8.bmp │ │ ├── Class.Browser16.80.bmp │ │ ├── Class.Browser16.81.bmp │ │ ├── Class.Browser16.82.bmp │ │ ├── Class.Browser16.83.bmp │ │ ├── Class.Browser16.84.bmp │ │ ├── Class.Browser16.85.bmp │ │ ├── Class.Browser16.86.bmp │ │ ├── Class.Browser16.87.bmp │ │ ├── Class.Browser16.88.bmp │ │ ├── Class.Browser16.89.bmp │ │ ├── Class.Browser16.9.bmp │ │ ├── Class.Browser16.90.bmp │ │ ├── Class.Browser16.91.bmp │ │ ├── Class.Browser16.92.bmp │ │ ├── Class.Browser16.93.bmp │ │ ├── Class.Browser16.94.bmp │ │ ├── Class.Browser16.95.bmp │ │ ├── Class.Browser16.96.bmp │ │ ├── Class.Browser16.97.bmp │ │ ├── Class.Browser16.98.bmp │ │ ├── Class.Browser16.99.bmp │ │ ├── Class.Browser16.100.bmp │ │ ├── Class.Browser16.101.bmp │ │ ├── Class.Browser16.102.bmp │ │ ├── Class.Browser16.103.bmp │ │ ├── Class.Browser16.104.bmp │ │ ├── Class.Browser16.105.bmp │ │ ├── Class.Browser16.106.bmp │ │ ├── Class.Browser16.107.bmp │ │ ├── Class.Browser16.108.bmp │ │ ├── Class.Browser16.109.bmp │ │ ├── Class.Browser16.110.bmp │ │ ├── Class.Browser16.111.bmp │ │ ├── Class.Browser16.112.bmp │ │ ├── Class.Browser16.113.bmp │ │ ├── Class.Browser16.114.bmp │ │ ├── Class.Browser16.115.bmp │ │ ├── Class.Browser16.116.bmp │ │ ├── Class.Browser16.117.bmp │ │ ├── Class.Browser16.118.bmp │ │ ├── Class.Browser16.119.bmp │ │ ├── Class.Browser16.120.bmp │ │ ├── Class.Browser16.121.bmp │ │ ├── Class.Browser16.122.bmp │ │ ├── Class.Browser16.123.bmp │ │ ├── Class.Browser16.124.bmp │ │ ├── Class.Browser16.125.bmp │ │ ├── Class.Browser16.126.bmp │ │ ├── Class.Browser16.127.bmp │ │ ├── Class.Browser16.128.bmp │ │ ├── Class.Browser16.129.bmp │ │ ├── Class.Browser16.130.bmp │ │ ├── Class.Browser16.131.bmp │ │ ├── Class.Browser16.132.bmp │ │ ├── Class.Browser16.133.bmp │ │ ├── Class.Browser16.134.bmp │ │ ├── Class.Browser16.135.bmp │ │ ├── Class.Browser16.136.bmp │ │ ├── Class.Browser16.137.bmp │ │ ├── Class.Browser16.138.bmp │ │ ├── Class.Browser16.139.bmp │ │ ├── Class.Browser16.140.bmp │ │ ├── Class.Browser16.141.bmp │ │ ├── Class.Browser16.142.bmp │ │ ├── Class.Browser16.143.bmp │ │ ├── Class.Browser16.144.bmp │ │ ├── Class.Browser16.145.bmp │ │ ├── Class.Browser16.146.bmp │ │ ├── Class.Browser16.147.bmp │ │ ├── Class.Browser16.148.bmp │ │ ├── Class.Browser16.149.bmp │ │ ├── Class.Browser16.150.bmp │ │ ├── Class.Browser16.151.bmp │ │ ├── Class.Browser16.152.bmp │ │ ├── Class.Browser16.153.bmp │ │ ├── Class.Browser16.154.bmp │ │ ├── Class.Browser16.155.bmp │ │ ├── Class.Browser16.156.bmp │ │ ├── Class.Browser16.157.bmp │ │ ├── Class.Browser16.158.bmp │ │ ├── Class.Browser16.159.bmp │ │ ├── Class.Browser16.160.bmp │ │ ├── Class.Browser16.161.bmp │ │ ├── Class.Browser16.162.bmp │ │ ├── Class.Browser16.163.bmp │ │ ├── Class.Browser16.164.bmp │ │ ├── Class.Browser16.165.bmp │ │ ├── Class.Browser16.166.bmp │ │ ├── Class.Browser16.167.bmp │ │ └── Class.Browser16.168.bmp ├── Images │ ├── Back.png │ ├── Enum.png │ ├── Find.png │ ├── OK.png │ ├── Open.png │ ├── Break.png │ ├── Class.png │ ├── Delete.png │ ├── Event.png │ ├── Field.png │ ├── ILSpy.ico │ ├── Method.png │ ├── Search.png │ ├── Struct.png │ ├── Assembly.png │ ├── Delegate.png │ ├── EnumValue.png │ ├── Forward.png │ ├── Indexer.png │ ├── Interface.png │ ├── Library.png │ ├── Literal.png │ ├── NameSpace.png │ ├── Operator.png │ ├── Property.png │ ├── Refresh.png │ ├── Resource.png │ ├── SaveFile.png │ ├── SubTypes.png │ ├── ViewCode.png │ ├── Breakpoint.png │ ├── ClearSearch.png │ ├── Constructor.png │ ├── CurrentLine.png │ ├── Folder.Open.png │ ├── ILSpy-Large.ico │ ├── ResourceXml.png │ ├── ResourceXsd.png │ ├── ResourceXsl.png │ ├── StaticClass.png │ ├── SuperTypes.png │ ├── AssemblyList.png │ ├── FieldReadOnly.png │ ├── FindAssembly.png │ ├── Folder.Closed.png │ ├── OverlayPrivate.png │ ├── OverlayStatic.png │ ├── PInvokeMethod.png │ ├── ResourceImage.png │ ├── ResourceXslt.png │ ├── VirtualMethod.png │ ├── AssemblyWarning.png │ ├── ExtensionMethod.png │ ├── OverlayInternal.png │ ├── OverlayProtected.png │ ├── PrivateInternal.png │ ├── DisabledBreakpoint.png │ ├── ReferenceFolder.Open.png │ ├── ResourceResourcesFile.png │ ├── OverlayProtectedInternal.png │ ├── ReferenceFolder.Closed.png │ ├── OverlayCompilerControlled.png │ └── ILSpyNewIconList.txt ├── Properties │ ├── Settings.settings │ ├── AssemblyInfo.cs │ ├── Settings.Designer.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Program.cs ├── Handlers │ ├── MethodHandler.cs │ ├── ReferenceHandler.cs │ ├── TypeHandler.cs │ └── VirtualNodeHandler.cs ├── Misc │ ├── ITreeView.cs │ ├── ITreeMenu.cs │ ├── ColoredRow.cs │ ├── TokenUtils.cs │ ├── ObfuscationHelper.cs │ ├── CurrentAssembly.cs │ ├── ILSpy │ │ ├── ILSpyDecompiler.cs │ │ ├── DecompilationOptions.cs │ │ └── Languages │ │ │ └── Language.cs │ ├── ByteUtils.cs │ ├── InsUtils.cs │ ├── NavigationHistory.cs │ ├── MemberPath.cs │ ├── ColorRules.cs │ ├── InstructionBlock.cs │ └── MonoTranslator.cs ├── app.config └── Forms │ ├── EditVariableForm.cs │ ├── PickReferenceForm.cs │ ├── EditVariableForm.resx │ ├── WriteAssemblyForm.resx │ ├── EditInstructionForm.resx │ ├── EditExceptionHandlerForm.resx │ ├── MultipleInstructionsSelectForm.resx │ ├── MultipleInstructionsSelectForm.cs │ ├── EditVariableForm.Designer.cs │ └── EditExceptionHandlerForm.cs ├── .gitmodules ├── debugbuild.bat ├── releasebuild.bat ├── clean.bat ├── .github └── workflows │ └── main.yml ├── README.md └── .gitignore /dnEditor/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/icon.ico -------------------------------------------------------------------------------- /dnEditor/Icons/App.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/App.ico -------------------------------------------------------------------------------- /dnEditor/Icons/Copy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Copy.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Edit.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Edit.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Save.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Save.bmp -------------------------------------------------------------------------------- /dnEditor/Images/Back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Back.png -------------------------------------------------------------------------------- /dnEditor/Images/Enum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Enum.png -------------------------------------------------------------------------------- /dnEditor/Images/Find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Find.png -------------------------------------------------------------------------------- /dnEditor/Images/OK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OK.png -------------------------------------------------------------------------------- /dnEditor/Images/Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Open.png -------------------------------------------------------------------------------- /dnEditor/Icons/Delete.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Delete.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/NavBack.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/NavBack.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/ildasm.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/ildasm.ico -------------------------------------------------------------------------------- /dnEditor/Images/Break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Break.png -------------------------------------------------------------------------------- /dnEditor/Images/Class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Class.png -------------------------------------------------------------------------------- /dnEditor/Images/Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Delete.png -------------------------------------------------------------------------------- /dnEditor/Images/Event.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Event.png -------------------------------------------------------------------------------- /dnEditor/Images/Field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Field.png -------------------------------------------------------------------------------- /dnEditor/Images/ILSpy.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ILSpy.ico -------------------------------------------------------------------------------- /dnEditor/Images/Method.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Method.png -------------------------------------------------------------------------------- /dnEditor/Images/Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Search.png -------------------------------------------------------------------------------- /dnEditor/Images/Struct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Struct.png -------------------------------------------------------------------------------- /dnEditor/Icons/NavForward.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/NavForward.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/reflector.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/reflector.ico -------------------------------------------------------------------------------- /dnEditor/Images/Assembly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Assembly.png -------------------------------------------------------------------------------- /dnEditor/Images/Delegate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Delegate.png -------------------------------------------------------------------------------- /dnEditor/Images/EnumValue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/EnumValue.png -------------------------------------------------------------------------------- /dnEditor/Images/Forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Forward.png -------------------------------------------------------------------------------- /dnEditor/Images/Indexer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Indexer.png -------------------------------------------------------------------------------- /dnEditor/Images/Interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Interface.png -------------------------------------------------------------------------------- /dnEditor/Images/Library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Library.png -------------------------------------------------------------------------------- /dnEditor/Images/Literal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Literal.png -------------------------------------------------------------------------------- /dnEditor/Images/NameSpace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/NameSpace.png -------------------------------------------------------------------------------- /dnEditor/Images/Operator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Operator.png -------------------------------------------------------------------------------- /dnEditor/Images/Property.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Property.png -------------------------------------------------------------------------------- /dnEditor/Images/Refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Refresh.png -------------------------------------------------------------------------------- /dnEditor/Images/Resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Resource.png -------------------------------------------------------------------------------- /dnEditor/Images/SaveFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/SaveFile.png -------------------------------------------------------------------------------- /dnEditor/Images/SubTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/SubTypes.png -------------------------------------------------------------------------------- /dnEditor/Images/ViewCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ViewCode.png -------------------------------------------------------------------------------- /dnEditor/Icons/DeleteFolder.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/DeleteFolder.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/XP Drive 3.5.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP Drive 3.5.ico -------------------------------------------------------------------------------- /dnEditor/Icons/XP No Access.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP No Access.ico -------------------------------------------------------------------------------- /dnEditor/Images/Breakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Breakpoint.png -------------------------------------------------------------------------------- /dnEditor/Images/ClearSearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ClearSearch.png -------------------------------------------------------------------------------- /dnEditor/Images/Constructor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Constructor.png -------------------------------------------------------------------------------- /dnEditor/Images/CurrentLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/CurrentLine.png -------------------------------------------------------------------------------- /dnEditor/Images/Folder.Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Folder.Open.png -------------------------------------------------------------------------------- /dnEditor/Images/ILSpy-Large.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ILSpy-Large.ico -------------------------------------------------------------------------------- /dnEditor/Images/ResourceXml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ResourceXml.png -------------------------------------------------------------------------------- /dnEditor/Images/ResourceXsd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ResourceXsd.png -------------------------------------------------------------------------------- /dnEditor/Images/ResourceXsl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ResourceXsl.png -------------------------------------------------------------------------------- /dnEditor/Images/StaticClass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/StaticClass.png -------------------------------------------------------------------------------- /dnEditor/Images/SuperTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/SuperTypes.png -------------------------------------------------------------------------------- /dnEditor/Icons/XP Drive CDROM.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP Drive CDROM.ico -------------------------------------------------------------------------------- /dnEditor/Icons/XP Drive Fixed.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP Drive Fixed.ico -------------------------------------------------------------------------------- /dnEditor/Icons/XP Folder Close.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP Folder Close.ico -------------------------------------------------------------------------------- /dnEditor/Icons/XP Folder Open.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP Folder Open.ico -------------------------------------------------------------------------------- /dnEditor/Images/AssemblyList.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/AssemblyList.png -------------------------------------------------------------------------------- /dnEditor/Images/FieldReadOnly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/FieldReadOnly.png -------------------------------------------------------------------------------- /dnEditor/Images/FindAssembly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/FindAssembly.png -------------------------------------------------------------------------------- /dnEditor/Images/Folder.Closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/Folder.Closed.png -------------------------------------------------------------------------------- /dnEditor/Images/OverlayPrivate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OverlayPrivate.png -------------------------------------------------------------------------------- /dnEditor/Images/OverlayStatic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OverlayStatic.png -------------------------------------------------------------------------------- /dnEditor/Images/PInvokeMethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/PInvokeMethod.png -------------------------------------------------------------------------------- /dnEditor/Images/ResourceImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ResourceImage.png -------------------------------------------------------------------------------- /dnEditor/Images/ResourceXslt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ResourceXslt.png -------------------------------------------------------------------------------- /dnEditor/Images/VirtualMethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/VirtualMethod.png -------------------------------------------------------------------------------- /dnEditor/Icons/XP Drive Network.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/XP Drive Network.ico -------------------------------------------------------------------------------- /dnEditor/Images/AssemblyWarning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/AssemblyWarning.png -------------------------------------------------------------------------------- /dnEditor/Images/ExtensionMethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ExtensionMethod.png -------------------------------------------------------------------------------- /dnEditor/Images/OverlayInternal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OverlayInternal.png -------------------------------------------------------------------------------- /dnEditor/Images/OverlayProtected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OverlayProtected.png -------------------------------------------------------------------------------- /dnEditor/Images/PrivateInternal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/PrivateInternal.png -------------------------------------------------------------------------------- /dnEditor/Images/DisabledBreakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/DisabledBreakpoint.png -------------------------------------------------------------------------------- /dnEditor/Images/ReferenceFolder.Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ReferenceFolder.Open.png -------------------------------------------------------------------------------- /dnEditor/Images/ResourceResourcesFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ResourceResourcesFile.png -------------------------------------------------------------------------------- /dnEditor/Images/OverlayProtectedInternal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OverlayProtectedInternal.png -------------------------------------------------------------------------------- /dnEditor/Images/ReferenceFolder.Closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/ReferenceFolder.Closed.png -------------------------------------------------------------------------------- /dnEditor/Images/OverlayCompilerControlled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Images/OverlayCompilerControlled.png -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.png -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.1.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.10.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.10.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.11.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.11.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.12.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.12.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.13.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.13.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.14.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.14.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.15.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.15.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.16.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.17.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.17.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.18.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.18.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.19.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.19.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.2.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.20.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.20.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.21.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.21.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.22.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.22.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.23.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.23.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.24.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.25.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.25.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.26.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.26.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.27.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.27.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.28.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.28.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.29.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.29.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.3.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.30.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.30.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.31.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.31.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.32.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.32.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.33.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.33.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.34.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.34.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.35.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.35.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.36.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.36.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.37.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.37.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.38.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.38.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.39.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.39.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.4.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.40.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.40.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.41.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.41.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.42.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.42.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.43.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.43.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.44.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.44.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.45.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.45.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.46.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.46.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.47.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.47.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.48.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.48.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.49.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.49.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.5.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.50.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.50.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.51.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.51.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.52.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.52.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.53.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.53.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.54.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.54.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.55.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.55.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.56.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.56.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.57.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.57.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.58.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.58.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.59.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.59.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.6.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.60.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.60.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.61.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.61.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.62.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.62.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.63.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.63.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.64.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.64.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.65.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.65.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.66.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.66.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.67.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.67.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.68.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.68.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.69.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.69.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.7.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.70.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.70.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.71.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.71.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.72.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.72.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.73.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.73.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.74.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.74.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.75.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.75.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.76.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.76.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.77.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.77.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.78.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.78.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.79.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.79.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.8.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.80.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.80.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.81.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.81.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.82.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.82.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.83.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.83.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.84.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.84.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.85.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.85.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.86.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.86.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.87.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.87.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.88.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.88.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.89.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.89.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.9.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.90.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.90.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.91.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.91.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.92.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.92.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.93.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.93.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.94.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.94.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.95.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.95.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.96.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.96.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.97.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.97.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.98.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.98.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.99.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.99.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.100.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.100.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.101.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.101.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.102.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.102.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.103.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.103.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.104.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.104.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.105.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.105.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.106.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.106.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.107.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.107.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.108.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.108.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.109.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.109.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.110.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.110.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.111.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.111.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.112.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.112.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.113.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.113.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.114.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.114.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.115.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.115.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.116.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.116.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.117.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.117.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.118.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.118.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.119.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.119.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.120.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.120.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.121.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.121.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.122.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.122.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.123.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.123.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.124.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.124.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.125.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.125.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.126.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.126.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.127.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.127.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.128.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.128.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.129.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.129.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.130.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.130.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.131.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.131.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.132.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.132.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.133.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.133.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.134.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.134.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.135.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.135.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.136.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.136.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.137.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.137.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.138.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.138.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.139.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.139.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.140.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.140.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.141.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.141.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.142.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.142.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.143.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.143.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.144.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.144.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.145.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.145.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.146.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.146.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.147.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.147.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.148.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.148.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.149.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.149.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.150.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.150.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.151.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.151.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.152.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.152.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.153.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.153.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.154.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.154.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.155.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.155.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.156.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.156.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.157.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.157.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.158.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.158.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.159.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.159.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.160.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.160.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.161.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.161.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.162.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.162.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.163.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.163.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.164.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.164.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.165.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.165.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.166.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.166.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.167.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.167.bmp -------------------------------------------------------------------------------- /dnEditor/Icons/Class.Browser/Class.Browser16.168.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ViRb3/dnEditor/HEAD/dnEditor/Icons/Class.Browser/Class.Browser16.168.bmp -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "dnlib"] 2 | path = dnlib 3 | url = https://github.com/ViRb3/dnlib 4 | [submodule "ILSpy"] 5 | path = ILSpy 6 | url = https://github.com/ViRb3/ILSpy 7 | -------------------------------------------------------------------------------- /debugbuild.bat: -------------------------------------------------------------------------------- 1 | %windir%\microsoft.net\framework\v4.0.30319\msbuild /m dnEditor.sln /p:Configuration=Debug "/p:Platform=Any CPU" 2 | @IF %ERRORLEVEL% NEQ 0 GOTO err 3 | @exit /B 0 4 | :err 5 | @PAUSE 6 | @exit /B 1 -------------------------------------------------------------------------------- /releasebuild.bat: -------------------------------------------------------------------------------- 1 | %windir%\microsoft.net\framework\v4.0.30319\msbuild /m dnEditor.sln /p:Configuration=Release "/p:Platform=Any CPU" 2 | @IF %ERRORLEVEL% NEQ 0 GOTO err 3 | @exit /B 0 4 | :err 5 | @PAUSE 6 | @exit /B 1 -------------------------------------------------------------------------------- /clean.bat: -------------------------------------------------------------------------------- 1 | %windir%\microsoft.net\framework\v4.0.30319\msbuild /m dnEditor.sln /t:clean "/p:Platform=Any CPU" /p:Configuration=Debug 2 | @IF %ERRORLEVEL% NEQ 0 PAUSE 3 | %windir%\microsoft.net\framework\v4.0.30319\msbuild /m dnEditor.sln /t:clean "/p:Platform=Any CPU" /p:Configuration=Release 4 | @IF %ERRORLEVEL% NEQ 0 PAUSE -------------------------------------------------------------------------------- /dnEditor/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | [^\x20-\x7F] 7 | 8 | 9 | -------------------------------------------------------------------------------- /dnEditor/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using dnEditor.Forms; 6 | 7 | namespace dnEditor 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new MainForm()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /dnEditor/Handlers/MethodHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | using dnEditor.Misc; 3 | using dnlib.DotNet; 4 | 5 | namespace dnEditor.Handlers 6 | { 7 | public static class MethodHandler 8 | { 9 | public static TreeNode FindMethod(TreeView treeView, MethodDef method) 10 | { 11 | foreach (TreeNode node in treeView.Nodes) 12 | { 13 | TreeNode nodeResult = Functions.FindMethod(node, method); 14 | 15 | if (nodeResult != null) 16 | return nodeResult; 17 | } 18 | return null; 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /dnEditor/Misc/ITreeView.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace dnEditor.Misc 4 | { 5 | interface ITreeView 6 | { 7 | void treeView_AfterExpand(object sender, TreeViewEventArgs e); 8 | void treeView_DragDrop(object sender, DragEventArgs e); 9 | void treeView_DragEnter(object sender, DragEventArgs e); 10 | void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e); 11 | void treeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e); 12 | void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /dnEditor/Misc/ITreeMenu.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace dnEditor.Misc 4 | { 5 | internal interface ITreeMenu 6 | { 7 | void treeMenu_Opened(object sender, EventArgs e); 8 | 9 | void goToEntryPointToolStripMenuItem_Click(object sender, EventArgs e); 10 | 11 | void goToModuleCCtorToolStripMenuItem_Click(object sender, EventArgs e); 12 | 13 | void expandToolStripMenuItem_Click(object sender, EventArgs e); 14 | 15 | void collapseToolStripMenuItem_Click(object sender, EventArgs e); 16 | 17 | void collapseAllToolStripMenuItem_Click(object sender, EventArgs e); 18 | 19 | void closeToolStripMenuItem_Click(object sender, EventArgs e); 20 | } 21 | } -------------------------------------------------------------------------------- /dnEditor/Misc/ColoredRow.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace dnEditor.Misc 8 | { 9 | public static class DefaultColors 10 | { 11 | public static Color IndexTextColor = Color.Blue; 12 | public static Color OpCodeTextColor = Color.Green; 13 | public static Color OperandTextColor = Color.Black; 14 | public static Color RowBlockColor = Color.PaleGoldenrod; 15 | public static Color RowColor = Color.LightGoldenrodYellow; 16 | } 17 | 18 | public class ColoredRow 19 | { 20 | public Color OpCodeBackground = DefaultColors.RowColor; 21 | public Color OpCodeText = DefaultColors.OpCodeTextColor; 22 | public Color OperandText = DefaultColors.OperandTextColor; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /dnEditor/Misc/TokenUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using dnlib.DotNet; 3 | 4 | namespace dnEditor.Misc 5 | { 6 | /* 7 | * FULL CREDITS OF THIS CLASS GO TO THE CODER OF SIMPLE ASSEMBLY EXPLORER. 8 | * I FULLY COPIED IT AND TAKE NO CREDIT FOR HIS WORK! 9 | */ 10 | 11 | public static class TokenUtils 12 | { 13 | public static string FullMetadataTokenString(this MDToken mdToken) 14 | { 15 | return UintToHexString(mdToken.ToUInt32(), 8); 16 | } 17 | 18 | public static string MetadataTokenString(this MDToken mdToken) 19 | { 20 | return UintToHexString(mdToken.Rid, 6); 21 | } 22 | 23 | public static string UintToHexString(uint input, int digits) 24 | { 25 | return input.ToString(String.Format("x0{0}", digits)).ToLower(); 26 | } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /dnEditor/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | [^\x20-\x7F] 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: [windows-2019] 9 | 10 | steps: 11 | - name: Setup MSBuild.exe 12 | uses: warrenbuckley/Setup-MSBuild@v1 13 | 14 | - name: Setup Nuget.exe 15 | uses: warrenbuckley/Setup-Nuget@v1 16 | 17 | - uses: actions/checkout@v1 18 | - name: Build 19 | run: | 20 | git submodule update --init --recursive 21 | nuget restore dnEditor.sln 22 | msbuild dnEditor.sln /p:Configuration=Release /m /verbosity:normal /p:WarningLevel=0 23 | - name: Create ZIP 24 | if: startsWith(github.ref, 'refs/tags/') 25 | run: | 26 | Compress-Archive -Path dnEditor/bin/Release/* -DestinationPath dnEditor 27 | 28 | - name: Release 29 | uses: softprops/action-gh-release@v1 30 | if: startsWith(github.ref, 'refs/tags/') 31 | with: 32 | files: dnEditor.zip 33 | env: 34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /dnEditor/Misc/ObfuscationHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Text.RegularExpressions; 2 | using dnEditor.Forms; 3 | using dnEditor.Properties; 4 | 5 | namespace dnEditor.Misc 6 | { 7 | public static class ObfuscationHelper 8 | { 9 | public static int MaxTreeNodeTextLength 10 | { 11 | get { return 85; } 12 | } 13 | 14 | public static int MaxOperandTextLength 15 | { 16 | get { return 150; } 17 | } 18 | 19 | public static string ShortenTreeNodeText(this string text) 20 | { 21 | if (string.IsNullOrEmpty(text)) 22 | return text; 23 | 24 | if (!string.IsNullOrEmpty(Settings.Default.MagicRegex)) 25 | text = Regex.Replace(text, Settings.Default.MagicRegex, ""); 26 | 27 | if (text.Length > MaxTreeNodeTextLength) 28 | return text.Substring(0, MaxTreeNodeTextLength) + " ..."; 29 | 30 | return text; 31 | } 32 | 33 | public static string ShortenOperandText(this string text) 34 | { 35 | if (!string.IsNullOrEmpty(Settings.Default.MagicRegex)) 36 | text = Regex.Replace(text, Settings.Default.MagicRegex, ""); 37 | 38 | if (text.Length > MaxOperandTextLength) 39 | return text.Substring(0, MaxOperandTextLength) + " ..."; 40 | 41 | return text; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /dnEditor/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("dnEditor")] 9 | [assembly: AssemblyDescription("A .NET assembly editor based on dnlib.")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("dnEditor")] 13 | [assembly: AssemblyCopyright("Copyright ViRb3, 2014-2099")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("e1f15958-bcd1-4ee8-95bd-2bf5250e21cf")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /dnEditor/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.0 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 dnEditor.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.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 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("[^\\x20-\\x7F]")] 29 | public string MagicRegex { 30 | get { 31 | return ((string)(this["MagicRegex"])); 32 | } 33 | set { 34 | this["MagicRegex"] = value; 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /dnEditor/Misc/CurrentAssembly.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Windows.Forms; 4 | using dnlib.DotNet; 5 | using dnlib.DotNet.Emit; 6 | 7 | namespace dnEditor.Misc 8 | { 9 | public class CurrentAssembly 10 | { 11 | public ModuleDefMD ManifestModule; 12 | 13 | public Instruction Instruction; 14 | public MethodDef Method = null; 15 | public string Path; 16 | public bool IsExecutable; 17 | 18 | public CurrentAssembly(string path) 19 | { 20 | if (!File.Exists(path)) 21 | throw new FileNotFoundException("Assembly does not exist!"); 22 | 23 | Path = path; 24 | 25 | if (System.IO.Path.GetExtension(path) == ".exe") 26 | IsExecutable = true; 27 | 28 | OpenAssembly(); 29 | } 30 | 31 | public CurrentAssembly(ModuleDefMD manifestModule) 32 | { 33 | ManifestModule = manifestModule; 34 | Path = null; 35 | } 36 | 37 | public void OpenAssembly(string path = null) 38 | { 39 | try 40 | { 41 | if (path == null) 42 | ManifestModule = ModuleDefMD.Load(File.ReadAllBytes(Path)); 43 | else 44 | { 45 | ManifestModule = ModuleDefMD.Load(File.ReadAllBytes(path)); 46 | Path = path; 47 | } 48 | } 49 | catch (BadImageFormatException e) 50 | { 51 | MessageBox.Show(e.Message, "Error loading assembly!"); 52 | ManifestModule = null; 53 | } 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /dnEditor/Handlers/ReferenceHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Windows.Forms; 4 | using dnlib.DotNet; 5 | 6 | namespace dnEditor.Handlers 7 | { 8 | public class ReferenceHandler 9 | { 10 | private readonly TreeViewHandler _treeViewHandler; 11 | 12 | public ReferenceHandler(TreeViewHandler treeViewHandler) 13 | { 14 | _treeViewHandler = treeViewHandler; 15 | } 16 | 17 | public void HandleReferences(IEnumerable references) 18 | { 19 | if (_treeViewHandler.RefNode == null) 20 | { 21 | _treeViewHandler.RefNode = _treeViewHandler.NewReferenceFolder(); 22 | _treeViewHandler.RefNode.AddTo(_treeViewHandler.CurrentModule); 23 | } 24 | 25 | var assemblyRefs = new List(); 26 | 27 | if (_treeViewHandler.RefNode.Tag is AssemblyRef[]) 28 | assemblyRefs = (_treeViewHandler.RefNode.Tag as AssemblyRef[]).ToList(); 29 | 30 | assemblyRefs.AddRange(references.ToArray()); 31 | 32 | _treeViewHandler.RefNode.Tag = assemblyRefs.ToArray(); 33 | } 34 | 35 | public void ProcessAssemblyRefs(out List children) 36 | { 37 | if (_treeViewHandler.RefNode == null) 38 | { 39 | children = new List(); 40 | return; 41 | } 42 | 43 | children = new List(); 44 | var refs = _treeViewHandler.RefNode.Tag as AssemblyRef[]; 45 | 46 | foreach (AssemblyRef @ref in refs) 47 | children.Add(_treeViewHandler.NewAssemblyRef(@ref)); 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /dnEditor/Misc/ILSpy/ILSpyDecompiler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using ICSharpCode.Decompiler; 3 | using ICSharpCode.ILSpy; 4 | using Mono.Cecil; 5 | 6 | namespace dnEditor.Misc.ILSpy 7 | { 8 | /* 9 | * FULL CREDITS OF THIS CLASS GO TO THE CODER OF SIMPLE ASSEMBLY EXPLORER. 10 | * I FULLY COPIED IT AND TAKE NO CREDIT FOR HIS WORK! 11 | */ 12 | 13 | public class ILSpyDecompiler 14 | { 15 | public string Decompile(object @object) 16 | { 17 | if (@object == null) return String.Empty; 18 | Language l = new CSharpLanguage(); 19 | 20 | ITextOutput output = new RtfTextOutput(); 21 | var options = new DecompilationOptions(); 22 | 23 | if (@object is AssemblyDefinition) 24 | l.DecompileAssembly((AssemblyDefinition)@object, output, options); 25 | else if (@object is TypeDefinition) 26 | l.DecompileType((TypeDefinition)@object, output, options); 27 | else if (@object is MethodDefinition) 28 | l.DecompileMethod((MethodDefinition)@object, output, options); 29 | else if (@object is FieldDefinition) 30 | l.DecompileField((FieldDefinition)@object, output, options); 31 | else if (@object is PropertyDefinition) 32 | l.DecompileProperty((PropertyDefinition)@object, output, options); 33 | else if (@object is EventDefinition) 34 | l.DecompileEvent((EventDefinition)@object, output, options); 35 | else if (@object is AssemblyNameReference) 36 | { 37 | output.Write("// Assembly Reference "); 38 | output.WriteDefinition(@object.ToString(), null); 39 | output.WriteLine(); 40 | } 41 | else if(@object is ModuleReference) 42 | { 43 | output.Write("// Module Reference "); 44 | output.WriteDefinition(@object.ToString(), null); 45 | output.WriteLine(); 46 | } 47 | else 48 | { 49 | output.Write(String.Format("// {0} ", @object.GetType().Name)); 50 | output.WriteDefinition(@object.ToString(), null); 51 | output.WriteLine(); 52 | } 53 | 54 | return output.ToString(); 55 | } 56 | 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /dnEditor/Misc/ByteUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Text; 4 | 5 | namespace dnEditor.Misc 6 | { 7 | /* 8 | * FULL CREDITS OF THIS CLASS GO TO THE CODER OF SIMPLE ASSEMBLY EXPLORER. 9 | * I FULLY COPIED IT AND TAKE NO CREDIT FOR HIS WORK! 10 | */ 11 | 12 | public class BytesUtils 13 | { 14 | public static string BytesToHexStringBlock(byte[] bytes) 15 | { 16 | if (bytes == null) 17 | return String.Empty; 18 | 19 | var sb = new StringBuilder(); 20 | for (int i = 0; i < bytes.Length; i++) 21 | { 22 | sb.AppendFormat("{0:x02} ", bytes[i]); 23 | if ((i + 1)%16 == 0) 24 | { 25 | sb.Append("\r\n"); 26 | } 27 | } 28 | if (bytes.Length%16 != 0) 29 | { 30 | sb.Append("\r\n"); 31 | } 32 | 33 | for (int i = 0; i < bytes.Length; i++) 34 | { 35 | if (bytes[i] >= 0x20 && bytes[i] <= 0x7e) 36 | { 37 | sb.AppendFormat("{0}", (char) bytes[i]); 38 | } 39 | else 40 | { 41 | sb.Append("."); 42 | } 43 | if ((i + 1)%48 == 0) 44 | { 45 | sb.Append("\r\n"); 46 | } 47 | } 48 | return sb.ToString(); 49 | } 50 | 51 | public static string BytesToHexString(byte[] bytes) 52 | { 53 | return BytesToHexString(bytes, false); 54 | } 55 | 56 | public static string BytesToHexString(byte[] bytes, bool space) 57 | { 58 | var sb = new StringBuilder(); 59 | for (int i = 0; i < bytes.Length; i++) 60 | { 61 | sb.AppendFormat("{0:x02}{1}", bytes[i], space ? " " : ""); 62 | } 63 | return sb.ToString().ToUpperInvariant(); 64 | } 65 | 66 | public static byte[] HexStringToBytes(string hexString) 67 | { 68 | string hs = hexString.Replace(" ", ""); 69 | int length = hs.Length/2; 70 | var bytes = new byte[length]; 71 | for (int i = 0; i < length; i++) 72 | { 73 | string s = hs.Substring(i*2, 2); 74 | bytes[i] = Byte.Parse(s, NumberStyles.HexNumber); 75 | } 76 | return bytes; 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /dnEditor/Misc/InsUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using dnlib.DotNet.Emit; 3 | 4 | namespace dnEditor.Misc 5 | { 6 | /* 7 | * FULL CREDITS OF THIS CLASS GO TO THE CODER OF SIMPLE ASSEMBLY EXPLORER. 8 | * I FULLY COPIED IT AND TAKE NO CREDIT FOR HIS WORK! 9 | */ 10 | 11 | public static class InsUtils 12 | { 13 | public static string GetOperandText(this Instruction instruction) 14 | { 15 | string text = ""; 16 | 17 | object operand = instruction.Operand; 18 | 19 | if (operand == null) 20 | { 21 | return text; 22 | } 23 | 24 | switch (operand.GetType().FullName) 25 | { 26 | case "System.String": 27 | text = String.Format("\"{0}\"", operand); 28 | break; 29 | case "System.Int32": 30 | case "System.Int16": 31 | case "System.Int64": 32 | long l = Convert.ToInt64(operand); 33 | if (l < 100) 34 | text = l.ToString(); 35 | else 36 | text = String.Format("0x{0:x}", l); 37 | break; 38 | case "System.UInt32": 39 | case "System.UInt16": 40 | case "System.UInt64": 41 | ulong ul = Convert.ToUInt64(operand); 42 | if (ul < 100) 43 | text = ul.ToString(); 44 | else 45 | text = String.Format("0x{0:x}", ul); 46 | break; 47 | case "System.Decimal": 48 | text = operand.ToString(); 49 | break; 50 | case "System.Double": 51 | text = operand.ToString(); 52 | break; 53 | case "System.Byte": 54 | case "System.SByte": 55 | text = String.Format("0x{0:x}", operand); 56 | break; 57 | case "System.Boolean": 58 | text = operand.ToString(); 59 | break; 60 | case "System.Char": 61 | text = String.Format("'{0}'", operand); 62 | break; 63 | case "System.DateTime": 64 | text = operand.ToString(); 65 | break; 66 | default: 67 | text = operand.ToString(); 68 | break; 69 | } 70 | 71 | return text; 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /dnEditor/Misc/NavigationHistory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using dnEditor.Forms; 6 | using dnEditor.Handlers; 7 | 8 | namespace dnEditor.Misc 9 | { 10 | public class NavigationHistory 11 | { 12 | public bool HasPast = false; 13 | public bool HasFuture = false; 14 | 15 | private readonly TreeViewHandler _treeViewHandler; 16 | private readonly MainForm _mainForm; 17 | private readonly List _pastHistory = new List(); 18 | private readonly List _futureHistory = new List(); 19 | private bool _clearFuture = true; 20 | 21 | public NavigationHistory(TreeViewHandler treeViewHandler) 22 | { 23 | _treeViewHandler = treeViewHandler; 24 | _mainForm = (_treeViewHandler.CurrentForm is MainForm) ? (MainForm)_treeViewHandler.CurrentForm : null; 25 | } 26 | 27 | public void AddPastHistory(object member) 28 | { 29 | //TODO: Fix bug if cycling through two same nodes 30 | 31 | if (_pastHistory.Count < 2 || _pastHistory[_pastHistory.Count - 2] != member) 32 | _pastHistory.Add(member); 33 | 34 | if (_clearFuture) 35 | _futureHistory.Clear(); 36 | else 37 | _clearFuture = true; 38 | 39 | UpdateState(); 40 | } 41 | 42 | public void GoBack() 43 | { 44 | var pastNode = _pastHistory[_pastHistory.Count - 2]; 45 | var currentNode = _pastHistory[_pastHistory.Count - 1]; 46 | 47 | _clearFuture = false; 48 | _treeViewHandler.BrowseAndExpandMember(pastNode); 49 | 50 | _futureHistory.Add(currentNode); 51 | _pastHistory.Remove(currentNode); 52 | 53 | UpdateState(); 54 | } 55 | 56 | public void GoForward() 57 | { 58 | _clearFuture = false; 59 | _treeViewHandler.BrowseAndExpandMember(_futureHistory.Last()); 60 | _futureHistory.Remove(_futureHistory.Last()); 61 | 62 | UpdateState(); 63 | } 64 | 65 | public void Clear() 66 | { 67 | _pastHistory.Clear(); 68 | _futureHistory.Clear(); 69 | _clearFuture = true; 70 | 71 | UpdateState(); 72 | } 73 | 74 | private void UpdateState() 75 | { 76 | HasPast = _pastHistory.Count > 1; 77 | HasFuture = _futureHistory.Count > 0; 78 | 79 | if (_mainForm != null) 80 | _mainForm.HandleToolStripItemsState(); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dnEditor 2 | 3 | A .NET assembly editor based on dnlib. 4 | 5 | Want to help with the development? You are more than welcome to do so! 6 | Feel free to upgrade, fix or touch this project by submitting a pull request and I will 7 | make sure to approve and merge it. 8 | 9 | Please note that I am working on this project during my free time, and as just a teenager doing everything 10 | alone, I cannot do it all instantly or at will. If your favourite feature is not found in dnEditor and 11 | you really wish it was there - submit a ticket, and wait. I will eventually get through it. 12 | 13 | ## To-do (sorted by current priority): 14 | - [x] ~~Finish support for "switch" opcode.~~ 15 | - [x] ~~Switch back to virtual TreeNode.~~ 16 | - [x] ~~Add TreeView context menu with helpful options.~~ 17 | - [x] ~~Add variables support.~~ 18 | - [x] ~~Add support for "try-catch".~~ 19 | - [x] ~~Implement ILSpy decompiler.~~ 20 | - [x] ~~Add search functions.~~ 21 | - [ ] Add member creation and deletion support. 22 | - [ ] Add member overview/preview. 23 | - [ ] Add member icons. 24 | - [ ] Add resources support. 25 | 26 | ## Screenshots 27 | ![](https://i.imgur.com/zP5HVsQ.png) 28 | ![](https://i.imgur.com/OV2okdT.png) 29 | ![](https://i.imgur.com/G1XfScC.png) 30 | 31 | ## Credits and thanks: 32 | - 0xd4d (dnlib) for the epic library that made this whole project possible and the time he took to help me. 33 | Yes, if dnlib didn't exist, this would have only been a fancy dream. 34 | - WiCKY Hu (Simple Assembly Explorer) for his amazing piece of work. I "borrowed" many ideas and features 35 | from there, for which I hope I won't have done any bad. 36 | - yck1509 (dnSpy & dnlib fork) for the first dnlib-based assembly decompiler. That definitely served me as a 37 | reference of dnlib itself and what I wasn't sure how to do. I am also using "a fork of his fork of dnlib", 38 | though I use none of his implementations. Still worth mentioning. 39 | - Sebastien LEBRETON (Reflexil) for the currently only fully-working and fully-featured assembly 40 | editor. If you find something similar in dnEditor's design: it's either Reflexil that inspired me 41 | or Reflexil that made me use the (almost) same design. 42 | - The guys behind ICSHARPCODE (ILSpy) [Daniel Grunwald, David Srbecky, Ed Harvey, Siegfried Pammer 43 | Artur Zgodzinski, Eusebiu Marcu, Pent Ploompuu] for their unbelievable work. 44 | If they didn't keep their everything open-source I wouldn't have been able to add the decompiler for some 15 minutes. 45 | - li0nsar3c00l for wanting to be here. And for helping me out too, of course. 46 | - XenoCode for the icon dnEditor currently uses. 47 | 48 | #### All licenses can be found in the LICENSES.md file in the project root directory. 49 | 50 | ## Greetings: 51 | - To you for contributing, bug reporting or using this tool. 52 | - To all boards, teams and individuals that support this work. 53 | -------------------------------------------------------------------------------- /dnEditor/Handlers/TypeHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using dnEditor.Misc; 6 | using dnlib.DotNet; 7 | using dnlib.Utils; 8 | 9 | namespace dnEditor.Handlers 10 | { 11 | public class TypeHandler 12 | { 13 | private readonly TreeViewHandler _treeViewHandler; 14 | 15 | public TypeHandler(TreeViewHandler treeViewHandler) 16 | { 17 | _treeViewHandler = treeViewHandler; 18 | } 19 | public void ProcessTypeMembers(TreeNode parentNode, ref List children) 20 | { 21 | var type = parentNode.Tag as TypeDef; 22 | 23 | foreach (TypeDef nestedType in type.NestedTypes.OrderBy(t => t.Name.ToLower())) 24 | { 25 | TreeNode newTypeNode = _treeViewHandler.NewType(nestedType); 26 | VirtualNodeUtilities.NewVirtualNode().AddTo(newTypeNode); 27 | 28 | children.Add(newTypeNode); 29 | } 30 | 31 | foreach (MethodDef method in type.Methods.OrderBy(m => m.Name.ToLower())) 32 | { 33 | List accessorMethods = type.GetAccessorMethods(); 34 | 35 | if (!accessorMethods.Contains(method)) 36 | children.Add(_treeViewHandler.NewMethod(method)); 37 | } 38 | 39 | foreach (PropertyDef property in type.Properties.OrderBy(p => p.Name.ToLower())) 40 | children.Add(_treeViewHandler.NewProperty(property)); 41 | 42 | foreach (FieldDef field in type.Fields.OrderBy(f => f.Name.ToLower())) 43 | children.Add(_treeViewHandler.NewField(field)); 44 | 45 | foreach (EventDef @event in type.Events.OrderBy(e => e.Name.ToLower())) 46 | children.Add(_treeViewHandler.NewEvent(@event)); 47 | } 48 | 49 | public void HandleType(TypeDef type, bool processChildren) 50 | { 51 | TreeNode targetType = _treeViewHandler.NewType(type); 52 | 53 | if (processChildren) 54 | { 55 | var children = new List(); 56 | ProcessTypeMembers(targetType, ref children); 57 | 58 | foreach (var child in children) 59 | targetType.Nodes.Add(child); 60 | } 61 | 62 | if (type.IsExpandable()) 63 | VirtualNodeUtilities.NewVirtualNode().AddTo(targetType); 64 | 65 | if (!_treeViewHandler.NameSpaceList.Contains(type.Namespace)) 66 | { 67 | TreeNode nameSpace = _treeViewHandler.NewNameSpace(type.Namespace); 68 | 69 | _treeViewHandler.NameSpaceList.Add(type.Namespace); 70 | 71 | _treeViewHandler.CurrentTreeView.BeginInvoke(new MethodInvoker(() => 72 | { 73 | nameSpace.AddTo(_treeViewHandler.CurrentModule); 74 | targetType.AddTo(nameSpace); 75 | })); 76 | 77 | } 78 | else 79 | { 80 | _treeViewHandler.CurrentTreeView.BeginInvoke(new MethodInvoker(() => 81 | targetType.AddTo(_treeViewHandler.CurrentModule.Nodes.Cast().First( 82 | n => n.Text == type.Namespace)))); 83 | } 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /dnEditor/Misc/ILSpy/DecompilationOptions.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this 4 | // software and associated documentation files (the "Software"), to deal in the Software 5 | // without restriction, including without limitation the rights to use, copy, modify, merge, 6 | // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 7 | // to whom the Software is furnished to do so, subject to the following conditions: 8 | // 9 | // The above copyright notice and this permission notice shall be included in all copies or 10 | // substantial portions of the Software. 11 | // 12 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 13 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 14 | // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 15 | // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 16 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 17 | // DEALINGS IN THE SOFTWARE. 18 | 19 | using System.Threading; 20 | using ICSharpCode.Decompiler; 21 | 22 | //using ICSharpCode.ILSpy.Options; 23 | 24 | namespace ICSharpCode.ILSpy 25 | { 26 | /// 27 | /// Options passed to the decompiler. 28 | /// 29 | public class DecompilationOptions 30 | { 31 | /// 32 | /// Gets/sets an optional state of a decompiler text view. 33 | /// 34 | /// 35 | /// This state is used to restore test view's state when decompilation is started by Go Back/Forward action. 36 | /// 37 | //public ICSharpCode.ILSpy.TextView.DecompilerTextViewState TextViewState { get; set; } 38 | public DecompilationOptions() 39 | { 40 | //this.DecompilerSettings = DecompilerSettingsPanel.CurrentDecompilerSettings; 41 | DecompilerSettings = new DecompilerSettings(); 42 | FullDecompilation = false; 43 | } 44 | 45 | /// 46 | /// Gets whether a full decompilation (all members recursively) is desired. 47 | /// If this option is false, language bindings are allowed to show the only headers of the decompiled element's 48 | /// children. 49 | /// 50 | public bool FullDecompilation { get; set; } 51 | 52 | /// 53 | /// Gets/Sets the directory into which the project is saved. 54 | /// 55 | public string SaveAsProjectDirectory { get; set; } 56 | 57 | /// 58 | /// Gets the cancellation token that is used to abort the decompiler. 59 | /// 60 | /// 61 | /// Decompilers should regularly call options.CancellationToken.ThrowIfCancellationRequested(); 62 | /// to allow for cooperative cancellation of the decompilation task. 63 | /// 64 | public CancellationToken CancellationToken { get; set; } 65 | 66 | /// 67 | /// Gets the settings for the decompiler. 68 | /// 69 | public DecompilerSettings DecompilerSettings { get; set; } 70 | } 71 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | 19 | # MSTest test Results 20 | [Tt]est[Rr]esult*/ 21 | [Bb]uild[Ll]og.* 22 | 23 | #NUNIT 24 | *.VisualState.xml 25 | TestResult.xml 26 | 27 | # Build Results of an ATL Project 28 | [Dd]ebugPS/ 29 | [Rr]eleasePS/ 30 | dlldata.c 31 | 32 | *_i.c 33 | *_p.c 34 | *_i.h 35 | *.ilk 36 | *.meta 37 | *.obj 38 | *.pch 39 | *.pdb 40 | *.pgc 41 | *.pgd 42 | *.rsp 43 | *.sbr 44 | *.tlb 45 | *.tli 46 | *.tlh 47 | *.tmp 48 | *.tmp_proj 49 | *.log 50 | *.vspscc 51 | *.vssscc 52 | .builds 53 | *.pidb 54 | *.svclog 55 | *.scc 56 | 57 | # Chutzpah Test files 58 | _Chutzpah* 59 | 60 | # Visual C++ cache files 61 | ipch/ 62 | *.aps 63 | *.ncb 64 | *.opensdf 65 | *.sdf 66 | *.cachefile 67 | 68 | # Visual Studio profiler 69 | *.psess 70 | *.vsp 71 | *.vspx 72 | 73 | # TFS 2012 Local Workspace 74 | $tf/ 75 | 76 | # Guidance Automation Toolkit 77 | *.gpState 78 | 79 | # ReSharper is a .NET coding add-in 80 | _ReSharper*/ 81 | *.[Rr]e[Ss]harper 82 | *.DotSettings.user 83 | 84 | # JustCode is a .NET coding addin-in 85 | .JustCode 86 | 87 | # TeamCity is a build add-in 88 | _TeamCity* 89 | 90 | # DotCover is a Code Coverage Tool 91 | *.dotCover 92 | 93 | # NCrunch 94 | *.ncrunch* 95 | _NCrunch_* 96 | .*crunch*.local.xml 97 | 98 | # MightyMoose 99 | *.mm.* 100 | AutoTest.Net/ 101 | 102 | # Web workbench (sass) 103 | .sass-cache/ 104 | 105 | # Installshield output folder 106 | [Ee]xpress/ 107 | 108 | # DocProject is a documentation generator add-in 109 | DocProject/buildhelp/ 110 | DocProject/Help/*.HxT 111 | DocProject/Help/*.HxC 112 | DocProject/Help/*.hhc 113 | DocProject/Help/*.hhk 114 | DocProject/Help/*.hhp 115 | DocProject/Help/Html2 116 | DocProject/Help/html 117 | 118 | # Click-Once directory 119 | publish/ 120 | 121 | # Publish Web Output 122 | *.[Pp]ublish.xml 123 | *.azurePubxml 124 | 125 | # NuGet Packages Directory 126 | packages/ 127 | ## TODO: If the tool you use requires repositories.config uncomment the next line 128 | #!packages/repositories.config 129 | 130 | # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets 131 | # This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) 132 | !packages/build/ 133 | 134 | # Windows Azure Build Output 135 | csx/ 136 | *.build.csdef 137 | 138 | # Windows Store app package directory 139 | AppPackages/ 140 | 141 | # Others 142 | sql/ 143 | *.Cache 144 | ClientBin/ 145 | [Ss]tyle[Cc]op.* 146 | ~$* 147 | *~ 148 | *.dbmdl 149 | *.dbproj.schemaview 150 | *.pfx 151 | *.publishsettings 152 | node_modules/ 153 | 154 | # RIA/Silverlight projects 155 | Generated_Code/ 156 | 157 | # Backup & report files from converting an old project file to a newer 158 | # Visual Studio version. Backup files are not needed, because we have git ;-) 159 | _UpgradeReport_Files/ 160 | Backup*/ 161 | UpgradeLog*.XML 162 | UpgradeLog*.htm 163 | 164 | # SQL Server files 165 | *.mdf 166 | *.ldf 167 | 168 | # Business Intelligence projects 169 | *.rdl.data 170 | *.bim.layout 171 | *.bim_*.settings 172 | 173 | # Microsoft Fakes 174 | FakesAssemblies/ 175 | -------------------------------------------------------------------------------- /dnEditor/Images/ILSpyNewIconList.txt: -------------------------------------------------------------------------------- 1 | Currently used in ILSpy #D Icon 2 | 3 | Assembly.png ClassBrowserIcons\Icons.16x16.Reference.png 4 | AssemblyList.png new (Fugue-Icon-Mashup) 5 | AssemblyWarning.png new (Fugue-Icon-Mashup) 6 | Back.png BitmapResources-data\Icons.16x16.BrowserBefore.png 7 | Breakpoint.png Bookmarks\Breakpoint.png 8 | Class.png ClassBrowserIcons\Icons.16x16.Class.png 9 | ClearSearch.png new (Fugue: Cross-white.png) 10 | Constructor.png new (SharpDevelop-Team) 11 | CurrentLine.png BitmapResources-Data\Icons.16x16.SelectionArrow.png 12 | Delegate.png ClassBrowserIcons\Icons.16x16.Delegate.png 13 | Delete.png BitmapResources-data\Icons.16x16.DeleteIcon.png 14 | DisabledBreakpoint.png Bookmarks\DisabledBreakpoint.png 15 | Enum.png ClassBrowserIcons\Icons.16x16.Enum.png 16 | EnumValue.png new (SharpDevelop-Team) 17 | Event.png ClassBrowserIcons\Icons.16x16.Event.png 18 | ExtensionMethod.png ClassBrowserIcons\Icons.16x16.ExtensionMethod.png 19 | Field.png ClassBrowserIcons\Icons.16x16.Field.png 20 | FieldReadOnly.png new (SharpDevelop-Team) 21 | Find.png BitmapResources-data\Icons.16x16.FindIcon.png 22 | FindAssembly.png new (Fugue-Icon-Mashup) 23 | Folder.Closed.png ClassBrowserIcons\Folder.Closed.png 24 | Folder.Open.png ClassBrowserIcons\Folder.Open.png 25 | Forward.png BitmapResources-Data\Icons.16x16.BrowserAfter.png 26 | Indexer.png ClassBrowserIcons\Icons.16x16.Indexer.png 27 | Interface.png ClassBrowserIcons\Icons.16x16.Interface.png 28 | Library.png new (Fugue derived) 29 | Literal.png ClassBrowserIcons\Icons.16x16.Literal.png 30 | Method.png ClassBrowserIcons\Icons.16x16.Method.png 31 | NameSpace.png ClassBrowserIcons\Icons.16x16.NameSpace.png 32 | OK.png BitmapResources-data\Icons.16x16.OK.png 33 | Open.png BitmapResources-data\Icons.16x16.OpenFileIcon.png 34 | Operator.png ClassBrowserIcons\Icons.16x16.Operator.png 35 | OverlayCompilerControlled.png new (Fugue derived) 36 | OverlayInternal.png new (Fugue derived) 37 | OverlayPrivate.png new (Fugue derived) 38 | OverlayProtected.png new (Fugue derived) 39 | OverlayProtectedInternal.png new (Fugue derived) 40 | OverlayStatic.png new (Fugue derived) 41 | PInvokeMethod.png new (Fugue-Icon-Mashup) 42 | PrivateInternal.png new (Fugue derived) 43 | Property.png ClassBrowserIcons\Icons.16x16.Property.png 44 | ReferenceFolder.Closed.png ProjectBrowserIcons\ReferenceFolder.Closed.png 45 | ReferenceFolder.Open.png ProjectBrowserIcons\ReferenceFolder.Open.png 46 | Refresh.png BitmapResources-data\Icons.16x16.Refresh.png 47 | Resource.png BitmapResources-data\Icons.16x16.SideBarDocument.png 48 | ResourceImage.png BitmapResources-data\Icons.16x16.ResourceEditor.bmp.png 49 | ResourceResourcesFile.png new (Fugue-Icon-Mashup) 50 | ResourceXml.png backendicons\miscFiles\Icons.16x16.XMLFileIcon.png 51 | ResourceXsd.png backendicons\miscFiles\XSD_16.png 52 | ResourceXslt.png backendicons\miscFiles\XSL_16.png 53 | SaveFile.png BitmapResources-data\Icons.16x16.SaveIcon.png 54 | Search.png BitmapResources-data\Icons.16x16.FindIcon.png 55 | StaticClass.png new (Fugue-Icon-Mashup) 56 | Struct.png ClassBrowserIcons\Icons.16x16.Struct.png 57 | SubTypes.png new (Fugue: arrow-turn-270.png) 58 | SuperTypes.png new (Fugue: arrow-turn-090-left.png) 59 | ViewCode.png BitmapResources-data\Icons.16x16.FormsDesigner.ViewCode.png 60 | VirtualMethod.png new (SharpDevelop-Team) 61 | -------------------------------------------------------------------------------- /dnEditor/Misc/MemberPath.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using dnlib.DotNet; 4 | 5 | namespace dnEditor.Misc 6 | { 7 | public class MemberPath 8 | { 9 | public List Path = new List(); 10 | 11 | public MemberPath(object member) 12 | { 13 | if (member == null) 14 | throw new ArgumentNullException("Member argument is invalid!"); 15 | 16 | if (member is TypeDef) 17 | { 18 | GetTypePath(member); 19 | } 20 | else if (member is MethodDef) 21 | { 22 | GetMethodPath(member); 23 | } 24 | else if (member is FieldDef) 25 | { 26 | GetFieldPath(member); 27 | } 28 | else if (member is PropertyDef) 29 | { 30 | GetPropertyPath(member); 31 | } 32 | else if (member is EventDef) 33 | { 34 | GetEventPath(member); 35 | } 36 | 37 | Path.Reverse(); 38 | } 39 | 40 | private void GetEventPath(object member) 41 | { 42 | var @event = (EventDef) member; 43 | 44 | Path.Add(@event); 45 | 46 | if (@event.DeclaringType != null) 47 | { 48 | Path.Add(@event.DeclaringType); 49 | TypeDef type = @event.DeclaringType; 50 | 51 | while (type.DeclaringType != null) 52 | { 53 | Path.Add(type.DeclaringType); 54 | type = type.DeclaringType; 55 | } 56 | } 57 | } 58 | 59 | private void GetPropertyPath(object member) 60 | { 61 | var property = (PropertyDef) member; 62 | 63 | Path.Add(property); 64 | 65 | if (property.DeclaringType != null) 66 | { 67 | Path.Add(property.DeclaringType); 68 | TypeDef type = property.DeclaringType; 69 | 70 | while (type.DeclaringType != null) 71 | { 72 | Path.Add(type.DeclaringType); 73 | type = type.DeclaringType; 74 | } 75 | } 76 | } 77 | 78 | private void GetFieldPath(object member) 79 | { 80 | var field = (FieldDef) member; 81 | 82 | Path.Add(field); 83 | 84 | if (field.DeclaringType != null) 85 | { 86 | Path.Add(field.DeclaringType); 87 | TypeDef type = field.DeclaringType; 88 | 89 | while (type.DeclaringType != null) 90 | { 91 | Path.Add(type.DeclaringType); 92 | type = type.DeclaringType; 93 | } 94 | } 95 | } 96 | 97 | private void GetMethodPath(object member) 98 | { 99 | var method = (MethodDef) member; 100 | 101 | Path.Add(method); 102 | 103 | if (method.DeclaringType != null) 104 | { 105 | Path.Add(method.DeclaringType); 106 | TypeDef type = method.DeclaringType; 107 | 108 | while (type.DeclaringType != null) 109 | { 110 | Path.Add(type.DeclaringType); 111 | type = type.DeclaringType; 112 | } 113 | } 114 | } 115 | 116 | private void GetTypePath(object member) 117 | { 118 | var type = (TypeDef) member; 119 | 120 | Path.Add(type); 121 | 122 | while (type.DeclaringType != null) 123 | { 124 | Path.Add(type.DeclaringType); 125 | type = type.DeclaringType; 126 | } 127 | } 128 | } 129 | } -------------------------------------------------------------------------------- /dnEditor/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.0 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 dnEditor.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("dnEditor.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 string similar to add=Adds two values and pushes the result onto the evaluation stack. 65 | ///add.ovf=Adds two integers, performs an overflow check, and pushes the result onto the evaluation stack. 66 | ///add.ovf.un=Adds two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack. 67 | ///and=Computes the bitwise AND of two values and pushes the result onto the evalution stack. 68 | ///arglist=Returns an unmanaged pointer to the argument list of the current method. 69 | ///beq=Transfers control to a target instru [rest of string was truncated]";. 70 | /// 71 | internal static string MSIL_Dictionary { 72 | get { 73 | return ResourceManager.GetString("MSIL_Dictionary", resourceCulture); 74 | } 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /dnEditor/Misc/ColorRules.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Drawing; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using dnEditor.Forms; 6 | using dnlib.DotNet.Emit; 7 | 8 | namespace dnEditor.Misc 9 | { 10 | public static class ColorRules 11 | { 12 | public static Dictionary Rules = new Dictionary(); 13 | 14 | static ColorRules() 15 | { 16 | List calls = 17 | Functions.OpCodes.Where(opcode => opcode.OperandType == OperandType.InlineMethod || 18 | opcode.OperandType == OperandType.InlineSig).ToList(); 19 | 20 | foreach (OpCode opCode in calls) 21 | { 22 | var row = new ColoredRow 23 | { 24 | OpCodeText = Color.MediumBlue, 25 | OperandText = Color.MediumBlue 26 | }; 27 | 28 | Rules.Add(opCode, row); 29 | } 30 | 31 | var stringRow = new ColoredRow 32 | { 33 | OpCodeText = Color.DarkRed, 34 | OperandText = Color.DarkRed 35 | }; 36 | 37 | Rules.Add(OpCodes.Ldstr, stringRow); 38 | 39 | var retRow = new ColoredRow 40 | { 41 | OpCodeBackground = Color.Yellow 42 | }; 43 | 44 | Rules.Add(OpCodes.Ret, retRow); 45 | Rules.Add(OpCodes.Rethrow, retRow); 46 | 47 | List jumps = 48 | Functions.OpCodes.Where(opcode => opcode.OperandType == OperandType.ShortInlineBrTarget || 49 | opcode.OperandType == OperandType.InlineBrTarget).ToList(); 50 | 51 | foreach (OpCode opCode in jumps) 52 | { 53 | var row = new ColoredRow 54 | { 55 | OpCodeText = Color.DarkMagenta, 56 | OperandText = Color.DarkMagenta 57 | }; 58 | 59 | Rules.Add(opCode, row); 60 | } 61 | } 62 | 63 | public static void ApplyColors(DataGridView dgView) 64 | { 65 | if (dgView == null || dgView.ColumnCount == 0 || dgView.RowCount == 0) return; 66 | 67 | foreach (DataGridViewRow row in dgView.Rows) 68 | { 69 | string opcode = row.Cells["opcode"].Value.ToString().Trim(' '); 70 | 71 | if (Rules.Keys.Count(key => key.Name == opcode) > 0) 72 | { 73 | OpCode opCode = Rules.Keys.First(key => key.Name == opcode); 74 | 75 | ColoredRow coloredRow = Rules.First(o => o.Key == opCode).Value; 76 | 77 | /* Color darkening for instruction blocks 78 | 79 | if (row.DefaultCellStyle.BackColor == BlockColor) 80 | { 81 | newColor = Color.FromArgb(newColor.R - 17 < 0 ? newColor.R : newColor.R - 17, 82 | newColor.G - 23 < 0 ? newColor.G : newColor.G - 23, 83 | newColor.B - 85 < 0 ? newColor.B : newColor.B - 85); 84 | }*/ 85 | 86 | row.Cells[2].Style.ForeColor = coloredRow.OpCodeText; 87 | 88 | if (coloredRow.OpCodeBackground != DefaultColors.RowColor && 89 | coloredRow.OpCodeBackground != DefaultColors.RowBlockColor) 90 | { 91 | row.Cells[2].Style.BackColor = coloredRow.OpCodeBackground; 92 | } 93 | 94 | row.Cells[3].Style.ForeColor = coloredRow.OperandText; 95 | } 96 | } 97 | } 98 | 99 | public static void MarkBlocks(DataGridView dgView) 100 | { 101 | if (dgView == null || dgView.ColumnCount == 0 || dgView.RowCount == 0) return; 102 | 103 | List list = InstructionBlock.Find(MainForm.CurrentAssembly.Method); 104 | 105 | bool changeColor = false; 106 | foreach (InstructionBlock ib in list) 107 | { 108 | if (changeColor) 109 | { 110 | for (int i = ib.StartIndex; i <= ib.EndIndex; i++) 111 | { 112 | dgView.Rows[i].DefaultCellStyle.BackColor = DefaultColors.RowBlockColor; 113 | } 114 | } 115 | changeColor = !changeColor; 116 | } 117 | } 118 | } 119 | } -------------------------------------------------------------------------------- /dnEditor/Forms/EditVariableForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using dnEditor.Misc; 4 | using dnlib.DotNet; 5 | using dnlib.DotNet.Emit; 6 | 7 | namespace dnEditor.Forms 8 | { 9 | public enum EditVariableMode 10 | { 11 | Add, 12 | Edit, 13 | InsertBefore, 14 | InsertAfter 15 | } 16 | 17 | public partial class EditVariableForm : Form 18 | { 19 | public static object SelectedReference; 20 | 21 | public EditVariableForm(Local local) 22 | { 23 | InitializeComponent(); 24 | cbTypeSpecification.SelectedIndex = 0; 25 | 26 | RestoreVariable(local); 27 | } 28 | 29 | public EditVariableForm() 30 | { 31 | InitializeComponent(); 32 | cbTypeSpecification.SelectedIndex = 0; 33 | } 34 | 35 | private void RestoreVariable(Local local) 36 | { 37 | if (local.Name != null && !string.IsNullOrWhiteSpace(local.Name)) 38 | { 39 | txtVariableName.Text = local.Name; 40 | } 41 | 42 | if (local.Type != null) 43 | { 44 | cbVariableType.Enabled = false; 45 | cbVariableType.DropDownStyle = ComboBoxStyle.Simple; 46 | SelectedReference = local.Type; 47 | cbVariableType.Items.Add(SelectedReference); 48 | cbVariableType.SelectedIndex = 0; 49 | 50 | if (local.Type.IsSZArray) 51 | cbTypeSpecification.SelectItemByText("Array"); 52 | else if (local.Type.IsArray) 53 | cbTypeSpecification.SelectItemByText("Multi-dimensional array"); 54 | else if (local.Type.IsByRef) 55 | cbTypeSpecification.SelectItemByText("Reference"); 56 | else if (local.Type.IsPointer) 57 | cbTypeSpecification.SelectItemByText("Pointer"); 58 | else 59 | cbTypeSpecification.SelectItemByText("None"); 60 | } 61 | } 62 | 63 | private void btnClose_Click(object sender, EventArgs e) 64 | { 65 | Close(); 66 | } 67 | 68 | private void btnOk_Click(object sender, EventArgs e) 69 | { 70 | var variable = new Local(cbVariableType.SelectedItem as TypeSig); 71 | 72 | if (variable.Type == null) 73 | return; 74 | 75 | while (variable.Type.Next != null && 76 | ((variable.Type.IsArray || variable.Type.IsByRef || variable.Type.IsPointer || 77 | variable.Type.IsSZArray))) 78 | { 79 | variable.Type = variable.Type.Next; 80 | } 81 | 82 | switch (cbTypeSpecification.SelectedItem.ToString()) 83 | { 84 | case "Array": 85 | variable.Type = new SZArraySig(variable.Type); 86 | break; 87 | case "Multi-dimensional array": 88 | variable.Type = new ArraySig(variable.Type); 89 | break; 90 | case "Reference": 91 | variable.Type = new ByRefSig(variable.Type); 92 | break; 93 | case "Pointer": 94 | variable.Type = new PtrSig(variable.Type); 95 | break; 96 | } 97 | 98 | if (!string.IsNullOrWhiteSpace(txtVariableName.Text)) 99 | { 100 | variable.Name = txtVariableName.Text; 101 | } 102 | 103 | MainForm.NewVariable = variable; 104 | 105 | Close(); 106 | } 107 | 108 | private void btnVariableType_Click(object sender, EventArgs e) 109 | { 110 | cbVariableType.Enabled = false; 111 | cbVariableType.DropDownStyle = ComboBoxStyle.Simple; 112 | var form = new PickReferenceForm("Type"); 113 | form.FormClosed += form_FormClosed; 114 | form.ShowDialog(); 115 | } 116 | 117 | private void form_FormClosed(object sender, FormClosedEventArgs e) 118 | { 119 | if (SelectedReference == null) return; 120 | 121 | cbVariableType.Items.Clear(); 122 | 123 | SelectedReference = 124 | MainForm.CurrentAssembly.ManifestModule.Import((SelectedReference as ITypeDefOrRef).ToTypeSig()); 125 | cbVariableType.Items.Add(SelectedReference); 126 | 127 | cbVariableType.SelectedIndex = 0; 128 | } 129 | } 130 | } -------------------------------------------------------------------------------- /dnEditor/Misc/InstructionBlock.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using dnlib.DotNet; 4 | using dnlib.DotNet.Emit; 5 | 6 | namespace dnEditor.Misc 7 | { 8 | /* 9 | * FULL CREDITS OF THIS CLASS GO TO THE CODER OF SIMPLE ASSEMBLY EXPLORER. 10 | * I FULLY COPIED IT AND TAKE NO CREDIT FOR HIS WORK! 11 | */ 12 | 13 | public class InstructionBlock 14 | { 15 | public InstructionBlock(int startIndex, int endIndex) 16 | { 17 | StartIndex = startIndex; 18 | 19 | EndIndex = endIndex < startIndex ? startIndex : endIndex; 20 | } 21 | 22 | public int StartIndex { get; set; } 23 | public int EndIndex { get; set; } 24 | public InstructionBlock NextBlock { get; private set; } 25 | 26 | public int JumpDownRefCount { get; private set; } 27 | public int JumpUpRefCount { get; private set; } 28 | 29 | public int RefCount 30 | { 31 | get { return JumpDownRefCount + JumpUpRefCount; } 32 | } 33 | 34 | public int Size 35 | { 36 | get { return EndIndex - StartIndex + 1; } 37 | } 38 | 39 | public override string ToString() 40 | { 41 | return String.Format("{0}-{1}", StartIndex, EndIndex); 42 | } 43 | 44 | public static List Find(MethodDef method) 45 | { 46 | var list = new List(); 47 | 48 | if (method == null || !method.HasBody) 49 | return list; 50 | 51 | IList instructions = method.Body.Instructions; 52 | if (instructions.Count < 1) 53 | return list; 54 | 55 | int firstIndex = 0; 56 | int lastIndex = firstIndex; 57 | 58 | Instruction insLast = instructions[lastIndex]; 59 | while (lastIndex < instructions.Count) 60 | { 61 | if (IsBlockDelimiter(insLast) || lastIndex + 1 >= instructions.Count) 62 | { 63 | var instructionBlock = new InstructionBlock(firstIndex, lastIndex); 64 | list.Add(instructionBlock); 65 | 66 | firstIndex = lastIndex + 1; 67 | lastIndex = firstIndex; 68 | } 69 | else 70 | { 71 | lastIndex++; 72 | } 73 | if (lastIndex >= instructions.Count) 74 | break; 75 | insLast = instructions[lastIndex]; 76 | } 77 | 78 | int insCount = 0; 79 | foreach (InstructionBlock firstBlock in list) 80 | { 81 | insCount += firstBlock.EndIndex - firstBlock.StartIndex + 1; 82 | 83 | Instruction insTo = null; 84 | if (instructions[firstBlock.EndIndex].Operand is Instruction) 85 | { 86 | insTo = instructions[firstBlock.EndIndex].Operand as Instruction; 87 | } 88 | if (insTo != null) 89 | { 90 | int to = instructions.IndexOf(insTo); 91 | foreach (InstructionBlock nextBlock in list) 92 | { 93 | if (nextBlock.StartIndex == firstBlock.StartIndex) 94 | continue; 95 | if (nextBlock.StartIndex <= to && to <= nextBlock.EndIndex) 96 | { 97 | firstBlock.NextBlock = nextBlock; 98 | 99 | if (firstBlock.StartIndex < nextBlock.StartIndex) 100 | nextBlock.JumpDownRefCount++; 101 | else 102 | nextBlock.JumpUpRefCount++; 103 | } 104 | } 105 | } 106 | } 107 | 108 | if (insCount != instructions.Count) 109 | { 110 | throw new ApplicationException("Internal error in InstructionBlock.Find !"); 111 | } 112 | 113 | return list; 114 | } 115 | 116 | public static bool IsBlockDelimiter(Instruction instruction) 117 | { 118 | if (instruction == null) return false; 119 | 120 | switch (instruction.OpCode.FlowControl) 121 | { 122 | case FlowControl.Branch: 123 | return true; 124 | case FlowControl.Return: 125 | return true; 126 | case FlowControl.Throw: 127 | return true; 128 | } 129 | 130 | return false; 131 | } 132 | } 133 | } -------------------------------------------------------------------------------- /dnEditor/Handlers/VirtualNodeHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using dnlib.DotNet; 6 | 7 | namespace dnEditor.Handlers 8 | { 9 | public class VirtualNode 10 | { 11 | public static string Name = "VIRTNODE"; 12 | } 13 | 14 | public class DeVirtualNode 15 | { 16 | public static string Name = "DEVIRTNODE"; 17 | } 18 | 19 | public static class VirtualNodeHandler 20 | { 21 | public static int VirtualNodes; 22 | } 23 | 24 | public class NodeDevirtualizer 25 | { 26 | public delegate void EventHandler(TreeNode processedNode); 27 | 28 | private readonly TreeViewHandler _treeViewHandler; 29 | public TreeNode Node; 30 | 31 | public NodeDevirtualizer(TreeNode node, TreeViewHandler treeViewHandler) 32 | { 33 | Node = node; 34 | _treeViewHandler = treeViewHandler; 35 | } 36 | 37 | public event EventHandler WorkerFinished; 38 | 39 | public void ProcessNode() 40 | { 41 | var bw = new BackgroundWorker(); 42 | bw.DoWork += bw_DoWork; 43 | bw.RunWorkerCompleted += bw_RunWorkerCompleted; 44 | 45 | bw.RunWorkerAsync(); 46 | } 47 | 48 | private void bw_DoWork(object sender, DoWorkEventArgs e) 49 | { 50 | TreeNode node = Node; 51 | 52 | var children = new List(); 53 | 54 | if (node == _treeViewHandler.RefNode || node.Tag is AssemblyRef) // Assembly Reference 55 | { 56 | var referenceHandler = new ReferenceHandler(_treeViewHandler); 57 | referenceHandler.ProcessAssemblyRefs(out children); 58 | } 59 | else if (node.Tag is ModuleDefMD) // Module 60 | { 61 | foreach (TypeDef type in (node.Tag as ModuleDefMD).Types.OrderBy(t => t.Name.ToLower())) 62 | { 63 | new TypeHandler(_treeViewHandler).HandleType(type, true); 64 | } 65 | } 66 | else if (node.Tag is TypeDef) // Type 67 | { 68 | new TypeHandler(_treeViewHandler).ProcessTypeMembers(node, ref children); 69 | } 70 | 71 | Node = node; 72 | e.Result = new object[] {children.ToArray()}; 73 | } 74 | 75 | private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 76 | { 77 | var result = e.Result as object[]; 78 | if (result != null) 79 | { 80 | var children = result[0] as TreeNode[]; 81 | 82 | if (children != null && children.Length > 0) 83 | foreach (TreeNode child in children) 84 | { 85 | Node.Nodes.Add(child); 86 | } 87 | } 88 | 89 | if (WorkerFinished != null) 90 | WorkerFinished.Invoke(Node); 91 | } 92 | } 93 | 94 | public static class VirtualNodeUtilities 95 | { 96 | public static TreeNode NewVirtualNode() 97 | { 98 | var node = new TreeNode(VirtualNode.Name) 99 | { 100 | Tag = new VirtualNode() 101 | }; 102 | 103 | VirtualNodeHandler.VirtualNodes++; 104 | 105 | return node; 106 | } 107 | 108 | public static TreeNode NewDeVirtualNode() 109 | { 110 | var node = new TreeNode(DeVirtualNode.Name) 111 | { 112 | Tag = new DeVirtualNode() 113 | }; 114 | 115 | return node; 116 | } 117 | 118 | public static TreeNode FindVirtualNode(this TreeNode node) 119 | { 120 | return node.Nodes.Cast().FirstOrDefault(n => n.Text == VirtualNode.Name && n.Tag is VirtualNode); 121 | } 122 | 123 | public static TreeNode FindDeVirtualNode(this TreeNode node) 124 | { 125 | return node.Nodes.Cast().FirstOrDefault(n => n.Text == DeVirtualNode.Name && n.Tag is DeVirtualNode); 126 | } 127 | 128 | public static bool HasVirtualNode(this TreeNode node) 129 | { 130 | if (node.FindVirtualNode() != null) 131 | return true; 132 | 133 | return false; 134 | } 135 | 136 | public static bool HasDeVirtualNode(this TreeNode node) 137 | { 138 | if (node.FindDeVirtualNode() != null) 139 | return true; 140 | 141 | return false; 142 | } 143 | 144 | public static void ExpandHandler(TreeNode expandedNode, TreeViewHandler treeViewHandler) 145 | { 146 | if (expandedNode.HasVirtualNode()) 147 | { 148 | var processor = new NodeDevirtualizer(expandedNode, treeViewHandler); 149 | processor.ProcessNode(); 150 | VirtualNodeHandler.VirtualNodes--; 151 | expandedNode.Nodes.Remove(expandedNode.FindVirtualNode()); 152 | } 153 | } 154 | 155 | public static void Virtualize(this TreeNode node) 156 | { 157 | node.Nodes.Clear(); 158 | NewVirtualNode().AddTo(node); 159 | } 160 | } 161 | } -------------------------------------------------------------------------------- /dnEditor/Forms/PickReferenceForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using dnEditor.Handlers; 4 | using dnEditor.Misc; 5 | using dnlib.DotNet; 6 | 7 | namespace dnEditor.Forms 8 | { 9 | public partial class PickReferenceForm : Form, ITreeView, ITreeMenu 10 | { 11 | private readonly string _reference; 12 | private readonly TreeViewHandler _treeViewHandler; 13 | private CurrentAssembly _currentAssembly = MainForm.CurrentAssembly; 14 | 15 | public PickReferenceForm(string reference) 16 | { 17 | InitializeComponent(); 18 | _treeViewHandler = new TreeViewHandler(treeView1, treeMenu); 19 | 20 | treeView1.AllowDrop = true; 21 | 22 | _reference = reference; 23 | 24 | //TODO: Add detection to avoid useless assignment 25 | EditInstructionForm.SelectedReference = null; 26 | EditVariableForm.SelectedReference = null; 27 | EditExceptionHandlerForm.SelectedReference = null; 28 | } 29 | 30 | private void btnSelect_Click(object sender, EventArgs e) 31 | { 32 | //TODO: Add detection to remove avoid assignment 33 | EditInstructionForm.SelectedReference = treeView1.SelectedNode.Tag; 34 | EditVariableForm.SelectedReference = treeView1.SelectedNode.Tag; 35 | EditExceptionHandlerForm.SelectedReference = treeView1.SelectedNode.Tag; 36 | 37 | Close(); 38 | } 39 | 40 | #region TreeView Events 41 | 42 | public void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 43 | { 44 | _treeViewHandler.SelectedNode = null; 45 | TreeNode assemblyNode = e.Node.FirstParentNode(); 46 | 47 | if (_currentAssembly == null || _currentAssembly.ManifestModule != assemblyNode.Tag as ModuleDefMD) 48 | { 49 | _currentAssembly = new CurrentAssembly(assemblyNode.Tag as ModuleDefMD) 50 | { 51 | Path = assemblyNode.ToolTipText 52 | }; 53 | } 54 | 55 | if (e.Node.Tag is MethodDef && _reference == "Method") 56 | btnSelect.Enabled = true; 57 | else if (e.Node.Tag is FieldDef && _reference == "Field") 58 | btnSelect.Enabled = true; 59 | else if (e.Node.Tag is TypeDef && _reference == "Type") 60 | btnSelect.Enabled = true; 61 | else 62 | btnSelect.Enabled = false; 63 | 64 | if (e.Button == MouseButtons.Right) 65 | { 66 | _treeViewHandler.SelectedNode = e.Node; 67 | } 68 | } 69 | 70 | public void treeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) 71 | { 72 | _treeViewHandler.treeView_NodeMouseDoubleClick(sender, e, ref _currentAssembly); 73 | } 74 | 75 | public void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 76 | { 77 | _treeViewHandler.treeView1_NodeMouseHover(sender, e); 78 | } 79 | 80 | public void treeView_DragDrop(object sender, DragEventArgs e) 81 | { 82 | string result = _treeViewHandler.DragDrop(sender, e); 83 | if (!string.IsNullOrEmpty(result)) 84 | { 85 | Functions.OpenFile(_treeViewHandler, result, ref _currentAssembly); 86 | } 87 | } 88 | 89 | public void treeView_DragEnter(object sender, DragEventArgs e) 90 | { 91 | _treeViewHandler.DragEnter(sender, e); 92 | } 93 | 94 | public void treeView_AfterExpand(object sender, TreeViewEventArgs e) 95 | { 96 | if (MainForm.HandleExpand) 97 | VirtualNodeUtilities.ExpandHandler(e.Node, _treeViewHandler); 98 | } 99 | 100 | private void PickReferenceForm_Shown(object sender, EventArgs e) 101 | { 102 | Functions.OpenFile(_treeViewHandler, _currentAssembly.Path, ref _currentAssembly); 103 | } 104 | 105 | #endregion TreeView Events 106 | 107 | #region TreeMenuStrip 108 | 109 | public void treeMenu_Opened(object sender, EventArgs e) 110 | { 111 | _treeViewHandler.treeMenu_Opened(sender, e); 112 | } 113 | 114 | public void goToEntryPointToolStripMenuItem_Click(object sender, EventArgs e) 115 | { 116 | _treeViewHandler.goToEntryPointToolStripMenuItem_Click(sender, e); 117 | } 118 | 119 | public void goToModuleCCtorToolStripMenuItem_Click(object sender, EventArgs e) 120 | { 121 | _treeViewHandler.goToModuleCCtorToolStripMenuItem_Click(sender, e); 122 | } 123 | 124 | public void expandToolStripMenuItem_Click(object sender, EventArgs e) 125 | { 126 | _treeViewHandler.expandToolStripMenuItem_Click(sender, e); 127 | } 128 | 129 | public void collapseToolStripMenuItem_Click(object sender, EventArgs e) 130 | { 131 | _treeViewHandler.collapseToolStripMenuItem_Click(sender, e); 132 | } 133 | 134 | public void collapseAllToolStripMenuItem_Click(object sender, EventArgs e) 135 | { 136 | _treeViewHandler.collapseAllToolStripMenuItem_Click(sender, e); 137 | } 138 | 139 | public void closeToolStripMenuItem_Click(object sender, EventArgs e) 140 | { 141 | _treeViewHandler.closeToolStripMenuItem_Click(sender, e, ref _currentAssembly); 142 | } 143 | 144 | #endregion TreeMenuStrip 145 | } 146 | } -------------------------------------------------------------------------------- /dnEditor/Forms/EditVariableForm.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /dnEditor/Forms/WriteAssemblyForm.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /dnEditor/Forms/EditInstructionForm.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /dnEditor/Forms/EditExceptionHandlerForm.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /dnEditor/Misc/ILSpy/Languages/Language.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this 4 | // software and associated documentation files (the "Software"), to deal in the Software 5 | // without restriction, including without limitation the rights to use, copy, modify, merge, 6 | // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 7 | // to whom the Software is furnished to do so, subject to the following conditions: 8 | // 9 | // The above copyright notice and this permission notice shall be included in all copies or 10 | // substantial portions of the Software. 11 | // 12 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 13 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 14 | // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 15 | // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 16 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 17 | // DEALINGS IN THE SOFTWARE. 18 | 19 | using System; 20 | using System.Collections.Generic; 21 | using ICSharpCode.Decompiler; 22 | using Mono.Cecil; 23 | 24 | namespace ICSharpCode.ILSpy 25 | { 26 | /// 27 | /// Base class for language-specific decompiler implementations. 28 | /// 29 | public abstract class Language 30 | { 31 | /// 32 | /// Gets the name of the language (as shown in the UI) 33 | /// 34 | public abstract string Name { get; } 35 | 36 | /// 37 | /// Gets the file extension used by source code files in this language. 38 | /// 39 | public abstract string FileExtension { get; } 40 | 41 | public virtual string ProjectFileExtension 42 | { 43 | get { return null; } 44 | } 45 | 46 | public virtual void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options) 47 | { 48 | WriteCommentLine(output, TypeToString(method.DeclaringType, true) + "." + method.Name); 49 | } 50 | 51 | public virtual void DecompileProperty(PropertyDefinition property, ITextOutput output, 52 | DecompilationOptions options) 53 | { 54 | WriteCommentLine(output, TypeToString(property.DeclaringType, true) + "." + property.Name); 55 | } 56 | 57 | public virtual void DecompileField(FieldDefinition field, ITextOutput output, DecompilationOptions options) 58 | { 59 | WriteCommentLine(output, TypeToString(field.DeclaringType, true) + "." + field.Name); 60 | } 61 | 62 | public virtual void DecompileEvent(EventDefinition ev, ITextOutput output, DecompilationOptions options) 63 | { 64 | WriteCommentLine(output, TypeToString(ev.DeclaringType, true) + "." + ev.Name); 65 | } 66 | 67 | public virtual void DecompileType(TypeDefinition type, ITextOutput output, DecompilationOptions options) 68 | { 69 | WriteCommentLine(output, TypeToString(type, true)); 70 | } 71 | 72 | public virtual void DecompileNamespace(string nameSpace, IEnumerable types, ITextOutput output, 73 | DecompilationOptions options) 74 | { 75 | WriteCommentLine(output, nameSpace); 76 | } 77 | 78 | //wicky.patch.start 79 | public virtual void DecompileAssembly(AssemblyDefinition assembly, ITextOutput output, 80 | DecompilationOptions options) 81 | { 82 | WriteCommentLine(output, assembly.MainModule.FullyQualifiedName); 83 | WriteCommentLine(output, assembly.FullName); 84 | } 85 | 86 | //wicky.patch.end 87 | 88 | public virtual void WriteCommentLine(ITextOutput output, string comment) 89 | { 90 | output.WriteLine("// " + comment); 91 | } 92 | 93 | /// 94 | /// Converts a type reference into a string. This method is used by the member tree node for parameter and return 95 | /// types. 96 | /// 97 | public virtual string TypeToString(TypeReference type, bool includeNamespace, 98 | ICustomAttributeProvider typeAttributes = null) 99 | { 100 | if (includeNamespace) 101 | return type.FullName; 102 | return type.Name; 103 | } 104 | 105 | /// 106 | /// Converts a member signature to a string. 107 | /// This is used for displaying the tooltip on a member reference. 108 | /// 109 | public virtual string GetTooltip(MemberReference member) 110 | { 111 | if (member is TypeReference) 112 | return TypeToString((TypeReference) member, true); 113 | return member.ToString(); 114 | } 115 | 116 | public virtual string FormatPropertyName(PropertyDefinition property, bool? isIndexer = null) 117 | { 118 | if (property == null) 119 | throw new ArgumentNullException("property"); 120 | return property.Name; 121 | } 122 | 123 | public virtual string FormatTypeName(TypeDefinition type) 124 | { 125 | if (type == null) 126 | throw new ArgumentNullException("type"); 127 | return type.Name; 128 | } 129 | 130 | /// 131 | /// Used for WPF keyboard navigation. 132 | /// 133 | public override string ToString() 134 | { 135 | return Name; 136 | } 137 | 138 | public virtual bool ShowMember(MemberReference member) 139 | { 140 | return true; 141 | } 142 | 143 | /// 144 | /// Used by the analyzer to map compiler generated code back to the original code's location 145 | /// 146 | public virtual MemberReference GetOriginalCodeLocation(MemberReference member) 147 | { 148 | return member; 149 | } 150 | } 151 | } -------------------------------------------------------------------------------- /dnEditor/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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\MSIL Dictionary.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 123 | 124 | -------------------------------------------------------------------------------- /dnEditor/Misc/MonoTranslator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Windows.Forms; 6 | using dnEditor.Forms; 7 | using dnEditor.Handlers; 8 | using dnEditor.Misc.ILSpy; 9 | using dnlib.DotNet; 10 | using dnlib.DotNet.Writer; 11 | using Mono.Cecil; 12 | 13 | namespace dnEditor.Misc 14 | { 15 | public static class MonoTranslator 16 | { 17 | public static AssemblyDefinition Translate(ModuleDefMD manifestModule) 18 | { 19 | using (var assemblyStream = new MemoryStream()) 20 | { 21 | try 22 | { 23 | if (manifestModule.IsILOnly) 24 | { 25 | var writerOptions = new ModuleWriterOptions(manifestModule); 26 | writerOptions.Logger = DummyLogger.NoThrowInstance; 27 | 28 | MetaDataOptions metaDataOptions = new MetaDataOptions(); 29 | metaDataOptions.Flags = MetaDataFlags.PreserveAll; 30 | 31 | manifestModule.Write(assemblyStream, writerOptions); 32 | } 33 | else 34 | { 35 | var writerOptions = new NativeModuleWriterOptions(manifestModule); 36 | writerOptions.Logger = DummyLogger.NoThrowInstance; 37 | 38 | MetaDataOptions metaDataOptions = new MetaDataOptions(); 39 | metaDataOptions.Flags = MetaDataFlags.PreserveAll; 40 | 41 | manifestModule.NativeWrite(assemblyStream, writerOptions); 42 | } 43 | } 44 | catch (Exception) 45 | { 46 | if (assemblyStream.Length == 0) 47 | return null; 48 | } 49 | 50 | assemblyStream.Position = 0; 51 | AssemblyDefinition newAssembly = AssemblyDefinition.ReadAssembly(assemblyStream); 52 | 53 | return newAssembly; 54 | } 55 | } 56 | 57 | public class Decompiler 58 | { 59 | private readonly BackgroundWorker _worker = new BackgroundWorker(); 60 | 61 | public void Start() 62 | { 63 | _worker.DoWork += worker_DoWork; 64 | _worker.RunWorkerAsync(); 65 | } 66 | 67 | private void worker_DoWork(object sender, DoWorkEventArgs e) 68 | { 69 | MainForm.RtbILSpy.BeginInvoke(new MethodInvoker(() => 70 | { 71 | ILSpyHandler.Clear(); 72 | MainForm.RtbILSpy.Text = Environment.NewLine + "Decompiling..." + Environment.NewLine + 73 | "First time might take a while."; 74 | })); 75 | 76 | try 77 | { 78 | AssemblyDefinition assembly = Translate(MainForm.CurrentAssembly.ManifestModule); 79 | 80 | if (assembly == null) 81 | throw new Exception("Could not write assembly to stream!"); 82 | 83 | var dnMethod = new MonoMethod(MainForm.CurrentAssembly.Method); 84 | object method = dnMethod.Method(assembly); 85 | 86 | if (method == null) 87 | return; 88 | 89 | var mtp = (IMetadataTokenProvider) method; 90 | method = assembly.MainModule.LookupToken(mtp.MetadataToken); 91 | 92 | if (method == null || string.IsNullOrEmpty(method.ToString())) 93 | { 94 | MainForm.RtbILSpy.BeginInvoke(new MethodInvoker( 95 | () => 96 | { 97 | ILSpyHandler.Clear(); 98 | MainForm.RtbILSpy.Text = Environment.NewLine + 99 | "Could not find member by Metadata Token!"; 100 | })); 101 | 102 | return; 103 | } 104 | 105 | DefaultAssemblyResolver bar = GlobalAssemblyResolver.Instance; 106 | bool savedRaiseResolveException = true; 107 | try 108 | { 109 | if (bar != null) 110 | { 111 | savedRaiseResolveException = bar.RaiseResolveException; 112 | bar.RaiseResolveException = false; 113 | } 114 | 115 | var il = new ILSpyDecompiler(); 116 | string source = il.Decompile(method); 117 | 118 | MainForm.RtbILSpy.BeginInvoke(new MethodInvoker(() => 119 | { 120 | ILSpyHandler.Clear(); 121 | MainForm.RtbILSpy.Rtf = source; 122 | })); 123 | } 124 | finally 125 | { 126 | if (bar != null) 127 | bar.RaiseResolveException = savedRaiseResolveException; 128 | } 129 | } 130 | catch (Exception o) 131 | { 132 | MainForm.RtbILSpy.BeginInvoke(new MethodInvoker( 133 | () => 134 | { 135 | ILSpyHandler.Clear(); 136 | MainForm.RtbILSpy.Text = Environment.NewLine + "Decompilation unsuccessful!" + 137 | Environment.NewLine + 138 | Environment.NewLine + o.Message; 139 | })); 140 | } 141 | } 142 | } 143 | 144 | public class MonoMethod 145 | { 146 | private readonly string _methodPath; 147 | private readonly string _typePath; 148 | 149 | public MonoMethod(MethodDef method) 150 | { 151 | _methodPath = method.FullName; 152 | _typePath = method.DeclaringType.FullName; 153 | } 154 | 155 | public MethodDefinition Method(AssemblyDefinition assembly) 156 | { 157 | TypeDefinition type = assembly.MainModule.GetType(_typePath); 158 | MethodDefinition method = type.Methods.First(m => m.FullName == _methodPath); 159 | 160 | return method; 161 | } 162 | } 163 | } 164 | } -------------------------------------------------------------------------------- /dnEditor/Forms/MultipleInstructionsSelectForm.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | True 122 | 123 | 124 | True 125 | 126 | 127 | True 128 | 129 | -------------------------------------------------------------------------------- /dnEditor/Forms/MultipleInstructionsSelectForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using dnEditor.Misc; 6 | using dnlib.DotNet.Emit; 7 | 8 | namespace dnEditor.Forms 9 | { 10 | public partial class MultipleInstructionsSelectForm : Form 11 | { 12 | public MultipleInstructionsSelectForm(IEnumerable instructions, IEnumerable selectedInstructions = null) 13 | { 14 | InitializeComponent(); 15 | Initialize(instructions, selectedInstructions); 16 | } 17 | 18 | private void MultipleInstructionsSelectForm_Load(object sender, EventArgs e) 19 | { 20 | EditInstructionForm.SelectedReference = null; 21 | } 22 | 23 | private DataGridViewRow NewInstructionRow(IEnumerable instructions, Instruction instruction) 24 | { 25 | string row = Functions.FormatFullInstruction(instructions.ToList(), 26 | instructions.ToList().IndexOf(instruction)); 27 | 28 | var item = new DataGridViewRow(); 29 | var cell = new DataGridViewTextBoxCell 30 | { 31 | Value = row 32 | }; 33 | 34 | item.Cells.Add(cell); 35 | item.Tag = instruction; 36 | 37 | return item; 38 | } 39 | 40 | private DataGridViewRow NewInstructionRow(string value, Instruction instruction) 41 | { 42 | string row = value; 43 | 44 | var item = new DataGridViewRow(); 45 | var cell = new DataGridViewTextBoxCell 46 | { 47 | Value = row 48 | }; 49 | 50 | item.Cells.Add(cell); 51 | item.Tag = instruction; 52 | 53 | return item; 54 | } 55 | 56 | private void Initialize(IEnumerable instructions, IEnumerable selectedInstructions) 57 | { 58 | foreach (Instruction instruction in instructions) 59 | { 60 | rightGridView.Rows.Add(NewInstructionRow(instructions, instruction)); 61 | } 62 | 63 | if (selectedInstructions == null) return; 64 | 65 | foreach (Instruction selectedInstruction in selectedInstructions) 66 | { 67 | DataGridViewRow item = 68 | rightGridView.Rows.Cast() 69 | .FirstOrDefault(r => r.Tag as Instruction == selectedInstruction); 70 | 71 | if (item == null) return; 72 | 73 | leftGridView.Rows.Add(NewInstructionRow(item.Cells[0].Value.ToString(), item.Tag as Instruction)); 74 | } 75 | } 76 | 77 | private void btnLeft_Click(object sender, EventArgs e) 78 | { 79 | if (rightGridView.SelectedRows.Count < 1) return; 80 | 81 | List rowList = rightGridView.SelectedRows.Cast().ToList(); 82 | rowList.Reverse(); 83 | 84 | foreach (DataGridViewRow selectedRow in rowList) 85 | { 86 | leftGridView.Rows.Add(NewInstructionRow(selectedRow.Cells[0].Value.ToString(), 87 | selectedRow.Tag as Instruction)); 88 | } 89 | } 90 | 91 | private void btnRight_Click(object sender, EventArgs e) 92 | { 93 | if (leftGridView.SelectedRows.Count < 1) return; 94 | 95 | foreach (DataGridViewRow selectedRow in leftGridView.SelectedRows) 96 | { 97 | leftGridView.Rows.Remove(selectedRow); 98 | } 99 | } 100 | 101 | private void btnTop_Click(object sender, EventArgs e) 102 | { 103 | if (leftGridView.SelectedRows.Count < 1) return; 104 | 105 | DataGridViewRow selectedRow = leftGridView.SelectedRows.TopmostRow(); 106 | 107 | leftGridView.Rows.Remove(selectedRow); 108 | leftGridView.Rows.Insert(0, selectedRow); 109 | 110 | leftGridView.ClearSelection(); 111 | leftGridView.Rows[0].Selected = true; 112 | } 113 | 114 | private void btnUp_Click(object sender, EventArgs e) 115 | { 116 | if (leftGridView.SelectedRows.Count < 1) return; 117 | 118 | DataGridViewRow row = leftGridView.SelectedRows.TopmostRow(); 119 | int index = leftGridView.SelectedRows.TopmostRow().Index; 120 | leftGridView.Rows.Remove(row); 121 | leftGridView.Rows.Insert(index - 1, row); 122 | 123 | leftGridView.ClearSelection(); 124 | leftGridView.Rows[index - 1].Selected = true; 125 | } 126 | 127 | private void btnDown_Click(object sender, EventArgs e) 128 | { 129 | if (leftGridView.SelectedRows.Count < 1) return; 130 | 131 | DataGridViewRow row = leftGridView.SelectedRows.TopmostRow(); 132 | int index = leftGridView.SelectedRows.TopmostRow().Index; 133 | leftGridView.Rows.Remove(row); 134 | leftGridView.Rows.Insert(index + 1, row); 135 | 136 | leftGridView.ClearSelection(); 137 | leftGridView.Rows[index + 1].Selected = true; 138 | } 139 | 140 | private void btnBottom_Click(object sender, EventArgs e) 141 | { 142 | if (leftGridView.SelectedRows.Count < 1) return; 143 | 144 | DataGridViewRow selectedRow = leftGridView.SelectedRows.TopmostRow(); 145 | 146 | leftGridView.Rows.Remove(selectedRow); 147 | leftGridView.Rows.Insert(leftGridView.Rows.Count, selectedRow); 148 | 149 | leftGridView.ClearSelection(); 150 | leftGridView.Rows[leftGridView.Rows.Count - 1].Selected = true; 151 | } 152 | 153 | private void btnCancel_Click(object sender, EventArgs e) 154 | { 155 | Close(); 156 | } 157 | 158 | private void btnOk_Click(object sender, EventArgs e) 159 | { 160 | Instruction[] instructions = 161 | leftGridView.Rows.Cast().Select(row => (row.Tag as Instruction)).ToArray(); 162 | EditInstructionForm.SelectedReference = instructions; 163 | Close(); 164 | } 165 | 166 | private void leftGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 167 | { 168 | leftGridView.Rows.RemoveAt(e.RowIndex); 169 | } 170 | 171 | private void rightGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 172 | { 173 | DataGridViewRow row = rightGridView.Rows[e.RowIndex]; 174 | 175 | leftGridView.Rows.Add(NewInstructionRow(row.Cells[0].Value.ToString(), 176 | row.Tag as Instruction)); 177 | } 178 | } 179 | } -------------------------------------------------------------------------------- /dnEditor/Forms/EditVariableForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace dnEditor.Forms 2 | { 3 | partial class EditVariableForm 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.cbVariableType = new System.Windows.Forms.ComboBox(); 32 | this.lblVariableName = new System.Windows.Forms.Label(); 33 | this.lblVariableType = new System.Windows.Forms.Label(); 34 | this.txtVariableName = new System.Windows.Forms.TextBox(); 35 | this.btnClose = new System.Windows.Forms.Button(); 36 | this.btnOk = new System.Windows.Forms.Button(); 37 | this.label1 = new System.Windows.Forms.Label(); 38 | this.cbTypeSpecification = new System.Windows.Forms.ComboBox(); 39 | this.btnVariableType = new System.Windows.Forms.Button(); 40 | this.SuspendLayout(); 41 | // 42 | // cbVariableType 43 | // 44 | this.cbVariableType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; 45 | this.cbVariableType.Enabled = false; 46 | this.cbVariableType.Location = new System.Drawing.Point(89, 40); 47 | this.cbVariableType.Name = "cbVariableType"; 48 | this.cbVariableType.Size = new System.Drawing.Size(301, 21); 49 | this.cbVariableType.TabIndex = 1; 50 | // 51 | // lblVariableName 52 | // 53 | this.lblVariableName.AutoSize = true; 54 | this.lblVariableName.Location = new System.Drawing.Point(11, 17); 55 | this.lblVariableName.Name = "lblVariableName"; 56 | this.lblVariableName.Size = new System.Drawing.Size(35, 13); 57 | this.lblVariableName.TabIndex = 2; 58 | this.lblVariableName.Text = "Name"; 59 | // 60 | // lblVariableType 61 | // 62 | this.lblVariableType.AutoSize = true; 63 | this.lblVariableType.Location = new System.Drawing.Point(11, 43); 64 | this.lblVariableType.Name = "lblVariableType"; 65 | this.lblVariableType.Size = new System.Drawing.Size(72, 13); 66 | this.lblVariableType.TabIndex = 2; 67 | this.lblVariableType.Text = "Variable Type"; 68 | // 69 | // txtVariableName 70 | // 71 | this.txtVariableName.Location = new System.Drawing.Point(52, 14); 72 | this.txtVariableName.Name = "txtVariableName"; 73 | this.txtVariableName.Size = new System.Drawing.Size(380, 20); 74 | this.txtVariableName.TabIndex = 3; 75 | // 76 | // btnClose 77 | // 78 | this.btnClose.Location = new System.Drawing.Point(226, 106); 79 | this.btnClose.Name = "btnClose"; 80 | this.btnClose.Size = new System.Drawing.Size(75, 25); 81 | this.btnClose.TabIndex = 4; 82 | this.btnClose.Text = "Cancel"; 83 | this.btnClose.UseVisualStyleBackColor = true; 84 | this.btnClose.Click += new System.EventHandler(this.btnClose_Click); 85 | // 86 | // btnOk 87 | // 88 | this.btnOk.Location = new System.Drawing.Point(145, 106); 89 | this.btnOk.Name = "btnOk"; 90 | this.btnOk.Size = new System.Drawing.Size(75, 25); 91 | this.btnOk.TabIndex = 5; 92 | this.btnOk.Text = "OK"; 93 | this.btnOk.UseVisualStyleBackColor = true; 94 | this.btnOk.Click += new System.EventHandler(this.btnOk_Click); 95 | // 96 | // label1 97 | // 98 | this.label1.AutoSize = true; 99 | this.label1.Location = new System.Drawing.Point(11, 70); 100 | this.label1.Name = "label1"; 101 | this.label1.Size = new System.Drawing.Size(93, 13); 102 | this.label1.TabIndex = 2; 103 | this.label1.Text = "Type specification"; 104 | // 105 | // cbTypeSpecification 106 | // 107 | this.cbTypeSpecification.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; 108 | this.cbTypeSpecification.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; 109 | this.cbTypeSpecification.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 110 | this.cbTypeSpecification.FormattingEnabled = true; 111 | this.cbTypeSpecification.Items.AddRange(new object[] { 112 | "None", 113 | "Array", 114 | "Multi-dimensional array", 115 | "Reference", 116 | "Pointer"}); 117 | this.cbTypeSpecification.Location = new System.Drawing.Point(110, 67); 118 | this.cbTypeSpecification.Name = "cbTypeSpecification"; 119 | this.cbTypeSpecification.Size = new System.Drawing.Size(191, 21); 120 | this.cbTypeSpecification.TabIndex = 1; 121 | // 122 | // btnVariableType 123 | // 124 | this.btnVariableType.Location = new System.Drawing.Point(399, 39); 125 | this.btnVariableType.Name = "btnVariableType"; 126 | this.btnVariableType.Size = new System.Drawing.Size(33, 21); 127 | this.btnVariableType.TabIndex = 6; 128 | this.btnVariableType.Text = "..."; 129 | this.btnVariableType.UseVisualStyleBackColor = true; 130 | this.btnVariableType.Click += new System.EventHandler(this.btnVariableType_Click); 131 | // 132 | // EditVariableForm 133 | // 134 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 135 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 136 | this.ClientSize = new System.Drawing.Size(444, 143); 137 | this.Controls.Add(this.btnVariableType); 138 | this.Controls.Add(this.btnClose); 139 | this.Controls.Add(this.btnOk); 140 | this.Controls.Add(this.txtVariableName); 141 | this.Controls.Add(this.label1); 142 | this.Controls.Add(this.lblVariableType); 143 | this.Controls.Add(this.lblVariableName); 144 | this.Controls.Add(this.cbTypeSpecification); 145 | this.Controls.Add(this.cbVariableType); 146 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 147 | this.Name = "EditVariableForm"; 148 | this.Text = "Edit Variable"; 149 | this.ResumeLayout(false); 150 | this.PerformLayout(); 151 | 152 | } 153 | 154 | #endregion 155 | 156 | private System.Windows.Forms.ComboBox cbVariableType; 157 | private System.Windows.Forms.Label lblVariableName; 158 | private System.Windows.Forms.Label lblVariableType; 159 | private System.Windows.Forms.TextBox txtVariableName; 160 | private System.Windows.Forms.Button btnClose; 161 | private System.Windows.Forms.Button btnOk; 162 | private System.Windows.Forms.Label label1; 163 | private System.Windows.Forms.ComboBox cbTypeSpecification; 164 | private System.Windows.Forms.Button btnVariableType; 165 | } 166 | } -------------------------------------------------------------------------------- /dnEditor/Forms/EditExceptionHandlerForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using dnEditor.Misc; 6 | using dnlib.DotNet; 7 | using dnlib.DotNet.Emit; 8 | 9 | namespace dnEditor.Forms 10 | { 11 | public enum EditExceptionHandlerMode 12 | { 13 | Add, 14 | Edit 15 | } 16 | 17 | public partial class EditExceptionHandlerForm : Form 18 | { 19 | public static object SelectedReference; 20 | private readonly ExceptionHandler _exceptionHandler; 21 | 22 | public EditExceptionHandlerForm() 23 | { 24 | InitializeComponent(); 25 | cbHandlerType.SelectedIndex = 0; 26 | 27 | ProcessComboBoxes(); 28 | } 29 | 30 | public EditExceptionHandlerForm(ExceptionHandler exceptionHandler) 31 | { 32 | InitializeComponent(); 33 | cbHandlerType.SelectedIndex = 0; 34 | 35 | _exceptionHandler = exceptionHandler; 36 | 37 | ProcessComboBoxes(); 38 | RestoreExceptionHandler(); 39 | } 40 | 41 | private void ProcessComboBoxes() 42 | { 43 | ListInstructions(cbTryStart); 44 | ListInstructions(cbTryEnd); 45 | ListInstructions(cbHandlerStart); 46 | ListInstructions(cbHandlerEnd); 47 | ListInstructions(cbFilterStart); 48 | } 49 | 50 | private void ListInstructions(ComboBox comboBox) 51 | { 52 | List instructions = MainForm.CurrentAssembly.Method.Body.Instructions.ToList(); 53 | 54 | for (int i = 0; i < instructions.Count; i++) 55 | { 56 | comboBox.Items.Add(Functions.FormatFullInstruction(instructions, i)); 57 | } 58 | } 59 | 60 | private void RestoreExceptionHandler() 61 | { 62 | switch (_exceptionHandler.HandlerType) 63 | { 64 | case ExceptionHandlerType.Catch: 65 | cbHandlerType.SelectedItem = cbHandlerType.GetItemByText("Catch"); 66 | break; 67 | case ExceptionHandlerType.Duplicated: 68 | cbHandlerType.SelectedItem = cbHandlerType.GetItemByText("Duplicated"); 69 | break; 70 | case ExceptionHandlerType.Fault: 71 | cbHandlerType.SelectedItem = cbHandlerType.GetItemByText("Fault"); 72 | break; 73 | case ExceptionHandlerType.Filter: 74 | cbHandlerType.SelectedItem = cbHandlerType.GetItemByText("Filter"); 75 | break; 76 | case ExceptionHandlerType.Finally: 77 | cbHandlerType.SelectedItem = cbHandlerType.GetItemByText("Finally"); 78 | break; 79 | } 80 | 81 | cbTryStart.SelectedIndex = 82 | MainForm.CurrentAssembly.Method.Body.Instructions.IndexOf(_exceptionHandler.TryStart); 83 | 84 | if (_exceptionHandler.TryEnd == null) 85 | { 86 | cbTryEnd.SelectedIndex = cbTryEnd.Items.Count - 1; 87 | } 88 | else 89 | { 90 | cbTryEnd.SelectedIndex = 91 | MainForm.CurrentAssembly.Method.Body.Instructions.IndexOf(_exceptionHandler.TryEnd); 92 | } 93 | 94 | cbHandlerStart.SelectedIndex = 95 | MainForm.CurrentAssembly.Method.Body.Instructions.IndexOf(_exceptionHandler.HandlerStart); 96 | 97 | if (_exceptionHandler.HandlerEnd == null) 98 | { 99 | cbHandlerEnd.SelectedIndex = cbHandlerEnd.Items.Count - 1; 100 | } 101 | else 102 | { 103 | cbHandlerEnd.SelectedIndex = 104 | MainForm.CurrentAssembly.Method.Body.Instructions.IndexOf(_exceptionHandler.HandlerEnd); 105 | } 106 | 107 | if (_exceptionHandler.CatchType != null) 108 | { 109 | cbCatchType.Items.Add(_exceptionHandler.CatchType); 110 | cbCatchType.SelectedIndex = 0; 111 | } 112 | 113 | if (_exceptionHandler.FilterStart != null) 114 | { 115 | cbFilterStart.SelectedIndex = 116 | MainForm.CurrentAssembly.Method.Body.Instructions.IndexOf(_exceptionHandler.FilterStart); 117 | } 118 | } 119 | 120 | private bool SelectionsOk() 121 | { 122 | if (cbTryStart.SelectedItem == null || cbTryEnd.SelectedItem == null || 123 | cbHandlerStart.SelectedItem == null || cbHandlerEnd.SelectedItem == null) 124 | return false; 125 | 126 | return true; 127 | } 128 | 129 | private void btnClose_Click(object sender, EventArgs e) 130 | { 131 | Close(); 132 | } 133 | 134 | private void btnOk_Click(object sender, EventArgs e) 135 | { 136 | if (!SelectionsOk()) return; 137 | 138 | var exceptionHandler = new ExceptionHandler(); 139 | 140 | switch (cbHandlerType.Text) 141 | { 142 | case "Catch": 143 | exceptionHandler.HandlerType = ExceptionHandlerType.Catch; 144 | break; 145 | case "Duplicated": 146 | exceptionHandler.HandlerType = ExceptionHandlerType.Duplicated; 147 | break; 148 | case "Fault": 149 | exceptionHandler.HandlerType = ExceptionHandlerType.Fault; 150 | break; 151 | case "Filter": 152 | exceptionHandler.HandlerType = ExceptionHandlerType.Filter; 153 | break; 154 | case "Finally": 155 | exceptionHandler.HandlerType = ExceptionHandlerType.Finally; 156 | break; 157 | } 158 | 159 | exceptionHandler.TryStart = 160 | MainForm.CurrentAssembly.Method.Body.Instructions[cbTryStart.SelectedIndex]; 161 | exceptionHandler.TryEnd = 162 | MainForm.CurrentAssembly.Method.Body.Instructions[cbTryEnd.SelectedIndex]; 163 | exceptionHandler.HandlerStart = 164 | MainForm.CurrentAssembly.Method.Body.Instructions[cbHandlerStart.SelectedIndex]; 165 | exceptionHandler.HandlerEnd = 166 | MainForm.CurrentAssembly.Method.Body.Instructions[cbHandlerEnd.SelectedIndex]; 167 | 168 | if (exceptionHandler.HandlerType == ExceptionHandlerType.Catch) 169 | { 170 | if (cbCatchType.SelectedItem == null) 171 | return; 172 | 173 | exceptionHandler.CatchType = (ITypeDefOrRef) cbCatchType.SelectedItem; 174 | } 175 | else if (exceptionHandler.HandlerType == ExceptionHandlerType.Filter) 176 | { 177 | if (cbFilterStart.SelectedItem == null) 178 | return; 179 | 180 | exceptionHandler.FilterStart = 181 | MainForm.CurrentAssembly.Method.Body.Instructions[cbFilterStart.SelectedIndex]; 182 | } 183 | 184 | MainForm.NewExceptionHandler = exceptionHandler; 185 | 186 | Close(); 187 | } 188 | 189 | private void btnCatchType_Click(object sender, EventArgs e) 190 | { 191 | cbCatchType.Enabled = false; 192 | cbCatchType.DropDownStyle = ComboBoxStyle.Simple; 193 | var form = new PickReferenceForm("Type"); 194 | form.FormClosed += form_FormClosed; 195 | form.ShowDialog(); 196 | } 197 | 198 | private void form_FormClosed(object sender, FormClosedEventArgs e) 199 | { 200 | if (SelectedReference == null) return; 201 | 202 | cbCatchType.Items.Clear(); 203 | 204 | SelectedReference = 205 | MainForm.CurrentAssembly.ManifestModule.Import(SelectedReference as ITypeDefOrRef); 206 | cbCatchType.Items.Add(SelectedReference); 207 | 208 | cbCatchType.SelectedIndex = 0; 209 | } 210 | 211 | private void cbHandlerType_SelectedIndexChanged(object sender, EventArgs e) 212 | { 213 | cbFilterStart.Enabled = cbHandlerType.Text == "Filter"; 214 | btnCatchType.Enabled = cbHandlerType.Text == "Catch"; 215 | } 216 | } 217 | } --------------------------------------------------------------------------------