From fce4420f46410007ff67d8fd41dec6fb0a34f200 Mon Sep 17 00:00:00 2001 From: lckt0 Date: Sun, 24 Oct 2021 11:24:25 +0300 Subject: [PATCH] source --- .ObfuscationTests/CrackMe-astro.exe | Bin 0 -> 246272 bytes .ObfuscationTests/CrackMe.exe | Bin 0 -> 8192 bytes AfterKoi/AfterKoi.csproj | 54 + AfterKoi/LocalToField.cs | 65 + AfterKoi/Properties/AssemblyInfo.cs | 36 + AfterKoi/RandomGenerator.cs | 42 + ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + .../AfterKoi.csproj.AssemblyReference.cache | Bin 0 -> 11 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 152 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6858 bytes Assets/astro.ico | Bin 0 -> 26773 bytes Assets/astro.png | Bin 0 -> 215940 bytes Assets/banner.png | Bin 0 -> 149578 bytes AstroNet.sln | 70 + AstroNet/App.config | 6 + AstroNet/AstroNet.csproj | 164 + AstroNet/AstroNet.csproj.user | 14 + AstroNet/KVM/InitializePhase.cs | 157 + AstroNet/KVM/KVMTask.cs | 54 + AstroNet/KVM/ModuleWriterListener.cs | 26 + AstroNet/KVM/ModuleWriterListenerEventArgs.cs | 15 + AstroNet/KVM/NativeEraser.cs | 126 + AstroNet/KVM/NativeEraserNew.cs | 126 + AstroNet/KVM/SafeAnalyzer.cs | 33 + AstroNet/KVM/Utils.cs | 65 + AstroNet/Program.cs | 157 + AstroNet/Properties/AssemblyInfo.cs | 35 + AstroNet/Protections/Anti/Anti Debug.cs | 27 + AstroNet/Protections/Anti/Anti Dump.cs | 27 + AstroNet/Protections/Anti/Anti Tamper.cs | 38 + AstroNet/Protections/Anti/AntiDe4dot.cs | 23 + AstroNet/Protections/Anti/Antimanything.cs | 27 + .../Anti/Runtime/AntiDebug.Safe.cs | 54 + .../Protections/Anti/Runtime/AntiDumpRun.cs | 255 + .../Protections/Anti/Runtime/EOFAntiTamper.cs | 21 + .../Anti/Runtime/SelfDeleteClass.cs | 81 + AstroNet/Protections/Arithmetic/AddMaths.cs | 50 + AstroNet/Protections/Arithmetic/Arithmetic.cs | 142 + .../Arithmetic/ArithmeticEmulator.cs | 141 + .../Protections/Arithmetic/ArithmeticTypes.cs | 23 + .../Protections/Arithmetic/ArithmeticVT.cs | 22 + .../Protections/Arithmetic/Functions/Add.cs | 18 + .../Protections/Arithmetic/Functions/Div.cs | 18 + .../Arithmetic/Functions/Maths/Abs.cs | 20 + .../Arithmetic/Functions/Maths/Ceiling.cs | 20 + .../Arithmetic/Functions/Maths/Cos.cs | 20 + .../Arithmetic/Functions/Maths/Floor.cs | 20 + .../Arithmetic/Functions/Maths/Log.cs | 20 + .../Arithmetic/Functions/Maths/Log10.cs | 20 + .../Arithmetic/Functions/Maths/Round.cs | 20 + .../Arithmetic/Functions/Maths/Sin.cs | 20 + .../Arithmetic/Functions/Maths/Sqrt.cs | 20 + .../Arithmetic/Functions/Maths/Tan.cs | 20 + .../Arithmetic/Functions/Maths/Tanh.cs | 20 + .../Arithmetic/Functions/Maths/Truncate.cs | 20 + .../Protections/Arithmetic/Functions/Mul.cs | 18 + .../Protections/Arithmetic/Functions/Sub.cs | 18 + .../Protections/Arithmetic/Functions/Xor.cs | 19 + .../Arithmetic/Generator/Generator.cs | 29 + AstroNet/Protections/Arithmetic/Token.cs | 26 + .../Arithmetic/Utils/ArithmeticUtils.cs | 49 + AstroNet/Protections/Arithmetic/Value.cs | 18 + AstroNet/Protections/Arithmetic/iFunction.cs | 10 + AstroNet/Protections/Attribute.cs | 86 + AstroNet/Protections/Base64.cs | 38 + AstroNet/Protections/ConstantMelting.cs | 66 + AstroNet/Protections/CtrlFlow.cs | 172 + AstroNet/Protections/LocalToField.cs | 65 + AstroNet/Protections/Other/Calli.cs | 63 + .../Protections/Other/StackUnfConfusion.cs | 60 + AstroNet/Protections/Other/Watermark.cs | 33 + AstroNet/Protections/ProxyINT.cs | 56 + AstroNet/Protections/ProxyMeth.cs | 183 + AstroNet/Protections/ProxyString.cs | 40 + AstroNet/Protections/RemoveNamespace.cs | 17 + AstroNet/Protections/Rename.cs | 65 + AstroNet/Protections/StringEnc.cs | 200 + AstroNet/Protections/Virtualization.cs | 16 + AstroNet/Services/ConsoleLogger.cs | 97 + AstroNet/Services/InitMemory.cs | 12 + AstroNet/Services/InjectHelper.cs | 334 + AstroNet/Services/RandomGenerator.cs | 43 + AstroNet/Services/WriterMemory.cs | 11 + AstroNet/astro.ico | Bin 0 -> 26773 bytes AstroNet/bin/Debug/Astro_Renewed.exe | Bin 0 -> 70656 bytes AstroNet/bin/Debug/Astro_Renewed.exe.config | 6 + AstroNet/bin/Debug/Astro_Renewed.pdb | Bin 0 -> 187904 bytes AstroNet/bin/Debug/KoiVM.Console.dll | Bin 0 -> 12800 bytes AstroNet/bin/Debug/KoiVM.Console.pdb | Bin 0 -> 28160 bytes AstroNet/bin/Debug/KoiVM.dll | Bin 0 -> 212480 bytes AstroNet/bin/Debug/KoiVM.pdb | Bin 0 -> 747008 bytes AstroNet/bin/Debug/dnlib.dll | Bin 0 -> 1158144 bytes AstroNet/bin/Debug/dnlib.xml | 38829 ++++++++++++++++ AstroNet/bin/Debug/dnlibOld.dll | Bin 0 -> 1264640 bytes AstroNet/bin/Release/Astro_Renewed.exe | Bin 0 -> 68096 bytes AstroNet/bin/Release/Astro_Renewed.exe.config | 6 + AstroNet/bin/Release/Astro_Renewed.pdb | Bin 0 -> 171520 bytes AstroNet/bin/Release/AutoMapper.dll | Bin 0 -> 286720 bytes AstroNet/bin/Release/AutoMapper.xml | 1809 + AstroNet/bin/Release/dnlib.dll | Bin 0 -> 1158144 bytes ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + .../AstroNet.csproj.AssemblyReference.cache | Bin 0 -> 5501 bytes .../obj/Debug/AstroNet.csproj.CopyComplete | 0 .../AstroNet.csproj.CoreCompileInputs.cache | 1 + .../AstroNet.csproj.FileListAbsolute.txt | 8 + ...tro_Renewed.csproj.AssemblyReference.cache | Bin 0 -> 963 bytes .../Debug/Astro_Renewed.csproj.CopyComplete | 0 ...tro_Renewed.csproj.CoreCompileInputs.cache | 1 + .../Astro_Renewed.csproj.FileListAbsolute.txt | 68 + AstroNet/obj/Debug/Astro_Renewed.exe | Bin 0 -> 98816 bytes AstroNet/obj/Debug/Astro_Renewed.pdb | Bin 0 -> 302592 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 152 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7137 bytes ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + .../obj/Release/AstroNet.csproj.CopyComplete | 0 .../AstroNet.csproj.CoreCompileInputs.cache | 1 + .../AstroNet.csproj.FileListAbsolute.txt | 10 + AstroNet/obj/Release/Astro_Renewed.exe | Bin 0 -> 68096 bytes AstroNet/obj/Release/Astro_Renewed.pdb | Bin 0 -> 171520 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7265 bytes Bin/#README.txt | 10 + Bin/AstroNet.exe | Bin 0 -> 67072 bytes Bin/AstroNet.exe.config | 6 + Bin/AstroNet.pdb | Bin 0 -> 36352 bytes Bin/Astro_Renewed.exe | Bin 0 -> 98816 bytes Bin/Astro_Renewed.exe.config | 6 + Bin/Astro_Renewed.pdb | Bin 0 -> 302592 bytes Bin/KoiVM.dll | Bin 0 -> 212480 bytes Bin/KoiVM.pdb | Bin 0 -> 747008 bytes Bin/R.dll | Bin 0 -> 1536 bytes Bin/Runtime.dll | Bin 0 -> 78336 bytes Bin/Runtime.pdb | Bin 0 -> 296448 bytes Bin/dnlibOld.dll | Bin 0 -> 1264640 bytes KoiVM.Console/KVM/InitializePhase.cs | 154 + KoiVM.Console/KVM/KVMTask.cs | 56 + KoiVM.Console/KVM/ModuleWriterListener.cs | 26 + .../KVM/ModuleWriterListenerEventArgs.cs | 15 + KoiVM.Console/KVM/NativeEraser.cs | 126 + KoiVM.Console/KVM/NativeEraserNew.cs | 126 + KoiVM.Console/KVM/SafeAnalyzer.cs | 33 + KoiVM.Console/KVM/Utils.cs | 65 + KoiVM.Console/KoiVM.Console.csproj | 75 + KoiVM.Console/Properties/AssemblyInfo.cs | 5 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 150 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6825 bytes ...iVM.Console.csproj.AssemblyReference.cache | Bin 0 -> 669 bytes .../Debug/KoiVM.Console.csproj.CopyComplete | 0 ...iVM.Console.csproj.CoreCompileInputs.cache | 1 + .../KoiVM.Console.csproj.FileListAbsolute.txt | 28 + KoiVM.Console/obj/Debug/KoiVM.Console.dll | Bin 0 -> 12800 bytes KoiVM.Console/obj/Debug/KoiVM.Console.pdb | Bin 0 -> 28160 bytes KoiVM.GUI/App.config | 6 + KoiVM.GUI/Form1.Designer.cs | 165 + KoiVM.GUI/Form1.cs | 145 + KoiVM.GUI/Form1.resx | 572 + KoiVM.GUI/KoiVM.GUI.csproj | 110 + KoiVM.GUI/Program.cs | 20 + KoiVM.GUI/Properties/AssemblyInfo.cs | 36 + KoiVM.GUI/Properties/Resources.Designer.cs | 63 + KoiVM.GUI/Properties/Resources.resx | 117 + KoiVM.GUI/Properties/Settings.Designer.cs | 26 + KoiVM.GUI/Properties/Settings.settings | 7 + ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + ...nsProtector.csproj.AssemblyReference.cache | Bin 0 -> 11 bytes .../AndyLarkinsProtector.csproj.CopyComplete | 0 ...nsProtector.csproj.CoreCompileInputs.cache | 1 + ...rkinsProtector.csproj.FileListAbsolute.txt | 11 + ...insProtector.csproj.GenerateResource.cache | Bin 0 -> 1012 bytes KoiVM.GUI/obj/Debug/AstroNet.Form1.resources | Bin 0 -> 27339 bytes .../AstroNet.Properties.Resources.resources | Bin 0 -> 180 bytes .../AstroNet.csproj.AssemblyReference.cache | Bin 0 -> 11 bytes .../obj/Debug/AstroNet.csproj.CopyComplete | 0 .../AstroNet.csproj.CoreCompileInputs.cache | 1 + .../AstroNet.csproj.FileListAbsolute.txt | 44 + .../AstroNet.csproj.GenerateResource.cache | Bin 0 -> 1012 bytes KoiVM.GUI/obj/Debug/AstroNet.exe | Bin 0 -> 67072 bytes KoiVM.GUI/obj/Debug/AstroNet.pdb | Bin 0 -> 36352 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 946 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7785 bytes .../KoiVM.GUI.csproj.AssemblyReference.cache | Bin 0 -> 9473 bytes .../obj/Debug/KoiVM.GUI.csproj.CopyComplete | 0 .../KoiVM.GUI.csproj.CoreCompileInputs.cache | 1 + .../KoiVM.GUI.csproj.FileListAbsolute.txt | 11 + .../KoiVM.GUI.csproj.GenerateResource.cache | Bin 0 -> 1012 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 3584 bytes KoiVM.GUI/solar-system.ico | Bin 0 -> 26773 bytes KoiVM.Runtime/AstroNet.cs | 26 + KoiVM.Runtime/Data/OpCodeMap.cs | 23 + KoiVM.Runtime/Data/VCallMap.cs | 23 + KoiVM.Runtime/Data/VMData.cs | 93 + KoiVM.Runtime/Data/VMDataInitializer.cs | 155 + KoiVM.Runtime/Data/VMExportInfo.cs | 22 + KoiVM.Runtime/Data/VMFuncSig.cs | 43 + KoiVM.Runtime/Dynamic/Constants.cs | 134 + KoiVM.Runtime/Execution/EHFrame.cs | 13 + KoiVM.Runtime/Execution/EHState.cs | 17 + KoiVM.Runtime/Execution/ExecutionState.cs | 10 + KoiVM.Runtime/Execution/FieldRef.cs | 44 + KoiVM.Runtime/Execution/IReference.cs | 12 + .../Execution/Internal/ArrayStoreHelpers.cs | 46 + .../Execution/Internal/DirectCall.cs | 202 + KoiVM.Runtime/Execution/Internal/EHHelper.cs | 121 + .../Execution/Internal/SizeOfHelper.cs | 33 + .../Internal/TypedReferenceHelpers.cs | 211 + .../Execution/Internal/Unverifier.cs | 22 + .../Execution/Internal/VMTrampoline.cs | 144 + .../Execution/Internal/ValueTypeBox.cs | 46 + KoiVM.Runtime/Execution/PointerRef.cs | 34 + KoiVM.Runtime/Execution/PointerType.cs | 11 + KoiVM.Runtime/Execution/StackRef.cs | 49 + KoiVM.Runtime/Execution/TypedRef.cs | 62 + KoiVM.Runtime/Execution/TypedRefPtr.cs | 15 + KoiVM.Runtime/Execution/VMContext.cs | 28 + KoiVM.Runtime/Execution/VMDispatcher.cs | 258 + KoiVM.Runtime/Execution/VMSlot.cs | 180 + KoiVM.Runtime/Execution/VMStack.cs | 134 + KoiVM.Runtime/OpCodes/Add.cs | 125 + KoiVM.Runtime/OpCodes/Call.cs | 19 + KoiVM.Runtime/OpCodes/Cmp.cs | 138 + KoiVM.Runtime/OpCodes/Div.cs | 123 + KoiVM.Runtime/OpCodes/FConv.cs | 76 + KoiVM.Runtime/OpCodes/IConv.cs | 63 + KoiVM.Runtime/OpCodes/IOpCode.cs | 9 + KoiVM.Runtime/OpCodes/Jmp.cs | 80 + KoiVM.Runtime/OpCodes/Leave.cs | 34 + KoiVM.Runtime/OpCodes/Lind.cs | 148 + KoiVM.Runtime/OpCodes/Mul.cs | 163 + KoiVM.Runtime/OpCodes/Nop.cs | 15 + KoiVM.Runtime/OpCodes/Nor.cs | 57 + KoiVM.Runtime/OpCodes/Pop.cs | 25 + KoiVM.Runtime/OpCodes/Push.cs | 141 + KoiVM.Runtime/OpCodes/Rem.cs | 123 + KoiVM.Runtime/OpCodes/Ret.cs | 21 + KoiVM.Runtime/OpCodes/Shl.cs | 57 + KoiVM.Runtime/OpCodes/Shr.cs | 63 + KoiVM.Runtime/OpCodes/Sind.cs | 152 + KoiVM.Runtime/OpCodes/Sub.cs | 63 + KoiVM.Runtime/OpCodes/Sx.cs | 53 + KoiVM.Runtime/OpCodes/Try.cs | 35 + KoiVM.Runtime/OpCodes/Vcall.cs | 22 + KoiVM.Runtime/Platform.cs | 8 + KoiVM.Runtime/Properties/AssemblyInfo.cs | 5 + KoiVM.Runtime/Runtime.csproj | 132 + KoiVM.Runtime/Utils.cs | 66 + KoiVM.Runtime/VCalls/Box.cs | 31 + KoiVM.Runtime/VCalls/Cast.cs | 34 + KoiVM.Runtime/VCalls/Ckfinite.cs | 32 + KoiVM.Runtime/VCalls/Ckoverflow.cs | 23 + KoiVM.Runtime/VCalls/Ecall.cs | 232 + KoiVM.Runtime/VCalls/Exit.cs | 15 + KoiVM.Runtime/VCalls/IVCall.cs | 9 + KoiVM.Runtime/VCalls/Initobj.cs | 41 + KoiVM.Runtime/VCalls/Ldfld.cs | 38 + KoiVM.Runtime/VCalls/Ldftn.cs | 60 + KoiVM.Runtime/VCalls/Localloc.cs | 22 + KoiVM.Runtime/VCalls/Rangechk.cs | 26 + KoiVM.Runtime/VCalls/Sizeof.cs | 23 + KoiVM.Runtime/VCalls/Stfld.cs | 43 + KoiVM.Runtime/VCalls/Throw.cs | 21 + KoiVM.Runtime/VCalls/Token.cs | 29 + KoiVM.Runtime/VCalls/Unbox.cs | 40 + KoiVM.Runtime/VMInstance.cs | 174 + ...ework,Version=v4.6.1.AssemblyAttributes.cs | 4 + .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 139 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6101 bytes ...iVM.Runtime.csproj.CoreCompileInputs.cache | 1 + .../KoiVM.Runtime.csproj.FileListAbsolute.txt | 8 + ...oiVM.Runtime.csprojAssemblyReference.cache | Bin 0 -> 424 bytes .../Runtime.csproj.AssemblyReference.cache | Bin 0 -> 1071 bytes .../Runtime.csproj.CoreCompileInputs.cache | 1 + .../Debug/Runtime.csproj.FileListAbsolute.txt | 24 + .../Runtime.csprojAssemblyReference.cache | Bin 0 -> 424 bytes KoiVM.Runtime/obj/Debug/Runtime.dll | Bin 0 -> 78336 bytes KoiVM.Runtime/obj/Debug/Runtime.pdb | Bin 0 -> 296448 bytes KoiVM/AST/ASTConstant.cs | 69 + KoiVM/AST/ASTExpression.cs | 7 + KoiVM/AST/ASTNode.cs | 6 + KoiVM/AST/ASTType.cs | 15 + KoiVM/AST/ASTVariable.cs | 12 + KoiVM/AST/IL/IHasOffset.cs | 7 + KoiVM/AST/IL/IILOperand.cs | 6 + KoiVM/AST/IL/ILBlock.cs | 16 + KoiVM/AST/IL/ILDataTarget.cs | 21 + KoiVM/AST/IL/ILImmediate.cs | 12 + KoiVM/AST/IL/ILInstrList.cs | 15 + KoiVM/AST/IL/ILInstruction.cs | 47 + KoiVM/AST/IL/ILJumpTable.cs | 24 + KoiVM/AST/IL/ILJumpTarget.cs | 20 + KoiVM/AST/IL/ILMethodTarget.cs | 27 + KoiVM/AST/IL/ILRegister.cs | 42 + KoiVM/AST/IL/ILRelReference.cs | 25 + KoiVM/AST/ILAST/IILASTNode.cs | 7 + KoiVM/AST/ILAST/IILASTStatement.cs | 6 + KoiVM/AST/ILAST/ILASTAssignment.cs | 12 + KoiVM/AST/ILAST/ILASTExpression.cs | 45 + KoiVM/AST/ILAST/ILASTPhi.cs | 21 + KoiVM/AST/ILAST/ILASTTree.cs | 41 + KoiVM/AST/ILAST/ILASTVariable.cs | 12 + KoiVM/AST/ILAST/ILASTVariableType.cs | 10 + KoiVM/AST/IR/IIROperand.cs | 7 + KoiVM/AST/IR/IRBlockTarget.cs | 20 + KoiVM/AST/IR/IRConstant.cs | 51 + KoiVM/AST/IR/IRDataTarget.cs | 21 + KoiVM/AST/IR/IRInstrList.cs | 15 + KoiVM/AST/IR/IRInstruction.cs | 57 + KoiVM/AST/IR/IRJumpTable.cs | 20 + KoiVM/AST/IR/IRMetaTarget.cs | 20 + KoiVM/AST/IR/IRPointer.cs | 21 + KoiVM/AST/IR/IRRegister.cs | 33 + KoiVM/AST/IR/IRVariable.cs | 15 + KoiVM/AST/IR/IRVariableType.cs | 10 + KoiVM/AST/InstrAnnotation.cs | 56 + KoiVM/AST/TypeInference.cs | 80 + KoiVM/CFG/BasicBlock.cs | 40 + KoiVM/CFG/BlockFlags.cs | 10 + KoiVM/CFG/BlockParser.cs | 261 + KoiVM/CFG/CILInstrList.cs | 11 + KoiVM/CFG/IBasicBlock.cs | 12 + KoiVM/CFG/ScopeBlock.cs | 143 + KoiVM/CFG/ScopeType.cs | 10 + KoiVM/GenericInstantiation.cs | 156 + KoiVM/ILAST/ILASTBuilder.cs | 267 + KoiVM/ILAST/ILASTTransformer.cs | 66 + KoiVM/ILAST/ITransformationHandler.cs | 8 + KoiVM/ILAST/Transformation/ArrayTransform.cs | 186 + KoiVM/ILAST/Transformation/BranchTransform.cs | 78 + .../Transformation/ILASTTypeInference.cs | 215 + .../ILAST/Transformation/IndirectTransform.cs | 103 + KoiVM/ILAST/Transformation/NullTransform.cs | 22 + KoiVM/ILAST/Transformation/StringTransform.cs | 31 + .../ILAST/Transformation/VariableInlining.cs | 99 + KoiVM/IVMSettings.cs | 13 + KoiVM/KoiVM.csproj | 237 + KoiVM/MethodVirtualizer.cs | 88 + KoiVM/Obfuscation.cs | 14 + KoiVM/Properties/AssemblyInfo.cs | 5 + KoiVM/Protections/SMC/SMCBlock.cs | 64 + KoiVM/Protections/SMC/SMCILTransform.cs | 82 + KoiVM/Protections/SMC/SMCIRTransform.cs | 86 + KoiVM/RT/BasicBlockChunk.cs | 110 + KoiVM/RT/BasicBlockSerializer.cs | 146 + KoiVM/RT/BinaryChunk.cs | 36 + KoiVM/RT/DbgWriter.cs | 98 + KoiVM/RT/HeaderChunk.cs | 133 + KoiVM/RT/IKoiChunk.cs | 10 + KoiVM/RT/JumpTableChunk.cs | 45 + KoiVM/RT/KoiHeap.cs | 31 + KoiVM/RT/Mutation/MethodPatcher.cs | 148 + KoiVM/RT/Mutation/RTConstants.cs | 105 + KoiVM/RT/Mutation/RTMap.cs | 156 + KoiVM/RT/Mutation/Renamer.cs | 82 + KoiVM/RT/Mutation/RuntimeHelpers.cs | 98 + KoiVM/RT/Mutation/RuntimeMutator.cs | 154 + KoiVM/RT/Mutation/RuntimePatcher.cs | 51 + KoiVM/RT/VMRuntime.cs | 171 + KoiVM/Scanner.cs | 81 + KoiVM/Utils.cs | 115 + KoiVM/VM/Descriptors/ArchDescriptor.cs | 15 + KoiVM/VM/Descriptors/DataDescriptor.cs | 113 + KoiVM/VM/Descriptors/FlagDescriptor.cs | 48 + KoiVM/VM/Descriptors/OpCodeDescriptor.cs | 17 + KoiVM/VM/Descriptors/RTFlagDescriptor.cs | 34 + KoiVM/VM/Descriptors/RegisterDescriptor.cs | 16 + KoiVM/VM/Descriptors/RuntimeDescriptor.cs | 15 + KoiVM/VM/Descriptors/VCallOpsDescriptor.cs | 27 + KoiVM/VM/Descriptors/VMCallDescriptor.cs | 84 + KoiVM/VM/Descriptors/VMDescriptor.cs | 23 + KoiVM/VM/FuncSig.cs | 35 + KoiVM/VM/VMCalls.cs | 27 + KoiVM/VM/VMFlags.cs | 18 + KoiVM/VM/VMMethodInfo.cs | 23 + KoiVM/VM/VMRegisters.cs | 27 + KoiVM/VMIL/ILOpCode.cs | 104 + KoiVM/VMIL/ILPostTransformer.cs | 57 + KoiVM/VMIL/ILTransformer.cs | 63 + KoiVM/VMIL/ILTranslator.cs | 81 + KoiVM/VMIL/IPostTransform.cs | 8 + KoiVM/VMIL/ITransform.cs | 8 + KoiVM/VMIL/ITranslationHandler.cs | 10 + KoiVM/VMIL/Transforms/BlockKeyTransform.cs | 203 + KoiVM/VMIL/Transforms/EntryExitTransform.cs | 23 + .../VMIL/Transforms/FixMethodRefTransform.cs | 30 + .../Transforms/ReferenceOffsetTransform.cs | 27 + KoiVM/VMIL/Transforms/SaveInfoTransform.cs | 27 + .../VMIL/Transforms/SaveRegistersTransform.cs | 62 + .../Translation/ArithmeticLogicHandler.cs | 315 + KoiVM/VMIL/Translation/BranchHandlers.cs | 100 + KoiVM/VMIL/Translation/EHHandlers.cs | 30 + KoiVM/VMIL/Translation/InvocationHandlers.cs | 27 + KoiVM/VMIL/Translation/MemoryHandlers.cs | 36 + KoiVM/VMIL/Translation/MiscHandlers.cs | 29 + KoiVM/VMIL/Translation/PseudoHandlers.cs | 88 + KoiVM/VMIL/TranslationHelpers.cs | 248 + KoiVM/VMIR/Compiler/IRAnalyzer.cs | 2082 + KoiVM/VMIR/Compiler/IRCompiler.cs | 396 + .../VMIR/Compiler/IRCompilerAssemblyFinder.cs | 21 + KoiVM/VMIR/Compiler/IRConstants.cs | 68 + KoiVM/VMIR/Compiler/IRParser.cs | 455 + KoiVM/VMIR/Compiler/IRTokenizer.cs | 219 + KoiVM/VMIR/IRContext.cs | 106 + KoiVM/VMIR/IROpCode.cs | 71 + KoiVM/VMIR/IRTransformer.cs | 74 + KoiVM/VMIR/IRTranslator.cs | 150 + KoiVM/VMIR/ITransform.cs | 8 + KoiVM/VMIR/ITranslationHandler.cs | 11 + KoiVM/VMIR/RegAlloc/BlockLiveness.cs | 27 + KoiVM/VMIR/RegAlloc/LivenessAnalysis.cs | 135 + KoiVM/VMIR/RegAlloc/RegisterAllocator.cs | 192 + .../ConstantTypePromotionTransform.cs | 92 + KoiVM/VMIR/Transforms/EHTransform.cs | 135 + KoiVM/VMIR/Transforms/GetSetFlagTransform.cs | 27 + KoiVM/VMIR/Transforms/GuardBlockTransform.cs | 81 + KoiVM/VMIR/Transforms/InitLocalTransform.cs | 40 + KoiVM/VMIR/Transforms/InvokeTransform.cs | 110 + KoiVM/VMIR/Transforms/LeaTransform.cs | 26 + KoiVM/VMIR/Transforms/LogicTransform.cs | 49 + .../VMIR/Transforms/MarkReturnRegTransform.cs | 27 + KoiVM/VMIR/Transforms/MetadataTransform.cs | 31 + .../Transforms/RegisterAllocationTransform.cs | 20 + KoiVM/VMIR/Transforms/StackFrameTransform.cs | 38 + KoiVM/VMIR/Translation/BoxHandlers.cs | 86 + KoiVM/VMIR/Translation/BranchHandlers.cs | 85 + KoiVM/VMIR/Translation/CastHandlers.cs | 48 + KoiVM/VMIR/Translation/CompareHandlers.cs | 175 + KoiVM/VMIR/Translation/ConstantHandlers.cs | 83 + KoiVM/VMIR/Translation/ConvHandlers.cs | 432 + KoiVM/VMIR/Translation/ConvOvfHandlers.cs | 439 + KoiVM/VMIR/Translation/ConvOvfUnHandlers.cs | 432 + KoiVM/VMIR/Translation/EHHandlers.cs | 92 + KoiVM/VMIR/Translation/FieldHandlers.cs | 115 + KoiVM/VMIR/Translation/FnPtrHandlers.cs | 60 + KoiVM/VMIR/Translation/InvokeHandlers.cs | 178 + KoiVM/VMIR/Translation/LocalHandlers.cs | 58 + KoiVM/VMIR/Translation/LogicHandlers.cs | 149 + KoiVM/VMIR/Translation/MiscHandlers.cs | 78 + KoiVM/VMIR/Translation/NumericHandlers.cs | 436 + KoiVM/VMIR/Translation/ParameterHandlers.cs | 58 + KoiVM/VMIR/Translation/PointerHandlers.cs | 95 + KoiVM/VMIR/TranslationHelpers.cs | 20 + KoiVM/Virtualizer.cs | 176 + KoiVM/VisitFunc.cs | 5 + KoiVM/Watermark.cs | 38 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6277 bytes .../KoiVM.csproj.AssemblyReference.cache | Bin 0 -> 2776 bytes KoiVM/obj/Debug/KoiVM.csproj.CopyComplete | 0 .../KoiVM.csproj.CoreCompileInputs.cache | 1 + .../Debug/KoiVM.csproj.FileListAbsolute.txt | 21 + KoiVM/obj/Debug/KoiVM.dll | Bin 0 -> 212480 bytes KoiVM/obj/Debug/KoiVM.pdb | Bin 0 -> 747008 bytes LICENSE | 674 + README.md | 2 + References/dnlibOld.dll | Bin 0 -> 1264640 bytes VM.Core/ByteEncryption/ByteEncryption.cs | 75 + VM.Core/ByteEncryption/ByteGetter.cs | 1228 + VM.Core/ByteEncryption/Process.cs | 204 + VM.Core/Injection/InjectHelper.cs | 325 + VM.Core/Injection/InjectInitialise.cs | 200 + VM.Core/Injection/InjectMethods.cs | 29 + VM.Core/Injection/Resource.cs | 39 + VM.Core/Properties/AssemblyInfo.cs | 36 + VM.Core/Properties/Resources.Designer.cs | 103 + VM.Core/Properties/Resources.resx | 133 + VM.Core/Protection/ConvertToBytes.cs | 400 + VM.Core/Protection/MethodData.cs | 26 + VM.Core/Protection/MethodProccesor.cs | 152 + VM.Core/Protector.cs | 66 + VM.Core/Resources/ConversionBack.dll | Bin 0 -> 175104 bytes VM.Core/Resources/NativeEncoderx64.dll | Bin 0 -> 39936 bytes VM.Core/Resources/NativeEncoderx86.dll | Bin 0 -> 41472 bytes VM.Core/Resources/XorMethod.bin | Bin 0 -> 158 bytes VM.Core/VM.Core.csproj | 93 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + .../Debug/Core.Properties.Resources.resources | Bin 0 -> 257032 bytes .../Debug/Core.csproj.AssemblyReference.cache | Bin 0 -> 984 bytes VM.Core/obj/Debug/Core.csproj.CopyComplete | 0 .../Debug/Core.csproj.CoreCompileInputs.cache | 1 + .../Debug/Core.csproj.FileListAbsolute.txt | 25 + .../Debug/Core.csproj.GenerateResource.cache | Bin 0 -> 1145 bytes .../Debug/Core.csprojAssemblyReference.cache | Bin 0 -> 6052 bytes .../Core.csprojResolveAssemblyReference.cache | Bin 0 -> 8440 bytes VM.Core/obj/Debug/Core.dll | Bin 0 -> 313344 bytes VM.Core/obj/Debug/Core.pdb | Bin 0 -> 85504 bytes VM.Core/obj/Debug/CoreCompileInputs.cache | 1 + .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 723 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7254 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 3584 bytes .../VM.Core.csproj.AssemblyReference.cache | Bin 0 -> 526 bytes VM.Core/obj/Debug/VM.Core.csproj.CopyComplete | 0 .../VM.Core.csproj.CoreCompileInputs.cache | 1 + .../Debug/VM.Core.csproj.FileListAbsolute.txt | 9 + .../VM.Core.csproj.GenerateResource.cache | Bin 0 -> 1145 bytes VM.Core/obj/Release/CoreCompileInputs.cache | 1 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7056 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 3584 bytes VM.Runtime/ConvertBack.cs | 557 + VM.Runtime/Embed.cs | 111 + .../ExceptionHandlerClass.cs | 18 + .../FixedExceptionHandlerClass.cs | 18 + VM.Runtime/Initialize.cs | 105 + VM.Runtime/OpCodes/Add.cs | 16 + VM.Runtime/OpCodes/All.cs | 82 + VM.Runtime/OpCodes/Base.cs | 11 + VM.Runtime/OpCodes/Br.cs | 17 + VM.Runtime/OpCodes/Brfalse.cs | 21 + VM.Runtime/OpCodes/Brtrue.cs | 23 + VM.Runtime/OpCodes/Call.cs | 35 + VM.Runtime/OpCodes/Callvirt.cs | 32 + VM.Runtime/OpCodes/Ceq.cs | 18 + VM.Runtime/OpCodes/Clt.cs | 26 + VM.Runtime/OpCodes/ConvI4.cs | 17 + VM.Runtime/OpCodes/ConvU1.cs | 18 + VM.Runtime/OpCodes/Ldarg.cs | 18 + VM.Runtime/OpCodes/Ldc.cs | 17 + VM.Runtime/OpCodes/LdelemU1.cs | 18 + VM.Runtime/OpCodes/Ldlen.cs | 17 + VM.Runtime/OpCodes/Ldloc.cs | 18 + VM.Runtime/OpCodes/Ldnull.cs | 16 + VM.Runtime/OpCodes/Ldstr.cs | 18 + VM.Runtime/OpCodes/NewArr.cs | 17 + VM.Runtime/OpCodes/NewObj.cs | 29 + VM.Runtime/OpCodes/Nop.cs | 10 + VM.Runtime/OpCodes/Pop.cs | 16 + VM.Runtime/OpCodes/Rem.cs | 19 + VM.Runtime/OpCodes/StelemI1.cs | 19 + VM.Runtime/OpCodes/Stloc.cs | 18 + VM.Runtime/OpCodes/ValueStack.cs | 18 + VM.Runtime/OpCodes/Xor.cs | 19 + VM.Runtime/Properties/AssemblyInfo.cs | 36 + VM.Runtime/VM.Runtime.csproj | 79 + ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 + VM.Runtime/obj/Debug/CoreCompileInputs.cache | 1 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6410 bytes .../Runtime.csproj.CoreCompileInputs.cache | 1 + .../Debug/Runtime.csproj.FileListAbsolute.txt | 15 + ...ntime.csprojResolveAssemblyReference.cache | Bin 0 -> 1113 bytes VM.Runtime/obj/Debug/Runtime.dll | Bin 0 -> 22016 bytes VM.Runtime/obj/Debug/Runtime.pdb | Bin 0 -> 89600 bytes .../VM.Runtime.csproj.CoreCompileInputs.cache | 1 + .../VM.Runtime.csproj.FileListAbsolute.txt | 5 + .../obj/Release/CoreCompileInputs.cache | 1 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 5918 bytes dnlib/DotNet/AccessChecker.cs | 610 + dnlib/DotNet/AllTypesHelper.cs | 36 + dnlib/DotNet/AssemblyAttributes.cs | 56 + dnlib/DotNet/AssemblyDef.cs | 1008 + dnlib/DotNet/AssemblyHash.cs | 137 + dnlib/DotNet/AssemblyHashAlgorithm.cs | 55 + dnlib/DotNet/AssemblyNameComparer.cs | 273 + dnlib/DotNet/AssemblyNameInfo.cs | 304 + dnlib/DotNet/AssemblyRef.cs | 515 + dnlib/DotNet/AssemblyResolver.cs | 877 + dnlib/DotNet/CallingConvention.cs | 48 + dnlib/DotNet/CallingConventionSig.cs | 1161 + dnlib/DotNet/ClassLayout.cs | 103 + dnlib/DotNet/Constant.cs | 210 + dnlib/DotNet/CorLibTypes.cs | 185 + dnlib/DotNet/CustomAttribute.cs | 507 + dnlib/DotNet/CustomAttributeCollection.cs | 121 + dnlib/DotNet/CustomAttributeReader.cs | 623 + dnlib/DotNet/DeclSecurity.cs | 219 + dnlib/DotNet/DeclSecurityReader.cs | 152 + dnlib/DotNet/ElementType.cs | 218 + dnlib/DotNet/Emit/Code.cs | 262 + dnlib/DotNet/Emit/DynamicMethodBodyReader.cs | 498 + dnlib/DotNet/Emit/ExceptionHandler.cs | 60 + dnlib/DotNet/Emit/ExceptionHandlerType.cs | 22 + dnlib/DotNet/Emit/Extensions.cs | 9 + dnlib/DotNet/Emit/FlowControl.cs | 27 + dnlib/DotNet/Emit/Instruction.cs | 828 + dnlib/DotNet/Emit/InstructionPrinter.cs | 171 + dnlib/DotNet/Emit/InvalidMethodException.cs | 34 + dnlib/DotNet/Emit/LocalList.cs | 282 + dnlib/DotNet/Emit/MethodBody.cs | 247 + dnlib/DotNet/Emit/MethodBodyReader.cs | 493 + dnlib/DotNet/Emit/MethodBodyReaderBase.cs | 572 + .../DotNet/Emit/MethodTableToTypeConverter.cs | 151 + dnlib/DotNet/Emit/MethodUtils.cs | 505 + dnlib/DotNet/Emit/OpCode.cs | 249 + dnlib/DotNet/Emit/OpCodeType.cs | 21 + dnlib/DotNet/Emit/OpCodes.cs | 263 + dnlib/DotNet/Emit/OperandType.cs | 53 + dnlib/DotNet/Emit/StackBehaviour.cs | 69 + dnlib/DotNet/EventAttributes.cs | 16 + dnlib/DotNet/EventDef.cs | 471 + dnlib/DotNet/ExportedType.cs | 758 + dnlib/DotNet/Extensions.cs | 9 + dnlib/DotNet/FieldAttributes.cs | 54 + dnlib/DotNet/FieldDef.cs | 965 + dnlib/DotNet/FileAttributes.cs | 16 + dnlib/DotNet/FileDef.cs | 208 + dnlib/DotNet/FrameworkRedirect.cs | 323 + dnlib/DotNet/FullNameCreator.cs | 2095 + dnlib/DotNet/GenericArguments.cs | 132 + dnlib/DotNet/GenericParam.cs | 501 + dnlib/DotNet/GenericParamAttributes.cs | 31 + dnlib/DotNet/GenericParamConstraint.cs | 150 + dnlib/DotNet/GenericParamContext.cs | 79 + dnlib/DotNet/IAssemblyResolver.cs | 150 + dnlib/DotNet/ICodedToken.cs | 1078 + dnlib/DotNet/ICorLibTypes.cs | 189 + dnlib/DotNet/ICustomAttribute.cs | 47 + dnlib/DotNet/IDecrypters.cs | 37 + dnlib/DotNet/ILogger.cs | 466 + dnlib/DotNet/IResolver.cs | 135 + dnlib/DotNet/ITokenResolver.cs | 28 + dnlib/DotNet/IType.cs | 107 + dnlib/DotNet/ITypeDefFinder.cs | 152 + dnlib/DotNet/IVariable.cs | 23 + dnlib/DotNet/ImplMap.cs | 337 + dnlib/DotNet/Importer.cs | 1210 + dnlib/DotNet/InterfaceImpl.cs | 134 + dnlib/DotNet/MD/BlobStream.cs | 87 + dnlib/DotNet/MD/CodedToken.cs | 215 + dnlib/DotNet/MD/ColumnInfo.cs | 113 + dnlib/DotNet/MD/ColumnSize.cs | 141 + dnlib/DotNet/MD/ComImageFlags.cs | 46 + dnlib/DotNet/MD/CompressedMetaData.cs | 296 + dnlib/DotNet/MD/DotNetStream.cs | 183 + dnlib/DotNet/MD/DotNetTableSizes.cs | 347 + dnlib/DotNet/MD/ENCMetaData.cs | 436 + dnlib/DotNet/MD/GuidStream.cs | 43 + dnlib/DotNet/MD/HeapType.cs | 17 + dnlib/DotNet/MD/HotHeapStream.cs | 220 + dnlib/DotNet/MD/HotHeapVersion.cs | 18 + dnlib/DotNet/MD/HotStream.cs | 306 + dnlib/DotNet/MD/HotTableStream.cs | 276 + dnlib/DotNet/MD/IMetaData.cs | 329 + dnlib/DotNet/MD/IRowReaders.cs | 33 + dnlib/DotNet/MD/ImageCor20Header.cs | 141 + dnlib/DotNet/MD/MDHeaderRuntimeVersion.cs | 78 + dnlib/DotNet/MD/MDStreamFlags.cs | 26 + dnlib/DotNet/MD/MDTable.cs | 140 + dnlib/DotNet/MD/MetaData.cs | 863 + dnlib/DotNet/MD/MetaDataCreator.cs | 203 + dnlib/DotNet/MD/MetaDataHeader.cs | 147 + dnlib/DotNet/MD/RawRowEqualityComparer.cs | 578 + dnlib/DotNet/MD/RawTableRows.cs | 1948 + dnlib/DotNet/MD/RidList.cs | 145 + dnlib/DotNet/MD/StorageFlags.cs | 22 + dnlib/DotNet/MD/StreamHeader.cs | 72 + dnlib/DotNet/MD/StringsStream.cs | 51 + dnlib/DotNet/MD/Table.cs | 99 + dnlib/DotNet/MD/TableInfo.cs | 72 + dnlib/DotNet/MD/TablesStream.cs | 357 + dnlib/DotNet/MD/TablesStream_Read.cs | 1755 + dnlib/DotNet/MD/USStream.cs | 65 + dnlib/DotNet/MDToken.cs | 199 + dnlib/DotNet/ManifestResource.cs | 226 + dnlib/DotNet/ManifestResourceAttributes.cs | 18 + dnlib/DotNet/MarshalBlobReader.cs | 160 + dnlib/DotNet/MarshalType.cs | 541 + dnlib/DotNet/MemberFinder.cs | 762 + dnlib/DotNet/MemberMDInitializer.cs | 30 + dnlib/DotNet/MemberRef.cs | 546 + dnlib/DotNet/MethodAttributes.cs | 67 + dnlib/DotNet/MethodDef.cs | 1338 + dnlib/DotNet/MethodImplAttributes.cs | 46 + dnlib/DotNet/MethodOverride.cs | 28 + dnlib/DotNet/MethodSemanticsAttributes.cs | 26 + dnlib/DotNet/MethodSpec.cs | 298 + dnlib/DotNet/ModuleContext.cs | 71 + dnlib/DotNet/ModuleCreationOptions.cs | 74 + dnlib/DotNet/ModuleDef.cs | 1656 + dnlib/DotNet/ModuleDefMD.cs | 2060 + dnlib/DotNet/ModuleKind.cs | 28 + dnlib/DotNet/ModuleLoader.cs | 995 + dnlib/DotNet/ModuleRef.cs | 196 + dnlib/DotNet/NativeType.cs | 107 + dnlib/DotNet/NullResolver.cs | 45 + dnlib/DotNet/PInvokeAttributes.cs | 61 + dnlib/DotNet/ParamAttributes.cs | 23 + dnlib/DotNet/ParamDef.cs | 407 + dnlib/DotNet/ParameterList.cs | 576 + dnlib/DotNet/Pdb/Dss/ComInterfaces.cs | 335 + dnlib/DotNet/Pdb/Dss/ImageStreamIStream.cs | 180 + dnlib/DotNet/Pdb/Dss/MDEmitter.cs | 541 + dnlib/DotNet/Pdb/Dss/PinnedMetaData.cs | 79 + dnlib/DotNet/Pdb/Dss/StreamIStream.cs | 166 + dnlib/DotNet/Pdb/Dss/SymbolDocument.cs | 100 + dnlib/DotNet/Pdb/Dss/SymbolDocumentWriter.cs | 26 + dnlib/DotNet/Pdb/Dss/SymbolMethod.cs | 129 + dnlib/DotNet/Pdb/Dss/SymbolNamespace.cs | 47 + dnlib/DotNet/Pdb/Dss/SymbolReader.cs | 123 + dnlib/DotNet/Pdb/Dss/SymbolReaderCreator.cs | 245 + dnlib/DotNet/Pdb/Dss/SymbolScope.cs | 78 + dnlib/DotNet/Pdb/Dss/SymbolVariable.cs | 89 + dnlib/DotNet/Pdb/Dss/SymbolWriter.cs | 182 + dnlib/DotNet/Pdb/Dss/SymbolWriterCreator.cs | 42 + dnlib/DotNet/Pdb/ISymbolWriter2.cs | 70 + dnlib/DotNet/Pdb/Managed/DbiDocument.cs | 79 + dnlib/DotNet/Pdb/Managed/DbiFunction.cs | 116 + dnlib/DotNet/Pdb/Managed/DbiModule.cs | 211 + dnlib/DotNet/Pdb/Managed/DbiNamespace.cs | 30 + dnlib/DotNet/Pdb/Managed/DbiScope.cs | 115 + dnlib/DotNet/Pdb/Managed/DbiSourceLine.cs | 12 + dnlib/DotNet/Pdb/Managed/DbiVariable.cs | 63 + dnlib/DotNet/Pdb/Managed/ModuleStreamType.cs | 18 + dnlib/DotNet/Pdb/Managed/MsfStream.cs | 21 + dnlib/DotNet/Pdb/Managed/PdbAddress.cs | 163 + dnlib/DotNet/Pdb/Managed/PdbException.cs | 27 + dnlib/DotNet/Pdb/Managed/PdbReader.cs | 360 + .../DotNet/Pdb/Managed/SymbolReaderCreator.cs | 84 + dnlib/DotNet/Pdb/Managed/SymbolType.cs | 201 + dnlib/DotNet/Pdb/PdbDocument.cs | 95 + dnlib/DotNet/Pdb/PdbImplType.cs | 23 + dnlib/DotNet/Pdb/PdbScope.cs | 75 + dnlib/DotNet/Pdb/PdbState.cs | 309 + dnlib/DotNet/Pdb/PdbWriter.cs | 281 + dnlib/DotNet/Pdb/SequencePoint.cs | 50 + dnlib/DotNet/Pdb/SymbolReaderCreator.cs | 175 + dnlib/DotNet/Pdb/SymbolWriterCreator.cs | 29 + dnlib/DotNet/PropertyAttributes.cs | 18 + dnlib/DotNet/PropertyDef.cs | 584 + dnlib/DotNet/PublicKey.cs | 96 + dnlib/DotNet/PublicKeyBase.cs | 210 + dnlib/DotNet/PublicKeyToken.cs | 45 + dnlib/DotNet/RecursionCounter.cs | 54 + dnlib/DotNet/ReflectionExtensions.cs | 100 + dnlib/DotNet/ResolveException.cs | 121 + dnlib/DotNet/Resolver.cs | 167 + dnlib/DotNet/Resource.cs | 365 + dnlib/DotNet/ResourceCollection.cs | 159 + dnlib/DotNet/Resources/BuiltInResourceData.cs | 162 + dnlib/DotNet/Resources/IResourceData.cs | 35 + dnlib/DotNet/Resources/ResourceDataCreator.cs | 356 + dnlib/DotNet/Resources/ResourceElement.cs | 23 + dnlib/DotNet/Resources/ResourceElementSet.cs | 35 + dnlib/DotNet/Resources/ResourceReader.cs | 222 + dnlib/DotNet/Resources/ResourceTypeCode.cs | 108 + dnlib/DotNet/Resources/ResourceWriter.cs | 137 + dnlib/DotNet/Resources/UserResourceData.cs | 79 + dnlib/DotNet/Resources/UserResourceType.cs | 40 + dnlib/DotNet/SecurityAction.cs | 53 + dnlib/DotNet/SecurityAttribute.cs | 120 + dnlib/DotNet/SerializationType.cs | 49 + dnlib/DotNet/SigComparer.cs | 4995 ++ dnlib/DotNet/SignatureReader.cs | 710 + dnlib/DotNet/StandAloneSig.cs | 157 + dnlib/DotNet/StrongNameKey.cs | 769 + dnlib/DotNet/StrongNameSigner.cs | 171 + dnlib/DotNet/TIAHelper.cs | 225 + dnlib/DotNet/TypeAttributes.cs | 87 + dnlib/DotNet/TypeDef.cs | 2414 + dnlib/DotNet/TypeDefFinder.cs | 268 + dnlib/DotNet/TypeHelper.cs | 410 + dnlib/DotNet/TypeNameParser.cs | 866 + dnlib/DotNet/TypeRef.cs | 451 + dnlib/DotNet/TypeSig.cs | 1477 + dnlib/DotNet/TypeSpec.cs | 382 + dnlib/DotNet/UTF8String.cs | 711 + dnlib/DotNet/Utils.cs | 405 + dnlib/DotNet/VTableFixups.cs | 232 + dnlib/DotNet/VariantType.cs | 117 + dnlib/DotNet/WinMDHelpers.cs | 472 + dnlib/DotNet/WinMDStatus.cs | 23 + dnlib/DotNet/Writer/BinaryReaderChunk.cs | 74 + dnlib/DotNet/Writer/BlobHeap.cs | 160 + dnlib/DotNet/Writer/ByteArrayChunk.cs | 77 + dnlib/DotNet/Writer/ChunkList.cs | 50 + dnlib/DotNet/Writer/ChunkListBase.cs | 122 + dnlib/DotNet/Writer/CustomAttributeWriter.cs | 751 + dnlib/DotNet/Writer/DebugDirectory.cs | 105 + dnlib/DotNet/Writer/DeclSecurityWriter.cs | 98 + dnlib/DotNet/Writer/Extensions.cs | 24 + dnlib/DotNet/Writer/GuidHeap.cs | 82 + dnlib/DotNet/Writer/HeapBase.cs | 90 + dnlib/DotNet/Writer/HotHeap.cs | 243 + dnlib/DotNet/Writer/HotPool.cs | 391 + dnlib/DotNet/Writer/HotTable.cs | 482 + dnlib/DotNet/Writer/IChunk.cs | 96 + dnlib/DotNet/Writer/IHeap.cs | 23 + dnlib/DotNet/Writer/IMetaDataListener.cs | 235 + dnlib/DotNet/Writer/IModuleWriterListener.cs | 356 + dnlib/DotNet/Writer/IOffsetHeap.cs | 34 + dnlib/DotNet/Writer/IWriterError.cs | 16 + dnlib/DotNet/Writer/ImageCor20Header.cs | 143 + dnlib/DotNet/Writer/ImportAddressTable.cs | 52 + dnlib/DotNet/Writer/ImportDirectory.cs | 112 + dnlib/DotNet/Writer/MDTable.cs | 204 + dnlib/DotNet/Writer/MDTableWriter.cs | 711 + dnlib/DotNet/Writer/MarshalBlobWriter.cs | 145 + dnlib/DotNet/Writer/MaxStackCalculator.cs | 149 + dnlib/DotNet/Writer/MetaData.cs | 2766 ++ dnlib/DotNet/Writer/MetaDataHeader.cs | 162 + dnlib/DotNet/Writer/MethodBody.cs | 165 + dnlib/DotNet/Writer/MethodBodyChunks.cs | 154 + dnlib/DotNet/Writer/MethodBodyWriter.cs | 315 + dnlib/DotNet/Writer/MethodBodyWriterBase.cs | 413 + dnlib/DotNet/Writer/ModuleWriter.cs | 312 + dnlib/DotNet/Writer/ModuleWriterBase.cs | 906 + dnlib/DotNet/Writer/ModuleWriterException.cs | 34 + dnlib/DotNet/Writer/NativeModuleWriter.cs | 714 + dnlib/DotNet/Writer/NetResources.cs | 98 + dnlib/DotNet/Writer/NormalMetaData.cs | 337 + dnlib/DotNet/Writer/PEHeaders.cs | 484 + dnlib/DotNet/Writer/PESection.cs | 91 + dnlib/DotNet/Writer/PreserveTokensMetaData.cs | 1243 + dnlib/DotNet/Writer/RelocDirectory.cs | 55 + dnlib/DotNet/Writer/SectionSizes.cs | 69 + dnlib/DotNet/Writer/SignatureWriter.cs | 327 + dnlib/DotNet/Writer/StartupStub.cs | 78 + dnlib/DotNet/Writer/StringsHeap.cs | 160 + dnlib/DotNet/Writer/StrongNameSignature.cs | 55 + dnlib/DotNet/Writer/TablesHeap.cs | 435 + dnlib/DotNet/Writer/USHeap.cs | 176 + dnlib/DotNet/Writer/UniqueChunkList.cs | 58 + dnlib/DotNet/Writer/Win32ResourcesChunk.cs | 516 + dnlib/DotNet/Writer/WriterUtils.cs | 39 + dnlib/ExtensionAttribute.cs | 9 + ...rocessCorruptedStateExceptionsAttribute.cs | 9 + dnlib/IO/BinaryReaderStream.cs | 109 + dnlib/IO/FileOffset.cs | 29 + dnlib/IO/FileSection.cs | 48 + dnlib/IO/IBinaryReader.cs | 658 + dnlib/IO/IFileSection.cs | 19 + dnlib/IO/IImageStream.cs | 42 + dnlib/IO/IImageStreamCreator.cs | 46 + dnlib/IO/IOExtensions.cs | 9 + dnlib/IO/ImageStreamCreator.cs | 85 + dnlib/IO/MemoryImageStream.cs | 260 + dnlib/IO/MemoryMappedFileStreamCreator.cs | 311 + dnlib/IO/MemoryStreamCreator.cs | 82 + dnlib/IO/UnmanagedMemoryImageStream.cs | 234 + dnlib/IO/UnmanagedMemoryStreamCreator.cs | 121 + dnlib/PE/Characteristics.cs | 44 + dnlib/PE/DllCharacteristics.cs | 44 + dnlib/PE/IImageOptionalHeader.cs | 165 + dnlib/PE/IPEImage.cs | 157 + dnlib/PE/IPEType.cs | 26 + dnlib/PE/ImageDataDirectory.cs | 49 + dnlib/PE/ImageDosHeader.cs | 36 + dnlib/PE/ImageFileHeader.cs | 88 + dnlib/PE/ImageNTHeaders.cs | 69 + dnlib/PE/ImageOptionalHeader32.cs | 314 + dnlib/PE/ImageOptionalHeader64.cs | 312 + dnlib/PE/ImageSectionHeader.cs | 136 + dnlib/PE/Machine.cs | 69 + dnlib/PE/PEExtensions.cs | 32 + dnlib/PE/PEImage.cs | 354 + dnlib/PE/PEInfo.cs | 130 + dnlib/PE/RVA.cs | 29 + dnlib/PE/Subsystem.cs | 37 + dnlib/Properties/AssemblyInfo.cs | 20 + dnlib/Settings.cs | 21 + dnlib/Threading/Extensions.cs | 9 + dnlib/Threading/ICancellationToken.cs | 15 + dnlib/Threading/IThreadSafeList.cs | 828 + dnlib/Threading/Lock.cs | 88 + dnlib/Threading/ThreadSafeListCreator.cs | 142 + dnlib/Threading/ThreadSafeListWrapper.cs | 209 + dnlib/Utils/Extensions.cs | 9 + dnlib/Utils/ILazyList.cs | 60 + dnlib/Utils/LazyList.cs | 552 + dnlib/Utils/MFunc.cs | 17 + dnlib/Utils/SimpleLazyList.cs | 111 + dnlib/Utils/UserValue.cs | 106 + dnlib/W32Resources/ResourceData.cs | 91 + dnlib/W32Resources/ResourceDirectory.cs | 327 + dnlib/W32Resources/ResourceDirectoryEntry.cs | 31 + dnlib/W32Resources/ResourceName.cs | 135 + dnlib/W32Resources/Win32Resources.cs | 252 + dnlib/dnlib.csproj | 388 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 5709 bytes .../dnlib.csproj.CoreCompileInputs.cache | 1 + .../Debug/dnlib.csproj.FileListAbsolute.txt | 24 + .../Debug/dnlib.csprojAssemblyReference.cache | Bin 0 -> 845 bytes dnlib/obj/Debug/dnlib.dll | Bin 0 -> 974336 bytes dnlib/obj/Debug/dnlib.pdb | Bin 0 -> 2942464 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 5785 bytes .../dnlib.csproj.CoreCompileInputs.cache | 1 + .../dnlib.csproj.FileListAbsolute.txt | 8 + dnlib/obj/Debug_ThreadSafe/dnlib.dll | Bin 0 -> 1175040 bytes dnlib/obj/Debug_ThreadSafe/dnlib.pdb | Bin 0 -> 3360256 bytes 877 files changed, 161882 insertions(+) create mode 100644 .ObfuscationTests/CrackMe-astro.exe create mode 100644 .ObfuscationTests/CrackMe.exe create mode 100644 AfterKoi/AfterKoi.csproj create mode 100644 AfterKoi/LocalToField.cs create mode 100644 AfterKoi/Properties/AssemblyInfo.cs create mode 100644 AfterKoi/RandomGenerator.cs create mode 100644 AfterKoi/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 AfterKoi/obj/Debug/AfterKoi.csproj.AssemblyReference.cache create mode 100644 AfterKoi/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 AfterKoi/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 Assets/astro.ico create mode 100644 Assets/astro.png create mode 100644 Assets/banner.png create mode 100644 AstroNet.sln create mode 100644 AstroNet/App.config create mode 100644 AstroNet/AstroNet.csproj create mode 100644 AstroNet/AstroNet.csproj.user create mode 100644 AstroNet/KVM/InitializePhase.cs create mode 100644 AstroNet/KVM/KVMTask.cs create mode 100644 AstroNet/KVM/ModuleWriterListener.cs create mode 100644 AstroNet/KVM/ModuleWriterListenerEventArgs.cs create mode 100644 AstroNet/KVM/NativeEraser.cs create mode 100644 AstroNet/KVM/NativeEraserNew.cs create mode 100644 AstroNet/KVM/SafeAnalyzer.cs create mode 100644 AstroNet/KVM/Utils.cs create mode 100644 AstroNet/Program.cs create mode 100644 AstroNet/Properties/AssemblyInfo.cs create mode 100644 AstroNet/Protections/Anti/Anti Debug.cs create mode 100644 AstroNet/Protections/Anti/Anti Dump.cs create mode 100644 AstroNet/Protections/Anti/Anti Tamper.cs create mode 100644 AstroNet/Protections/Anti/AntiDe4dot.cs create mode 100644 AstroNet/Protections/Anti/Antimanything.cs create mode 100644 AstroNet/Protections/Anti/Runtime/AntiDebug.Safe.cs create mode 100644 AstroNet/Protections/Anti/Runtime/AntiDumpRun.cs create mode 100644 AstroNet/Protections/Anti/Runtime/EOFAntiTamper.cs create mode 100644 AstroNet/Protections/Anti/Runtime/SelfDeleteClass.cs create mode 100644 AstroNet/Protections/Arithmetic/AddMaths.cs create mode 100644 AstroNet/Protections/Arithmetic/Arithmetic.cs create mode 100644 AstroNet/Protections/Arithmetic/ArithmeticEmulator.cs create mode 100644 AstroNet/Protections/Arithmetic/ArithmeticTypes.cs create mode 100644 AstroNet/Protections/Arithmetic/ArithmeticVT.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Add.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Div.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Abs.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Ceiling.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Cos.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Floor.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Log.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Log10.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Round.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Sin.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Sqrt.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Tan.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Tanh.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Maths/Truncate.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Mul.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Sub.cs create mode 100644 AstroNet/Protections/Arithmetic/Functions/Xor.cs create mode 100644 AstroNet/Protections/Arithmetic/Generator/Generator.cs create mode 100644 AstroNet/Protections/Arithmetic/Token.cs create mode 100644 AstroNet/Protections/Arithmetic/Utils/ArithmeticUtils.cs create mode 100644 AstroNet/Protections/Arithmetic/Value.cs create mode 100644 AstroNet/Protections/Arithmetic/iFunction.cs create mode 100644 AstroNet/Protections/Attribute.cs create mode 100644 AstroNet/Protections/Base64.cs create mode 100644 AstroNet/Protections/ConstantMelting.cs create mode 100644 AstroNet/Protections/CtrlFlow.cs create mode 100644 AstroNet/Protections/LocalToField.cs create mode 100644 AstroNet/Protections/Other/Calli.cs create mode 100644 AstroNet/Protections/Other/StackUnfConfusion.cs create mode 100644 AstroNet/Protections/Other/Watermark.cs create mode 100644 AstroNet/Protections/ProxyINT.cs create mode 100644 AstroNet/Protections/ProxyMeth.cs create mode 100644 AstroNet/Protections/ProxyString.cs create mode 100644 AstroNet/Protections/RemoveNamespace.cs create mode 100644 AstroNet/Protections/Rename.cs create mode 100644 AstroNet/Protections/StringEnc.cs create mode 100644 AstroNet/Protections/Virtualization.cs create mode 100644 AstroNet/Services/ConsoleLogger.cs create mode 100644 AstroNet/Services/InitMemory.cs create mode 100644 AstroNet/Services/InjectHelper.cs create mode 100644 AstroNet/Services/RandomGenerator.cs create mode 100644 AstroNet/Services/WriterMemory.cs create mode 100644 AstroNet/astro.ico create mode 100644 AstroNet/bin/Debug/Astro_Renewed.exe create mode 100644 AstroNet/bin/Debug/Astro_Renewed.exe.config create mode 100644 AstroNet/bin/Debug/Astro_Renewed.pdb create mode 100644 AstroNet/bin/Debug/KoiVM.Console.dll create mode 100644 AstroNet/bin/Debug/KoiVM.Console.pdb create mode 100644 AstroNet/bin/Debug/KoiVM.dll create mode 100644 AstroNet/bin/Debug/KoiVM.pdb create mode 100644 AstroNet/bin/Debug/dnlib.dll create mode 100644 AstroNet/bin/Debug/dnlib.xml create mode 100644 AstroNet/bin/Debug/dnlibOld.dll create mode 100644 AstroNet/bin/Release/Astro_Renewed.exe create mode 100644 AstroNet/bin/Release/Astro_Renewed.exe.config create mode 100644 AstroNet/bin/Release/Astro_Renewed.pdb create mode 100644 AstroNet/bin/Release/AutoMapper.dll create mode 100644 AstroNet/bin/Release/AutoMapper.xml create mode 100644 AstroNet/bin/Release/dnlib.dll create mode 100644 AstroNet/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 AstroNet/obj/Debug/AstroNet.csproj.AssemblyReference.cache create mode 100644 AstroNet/obj/Debug/AstroNet.csproj.CopyComplete create mode 100644 AstroNet/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache create mode 100644 AstroNet/obj/Debug/AstroNet.csproj.FileListAbsolute.txt create mode 100644 AstroNet/obj/Debug/Astro_Renewed.csproj.AssemblyReference.cache create mode 100644 AstroNet/obj/Debug/Astro_Renewed.csproj.CopyComplete create mode 100644 AstroNet/obj/Debug/Astro_Renewed.csproj.CoreCompileInputs.cache create mode 100644 AstroNet/obj/Debug/Astro_Renewed.csproj.FileListAbsolute.txt create mode 100644 AstroNet/obj/Debug/Astro_Renewed.exe create mode 100644 AstroNet/obj/Debug/Astro_Renewed.pdb create mode 100644 AstroNet/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 AstroNet/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 AstroNet/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 AstroNet/obj/Release/AstroNet.csproj.CopyComplete create mode 100644 AstroNet/obj/Release/AstroNet.csproj.CoreCompileInputs.cache create mode 100644 AstroNet/obj/Release/AstroNet.csproj.FileListAbsolute.txt create mode 100644 AstroNet/obj/Release/Astro_Renewed.exe create mode 100644 AstroNet/obj/Release/Astro_Renewed.pdb create mode 100644 AstroNet/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 Bin/#README.txt create mode 100644 Bin/AstroNet.exe create mode 100644 Bin/AstroNet.exe.config create mode 100644 Bin/AstroNet.pdb create mode 100644 Bin/Astro_Renewed.exe create mode 100644 Bin/Astro_Renewed.exe.config create mode 100644 Bin/Astro_Renewed.pdb create mode 100644 Bin/KoiVM.dll create mode 100644 Bin/KoiVM.pdb create mode 100644 Bin/R.dll create mode 100644 Bin/Runtime.dll create mode 100644 Bin/Runtime.pdb create mode 100644 Bin/dnlibOld.dll create mode 100644 KoiVM.Console/KVM/InitializePhase.cs create mode 100644 KoiVM.Console/KVM/KVMTask.cs create mode 100644 KoiVM.Console/KVM/ModuleWriterListener.cs create mode 100644 KoiVM.Console/KVM/ModuleWriterListenerEventArgs.cs create mode 100644 KoiVM.Console/KVM/NativeEraser.cs create mode 100644 KoiVM.Console/KVM/NativeEraserNew.cs create mode 100644 KoiVM.Console/KVM/SafeAnalyzer.cs create mode 100644 KoiVM.Console/KVM/Utils.cs create mode 100644 KoiVM.Console/KoiVM.Console.csproj create mode 100644 KoiVM.Console/Properties/AssemblyInfo.cs create mode 100644 KoiVM.Console/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 KoiVM.Console/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 KoiVM.Console/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 KoiVM.Console/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 KoiVM.Console/obj/Debug/KoiVM.Console.csproj.AssemblyReference.cache create mode 100644 KoiVM.Console/obj/Debug/KoiVM.Console.csproj.CopyComplete create mode 100644 KoiVM.Console/obj/Debug/KoiVM.Console.csproj.CoreCompileInputs.cache create mode 100644 KoiVM.Console/obj/Debug/KoiVM.Console.csproj.FileListAbsolute.txt create mode 100644 KoiVM.Console/obj/Debug/KoiVM.Console.dll create mode 100644 KoiVM.Console/obj/Debug/KoiVM.Console.pdb create mode 100644 KoiVM.GUI/App.config create mode 100644 KoiVM.GUI/Form1.Designer.cs create mode 100644 KoiVM.GUI/Form1.cs create mode 100644 KoiVM.GUI/Form1.resx create mode 100644 KoiVM.GUI/KoiVM.GUI.csproj create mode 100644 KoiVM.GUI/Program.cs create mode 100644 KoiVM.GUI/Properties/AssemblyInfo.cs create mode 100644 KoiVM.GUI/Properties/Resources.Designer.cs create mode 100644 KoiVM.GUI/Properties/Resources.resx create mode 100644 KoiVM.GUI/Properties/Settings.Designer.cs create mode 100644 KoiVM.GUI/Properties/Settings.settings create mode 100644 KoiVM.GUI/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.AssemblyReference.cache create mode 100644 KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CopyComplete create mode 100644 KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CoreCompileInputs.cache create mode 100644 KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.FileListAbsolute.txt create mode 100644 KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.GenerateResource.cache create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.Form1.resources create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.Properties.Resources.resources create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.csproj.AssemblyReference.cache create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.csproj.CopyComplete create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.csproj.FileListAbsolute.txt create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.csproj.GenerateResource.cache create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.exe create mode 100644 KoiVM.GUI/obj/Debug/AstroNet.pdb create mode 100644 KoiVM.GUI/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 KoiVM.GUI/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.AssemblyReference.cache create mode 100644 KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.CopyComplete create mode 100644 KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.CoreCompileInputs.cache create mode 100644 KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.FileListAbsolute.txt create mode 100644 KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.GenerateResource.cache create mode 100644 KoiVM.GUI/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 KoiVM.GUI/solar-system.ico create mode 100644 KoiVM.Runtime/AstroNet.cs create mode 100644 KoiVM.Runtime/Data/OpCodeMap.cs create mode 100644 KoiVM.Runtime/Data/VCallMap.cs create mode 100644 KoiVM.Runtime/Data/VMData.cs create mode 100644 KoiVM.Runtime/Data/VMDataInitializer.cs create mode 100644 KoiVM.Runtime/Data/VMExportInfo.cs create mode 100644 KoiVM.Runtime/Data/VMFuncSig.cs create mode 100644 KoiVM.Runtime/Dynamic/Constants.cs create mode 100644 KoiVM.Runtime/Execution/EHFrame.cs create mode 100644 KoiVM.Runtime/Execution/EHState.cs create mode 100644 KoiVM.Runtime/Execution/ExecutionState.cs create mode 100644 KoiVM.Runtime/Execution/FieldRef.cs create mode 100644 KoiVM.Runtime/Execution/IReference.cs create mode 100644 KoiVM.Runtime/Execution/Internal/ArrayStoreHelpers.cs create mode 100644 KoiVM.Runtime/Execution/Internal/DirectCall.cs create mode 100644 KoiVM.Runtime/Execution/Internal/EHHelper.cs create mode 100644 KoiVM.Runtime/Execution/Internal/SizeOfHelper.cs create mode 100644 KoiVM.Runtime/Execution/Internal/TypedReferenceHelpers.cs create mode 100644 KoiVM.Runtime/Execution/Internal/Unverifier.cs create mode 100644 KoiVM.Runtime/Execution/Internal/VMTrampoline.cs create mode 100644 KoiVM.Runtime/Execution/Internal/ValueTypeBox.cs create mode 100644 KoiVM.Runtime/Execution/PointerRef.cs create mode 100644 KoiVM.Runtime/Execution/PointerType.cs create mode 100644 KoiVM.Runtime/Execution/StackRef.cs create mode 100644 KoiVM.Runtime/Execution/TypedRef.cs create mode 100644 KoiVM.Runtime/Execution/TypedRefPtr.cs create mode 100644 KoiVM.Runtime/Execution/VMContext.cs create mode 100644 KoiVM.Runtime/Execution/VMDispatcher.cs create mode 100644 KoiVM.Runtime/Execution/VMSlot.cs create mode 100644 KoiVM.Runtime/Execution/VMStack.cs create mode 100644 KoiVM.Runtime/OpCodes/Add.cs create mode 100644 KoiVM.Runtime/OpCodes/Call.cs create mode 100644 KoiVM.Runtime/OpCodes/Cmp.cs create mode 100644 KoiVM.Runtime/OpCodes/Div.cs create mode 100644 KoiVM.Runtime/OpCodes/FConv.cs create mode 100644 KoiVM.Runtime/OpCodes/IConv.cs create mode 100644 KoiVM.Runtime/OpCodes/IOpCode.cs create mode 100644 KoiVM.Runtime/OpCodes/Jmp.cs create mode 100644 KoiVM.Runtime/OpCodes/Leave.cs create mode 100644 KoiVM.Runtime/OpCodes/Lind.cs create mode 100644 KoiVM.Runtime/OpCodes/Mul.cs create mode 100644 KoiVM.Runtime/OpCodes/Nop.cs create mode 100644 KoiVM.Runtime/OpCodes/Nor.cs create mode 100644 KoiVM.Runtime/OpCodes/Pop.cs create mode 100644 KoiVM.Runtime/OpCodes/Push.cs create mode 100644 KoiVM.Runtime/OpCodes/Rem.cs create mode 100644 KoiVM.Runtime/OpCodes/Ret.cs create mode 100644 KoiVM.Runtime/OpCodes/Shl.cs create mode 100644 KoiVM.Runtime/OpCodes/Shr.cs create mode 100644 KoiVM.Runtime/OpCodes/Sind.cs create mode 100644 KoiVM.Runtime/OpCodes/Sub.cs create mode 100644 KoiVM.Runtime/OpCodes/Sx.cs create mode 100644 KoiVM.Runtime/OpCodes/Try.cs create mode 100644 KoiVM.Runtime/OpCodes/Vcall.cs create mode 100644 KoiVM.Runtime/Platform.cs create mode 100644 KoiVM.Runtime/Properties/AssemblyInfo.cs create mode 100644 KoiVM.Runtime/Runtime.csproj create mode 100644 KoiVM.Runtime/Utils.cs create mode 100644 KoiVM.Runtime/VCalls/Box.cs create mode 100644 KoiVM.Runtime/VCalls/Cast.cs create mode 100644 KoiVM.Runtime/VCalls/Ckfinite.cs create mode 100644 KoiVM.Runtime/VCalls/Ckoverflow.cs create mode 100644 KoiVM.Runtime/VCalls/Ecall.cs create mode 100644 KoiVM.Runtime/VCalls/Exit.cs create mode 100644 KoiVM.Runtime/VCalls/IVCall.cs create mode 100644 KoiVM.Runtime/VCalls/Initobj.cs create mode 100644 KoiVM.Runtime/VCalls/Ldfld.cs create mode 100644 KoiVM.Runtime/VCalls/Ldftn.cs create mode 100644 KoiVM.Runtime/VCalls/Localloc.cs create mode 100644 KoiVM.Runtime/VCalls/Rangechk.cs create mode 100644 KoiVM.Runtime/VCalls/Sizeof.cs create mode 100644 KoiVM.Runtime/VCalls/Stfld.cs create mode 100644 KoiVM.Runtime/VCalls/Throw.cs create mode 100644 KoiVM.Runtime/VCalls/Token.cs create mode 100644 KoiVM.Runtime/VCalls/Unbox.cs create mode 100644 KoiVM.Runtime/VMInstance.cs create mode 100644 KoiVM.Runtime/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs create mode 100644 KoiVM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 KoiVM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.CoreCompileInputs.cache create mode 100644 KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.FileListAbsolute.txt create mode 100644 KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csprojAssemblyReference.cache create mode 100644 KoiVM.Runtime/obj/Debug/Runtime.csproj.AssemblyReference.cache create mode 100644 KoiVM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache create mode 100644 KoiVM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt create mode 100644 KoiVM.Runtime/obj/Debug/Runtime.csprojAssemblyReference.cache create mode 100644 KoiVM.Runtime/obj/Debug/Runtime.dll create mode 100644 KoiVM.Runtime/obj/Debug/Runtime.pdb create mode 100644 KoiVM/AST/ASTConstant.cs create mode 100644 KoiVM/AST/ASTExpression.cs create mode 100644 KoiVM/AST/ASTNode.cs create mode 100644 KoiVM/AST/ASTType.cs create mode 100644 KoiVM/AST/ASTVariable.cs create mode 100644 KoiVM/AST/IL/IHasOffset.cs create mode 100644 KoiVM/AST/IL/IILOperand.cs create mode 100644 KoiVM/AST/IL/ILBlock.cs create mode 100644 KoiVM/AST/IL/ILDataTarget.cs create mode 100644 KoiVM/AST/IL/ILImmediate.cs create mode 100644 KoiVM/AST/IL/ILInstrList.cs create mode 100644 KoiVM/AST/IL/ILInstruction.cs create mode 100644 KoiVM/AST/IL/ILJumpTable.cs create mode 100644 KoiVM/AST/IL/ILJumpTarget.cs create mode 100644 KoiVM/AST/IL/ILMethodTarget.cs create mode 100644 KoiVM/AST/IL/ILRegister.cs create mode 100644 KoiVM/AST/IL/ILRelReference.cs create mode 100644 KoiVM/AST/ILAST/IILASTNode.cs create mode 100644 KoiVM/AST/ILAST/IILASTStatement.cs create mode 100644 KoiVM/AST/ILAST/ILASTAssignment.cs create mode 100644 KoiVM/AST/ILAST/ILASTExpression.cs create mode 100644 KoiVM/AST/ILAST/ILASTPhi.cs create mode 100644 KoiVM/AST/ILAST/ILASTTree.cs create mode 100644 KoiVM/AST/ILAST/ILASTVariable.cs create mode 100644 KoiVM/AST/ILAST/ILASTVariableType.cs create mode 100644 KoiVM/AST/IR/IIROperand.cs create mode 100644 KoiVM/AST/IR/IRBlockTarget.cs create mode 100644 KoiVM/AST/IR/IRConstant.cs create mode 100644 KoiVM/AST/IR/IRDataTarget.cs create mode 100644 KoiVM/AST/IR/IRInstrList.cs create mode 100644 KoiVM/AST/IR/IRInstruction.cs create mode 100644 KoiVM/AST/IR/IRJumpTable.cs create mode 100644 KoiVM/AST/IR/IRMetaTarget.cs create mode 100644 KoiVM/AST/IR/IRPointer.cs create mode 100644 KoiVM/AST/IR/IRRegister.cs create mode 100644 KoiVM/AST/IR/IRVariable.cs create mode 100644 KoiVM/AST/IR/IRVariableType.cs create mode 100644 KoiVM/AST/InstrAnnotation.cs create mode 100644 KoiVM/AST/TypeInference.cs create mode 100644 KoiVM/CFG/BasicBlock.cs create mode 100644 KoiVM/CFG/BlockFlags.cs create mode 100644 KoiVM/CFG/BlockParser.cs create mode 100644 KoiVM/CFG/CILInstrList.cs create mode 100644 KoiVM/CFG/IBasicBlock.cs create mode 100644 KoiVM/CFG/ScopeBlock.cs create mode 100644 KoiVM/CFG/ScopeType.cs create mode 100644 KoiVM/GenericInstantiation.cs create mode 100644 KoiVM/ILAST/ILASTBuilder.cs create mode 100644 KoiVM/ILAST/ILASTTransformer.cs create mode 100644 KoiVM/ILAST/ITransformationHandler.cs create mode 100644 KoiVM/ILAST/Transformation/ArrayTransform.cs create mode 100644 KoiVM/ILAST/Transformation/BranchTransform.cs create mode 100644 KoiVM/ILAST/Transformation/ILASTTypeInference.cs create mode 100644 KoiVM/ILAST/Transformation/IndirectTransform.cs create mode 100644 KoiVM/ILAST/Transformation/NullTransform.cs create mode 100644 KoiVM/ILAST/Transformation/StringTransform.cs create mode 100644 KoiVM/ILAST/Transformation/VariableInlining.cs create mode 100644 KoiVM/IVMSettings.cs create mode 100644 KoiVM/KoiVM.csproj create mode 100644 KoiVM/MethodVirtualizer.cs create mode 100644 KoiVM/Obfuscation.cs create mode 100644 KoiVM/Properties/AssemblyInfo.cs create mode 100644 KoiVM/Protections/SMC/SMCBlock.cs create mode 100644 KoiVM/Protections/SMC/SMCILTransform.cs create mode 100644 KoiVM/Protections/SMC/SMCIRTransform.cs create mode 100644 KoiVM/RT/BasicBlockChunk.cs create mode 100644 KoiVM/RT/BasicBlockSerializer.cs create mode 100644 KoiVM/RT/BinaryChunk.cs create mode 100644 KoiVM/RT/DbgWriter.cs create mode 100644 KoiVM/RT/HeaderChunk.cs create mode 100644 KoiVM/RT/IKoiChunk.cs create mode 100644 KoiVM/RT/JumpTableChunk.cs create mode 100644 KoiVM/RT/KoiHeap.cs create mode 100644 KoiVM/RT/Mutation/MethodPatcher.cs create mode 100644 KoiVM/RT/Mutation/RTConstants.cs create mode 100644 KoiVM/RT/Mutation/RTMap.cs create mode 100644 KoiVM/RT/Mutation/Renamer.cs create mode 100644 KoiVM/RT/Mutation/RuntimeHelpers.cs create mode 100644 KoiVM/RT/Mutation/RuntimeMutator.cs create mode 100644 KoiVM/RT/Mutation/RuntimePatcher.cs create mode 100644 KoiVM/RT/VMRuntime.cs create mode 100644 KoiVM/Scanner.cs create mode 100644 KoiVM/Utils.cs create mode 100644 KoiVM/VM/Descriptors/ArchDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/DataDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/FlagDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/OpCodeDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/RTFlagDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/RegisterDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/RuntimeDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/VCallOpsDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/VMCallDescriptor.cs create mode 100644 KoiVM/VM/Descriptors/VMDescriptor.cs create mode 100644 KoiVM/VM/FuncSig.cs create mode 100644 KoiVM/VM/VMCalls.cs create mode 100644 KoiVM/VM/VMFlags.cs create mode 100644 KoiVM/VM/VMMethodInfo.cs create mode 100644 KoiVM/VM/VMRegisters.cs create mode 100644 KoiVM/VMIL/ILOpCode.cs create mode 100644 KoiVM/VMIL/ILPostTransformer.cs create mode 100644 KoiVM/VMIL/ILTransformer.cs create mode 100644 KoiVM/VMIL/ILTranslator.cs create mode 100644 KoiVM/VMIL/IPostTransform.cs create mode 100644 KoiVM/VMIL/ITransform.cs create mode 100644 KoiVM/VMIL/ITranslationHandler.cs create mode 100644 KoiVM/VMIL/Transforms/BlockKeyTransform.cs create mode 100644 KoiVM/VMIL/Transforms/EntryExitTransform.cs create mode 100644 KoiVM/VMIL/Transforms/FixMethodRefTransform.cs create mode 100644 KoiVM/VMIL/Transforms/ReferenceOffsetTransform.cs create mode 100644 KoiVM/VMIL/Transforms/SaveInfoTransform.cs create mode 100644 KoiVM/VMIL/Transforms/SaveRegistersTransform.cs create mode 100644 KoiVM/VMIL/Translation/ArithmeticLogicHandler.cs create mode 100644 KoiVM/VMIL/Translation/BranchHandlers.cs create mode 100644 KoiVM/VMIL/Translation/EHHandlers.cs create mode 100644 KoiVM/VMIL/Translation/InvocationHandlers.cs create mode 100644 KoiVM/VMIL/Translation/MemoryHandlers.cs create mode 100644 KoiVM/VMIL/Translation/MiscHandlers.cs create mode 100644 KoiVM/VMIL/Translation/PseudoHandlers.cs create mode 100644 KoiVM/VMIL/TranslationHelpers.cs create mode 100644 KoiVM/VMIR/Compiler/IRAnalyzer.cs create mode 100644 KoiVM/VMIR/Compiler/IRCompiler.cs create mode 100644 KoiVM/VMIR/Compiler/IRCompilerAssemblyFinder.cs create mode 100644 KoiVM/VMIR/Compiler/IRConstants.cs create mode 100644 KoiVM/VMIR/Compiler/IRParser.cs create mode 100644 KoiVM/VMIR/Compiler/IRTokenizer.cs create mode 100644 KoiVM/VMIR/IRContext.cs create mode 100644 KoiVM/VMIR/IROpCode.cs create mode 100644 KoiVM/VMIR/IRTransformer.cs create mode 100644 KoiVM/VMIR/IRTranslator.cs create mode 100644 KoiVM/VMIR/ITransform.cs create mode 100644 KoiVM/VMIR/ITranslationHandler.cs create mode 100644 KoiVM/VMIR/RegAlloc/BlockLiveness.cs create mode 100644 KoiVM/VMIR/RegAlloc/LivenessAnalysis.cs create mode 100644 KoiVM/VMIR/RegAlloc/RegisterAllocator.cs create mode 100644 KoiVM/VMIR/Transforms/ConstantTypePromotionTransform.cs create mode 100644 KoiVM/VMIR/Transforms/EHTransform.cs create mode 100644 KoiVM/VMIR/Transforms/GetSetFlagTransform.cs create mode 100644 KoiVM/VMIR/Transforms/GuardBlockTransform.cs create mode 100644 KoiVM/VMIR/Transforms/InitLocalTransform.cs create mode 100644 KoiVM/VMIR/Transforms/InvokeTransform.cs create mode 100644 KoiVM/VMIR/Transforms/LeaTransform.cs create mode 100644 KoiVM/VMIR/Transforms/LogicTransform.cs create mode 100644 KoiVM/VMIR/Transforms/MarkReturnRegTransform.cs create mode 100644 KoiVM/VMIR/Transforms/MetadataTransform.cs create mode 100644 KoiVM/VMIR/Transforms/RegisterAllocationTransform.cs create mode 100644 KoiVM/VMIR/Transforms/StackFrameTransform.cs create mode 100644 KoiVM/VMIR/Translation/BoxHandlers.cs create mode 100644 KoiVM/VMIR/Translation/BranchHandlers.cs create mode 100644 KoiVM/VMIR/Translation/CastHandlers.cs create mode 100644 KoiVM/VMIR/Translation/CompareHandlers.cs create mode 100644 KoiVM/VMIR/Translation/ConstantHandlers.cs create mode 100644 KoiVM/VMIR/Translation/ConvHandlers.cs create mode 100644 KoiVM/VMIR/Translation/ConvOvfHandlers.cs create mode 100644 KoiVM/VMIR/Translation/ConvOvfUnHandlers.cs create mode 100644 KoiVM/VMIR/Translation/EHHandlers.cs create mode 100644 KoiVM/VMIR/Translation/FieldHandlers.cs create mode 100644 KoiVM/VMIR/Translation/FnPtrHandlers.cs create mode 100644 KoiVM/VMIR/Translation/InvokeHandlers.cs create mode 100644 KoiVM/VMIR/Translation/LocalHandlers.cs create mode 100644 KoiVM/VMIR/Translation/LogicHandlers.cs create mode 100644 KoiVM/VMIR/Translation/MiscHandlers.cs create mode 100644 KoiVM/VMIR/Translation/NumericHandlers.cs create mode 100644 KoiVM/VMIR/Translation/ParameterHandlers.cs create mode 100644 KoiVM/VMIR/Translation/PointerHandlers.cs create mode 100644 KoiVM/VMIR/TranslationHelpers.cs create mode 100644 KoiVM/Virtualizer.cs create mode 100644 KoiVM/VisitFunc.cs create mode 100644 KoiVM/Watermark.cs create mode 100644 KoiVM/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 KoiVM/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 KoiVM/obj/Debug/KoiVM.csproj.AssemblyReference.cache create mode 100644 KoiVM/obj/Debug/KoiVM.csproj.CopyComplete create mode 100644 KoiVM/obj/Debug/KoiVM.csproj.CoreCompileInputs.cache create mode 100644 KoiVM/obj/Debug/KoiVM.csproj.FileListAbsolute.txt create mode 100644 KoiVM/obj/Debug/KoiVM.dll create mode 100644 KoiVM/obj/Debug/KoiVM.pdb create mode 100644 LICENSE create mode 100644 README.md create mode 100644 References/dnlibOld.dll create mode 100644 VM.Core/ByteEncryption/ByteEncryption.cs create mode 100644 VM.Core/ByteEncryption/ByteGetter.cs create mode 100644 VM.Core/ByteEncryption/Process.cs create mode 100644 VM.Core/Injection/InjectHelper.cs create mode 100644 VM.Core/Injection/InjectInitialise.cs create mode 100644 VM.Core/Injection/InjectMethods.cs create mode 100644 VM.Core/Injection/Resource.cs create mode 100644 VM.Core/Properties/AssemblyInfo.cs create mode 100644 VM.Core/Properties/Resources.Designer.cs create mode 100644 VM.Core/Properties/Resources.resx create mode 100644 VM.Core/Protection/ConvertToBytes.cs create mode 100644 VM.Core/Protection/MethodData.cs create mode 100644 VM.Core/Protection/MethodProccesor.cs create mode 100644 VM.Core/Protector.cs create mode 100644 VM.Core/Resources/ConversionBack.dll create mode 100644 VM.Core/Resources/NativeEncoderx64.dll create mode 100644 VM.Core/Resources/NativeEncoderx86.dll create mode 100644 VM.Core/Resources/XorMethod.bin create mode 100644 VM.Core/VM.Core.csproj create mode 100644 VM.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 VM.Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 VM.Core/obj/Debug/Core.Properties.Resources.resources create mode 100644 VM.Core/obj/Debug/Core.csproj.AssemblyReference.cache create mode 100644 VM.Core/obj/Debug/Core.csproj.CopyComplete create mode 100644 VM.Core/obj/Debug/Core.csproj.CoreCompileInputs.cache create mode 100644 VM.Core/obj/Debug/Core.csproj.FileListAbsolute.txt create mode 100644 VM.Core/obj/Debug/Core.csproj.GenerateResource.cache create mode 100644 VM.Core/obj/Debug/Core.csprojAssemblyReference.cache create mode 100644 VM.Core/obj/Debug/Core.csprojResolveAssemblyReference.cache create mode 100644 VM.Core/obj/Debug/Core.dll create mode 100644 VM.Core/obj/Debug/Core.pdb create mode 100644 VM.Core/obj/Debug/CoreCompileInputs.cache create mode 100644 VM.Core/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 VM.Core/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 VM.Core/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 VM.Core/obj/Debug/VM.Core.csproj.AssemblyReference.cache create mode 100644 VM.Core/obj/Debug/VM.Core.csproj.CopyComplete create mode 100644 VM.Core/obj/Debug/VM.Core.csproj.CoreCompileInputs.cache create mode 100644 VM.Core/obj/Debug/VM.Core.csproj.FileListAbsolute.txt create mode 100644 VM.Core/obj/Debug/VM.Core.csproj.GenerateResource.cache create mode 100644 VM.Core/obj/Release/CoreCompileInputs.cache create mode 100644 VM.Core/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 VM.Core/obj/Release/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 VM.Runtime/ConvertBack.cs create mode 100644 VM.Runtime/Embed.cs create mode 100644 VM.Runtime/ExceptionHandlers/ExceptionHandlerClass.cs create mode 100644 VM.Runtime/ExceptionHandlers/FixedExceptionHandlerClass.cs create mode 100644 VM.Runtime/Initialize.cs create mode 100644 VM.Runtime/OpCodes/Add.cs create mode 100644 VM.Runtime/OpCodes/All.cs create mode 100644 VM.Runtime/OpCodes/Base.cs create mode 100644 VM.Runtime/OpCodes/Br.cs create mode 100644 VM.Runtime/OpCodes/Brfalse.cs create mode 100644 VM.Runtime/OpCodes/Brtrue.cs create mode 100644 VM.Runtime/OpCodes/Call.cs create mode 100644 VM.Runtime/OpCodes/Callvirt.cs create mode 100644 VM.Runtime/OpCodes/Ceq.cs create mode 100644 VM.Runtime/OpCodes/Clt.cs create mode 100644 VM.Runtime/OpCodes/ConvI4.cs create mode 100644 VM.Runtime/OpCodes/ConvU1.cs create mode 100644 VM.Runtime/OpCodes/Ldarg.cs create mode 100644 VM.Runtime/OpCodes/Ldc.cs create mode 100644 VM.Runtime/OpCodes/LdelemU1.cs create mode 100644 VM.Runtime/OpCodes/Ldlen.cs create mode 100644 VM.Runtime/OpCodes/Ldloc.cs create mode 100644 VM.Runtime/OpCodes/Ldnull.cs create mode 100644 VM.Runtime/OpCodes/Ldstr.cs create mode 100644 VM.Runtime/OpCodes/NewArr.cs create mode 100644 VM.Runtime/OpCodes/NewObj.cs create mode 100644 VM.Runtime/OpCodes/Nop.cs create mode 100644 VM.Runtime/OpCodes/Pop.cs create mode 100644 VM.Runtime/OpCodes/Rem.cs create mode 100644 VM.Runtime/OpCodes/StelemI1.cs create mode 100644 VM.Runtime/OpCodes/Stloc.cs create mode 100644 VM.Runtime/OpCodes/ValueStack.cs create mode 100644 VM.Runtime/OpCodes/Xor.cs create mode 100644 VM.Runtime/Properties/AssemblyInfo.cs create mode 100644 VM.Runtime/VM.Runtime.csproj create mode 100644 VM.Runtime/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs create mode 100644 VM.Runtime/obj/Debug/CoreCompileInputs.cache create mode 100644 VM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 VM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache create mode 100644 VM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt create mode 100644 VM.Runtime/obj/Debug/Runtime.csprojResolveAssemblyReference.cache create mode 100644 VM.Runtime/obj/Debug/Runtime.dll create mode 100644 VM.Runtime/obj/Debug/Runtime.pdb create mode 100644 VM.Runtime/obj/Debug/VM.Runtime.csproj.CoreCompileInputs.cache create mode 100644 VM.Runtime/obj/Debug/VM.Runtime.csproj.FileListAbsolute.txt create mode 100644 VM.Runtime/obj/Release/CoreCompileInputs.cache create mode 100644 VM.Runtime/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 dnlib/DotNet/AccessChecker.cs create mode 100644 dnlib/DotNet/AllTypesHelper.cs create mode 100644 dnlib/DotNet/AssemblyAttributes.cs create mode 100644 dnlib/DotNet/AssemblyDef.cs create mode 100644 dnlib/DotNet/AssemblyHash.cs create mode 100644 dnlib/DotNet/AssemblyHashAlgorithm.cs create mode 100644 dnlib/DotNet/AssemblyNameComparer.cs create mode 100644 dnlib/DotNet/AssemblyNameInfo.cs create mode 100644 dnlib/DotNet/AssemblyRef.cs create mode 100644 dnlib/DotNet/AssemblyResolver.cs create mode 100644 dnlib/DotNet/CallingConvention.cs create mode 100644 dnlib/DotNet/CallingConventionSig.cs create mode 100644 dnlib/DotNet/ClassLayout.cs create mode 100644 dnlib/DotNet/Constant.cs create mode 100644 dnlib/DotNet/CorLibTypes.cs create mode 100644 dnlib/DotNet/CustomAttribute.cs create mode 100644 dnlib/DotNet/CustomAttributeCollection.cs create mode 100644 dnlib/DotNet/CustomAttributeReader.cs create mode 100644 dnlib/DotNet/DeclSecurity.cs create mode 100644 dnlib/DotNet/DeclSecurityReader.cs create mode 100644 dnlib/DotNet/ElementType.cs create mode 100644 dnlib/DotNet/Emit/Code.cs create mode 100644 dnlib/DotNet/Emit/DynamicMethodBodyReader.cs create mode 100644 dnlib/DotNet/Emit/ExceptionHandler.cs create mode 100644 dnlib/DotNet/Emit/ExceptionHandlerType.cs create mode 100644 dnlib/DotNet/Emit/Extensions.cs create mode 100644 dnlib/DotNet/Emit/FlowControl.cs create mode 100644 dnlib/DotNet/Emit/Instruction.cs create mode 100644 dnlib/DotNet/Emit/InstructionPrinter.cs create mode 100644 dnlib/DotNet/Emit/InvalidMethodException.cs create mode 100644 dnlib/DotNet/Emit/LocalList.cs create mode 100644 dnlib/DotNet/Emit/MethodBody.cs create mode 100644 dnlib/DotNet/Emit/MethodBodyReader.cs create mode 100644 dnlib/DotNet/Emit/MethodBodyReaderBase.cs create mode 100644 dnlib/DotNet/Emit/MethodTableToTypeConverter.cs create mode 100644 dnlib/DotNet/Emit/MethodUtils.cs create mode 100644 dnlib/DotNet/Emit/OpCode.cs create mode 100644 dnlib/DotNet/Emit/OpCodeType.cs create mode 100644 dnlib/DotNet/Emit/OpCodes.cs create mode 100644 dnlib/DotNet/Emit/OperandType.cs create mode 100644 dnlib/DotNet/Emit/StackBehaviour.cs create mode 100644 dnlib/DotNet/EventAttributes.cs create mode 100644 dnlib/DotNet/EventDef.cs create mode 100644 dnlib/DotNet/ExportedType.cs create mode 100644 dnlib/DotNet/Extensions.cs create mode 100644 dnlib/DotNet/FieldAttributes.cs create mode 100644 dnlib/DotNet/FieldDef.cs create mode 100644 dnlib/DotNet/FileAttributes.cs create mode 100644 dnlib/DotNet/FileDef.cs create mode 100644 dnlib/DotNet/FrameworkRedirect.cs create mode 100644 dnlib/DotNet/FullNameCreator.cs create mode 100644 dnlib/DotNet/GenericArguments.cs create mode 100644 dnlib/DotNet/GenericParam.cs create mode 100644 dnlib/DotNet/GenericParamAttributes.cs create mode 100644 dnlib/DotNet/GenericParamConstraint.cs create mode 100644 dnlib/DotNet/GenericParamContext.cs create mode 100644 dnlib/DotNet/IAssemblyResolver.cs create mode 100644 dnlib/DotNet/ICodedToken.cs create mode 100644 dnlib/DotNet/ICorLibTypes.cs create mode 100644 dnlib/DotNet/ICustomAttribute.cs create mode 100644 dnlib/DotNet/IDecrypters.cs create mode 100644 dnlib/DotNet/ILogger.cs create mode 100644 dnlib/DotNet/IResolver.cs create mode 100644 dnlib/DotNet/ITokenResolver.cs create mode 100644 dnlib/DotNet/IType.cs create mode 100644 dnlib/DotNet/ITypeDefFinder.cs create mode 100644 dnlib/DotNet/IVariable.cs create mode 100644 dnlib/DotNet/ImplMap.cs create mode 100644 dnlib/DotNet/Importer.cs create mode 100644 dnlib/DotNet/InterfaceImpl.cs create mode 100644 dnlib/DotNet/MD/BlobStream.cs create mode 100644 dnlib/DotNet/MD/CodedToken.cs create mode 100644 dnlib/DotNet/MD/ColumnInfo.cs create mode 100644 dnlib/DotNet/MD/ColumnSize.cs create mode 100644 dnlib/DotNet/MD/ComImageFlags.cs create mode 100644 dnlib/DotNet/MD/CompressedMetaData.cs create mode 100644 dnlib/DotNet/MD/DotNetStream.cs create mode 100644 dnlib/DotNet/MD/DotNetTableSizes.cs create mode 100644 dnlib/DotNet/MD/ENCMetaData.cs create mode 100644 dnlib/DotNet/MD/GuidStream.cs create mode 100644 dnlib/DotNet/MD/HeapType.cs create mode 100644 dnlib/DotNet/MD/HotHeapStream.cs create mode 100644 dnlib/DotNet/MD/HotHeapVersion.cs create mode 100644 dnlib/DotNet/MD/HotStream.cs create mode 100644 dnlib/DotNet/MD/HotTableStream.cs create mode 100644 dnlib/DotNet/MD/IMetaData.cs create mode 100644 dnlib/DotNet/MD/IRowReaders.cs create mode 100644 dnlib/DotNet/MD/ImageCor20Header.cs create mode 100644 dnlib/DotNet/MD/MDHeaderRuntimeVersion.cs create mode 100644 dnlib/DotNet/MD/MDStreamFlags.cs create mode 100644 dnlib/DotNet/MD/MDTable.cs create mode 100644 dnlib/DotNet/MD/MetaData.cs create mode 100644 dnlib/DotNet/MD/MetaDataCreator.cs create mode 100644 dnlib/DotNet/MD/MetaDataHeader.cs create mode 100644 dnlib/DotNet/MD/RawRowEqualityComparer.cs create mode 100644 dnlib/DotNet/MD/RawTableRows.cs create mode 100644 dnlib/DotNet/MD/RidList.cs create mode 100644 dnlib/DotNet/MD/StorageFlags.cs create mode 100644 dnlib/DotNet/MD/StreamHeader.cs create mode 100644 dnlib/DotNet/MD/StringsStream.cs create mode 100644 dnlib/DotNet/MD/Table.cs create mode 100644 dnlib/DotNet/MD/TableInfo.cs create mode 100644 dnlib/DotNet/MD/TablesStream.cs create mode 100644 dnlib/DotNet/MD/TablesStream_Read.cs create mode 100644 dnlib/DotNet/MD/USStream.cs create mode 100644 dnlib/DotNet/MDToken.cs create mode 100644 dnlib/DotNet/ManifestResource.cs create mode 100644 dnlib/DotNet/ManifestResourceAttributes.cs create mode 100644 dnlib/DotNet/MarshalBlobReader.cs create mode 100644 dnlib/DotNet/MarshalType.cs create mode 100644 dnlib/DotNet/MemberFinder.cs create mode 100644 dnlib/DotNet/MemberMDInitializer.cs create mode 100644 dnlib/DotNet/MemberRef.cs create mode 100644 dnlib/DotNet/MethodAttributes.cs create mode 100644 dnlib/DotNet/MethodDef.cs create mode 100644 dnlib/DotNet/MethodImplAttributes.cs create mode 100644 dnlib/DotNet/MethodOverride.cs create mode 100644 dnlib/DotNet/MethodSemanticsAttributes.cs create mode 100644 dnlib/DotNet/MethodSpec.cs create mode 100644 dnlib/DotNet/ModuleContext.cs create mode 100644 dnlib/DotNet/ModuleCreationOptions.cs create mode 100644 dnlib/DotNet/ModuleDef.cs create mode 100644 dnlib/DotNet/ModuleDefMD.cs create mode 100644 dnlib/DotNet/ModuleKind.cs create mode 100644 dnlib/DotNet/ModuleLoader.cs create mode 100644 dnlib/DotNet/ModuleRef.cs create mode 100644 dnlib/DotNet/NativeType.cs create mode 100644 dnlib/DotNet/NullResolver.cs create mode 100644 dnlib/DotNet/PInvokeAttributes.cs create mode 100644 dnlib/DotNet/ParamAttributes.cs create mode 100644 dnlib/DotNet/ParamDef.cs create mode 100644 dnlib/DotNet/ParameterList.cs create mode 100644 dnlib/DotNet/Pdb/Dss/ComInterfaces.cs create mode 100644 dnlib/DotNet/Pdb/Dss/ImageStreamIStream.cs create mode 100644 dnlib/DotNet/Pdb/Dss/MDEmitter.cs create mode 100644 dnlib/DotNet/Pdb/Dss/PinnedMetaData.cs create mode 100644 dnlib/DotNet/Pdb/Dss/StreamIStream.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolDocument.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolDocumentWriter.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolMethod.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolNamespace.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolReader.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolReaderCreator.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolScope.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolVariable.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolWriter.cs create mode 100644 dnlib/DotNet/Pdb/Dss/SymbolWriterCreator.cs create mode 100644 dnlib/DotNet/Pdb/ISymbolWriter2.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiDocument.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiFunction.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiModule.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiNamespace.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiScope.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiSourceLine.cs create mode 100644 dnlib/DotNet/Pdb/Managed/DbiVariable.cs create mode 100644 dnlib/DotNet/Pdb/Managed/ModuleStreamType.cs create mode 100644 dnlib/DotNet/Pdb/Managed/MsfStream.cs create mode 100644 dnlib/DotNet/Pdb/Managed/PdbAddress.cs create mode 100644 dnlib/DotNet/Pdb/Managed/PdbException.cs create mode 100644 dnlib/DotNet/Pdb/Managed/PdbReader.cs create mode 100644 dnlib/DotNet/Pdb/Managed/SymbolReaderCreator.cs create mode 100644 dnlib/DotNet/Pdb/Managed/SymbolType.cs create mode 100644 dnlib/DotNet/Pdb/PdbDocument.cs create mode 100644 dnlib/DotNet/Pdb/PdbImplType.cs create mode 100644 dnlib/DotNet/Pdb/PdbScope.cs create mode 100644 dnlib/DotNet/Pdb/PdbState.cs create mode 100644 dnlib/DotNet/Pdb/PdbWriter.cs create mode 100644 dnlib/DotNet/Pdb/SequencePoint.cs create mode 100644 dnlib/DotNet/Pdb/SymbolReaderCreator.cs create mode 100644 dnlib/DotNet/Pdb/SymbolWriterCreator.cs create mode 100644 dnlib/DotNet/PropertyAttributes.cs create mode 100644 dnlib/DotNet/PropertyDef.cs create mode 100644 dnlib/DotNet/PublicKey.cs create mode 100644 dnlib/DotNet/PublicKeyBase.cs create mode 100644 dnlib/DotNet/PublicKeyToken.cs create mode 100644 dnlib/DotNet/RecursionCounter.cs create mode 100644 dnlib/DotNet/ReflectionExtensions.cs create mode 100644 dnlib/DotNet/ResolveException.cs create mode 100644 dnlib/DotNet/Resolver.cs create mode 100644 dnlib/DotNet/Resource.cs create mode 100644 dnlib/DotNet/ResourceCollection.cs create mode 100644 dnlib/DotNet/Resources/BuiltInResourceData.cs create mode 100644 dnlib/DotNet/Resources/IResourceData.cs create mode 100644 dnlib/DotNet/Resources/ResourceDataCreator.cs create mode 100644 dnlib/DotNet/Resources/ResourceElement.cs create mode 100644 dnlib/DotNet/Resources/ResourceElementSet.cs create mode 100644 dnlib/DotNet/Resources/ResourceReader.cs create mode 100644 dnlib/DotNet/Resources/ResourceTypeCode.cs create mode 100644 dnlib/DotNet/Resources/ResourceWriter.cs create mode 100644 dnlib/DotNet/Resources/UserResourceData.cs create mode 100644 dnlib/DotNet/Resources/UserResourceType.cs create mode 100644 dnlib/DotNet/SecurityAction.cs create mode 100644 dnlib/DotNet/SecurityAttribute.cs create mode 100644 dnlib/DotNet/SerializationType.cs create mode 100644 dnlib/DotNet/SigComparer.cs create mode 100644 dnlib/DotNet/SignatureReader.cs create mode 100644 dnlib/DotNet/StandAloneSig.cs create mode 100644 dnlib/DotNet/StrongNameKey.cs create mode 100644 dnlib/DotNet/StrongNameSigner.cs create mode 100644 dnlib/DotNet/TIAHelper.cs create mode 100644 dnlib/DotNet/TypeAttributes.cs create mode 100644 dnlib/DotNet/TypeDef.cs create mode 100644 dnlib/DotNet/TypeDefFinder.cs create mode 100644 dnlib/DotNet/TypeHelper.cs create mode 100644 dnlib/DotNet/TypeNameParser.cs create mode 100644 dnlib/DotNet/TypeRef.cs create mode 100644 dnlib/DotNet/TypeSig.cs create mode 100644 dnlib/DotNet/TypeSpec.cs create mode 100644 dnlib/DotNet/UTF8String.cs create mode 100644 dnlib/DotNet/Utils.cs create mode 100644 dnlib/DotNet/VTableFixups.cs create mode 100644 dnlib/DotNet/VariantType.cs create mode 100644 dnlib/DotNet/WinMDHelpers.cs create mode 100644 dnlib/DotNet/WinMDStatus.cs create mode 100644 dnlib/DotNet/Writer/BinaryReaderChunk.cs create mode 100644 dnlib/DotNet/Writer/BlobHeap.cs create mode 100644 dnlib/DotNet/Writer/ByteArrayChunk.cs create mode 100644 dnlib/DotNet/Writer/ChunkList.cs create mode 100644 dnlib/DotNet/Writer/ChunkListBase.cs create mode 100644 dnlib/DotNet/Writer/CustomAttributeWriter.cs create mode 100644 dnlib/DotNet/Writer/DebugDirectory.cs create mode 100644 dnlib/DotNet/Writer/DeclSecurityWriter.cs create mode 100644 dnlib/DotNet/Writer/Extensions.cs create mode 100644 dnlib/DotNet/Writer/GuidHeap.cs create mode 100644 dnlib/DotNet/Writer/HeapBase.cs create mode 100644 dnlib/DotNet/Writer/HotHeap.cs create mode 100644 dnlib/DotNet/Writer/HotPool.cs create mode 100644 dnlib/DotNet/Writer/HotTable.cs create mode 100644 dnlib/DotNet/Writer/IChunk.cs create mode 100644 dnlib/DotNet/Writer/IHeap.cs create mode 100644 dnlib/DotNet/Writer/IMetaDataListener.cs create mode 100644 dnlib/DotNet/Writer/IModuleWriterListener.cs create mode 100644 dnlib/DotNet/Writer/IOffsetHeap.cs create mode 100644 dnlib/DotNet/Writer/IWriterError.cs create mode 100644 dnlib/DotNet/Writer/ImageCor20Header.cs create mode 100644 dnlib/DotNet/Writer/ImportAddressTable.cs create mode 100644 dnlib/DotNet/Writer/ImportDirectory.cs create mode 100644 dnlib/DotNet/Writer/MDTable.cs create mode 100644 dnlib/DotNet/Writer/MDTableWriter.cs create mode 100644 dnlib/DotNet/Writer/MarshalBlobWriter.cs create mode 100644 dnlib/DotNet/Writer/MaxStackCalculator.cs create mode 100644 dnlib/DotNet/Writer/MetaData.cs create mode 100644 dnlib/DotNet/Writer/MetaDataHeader.cs create mode 100644 dnlib/DotNet/Writer/MethodBody.cs create mode 100644 dnlib/DotNet/Writer/MethodBodyChunks.cs create mode 100644 dnlib/DotNet/Writer/MethodBodyWriter.cs create mode 100644 dnlib/DotNet/Writer/MethodBodyWriterBase.cs create mode 100644 dnlib/DotNet/Writer/ModuleWriter.cs create mode 100644 dnlib/DotNet/Writer/ModuleWriterBase.cs create mode 100644 dnlib/DotNet/Writer/ModuleWriterException.cs create mode 100644 dnlib/DotNet/Writer/NativeModuleWriter.cs create mode 100644 dnlib/DotNet/Writer/NetResources.cs create mode 100644 dnlib/DotNet/Writer/NormalMetaData.cs create mode 100644 dnlib/DotNet/Writer/PEHeaders.cs create mode 100644 dnlib/DotNet/Writer/PESection.cs create mode 100644 dnlib/DotNet/Writer/PreserveTokensMetaData.cs create mode 100644 dnlib/DotNet/Writer/RelocDirectory.cs create mode 100644 dnlib/DotNet/Writer/SectionSizes.cs create mode 100644 dnlib/DotNet/Writer/SignatureWriter.cs create mode 100644 dnlib/DotNet/Writer/StartupStub.cs create mode 100644 dnlib/DotNet/Writer/StringsHeap.cs create mode 100644 dnlib/DotNet/Writer/StrongNameSignature.cs create mode 100644 dnlib/DotNet/Writer/TablesHeap.cs create mode 100644 dnlib/DotNet/Writer/USHeap.cs create mode 100644 dnlib/DotNet/Writer/UniqueChunkList.cs create mode 100644 dnlib/DotNet/Writer/Win32ResourcesChunk.cs create mode 100644 dnlib/DotNet/Writer/WriterUtils.cs create mode 100644 dnlib/ExtensionAttribute.cs create mode 100644 dnlib/HandleProcessCorruptedStateExceptionsAttribute.cs create mode 100644 dnlib/IO/BinaryReaderStream.cs create mode 100644 dnlib/IO/FileOffset.cs create mode 100644 dnlib/IO/FileSection.cs create mode 100644 dnlib/IO/IBinaryReader.cs create mode 100644 dnlib/IO/IFileSection.cs create mode 100644 dnlib/IO/IImageStream.cs create mode 100644 dnlib/IO/IImageStreamCreator.cs create mode 100644 dnlib/IO/IOExtensions.cs create mode 100644 dnlib/IO/ImageStreamCreator.cs create mode 100644 dnlib/IO/MemoryImageStream.cs create mode 100644 dnlib/IO/MemoryMappedFileStreamCreator.cs create mode 100644 dnlib/IO/MemoryStreamCreator.cs create mode 100644 dnlib/IO/UnmanagedMemoryImageStream.cs create mode 100644 dnlib/IO/UnmanagedMemoryStreamCreator.cs create mode 100644 dnlib/PE/Characteristics.cs create mode 100644 dnlib/PE/DllCharacteristics.cs create mode 100644 dnlib/PE/IImageOptionalHeader.cs create mode 100644 dnlib/PE/IPEImage.cs create mode 100644 dnlib/PE/IPEType.cs create mode 100644 dnlib/PE/ImageDataDirectory.cs create mode 100644 dnlib/PE/ImageDosHeader.cs create mode 100644 dnlib/PE/ImageFileHeader.cs create mode 100644 dnlib/PE/ImageNTHeaders.cs create mode 100644 dnlib/PE/ImageOptionalHeader32.cs create mode 100644 dnlib/PE/ImageOptionalHeader64.cs create mode 100644 dnlib/PE/ImageSectionHeader.cs create mode 100644 dnlib/PE/Machine.cs create mode 100644 dnlib/PE/PEExtensions.cs create mode 100644 dnlib/PE/PEImage.cs create mode 100644 dnlib/PE/PEInfo.cs create mode 100644 dnlib/PE/RVA.cs create mode 100644 dnlib/PE/Subsystem.cs create mode 100644 dnlib/Properties/AssemblyInfo.cs create mode 100644 dnlib/Settings.cs create mode 100644 dnlib/Threading/Extensions.cs create mode 100644 dnlib/Threading/ICancellationToken.cs create mode 100644 dnlib/Threading/IThreadSafeList.cs create mode 100644 dnlib/Threading/Lock.cs create mode 100644 dnlib/Threading/ThreadSafeListCreator.cs create mode 100644 dnlib/Threading/ThreadSafeListWrapper.cs create mode 100644 dnlib/Utils/Extensions.cs create mode 100644 dnlib/Utils/ILazyList.cs create mode 100644 dnlib/Utils/LazyList.cs create mode 100644 dnlib/Utils/MFunc.cs create mode 100644 dnlib/Utils/SimpleLazyList.cs create mode 100644 dnlib/Utils/UserValue.cs create mode 100644 dnlib/W32Resources/ResourceData.cs create mode 100644 dnlib/W32Resources/ResourceDirectory.cs create mode 100644 dnlib/W32Resources/ResourceDirectoryEntry.cs create mode 100644 dnlib/W32Resources/ResourceName.cs create mode 100644 dnlib/W32Resources/Win32Resources.cs create mode 100644 dnlib/dnlib.csproj create mode 100644 dnlib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 dnlib/obj/Debug/dnlib.csproj.CoreCompileInputs.cache create mode 100644 dnlib/obj/Debug/dnlib.csproj.FileListAbsolute.txt create mode 100644 dnlib/obj/Debug/dnlib.csprojAssemblyReference.cache create mode 100644 dnlib/obj/Debug/dnlib.dll create mode 100644 dnlib/obj/Debug/dnlib.pdb create mode 100644 dnlib/obj/Debug_ThreadSafe/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 dnlib/obj/Debug_ThreadSafe/dnlib.csproj.CoreCompileInputs.cache create mode 100644 dnlib/obj/Debug_ThreadSafe/dnlib.csproj.FileListAbsolute.txt create mode 100644 dnlib/obj/Debug_ThreadSafe/dnlib.dll create mode 100644 dnlib/obj/Debug_ThreadSafe/dnlib.pdb diff --git a/.ObfuscationTests/CrackMe-astro.exe b/.ObfuscationTests/CrackMe-astro.exe new file mode 100644 index 0000000000000000000000000000000000000000..78528c063a0e6a4fe2ffa396c0a8d4b437865272 GIT binary patch literal 246272 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 literal 0 HcmV?d00001 diff --git a/.ObfuscationTests/CrackMe.exe b/.ObfuscationTests/CrackMe.exe new file mode 100644 index 0000000000000000000000000000000000000000..56dfe966e737df8c35d1e2431c3c948c04bc11cb GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/AfterKoi/AfterKoi.csproj b/AfterKoi/AfterKoi.csproj new file mode 100644 index 0000000..3c4d47c --- /dev/null +++ b/AfterKoi/AfterKoi.csproj @@ -0,0 +1,54 @@ + + + + + Debug + AnyCPU + 23c3b079-9b79-41c2-ae44-9c58675c3772 + Library + Properties + AfterKoi + AfterKoi + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AfterKoi/LocalToField.cs b/AfterKoi/LocalToField.cs new file mode 100644 index 0000000..bae4d9d --- /dev/null +++ b/AfterKoi/LocalToField.cs @@ -0,0 +1,65 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using Astro_Renewed.Services; +using System.Collections.Generic; +using System.Linq; + +namespace Astro_Renewed.Protections +{ + internal class LocalToField + { + private static Dictionary _convertedLocals = new(); + + public static void Execute(ModuleDef module) + { + foreach (var type in module.Types.Where(x => x != module.GlobalType)) + { + foreach (var method2 in type.Methods.Where(x => x.HasBody && x.Body.HasInstructions && !x.IsConstructor)) + { + _convertedLocals = new Dictionary(); + Process(module, method2); + } + } + Services.ConsoleLogger.Log("Processing \"Local To Field\" protection."); + } + + private static void Process(ModuleDef module, MethodDef method) + { + var instructions = method.Body.Instructions; + foreach (var t in instructions) + { + if (t.Operand is not Local local) continue; + FieldDef def; + if (!_convertedLocals.ContainsKey(local)) + { + def = new FieldDefUser(RandomGenerator.randomMD5(), new FieldSig(local.Type), FieldAttributes.Public | FieldAttributes.Static); + module.GlobalType.Fields.Add(def); + _convertedLocals.Add(local, def); + } + else + def = _convertedLocals[local]; + + var eq = t.OpCode.Code switch + { + Code.Ldloc => OpCodes.Ldsfld, + Code.Ldloc_S => OpCodes.Ldsfld, + Code.Ldloc_0 => OpCodes.Ldsfld, + Code.Ldloc_1 => OpCodes.Ldsfld, + Code.Ldloc_2 => OpCodes.Ldsfld, + Code.Ldloc_3 => OpCodes.Ldsfld, + Code.Ldloca => OpCodes.Ldsflda, + Code.Ldloca_S => OpCodes.Ldsflda, + Code.Stloc => OpCodes.Stsfld, + Code.Stloc_0 => OpCodes.Stsfld, + Code.Stloc_1 => OpCodes.Stsfld, + Code.Stloc_2 => OpCodes.Stsfld, + Code.Stloc_3 => OpCodes.Stsfld, + Code.Stloc_S => OpCodes.Stsfld, + _ => null + }; + t.OpCode = eq; + t.Operand = def; + } + } + } +} \ No newline at end of file diff --git a/AfterKoi/Properties/AssemblyInfo.cs b/AfterKoi/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f1166f5 --- /dev/null +++ b/AfterKoi/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AfterKoi")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AfterKoi")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("23c3b079-9b79-41c2-ae44-9c58675c3772")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/AfterKoi/RandomGenerator.cs b/AfterKoi/RandomGenerator.cs new file mode 100644 index 0000000..19180dd --- /dev/null +++ b/AfterKoi/RandomGenerator.cs @@ -0,0 +1,42 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace Astro_Renewed.Services +{ + class RandomGenerator + { + private static string ConvertStringtoMD5(string strword) + { + MD5 md5 = MD5.Create(); + byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strword); + byte[] hash = md5.ComputeHash(inputBytes); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hash.Length; i++) + { + sb.Append(hash[i].ToString("x2")); + } + return sb.ToString(); + } + + public static string randomMD5_disable() + { + var bytes = new byte[16]; + using (var rng = new RNGCryptoServiceProvider()) + { + rng.GetBytes(bytes); + } + return "{" + ConvertStringtoMD5(BitConverter.ToString(bytes)).ToLower() + "}"; + } + + private static Random random = new Random(); + + public static string randomMD5() + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + return new string(Enumerable.Repeat(chars, 10) + .Select(s => s[random.Next(s.Length)]).ToArray()); + } + } +} diff --git a/AfterKoi/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/AfterKoi/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/AfterKoi/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/AfterKoi/obj/Debug/AfterKoi.csproj.AssemblyReference.cache b/AfterKoi/obj/Debug/AfterKoi.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..f5e894aea93a73e58fa9d4feab241bc197ee1a40 GIT binary patch literal 11 QcmeZu3JP{+WMlvW01Ze1dH?_b literal 0 HcmV?d00001 diff --git a/AfterKoi/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/AfterKoi/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..71c23f95f6074be30f340ae1c977c92c69a9be4b GIT binary patch literal 152 zcmeZu3JP{+WMpJuU|`I1wu%WT%1cNRGxPI`^-^+jz?L$IOMa7?e3b)aKNnDkfu6B}v7sdc0D-122mk;8 literal 0 HcmV?d00001 diff --git a/AfterKoi/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/AfterKoi/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..394581d09ee0dd68c3f6243c75619502fbb6f0b6 GIT binary patch literal 6858 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

OlV*+0h+FRqj<=PebOE@K&)XrD}Aa9b8KPQ zzIV-nCIDYAjVtuerN3SVJqi7zoZ}SFEgLdRzd;53afZH5k9r{WP+}D0kcmBoCGAIA za9EdN!@>*(o{8WDqFMlTE%0{^H3zrW2lw<3uTGV7w@xopG+z(gHHKgJYyETDMpfFE z@S-hq$>nA>O+s`66F8e}3(1vcp9GFLeR}3iDw?Li0p`%iX&g-4-RxvDA~1; znwg^7UQGV=uS27h1ID`g*8r;kh6W+7ww}=8D%$sF4`SBLkAQMLbUbu6!^CwCBi4}J znG4oQU$76CJ}yKL+@L2!c1(`}I=vU{Brn62RxE$apD-8$=%kN5v&B5bp^SOs`fT} zIQ=dt)46x3HXfxiWR~c~knqJ*=gbQ#n1ub>ldpBv79Zk59Xbsi!_@FX8qMi`A)_`c z6POz^TtcWjJ;mq}(>PqeGKa%+94UC%GvR&vFUY7Rs|TPI5bD|a!K9sToH7yZQXr$z z)X{^l<7w7Q+&rgmg|#OpX5#NpV%A@l8R%Y2ss3uhw08zWC&Y|ONAPz1ll75kvRSV$ zD)!()xTWS0kJmJsX6uS%{d~ z*t|@Teg})7I0@ zarGk?)1Ufs8yw|nJ+l=AS%##ej~eWm%dXrNm(N=hRZg!htayh%lrDh6D$bGku!9>~ z!Y?kULg8M)cFPgH@Zr#(up502`&&d)l{-dF*`8bl-S0vserE(H8L%+;V;yk*cDv7) z50jYR`@OEDOJf%@8xhmH+aVJV@cXi;(K#UTlwWT6p;@ddlzDge;W2w zwzRGk-SWmMnQCL#=ji#TROI+`775MLUY8M9&sDuRKW@fJOqVinvZbd?N zN7D8*)iM*CYwH6RVGfW-BNpbQk(NE!nR3nec4XhbzRo&nvfM*7lc9x#34Z@32X8H* zN{E2NAAs%yQ4B}%k_Xg0p43#(^?igL~9mn?M&)5}UlY#-~fdE0Eama;p4whTz< z$`qhrR^n$Th1lOdN8LS zU)tUiQC2gp4|z7RoZ@6(OR*(HfTidJt)!Phd#GZ0pl^Hnj<~q|hHDQ6JLg?^a%tnT z_<2S@^f_Yi%cM6DS;#))`A2dlxqizvpMq*syQJOHGi6DY=BTCgAF<fTj2FsGX8LQ4DhZn7?PV@AapYi3vk3zL(Mel_ zbAFRkdbKhv`Cxgm5erlH7FsejhE7V1OMb;hIT78**vn*asxyOC`6I8WO}JtE8J>Sp z-}&x5{dmF}{)f@(Q}9ChN0>>G{wQ{q#M;`KDgEGOy=ZdgV;U>bJZ6Ws>gyznp0uJB zq^bt}I{wC)$pmTbUl&|ycs6Ww(*pKbdb4(;8nj96@*)$Lh%RIJyJU`PEVJ=1Z68$x zc>fCZ8RU2cPEkkq()HXX(Ic0XYDJ~a{k5wk)@;wy_9?(DehIRW~=Z+Ad-5?vMG=atyiuywHnBPnBs%)?rZ@zmaGlx^T8XLq;b9 zXWB7o9YZVb!o8gTkWEQ=RPxZi$Zs^NwdiLVi5C8GH`lF1Ld6;inieSLC56)+Qb6PU zYM4E!=4be_rNV419KdJXB!2GqlxV8bOXToY!9cyW+mY>xv+&A$ecLC;ICrF%Az} zn^x@$jC%7tg|D=ewiWr4!E=IM7kVc?z_W&;vNI8_dLDy&;2u;w)w>8T814Za%1G|n zQYeAi+WQuUiADF=?3TV(svKP4-+K;GuycoiTm{T5=lxc&y#M)?^Ed1pUyqj?gR~AJ z(*zXm@rx?=sJ0{WoCh5yMD^GdE@AYJTT@($xTaLU|AOaD3W3zvhpIO3q^GeO>L(K0 zR;rI_zOR zdz@9m<;ND8-rr47)6X@JFEf#eAHQt*_tT*Lpw4e_!752_4%2bl(@K%p)Sz>-dqd`FfBY&G za7IK`<+i3+ORi(yv_;5I&kWG+nKG0WBnBv1NG4k{e;Wjk4@V;k{be9s)NYf-Ny9W5 zt<6^iRM9uW2<5Q$VZ#`Nk85nRK80G+SXFG(PA@n}EwTd}t3+fhp}VWfd>`OStC;@< z+I$8AWW0@$0Er(3;`Z7I8ysap4u7+(TLLK@jDExh5!iQl<-0zXtID$IK{9V}6{C5S zy#Pnr@!#7jjs7H}b?Tj1HZIk^M7L1{!1o|_uB)|dY*2l2`Vo(0lU{Yp*nd9`+_9k& zyqMucTthHbb;LfA-g7#G^y?P;?}eLP@wy|`1ew9*-~q-gNx8 zS`sMdSd@v`J1()#C+R&T1T=+V=@H+nxV?>a{}SnRufU-qo7%Z96*bKdH-&{wc)wek{5(LYxWVfCB^7Ar)30r3@T7#mbuAn;t!FzFWrhPoMrH ztQwPb@;33>N62+pX3Fh@Ckdj%@nb5!4DTs)p_ERO`t&BWpkezKRyml4oB*9b+N@qz z7FpjhBK3mVLB$9={mH1cDq(FduJuLIZ z;LR1A-;Lkj@u~j9@>+Ap4t-p@pET~#>cGct55ffLOB4V-Q1-@58cDc>QE&V_iBeBE za1pV1RKLu7BQRP@SbKYp8KCML<3yV7I2UyyS3nO{nDux_W_a3RHg1Wi@NpA0BpEVl z>?wioVg9_c>g&_E^&^t$Tu)4=oz6bCb?L6NaUJ0M@a;u6pM>sY8;70wcR4){*@g1I zH)CwWo{~(_d|F4k56rxCPMvo}i_sVr13K6`6v&_XrZGoWKu@GtV=%T!Y(&_%Ow}18 zDuJV~D*0sDB;N@U3=}JHJtYVCp$e^;VM{BIK?uGGrb$vIba(O(U~U(g0&Em|dhkU3usJgXqRmAn+VfKO| z>GPbO`(V&1xVum{c6>mA%3l%=w3iOwxRu=g(k?RJ_-flxHpLy~lh$PT=(&q-pyEKf zgP2^;Q@();DH2Zz0uLDc;cl#M5)K7AG3k;Pu@6;D*R7@=-tp~gpbeKNsyxbR+almG zIc!{DiBsei`>?*C`51IZ$I_6o|Ef8UP+;qMI{-Rreu#woj+ z!r}1F*u=(*DJoVG8cj@3m(RkKvdfX^=2_8CQ5yDnZBMf;1ObRz3f!;6O(k)}dT=_~ z9B{iQtqF+f&X=m_e^}!>hQVRS{#nhbe+cG)n_FihLw>9HCoJL?QTsu+Lcy_kLEb&B z?|Ox>=kB-aV3OPeg^x^VyCRb!OM0Nw^s!@?AEuVP8OZ0Gn3)z%>Lky$R&poj@dpc5 zg7jOgyuD00iM=8pd-ri*h8X%mOJ3e(*Ryp25;#Ni3J~ zTQw5Xp@3DFzr(LH4oB%r!{E?t7^LK47=lZfs{u*xhD32a#rNQ8Rr~jP@(BBT9?nLH z*0*oLd3HR!D<<)V+-rEnk#sAM0djn?UJfHUI4tO(2B~X-DVLcrY_Q(~_9zxVbvz|p z^zuhuG*^85Z`##^P7;BQpGDz8>xQ*87Nq}BfFzap!wZePH%Bk7fp&asIlm{u!eR=AWBZcEvH#cmNx zR6_705sI>CEE;2G8925(sYOt4VdG3aJqU(DfIqx-wms%VzJ@tM?`GD)mu=DH_{sua z*s95uI%S{t@c#LDzedOz>Q*pP$1WFt>YV=rq|p(eQ)ADF~ANK78~3 z<$-;*+ibebETpTEQSi_LeMwVq%#gmlt4#8*AUmUoW?U(=ySR-}wEya#(IxIi&_1Abo&X9j(dy5DPGI$cv)-5i*u+n_# zodkZ}$NN{$*gq*;H6$dDFh`Kn4V!;ge$}2`fgYd~anYG2&RY~dg|Nq7`HRlt9n8u^ zW)QR#gBjJ|@XDPX4O%~_q`K9{B7-*QbD<9EW|v`t`G%7F+mBe20(OKYuZxnEJv8TE zQ%aBvnl8NC7ZR4Jjo$pBZqLzpVDj>s(1&L!PKbq=pu8xSi2MygqQJV`%&C&jI6lok zLg};pDb-L$+3*mPa~^f_&iG&pH7KkQY{0qSU+L`$Da-ZPYDrQu_TUErrpMEOwcqO#aJ651|NxIp*`70X3Z}H^E3Dq6e!L@ ztcc}7wXNGYC=xKrISiIC9-k|Cm2=Ve90@ZbGKT5Aa~(xcG!%fgz6tH^kvwu;(r9&| zp!T0Yh9bKJ{Gt8JuH$Hr12-HE5Kg@-WM(r=1CRuXK&QvOjdy?E2%bQz@539IdMQ|B2h z%130kT;cK?W_wq{pD$8u-OEO5P#MpU=|J!cI0xm9TSxSk(qYBV@i|f{;EHr=_xXCR zJgf6i;??uOmzAkSQqySHh=^>45kfE(zKGdPnB5y{cKZ`Lit$j9@RF@nT!7NNVv`_%2x)o5j>zf#Izn@u7>pru)3iB0Nr~G6~x$b37-3&1TYbUn{#v0 zQtlDO7>s}48D`+MqtlkgFnZFwX_)2x;-)?I9x=)jZ=TBxX!OW9&Q;0wUkJ@%W{Wmo zwHn!#3Xyot*B7Ns>tl_ArUR~k=^*IvtQLO}lULCG_1;v`LDOQ})v8-OTm@ssByI2z z#1>#0`>^bBvHsa<-FH(@2>x;d5SFqj4ic>04}IlWjZBWyDPpgqPnZ>Hdu=!#OLpAf zp%8=lgJ_qNwUt(jCFdB+4RU~@SqWPe(*`_4Ret)I#3rT!ZhDYOVYrs^pcya)*<>^` z6)|15fdm_Gy=-5RNDuST@E8n+HZ<;3)tZzsY=4eeV&@^+)&_br_a4#(VT>E z!zU^uw;me(%1?t;sIX^J>hGk!qgD|!RZ8oU&m?QJ4Gti2N-WjIhaEx z;w&~1s}!CIQY$9w!B|o|luii9FNJg>!0VA)fP!?4Ezc^L2H2oc0_I$W3}+t@ZH^;O zBJqpsU(M@Z`z5ZpCWZq@M^c@XWiK!rYscl;xRXp#f39QF2xWc;ZwwyhDD@G8_pel)0cto%SO)300Y?^2HHxLPLQ;}KA3PytF0{LCG z`;c%Dux|On?c`E89LI;6Y;U9HnSH6{1U8Bs{WHUWFAfc$2^S`UOBjbk{vJlR2fMWS zWA)VPN}~Y2^OLG=LJUfO zcPSmAd?2&5s7R|vhLfw*)jACU}L;Ij)Q}7K@VWb|QLOCmmd)Gj3 z<@LiQqN;YfzBn$6ZZYA3MEycLuDXFsN_e~h{(J#1EOMr`2$0|_{f(cx{lDdS%kJse z0W{8+FMG0uqZ;dvkgUqN2lq!YLD;OXn-ii0Q5ZyGc(5l`rZ}%|w~q_lcbmiA zuJ`r*=e#HU;S>W3R9e!c6bUluZ#)dWb#%a1v>=K>SrVS`)!xNpNZ({>?SNCv-*9gJ zB4r4VO&Rt1Rx?Q7xG6M{+r@LaJBfQ=9bN{~G5j}32|A74^K)6pTqggH54VwFZo3ut zmM{aB)O?ROquw=m@a1Iz*K6g;rGyAOA2%jfQ3oXujS8nhFu}FFbxWs0n0N^OGXw}g zboq>Unla!#;x{CUu2{{$>1>950_wb?jT!BhLigD=1r+i!^Za;fw=Z#Q58o52esRWT zwNH-jmXRavj`~|&L%pq(9??={34WPixgmlRkB#YkxUFaPKLJ|Q@)-ior{3-sSO!^R z7)+!$A`4pqJpeH;BY*}nJu9FXil3|$%E0Jfygw<2+WQP2>ZT!U)sAU=C+SDf9KHiv zh%?s51LxW}5>MgeA||d`9e%uN;gQ66ypj)|H499q>QN3IZPpGu{)Goxq`YB#&Kvee0RT7g0K5 zmyw~+G?q^1D?InF_PeN^Hc^Ju=KL8sVN*tJM`Ob`04M3r5|bBh>CQ6-cy9GrD4Td0 zh;P}>5E0C#1)b_@@4M((nX|c3kiz7ErYt#Rgo9+q#YgA zSq(=Fx5t1Gz^kU?n^1aL6iOr72cNx!$=@+LF>eR@f*5udA zC5f}ykL(}OlMByiK4a&lnjWBTfvJDDecIu^Ftcv5nAB2;Y&Q z@Q_k&W?;ptyaEv*tFtzs>g7mb0DIA6t4!*NY^u1xu#gkqkRS)61x!!K7`L#dcU}Ab zJUI_)XsAZ$j=pMC3S?6pR|grky$`9JYy9gtGblArh(UaC7fw{)xTuIayGGlhBZ~As zjvVR`W18crH;w@=X5#|pZ-rV~DR|jSG&=_MMrB8MhmzR$AC!RNjys~t0cAA(UFElr za)lwneUX)7n^BbSx<^Aozo@|v%n2C6Nsu%`sEObLIEeP{ioQs#BuF0gxlOuN`c2ef z9(Tx$;qzN)i_m_SzhlBV($izYRL*KB4^9ctEd z3I$l;&md|tB|uUk@4iLrC%*IjB~#%U7)UK`)ER8kKs>}7v+aZ70c=f?a|N6YZc^Yt za|;M|Thp+ik77J2k)bW>IamDfvaBaubk3{%3u*5bNO)*l>b2lhgsJS≫n%N_Wvz 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 literal 0 HcmV?d00001 diff --git a/Assets/astro.png b/Assets/astro.png new file mode 100644 index 0000000000000000000000000000000000000000..c8803c21292a348dac9e7fd25ab77da066cdd5bd GIT binary patch literal 215940 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

>D6vWdwl3BPi;UKb-wWz@KI9-K`AaOu5 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

&XrB>ZwcA& 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

M>y6BPIt>HKW?QDUwhs#= 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 AJpcdz literal 0 HcmV?d00001 diff --git a/Assets/banner.png b/Assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..482b0dfc21480bbc755cf3fe8cbbbe5bb6e2dc54 GIT binary patch literal 149578 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é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�j44Gw0nspaj?~!a0P2yfH2NU_f+hv6-x|EL; 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 PzBNQs|6ZAf-Shtg97T(b literal 0 HcmV?d00001 diff --git a/AstroNet.sln b/AstroNet.sln new file mode 100644 index 0000000..67ebe92 --- /dev/null +++ b/AstroNet.sln @@ -0,0 +1,70 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30621.155 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AstroNet", "AstroNet\AstroNet.csproj", "{171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KoiVM", "KoiVM\KoiVM.csproj", "{9E333771-BC67-4120-9C67-D15311C0F67C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Runtime", "KoiVM.Runtime\Runtime.csproj", "{1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KoiVM.GUI", "KoiVM.GUI\KoiVM.GUI.csproj", "{F4542E19-6BCA-4FA5-A263-B4419ACACF9A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_ThreadSafe|Any CPU = Debug_ThreadSafe|Any CPU + Debug|Any CPU = Debug|Any CPU + Release_ThreadSafe|Any CPU = Release_ThreadSafe|Any CPU + Release|Any CPU = Release|Any CPU + Trace|Any CPU = Trace|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Debug_ThreadSafe|Any CPU.ActiveCfg = Debug|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Debug_ThreadSafe|Any CPU.Build.0 = Debug|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Debug|Any CPU.ActiveCfg = Release|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Debug|Any CPU.Build.0 = Release|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Release_ThreadSafe|Any CPU.ActiveCfg = Release|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Release_ThreadSafe|Any CPU.Build.0 = Release|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Release|Any CPU.Build.0 = Release|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Trace|Any CPU.ActiveCfg = Debug|Any CPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB}.Trace|Any CPU.Build.0 = Debug|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Debug_ThreadSafe|Any CPU.ActiveCfg = Debug|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Debug_ThreadSafe|Any CPU.Build.0 = Debug|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Release_ThreadSafe|Any CPU.ActiveCfg = Release|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Release_ThreadSafe|Any CPU.Build.0 = Release|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Release|Any CPU.Build.0 = Release|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Trace|Any CPU.ActiveCfg = Trace|Any CPU + {9E333771-BC67-4120-9C67-D15311C0F67C}.Trace|Any CPU.Build.0 = Trace|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Debug_ThreadSafe|Any CPU.ActiveCfg = Debug|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Debug_ThreadSafe|Any CPU.Build.0 = Debug|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Release_ThreadSafe|Any CPU.ActiveCfg = Release|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Release_ThreadSafe|Any CPU.Build.0 = Release|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Release|Any CPU.Build.0 = Release|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Trace|Any CPU.ActiveCfg = Trace|Any CPU + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47}.Trace|Any CPU.Build.0 = Trace|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Debug_ThreadSafe|Any CPU.ActiveCfg = Debug|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Debug_ThreadSafe|Any CPU.Build.0 = Debug|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Release_ThreadSafe|Any CPU.ActiveCfg = Release|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Release_ThreadSafe|Any CPU.Build.0 = Release|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Release|Any CPU.Build.0 = Release|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Trace|Any CPU.ActiveCfg = Debug|Any CPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A}.Trace|Any CPU.Build.0 = Debug|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {72CEEFF3-9E8A-40BA-8010-74DC8B66E1AC} + EndGlobalSection +EndGlobal diff --git a/AstroNet/App.config b/AstroNet/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/AstroNet/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AstroNet/AstroNet.csproj b/AstroNet/AstroNet.csproj new file mode 100644 index 0000000..dc68294 --- /dev/null +++ b/AstroNet/AstroNet.csproj @@ -0,0 +1,164 @@ + + + + + Debug + AnyCPU + {171CB9D1-C535-4AEA-BF3C-6F4BA1F2D0DB} + Exe + Astro_Renewed + Astro_Renewed + v4.7.2 + 512 + true + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + 9 + + + AnyCPU + true + full + false + ..\Bin\ + DEBUG;TRACE + prompt + 4 + SecurityRules.ruleset + true + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Astro_Renewed.Program + + + astro.ico + + + + ..\References\dnlibOld.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.7.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + {9e333771-bc67-4120-9c67-d15311c0f67c} + KoiVM + + + + \ No newline at end of file diff --git a/AstroNet/AstroNet.csproj.user b/AstroNet/AstroNet.csproj.user new file mode 100644 index 0000000..23c860d --- /dev/null +++ b/AstroNet/AstroNet.csproj.user @@ -0,0 +1,14 @@ + + + + ProjectFiles + publish\ + + + + + + en-US + false + + \ No newline at end of file diff --git a/AstroNet/KVM/InitializePhase.cs b/AstroNet/KVM/InitializePhase.cs new file mode 100644 index 0000000..659a449 --- /dev/null +++ b/AstroNet/KVM/InitializePhase.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Writer; +using KoiVM; +using MethodAttributes = dnlib.DotNet.MethodAttributes; +using System.IO; +using KoiVM.RT.Mutation; +using System.Linq; +using System.Runtime.CompilerServices; + +namespace KVM +{ + public class InitializePhase + { + // fish.cs + public static object VirtualizerKey = new object(); + public static object MergeKey = new object(); + public static HashSet methods = new HashSet(); + public static AssemblyDef moduleConvert; + + public void InitializeP(ModuleDef module, List methodName) + { + foreach (var typeDef in module.Types) + { + foreach (MethodDef methodDef in typeDef.Methods) + { + if (methodName.Contains(methodDef.Name)) + { + methods.Add(methodDef); + } + } + } + + var seed = new Random().Next(1, int.MaxValue); + + + ModuleDef merge = module; + + string rtName = "Runtime"; + + ModuleDefMD rtModule = ModuleDefMD.Load("Runtime.dll"); + + rtModule.Assembly.Name = rtName; + rtModule.Name = rtName + ".dll"; + var vr = new Virtualizer(seed, false); + vr.ExportDbgInfo = false; + vr.DoStackWalk = false; + vr.Initialize(rtModule); + + VirtualizerKey = vr; + MergeKey = merge; + + vr.CommitRuntime(merge); + var ctor = typeof(InternalsVisibleToAttribute).GetConstructor(new[] { typeof(string) }); + + if (methods.Count > 0) + { + var ca = new CustomAttribute((ICustomAttributeType)module.Import(ctor)); + ca.ConstructorArguments.Add(new CAArgument(module.CorLibTypes.String, vr.RuntimeModule.Assembly.Name.String)); + module.Assembly.CustomAttributes.Add(ca); + } + + MarkPhase(module); + } + + public void MarkPhase(ModuleDef module) + { + //string eddyType = "AstroNet"; + var vr = (Virtualizer)VirtualizerKey; + + var refRepl = new Dictionary(); + + var oldType = module.GlobalType; + var newType = new TypeDefUser(oldType.Name); + oldType.Name = "AstroNet"; + oldType.BaseType = module.CorLibTypes.GetTypeRef("System", "Object"); + module.Types.Insert(0, newType); + + var old_cctor = oldType.FindOrCreateStaticConstructor(); + var cctor = newType.FindOrCreateStaticConstructor(); + old_cctor.Name = "AstroNet"; + old_cctor.IsRuntimeSpecialName = false; + old_cctor.IsSpecialName = false; + old_cctor.Access = MethodAttributes.PrivateScope; + cctor.Body = new CilBody(true, new List { + Instruction.Create(OpCodes.Call, old_cctor), + Instruction.Create(OpCodes.Ret) + }, new List(), new List()); + + for (int i = 0; i < oldType.Methods.Count; i++) + { + var nativeMethod = oldType.Methods[i]; + if (nativeMethod.IsNative) + { + var methodStub = new MethodDefUser(nativeMethod.Name, nativeMethod.MethodSig.Clone()); + methodStub.Attributes = MethodAttributes.Assembly | MethodAttributes.Static; + methodStub.Body = new CilBody(); + methodStub.Body.Instructions.Add(new Instruction(OpCodes.Jmp, nativeMethod)); + methodStub.Body.Instructions.Add(new Instruction(OpCodes.Ret)); + + oldType.Methods[i] = methodStub; + newType.Methods.Add(nativeMethod); + refRepl[nativeMethod] = methodStub; + } + } + + methods.Add(old_cctor); + + var toProcess = new Dictionary>(); + foreach (var entry in new Scanner(module, methods).Scan()) + { + + vr.AddMethod(entry.Item1, entry.Item2); + toProcess.AddListEntry(entry.Item1.Module, entry.Item1); + } + + Utils.ModuleWriterListener.OnWriterEvent += new Listener + { + vr = vr, + methods = toProcess, + refRepl = refRepl, + module = module + }.OnWriterEvent; + } + + class Listener + { + public Virtualizer vr; + public Dictionary> methods; + public Dictionary refRepl; + IModuleWriterListener commitListener = null; + public ModuleDef module; + public void OnWriterEvent(object sender, ModuleWriterListenerEventArgs e) + { + var writer = (ModuleWriter)sender; + if (commitListener != null) + commitListener.OnWriterEvent(writer, e.WriterEvent); + + if (e.WriterEvent == ModuleWriterEvent.MDBeginWriteMethodBodies && methods.ContainsKey(writer.Module)) + { + + vr.ProcessMethods(writer.Module); + + foreach (var repl in refRepl) + vr.Runtime.Descriptor.Data.ReplaceReference(repl.Key, repl.Value); + + commitListener = vr.CommitModule((ModuleDefMD)module); + Astro_Renewed.Program.afterVM((ModuleDefMD)writer.Module); + } + } + } + + } + +} \ No newline at end of file diff --git a/AstroNet/KVM/KVMTask.cs b/AstroNet/KVM/KVMTask.cs new file mode 100644 index 0000000..3e3a2a6 --- /dev/null +++ b/AstroNet/KVM/KVMTask.cs @@ -0,0 +1,54 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Writer; +using System.Collections.Generic; +using System.Linq; +using System.IO; + +namespace KVM +{ + public class KVMTask + { + public void Exceute(ModuleDefMD module, string outPath, string snPath, string snPass, List mList) + { + Utils.ModuleWriterListener = new ModuleWriterListener(); + Utils.ModuleWriterOptions = new ModuleWriterOptions(module); + + Utils.ModuleWriterOptions.Listener = Utils.ModuleWriterListener; + Utils.ModuleWriterOptions.Logger = DummyLogger.NoThrowInstance; + + if (File.Exists(snPath)) + { + StrongNameKey signatureKey = Utils.LoadSNKey(snPath, snPass); + Utils.ModuleWriterOptions.InitializeStrongNameSigning(module, signatureKey); + } + + new InitializePhase().InitializeP(module, mList); + + MemoryStream output = new MemoryStream(); + module.Write(output, Utils.ModuleWriterOptions); + + File.WriteAllBytes(outPath, output.ToArray()); + } + + private void assemblyReferencesAdder(ModuleDef moduleDefMD) + { + var asmResolver = new AssemblyResolver { EnableTypeDefCache = true }; + var modCtx = new ModuleContext(asmResolver); + asmResolver.DefaultModuleContext = modCtx; + var asmRefs = moduleDefMD.GetAssemblyRefs(); + moduleDefMD.Context = modCtx; + foreach (var asmRef in asmRefs) + { + try + { + if (asmRef == null) continue; + var asm = asmResolver.Resolve(asmRef.FullName, moduleDefMD); + if (asm == null) continue; + moduleDefMD.Context.AssemblyResolver.AddToCache(asm); + } + catch{} + } + } + } +} diff --git a/AstroNet/KVM/ModuleWriterListener.cs b/AstroNet/KVM/ModuleWriterListener.cs new file mode 100644 index 0000000..5810321 --- /dev/null +++ b/AstroNet/KVM/ModuleWriterListener.cs @@ -0,0 +1,26 @@ +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using System; + +namespace KVM +{ + public class ModuleWriterListener : IModuleWriterListener + { + void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) + { + //bool flag = evt == ModuleWriterEvent.PESectionsCreated; + //if (flag) + //{ + // // NativeEraserNew.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); // Don't use + // NativeEraser.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); + //} + bool flag2 = this.OnWriterEvent != null; + if (flag2) + { + this.OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); + } + } + + public event EventHandler OnWriterEvent; + } +} diff --git a/AstroNet/KVM/ModuleWriterListenerEventArgs.cs b/AstroNet/KVM/ModuleWriterListenerEventArgs.cs new file mode 100644 index 0000000..d7230c1 --- /dev/null +++ b/AstroNet/KVM/ModuleWriterListenerEventArgs.cs @@ -0,0 +1,15 @@ +using dnlib.DotNet.Writer; +using System; + +namespace KVM +{ + public class ModuleWriterListenerEventArgs : EventArgs + { + public ModuleWriterListenerEventArgs(ModuleWriterEvent evt) + { + this.WriterEvent = evt; + } + + public ModuleWriterEvent WriterEvent { get; private set; } + } +} diff --git a/AstroNet/KVM/NativeEraser.cs b/AstroNet/KVM/NativeEraser.cs new file mode 100644 index 0000000..7ec40e0 --- /dev/null +++ b/AstroNet/KVM/NativeEraser.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.MD; +using dnlib.DotNet.Writer; +using dnlib.IO; +using dnlib.PE; + +namespace KVM +{ + internal class NativeEraser + { + private static void Erase(Tuple section, uint offset, uint len) + { + Array.Clear(section.Item3, (int)(offset - section.Item1), (int)len); + } + + private static void Erase(List> sections, uint beginOffset, uint size) + { + foreach (Tuple sect in sections) + { + if (beginOffset >= sect.Item1 && beginOffset + size < sect.Item2) + { + Erase(sect, beginOffset, size); + break; + } + } + } + + private static void Erase(List> sections, IFileSection s) + { + foreach (Tuple sect in sections) + { + if ((uint)s.StartOffset >= sect.Item1 && (uint)s.EndOffset < sect.Item2) + { + Erase(sect, (uint)s.StartOffset, (uint)(s.EndOffset - s.StartOffset)); + break; + } + } + } + + private static void Erase(List> sections, uint methodOffset) + { + foreach (Tuple sect in sections) + { + if (methodOffset >= sect.Item1) + { + uint f = (uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1))]; + uint size; + switch (f & 7u) + { + case 2u: + case 6u: + size = (f >> 2) + 1u; + break; + case 3u: + { + f |= (uint)((uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1 + 1u))] << 8); + size = (f >> 12) * 4u; + uint codeSize = BitConverter.ToUInt32(sect.Item3, (int)(methodOffset - sect.Item1 + 4u)); + size += codeSize; + break; + } + case 4u: + case 5u: + goto IL_98; + default: + goto IL_98; + } + Erase(sect, methodOffset, size); + continue; + IL_98: + break; + } + } + } + + public static void Erase(NativeModuleWriter writer, ModuleDefMD module) + { + + if (writer == null || module == null) + { + return; + } + List> sections = new List>(); + MemoryStream s = new MemoryStream(); + foreach (NativeModuleWriter.OrigSection origSect in writer.OrigSections) + { + var oldChunk = origSect.Chunk; + ImageSectionHeader sectHdr = origSect.PESection; + s.SetLength(0L); + oldChunk.WriteTo( new BinaryWriter(s)); + byte[] buf = s.ToArray(); + var newChunk = new BinaryReaderChunk(MemoryImageStream.Create(buf), oldChunk.GetVirtualSize()); + newChunk.SetOffset(oldChunk.FileOffset, oldChunk.RVA); + origSect.Chunk = newChunk; + sections.Add(Tuple.Create(sectHdr.PointerToRawData, sectHdr.PointerToRawData + sectHdr.SizeOfRawData, buf)); + } + + var md = module.MetaData; + uint row = md.TablesStream.MethodTable.Rows; + for (uint i = 1u; i <= row; i += 1u) + { + RawMethodRow method = md.TablesStream.ReadMethodRow(i); + + if ((method.ImplFlags & 3) == 0) + { + Erase(sections, (uint)md.PEImage.ToFileOffset((RVA)method.RVA)); + } + } + ImageDataDirectory res = md.ImageCor20Header.Resources; + if (res.Size > 0u) + { + Erase(sections, (uint)res.StartOffset, res.Size); + } + Erase(sections, md.ImageCor20Header); + Erase(sections, md.MetaDataHeader);// md.MetadataHeader); + foreach (DotNetStream stream in md.AllStreams) + { + Erase(sections, stream); + } + } + + } +} diff --git a/AstroNet/KVM/NativeEraserNew.cs b/AstroNet/KVM/NativeEraserNew.cs new file mode 100644 index 0000000..cd3433b --- /dev/null +++ b/AstroNet/KVM/NativeEraserNew.cs @@ -0,0 +1,126 @@ +/*using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.MD; +using dnlib.DotNet.Writer; +using dnlib.IO; +using dnlib.PE;*/ + +namespace KVM +{ + internal class NativeEraserNew + { + /* private static void Erase(Tuple section, uint offset, uint len) + { + Array.Clear(section.Item3, (int)(offset - section.Item1), (int)len); + } + + private static void Erase(List> sections, uint beginOffset, uint size) + { + foreach (Tuple sect in sections) + { + if (beginOffset >= sect.Item1 && beginOffset + size < sect.Item2) + { + Erase(sect, beginOffset, size); + break; + } + } + } + + private static void Erase(List> sections, IFileSection s) + { + foreach (Tuple sect in sections) + { + if ((uint)s.StartOffset >= sect.Item1 && (uint)s.EndOffset < sect.Item2) + { + Erase(sect, (uint)s.StartOffset, (uint)(s.EndOffset - s.StartOffset)); + break; + } + } + } + + private static void Erase(List> sections, uint methodOffset) + { + foreach (Tuple sect in sections) + { + if (methodOffset >= sect.Item1) + { + uint f = (uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1))]; + uint size; + switch (f & 7u) + { + case 2u: + case 6u: + size = (f >> 2) + 1u; + break; + case 3u: + { + f |= (uint)((uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1 + 1u))] << 8); + size = (f >> 12) * 4u; + uint codeSize = BitConverter.ToUInt32(sect.Item3, (int)(methodOffset - sect.Item1 + 4u)); + size += codeSize; + break; + } + case 4u: + case 5u: + goto IL_98; + default: + goto IL_98; + } + Erase(sect, methodOffset, size); + continue; + IL_98: + break; + } + } + } + + public static void Erase(NativeModuleWriter writer, ModuleDefMD module) + { + + if (writer == null || module == null) + { + return; + } + List> sections = new List>(); + MemoryStream s = new MemoryStream(); + foreach (NativeModuleWriter.OrigSection origSect in writer.OrigSections) + { + var oldChunk = origSect.Chunk; + ImageSectionHeader sectHdr = origSect.PESection; + s.SetLength(0L); + oldChunk.WriteTo(new DataWriter(s)); + byte[] buf = s.ToArray(); + var newChunk = new DataReaderChunk(ByteArrayDataReaderFactory.CreateReader(buf), oldChunk.GetVirtualSize()); + newChunk.SetOffset(oldChunk.FileOffset, oldChunk.RVA); + origSect.Chunk = newChunk; + sections.Add(Tuple.Create(sectHdr.PointerToRawData, sectHdr.PointerToRawData + sectHdr.SizeOfRawData, buf)); + } + + var md = module.Metadata; + uint row = md.TablesStream.MethodTable.Rows; + for (uint i = 1u; i <= row; i += 1u) + { + RawMethodRow method; + md.TablesStream.TryReadMethodRow(i, out method); + + if ((method.ImplFlags & 3) == 0) + { + Erase(sections, (uint)md.PEImage.ToFileOffset((RVA)method.RVA)); + } + } + ImageDataDirectory res = md.ImageCor20Header.Resources; + if (res.Size > 0u) + { + Erase(sections, (uint)res.StartOffset, res.Size); + } + Erase(sections, md.ImageCor20Header); + Erase(sections, md.MetadataHeader); + foreach (DotNetStream stream in md.AllStreams) + { + Erase(sections, stream); + } + }*/ + } +} diff --git a/AstroNet/KVM/SafeAnalyzer.cs b/AstroNet/KVM/SafeAnalyzer.cs new file mode 100644 index 0000000..c585207 --- /dev/null +++ b/AstroNet/KVM/SafeAnalyzer.cs @@ -0,0 +1,33 @@ +using dnlib.DotNet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace KoiVM +{ + public class SafeAnalyzer + { + public static bool CanObfuscate(MethodDef item) + { + if (item.IsRuntimeSpecialName) + return false; + if (item.IsConstructor || item.IsStaticConstructor) + return false; + if (item.DeclaringType.IsForwarder) + return false; + if (!item.HasBody) + return false; + if (!item.Body.HasInstructions) + return false; + if (item.FullName.Contains(".My")) //VB.NET + return false; + if (item.DeclaringType.IsGlobalModuleType) + return false; + if (item.FullName.Contains("")) + return false; + return true; + } + } +} diff --git a/AstroNet/KVM/Utils.cs b/AstroNet/KVM/Utils.cs new file mode 100644 index 0000000..8cc549f --- /dev/null +++ b/AstroNet/KVM/Utils.cs @@ -0,0 +1,65 @@ +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace KVM +{ + public static class Utils + { + public static ModuleWriterOptions ModuleWriterOptions; + + public static ModuleWriterListener ModuleWriterListener; + + /* public static string GetMemberName(Expression> memberExpression) + { + MemberExpression expressionBody = (MemberExpression)memberExpression.Body; + return expressionBody.Member.Name; + } + public static string GetMethodInfo(Expression> expression) + { + var member = expression.Body as MethodCallExpression; + + if (member != null) + return member.Method.Name; + + throw new ArgumentException("Expression is not a method", "expression"); + }*/ + public static void AddListEntry(this IDictionary> self, TKey key, TValue value) + { + bool flag = key == null; + bool flag3 = flag; + if (flag3) + { + throw new ArgumentNullException("key"); + } + List list; + bool flag2 = !self.TryGetValue(key, out list); + bool flag4 = flag2; + if (flag4) + { + list = (self[key] = new List()); + } + list.Add(value); + } + + public static StrongNameKey LoadSNKey(string path, string pass) + { + if (pass != null) //pfx + { + var cert = new X509Certificate2(); + cert.Import(path, pass, X509KeyStorageFlags.Exportable); + + var rsa = cert.PrivateKey as RSACryptoServiceProvider; + if (rsa == null) + throw new ArgumentException("RSA key does not present in the certificate.", "path"); + + return new StrongNameKey(rsa.ExportCspBlob(true)); + } + return new StrongNameKey(path); + } + } +} diff --git a/AstroNet/Program.cs b/AstroNet/Program.cs new file mode 100644 index 0000000..b7950d2 --- /dev/null +++ b/AstroNet/Program.cs @@ -0,0 +1,157 @@ +using Astro_Renewed.Services; +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; + +namespace Astro_Renewed +{ + class Program + { + public static List VirtualizeMethods = new List(); + + [DllImport("kernel32.dll", ExactSpelling = true)] + private static extern IntPtr GetConsoleWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + private static string Load(string[] Arguments) + { + IntPtr ThisConsole = GetConsoleWindow(); + string lgo = "\r\n\r\n ___ __ ____ __ ___ __ \r\n / _ | ___ / /________ / __ \\/ / / _/_ _____ _______ _/ /____ ____\r\n / __ |(_- method.Name == "Initialize"); + cctor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Call, init)); + foreach (var md in module.GlobalType.Methods) + { + if (md.Name != ".ctor") continue; + module.GlobalType.Remove(md); + break; + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Anti Dump.cs b/AstroNet/Protections/Anti/Anti Dump.cs new file mode 100644 index 0000000..396d7d7 --- /dev/null +++ b/AstroNet/Protections/Anti/Anti Dump.cs @@ -0,0 +1,27 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using Astro_Renewed.Protections.Anti.Runtime; +using Astro_Renewed.Services; +using System.Linq; + +namespace Astro_Renewed.Protections.Anti +{ + internal class AntiDump + { + public static void Execute(ModuleDef mod) + { + var typeModule = ModuleDefMD.Load(typeof(AntiDumpRun).Module); + var cctor = mod.GlobalType.FindOrCreateStaticConstructor(); + var typeDef = typeModule.ResolveTypeDef(MDToken.ToRID(typeof(AntiDumpRun).MetadataToken)); + var members = Inject_Helper.InjectHelper.Inject(typeDef, mod.GlobalType, mod); + var init = (MethodDef)members.Single(method => method.Name == "Initialize"); + cctor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Call, init)); + foreach (var md in mod.GlobalType.Methods) + { + if (md.Name != ".ctor") continue; + mod.GlobalType.Remove(md); + break; + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Anti Tamper.cs b/AstroNet/Protections/Anti/Anti Tamper.cs new file mode 100644 index 0000000..726f864 --- /dev/null +++ b/AstroNet/Protections/Anti/Anti Tamper.cs @@ -0,0 +1,38 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using Astro_Renewed.Protections.Anti.Runtime; +using Astro_Renewed.Services; +using System.IO; +using System.Linq; +using System.Security.Cryptography; + +namespace Astro_Renewed.Protections.Anti +{ + public static class AntiTamper + { + public static void Sha256(string filePath) + { + var sha256Bytes = SHA256.Create().ComputeHash(File.ReadAllBytes(filePath)); + using (var stream = new FileStream(filePath, FileMode.Append)) + { + stream.Write(sha256Bytes, 0, sha256Bytes.Length); + } + } + + public static void Execute(ModuleDef module) + { + var typeModule = ModuleDefMD.Load(typeof(EofAntiTamper).Module); + var cctor = module.GlobalType.FindOrCreateStaticConstructor(); + var typeDef = typeModule.ResolveTypeDef(MDToken.ToRID(typeof(EofAntiTamper).MetadataToken)); + var members = Inject_Helper.InjectHelper.Inject(typeDef, module.GlobalType, module); + var init = (MethodDef)members.Single(method => method.Name == "Initializer"); + cctor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Call, init)); + foreach (var md in module.GlobalType.Methods) + { + if (md.Name != ".ctor") continue; + module.GlobalType.Remove(md); + break; + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/AntiDe4dot.cs b/AstroNet/Protections/Anti/AntiDe4dot.cs new file mode 100644 index 0000000..bcf78b0 --- /dev/null +++ b/AstroNet/Protections/Anti/AntiDe4dot.cs @@ -0,0 +1,23 @@ +using dnlib.DotNet; + +namespace Astro_Renewed.Protections.Anti +{ + internal class AntiDe4dot + { + public static void Execute(AssemblyDef mod) + { + foreach (var module in mod.Modules) + { + var interfaceM = new InterfaceImplUser(module.GlobalType); + for (var i = 0; i < 1; i++) + { + var typeDef1 = new TypeDefUser(string.Empty, $"Form{i}", module.CorLibTypes.GetTypeRef("System", "Attribute")); + var interface1 = new InterfaceImplUser(typeDef1); + module.Types.Add(typeDef1); + typeDef1.Interfaces.Add(interface1); + typeDef1.Interfaces.Add(interfaceM); + } + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Antimanything.cs b/AstroNet/Protections/Anti/Antimanything.cs new file mode 100644 index 0000000..fb9b4c2 --- /dev/null +++ b/AstroNet/Protections/Anti/Antimanything.cs @@ -0,0 +1,27 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using Astro_Renewed.Protections.Anti.Runtime; +using Astro_Renewed.Services; +using System.Linq; + +namespace Astro_Renewed.Protections.Anti +{ + internal class Antimanything + { + public static void Execute(ModuleDef module) + { + var typeModule = ModuleDefMD.Load(typeof(SelfDeleteClass).Module); + var cctor = module.GlobalType.FindOrCreateStaticConstructor(); + var typeDef = typeModule.ResolveTypeDef(MDToken.ToRID(typeof(SelfDeleteClass).MetadataToken)); + var members = Inject_Helper.InjectHelper.Inject(typeDef, module.GlobalType, module); + var init = (MethodDef)members.Single(method => method.Name == "Init"); + cctor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Call, init)); + foreach (var md in module.GlobalType.Methods) + { + if (md.Name != ".ctor") continue; + module.GlobalType.Remove(md); + break; + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Runtime/AntiDebug.Safe.cs b/AstroNet/Protections/Anti/Runtime/AntiDebug.Safe.cs new file mode 100644 index 0000000..d5d88c6 --- /dev/null +++ b/AstroNet/Protections/Anti/Runtime/AntiDebug.Safe.cs @@ -0,0 +1,54 @@ +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace Astro_Renewed.Protections.Anti.Runtime +{ + internal static class AntiDebugSafe + { + [DllImport("ntdll.dll", CharSet = CharSet.Auto)] + private static extern int NtQueryInformationProcess(IntPtr test, int test2, int[] test3, int test4, ref int test5); + + private static void Initialize() + { + if (Debugger.IsLogging()) + { Environment.Exit(0); } + if (Debugger.IsAttached) + { Environment.Exit(0); } + if (Environment.GetEnvironmentVariable("complus_profapi_profilercompatibilitysetting") != null) + { Environment.Exit(0); } + if (string.Compare(Environment.GetEnvironmentVariable("COR_ENABLE_PROFILING"), "1", StringComparison.Ordinal) == 0) + { Environment.Exit(0); } + + if (Environment.OSVersion.Platform != PlatformID.Win32NT) return; + var array = new int[6]; + var num = 0; + var intPtr = Process.GetCurrentProcess().Handle; + if (NtQueryInformationProcess(intPtr, 31, array, 4, ref num) == 0 && array[0] != 1) + { + Environment.Exit(0); + } + if (NtQueryInformationProcess(intPtr, 30, array, 4, ref num) == 0 && array[0] != 0) + { + Environment.Exit(0); + } + + if (NtQueryInformationProcess(intPtr, 0, array, 24, ref num) != 0) return; + intPtr = Marshal.ReadIntPtr(Marshal.ReadIntPtr((IntPtr)array[1], 12), 12); + Marshal.WriteInt32(intPtr, 32, 0); + var intPtr2 = Marshal.ReadIntPtr(intPtr, 0); + var ptr = intPtr2; + do + { + ptr = Marshal.ReadIntPtr(ptr, 0); + if (Marshal.ReadInt32(ptr, 44) != 1572886 || + Marshal.ReadInt32(Marshal.ReadIntPtr(ptr, 48), 0) != 7536749) continue; + var intPtr3 = Marshal.ReadIntPtr(ptr, 8); + var intPtr4 = Marshal.ReadIntPtr(ptr, 12); + Marshal.WriteInt32(intPtr4, 0, (int)intPtr3); + Marshal.WriteInt32(intPtr3, 4, (int)intPtr4); + } + while (!ptr.Equals(intPtr2)); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Runtime/AntiDumpRun.cs b/AstroNet/Protections/Anti/Runtime/AntiDumpRun.cs new file mode 100644 index 0000000..0a0fb6e --- /dev/null +++ b/AstroNet/Protections/Anti/Runtime/AntiDumpRun.cs @@ -0,0 +1,255 @@ +using System; +using System.Runtime.InteropServices; + +namespace Astro_Renewed.Protections.Anti.Runtime +{ + internal class AntiDumpRun + { + internal enum MemoryProtection + { + ExecuteReadWrite = 0x40, + } + + private static unsafe void CopyBlock(void* destination, void* source, uint byteCount) + { + } + + private static unsafe void InitBlock(void* startAddress, byte value, uint byteCount) + { + } + + [DllImport("kernel32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool VirtualProtect( + IntPtr lpAddress, + uint dwSize, + [MarshalAs(UnmanagedType.U4)] MemoryProtection flNewProtect, + [MarshalAs(UnmanagedType.U4)] out MemoryProtection lpflOldProtect); + + private static unsafe void Initialize() + { + var module = typeof(AntiDumpRun).Module; + var bas = (byte*)Marshal.GetHINSTANCE(module); + var ptr = bas + 0x3c; + ptr = bas + *(uint*)ptr; + ptr += 0x6; + var sectNum = *(ushort*)ptr; + ptr += 14; + var optSize = *(ushort*)ptr; + ptr = ptr + 0x4 + optSize; + var @new = stackalloc byte[11]; + if (module.FullyQualifiedName[0] != '<') + { + var mdDir = bas + *(uint*)(ptr - 16); + if (*(uint*)(ptr - 0x78) != 0) + { + var importDir = bas + *(uint*)(ptr - 0x78); + var oftMod = bas + *(uint*)importDir; + var modName = bas + *(uint*)(importDir + 12); + var funcName = bas + *(uint*)oftMod + 2; + VirtualProtect(new IntPtr(modName), 11, MemoryProtection.ExecuteReadWrite, out _); + *(uint*)@new = 0x6c64746e; + *((uint*)@new + 1) = 0x6c642e6c; + *((ushort*)@new + 4) = 0x006c; + *(@new + 10) = 0; + CopyBlock(modName, @new, 11); + VirtualProtect(new IntPtr(funcName), 11, MemoryProtection.ExecuteReadWrite, out _); + *(uint*)@new = 0x6f43744e; + *((uint*)@new + 1) = 0x6e69746e; + *((ushort*)@new + 4) = 0x6575; + *(@new + 10) = 0; + CopyBlock(funcName, @new, 11); + } + + for (var i = 0; i < sectNum; i++) + { + VirtualProtect(new IntPtr(ptr), 8, MemoryProtection.ExecuteReadWrite, out _); + InitBlock(ptr, 0, 8); + ptr += 0x28; + } + + VirtualProtect(new IntPtr(mdDir), 0x48, MemoryProtection.ExecuteReadWrite, out _); + var mdHdr = bas + *(uint*)(mdDir + 8); + InitBlock(mdDir, 0, 16); + VirtualProtect(new IntPtr(mdHdr), 4, MemoryProtection.ExecuteReadWrite, out _); + *(uint*)mdHdr = 0; + mdHdr += 12; + mdHdr += *(uint*)mdHdr; + mdHdr = (byte*)(((ulong)mdHdr + 7) & ~3UL); + mdHdr += 2; + ushort numOfStream = *mdHdr; + mdHdr += 2; + for (var i = 0; i < numOfStream; i++) + { + VirtualProtect(new IntPtr(mdHdr), 8, MemoryProtection.ExecuteReadWrite, out _); + mdHdr += 4; + mdHdr += 4; + for (var ii = 0; ii < 8; ii++) + { + VirtualProtect(new IntPtr(mdHdr), 4, MemoryProtection.ExecuteReadWrite, out _); + *mdHdr = 0; + mdHdr++; + if (*mdHdr == 0) + { + mdHdr += 3; + break; + } + *mdHdr = 0; + mdHdr++; + if (*mdHdr == 0) + { + mdHdr += 2; + break; + } + *mdHdr = 0; + mdHdr++; + if (*mdHdr == 0) + { + mdHdr += 1; + break; + } + *mdHdr = 0; + mdHdr++; + } + } + } + else + { + var mdDir = *(uint*)(ptr - 16); + var importDir = *(uint*)(ptr - 0x78); + + var vAdrs = new uint[sectNum]; + var vSizes = new uint[sectNum]; + var rAdrs = new uint[sectNum]; + for (var i = 0; i < sectNum; i++) + { + VirtualProtect(new IntPtr(ptr), 8, MemoryProtection.ExecuteReadWrite, out _); + Marshal.Copy(new byte[8], 0, (IntPtr)ptr, 8); + vAdrs[i] = *(uint*)(ptr + 12); + vSizes[i] = *(uint*)(ptr + 8); + rAdrs[i] = *(uint*)(ptr + 20); + ptr += 0x28; + } + + if (importDir != 0) + { + for (var i = 0; i < sectNum; i++) + if (vAdrs[i] <= importDir && importDir < vAdrs[i] + vSizes[i]) + { + importDir = importDir - vAdrs[i] + rAdrs[i]; + break; + } + + var importDirPtr = bas + importDir; + var oftMod = *(uint*)importDirPtr; + for (var i = 0; i < sectNum; i++) + if (vAdrs[i] <= oftMod && oftMod < vAdrs[i] + vSizes[i]) + { + oftMod = oftMod - vAdrs[i] + rAdrs[i]; + break; + } + + var oftModPtr = bas + oftMod; + var modName = *(uint*)(importDirPtr + 12); + for (var i = 0; i < sectNum; i++) + if (vAdrs[i] <= modName && modName < vAdrs[i] + vSizes[i]) + { + modName = modName - vAdrs[i] + rAdrs[i]; + break; + } + + var funcName = *(uint*)oftModPtr + 2; + for (var i = 0; i < sectNum; i++) + if (vAdrs[i] <= funcName && funcName < vAdrs[i] + vSizes[i]) + { + funcName = funcName - vAdrs[i] + rAdrs[i]; + break; + } + + VirtualProtect(new IntPtr(bas + modName), 11, MemoryProtection.ExecuteReadWrite, out _); + + *(uint*)@new = 0x6c64746e; + *((uint*)@new + 1) = 0x6c642e6c; + *((ushort*)@new + 4) = 0x006c; + *(@new + 10) = 0; + + CopyBlock(bas + modName, @new, 11); + + VirtualProtect(new IntPtr(bas + funcName), 11, MemoryProtection.ExecuteReadWrite, out _); + + *(uint*)@new = 0x6f43744e; + *((uint*)@new + 1) = 0x6e69746e; + *((ushort*)@new + 4) = 0x6575; + *(@new + 10) = 0; + + CopyBlock(bas + funcName, @new, 11); + } + + for (var i = 0; i < sectNum; i++) + if (vAdrs[i] <= mdDir && mdDir < vAdrs[i] + vSizes[i]) + { + mdDir = mdDir - vAdrs[i] + rAdrs[i]; + break; + } + + var mdDirPtr = bas + mdDir; + VirtualProtect(new IntPtr(mdDirPtr), 0x48, MemoryProtection.ExecuteReadWrite, out _); + var mdHdr = *(uint*)(mdDirPtr + 8); + for (var i = 0; i < sectNum; i++) + if (vAdrs[i] <= mdHdr && mdHdr < vAdrs[i] + vSizes[i]) + { + mdHdr = mdHdr - vAdrs[i] + rAdrs[i]; + break; + } + + InitBlock(mdDirPtr, 0, 16); + + var mdHdrPtr = bas + mdHdr; + VirtualProtect(new IntPtr(mdHdrPtr), 4, MemoryProtection.ExecuteReadWrite, out _); + *(uint*)mdHdrPtr = 0; + mdHdrPtr += 12; + mdHdrPtr += *(uint*)mdHdrPtr; + mdHdrPtr = (byte*)(((ulong)mdHdrPtr + 7) & ~3UL); + mdHdrPtr += 2; + ushort numOfStream = *mdHdrPtr; + mdHdrPtr += 2; + for (var i = 0; i < numOfStream; i++) + { + VirtualProtect(new IntPtr(mdHdrPtr), 8, MemoryProtection.ExecuteReadWrite, out _); + mdHdrPtr += 4; + mdHdrPtr += 4; + for (var ii = 0; ii < 8; ii++) + { + VirtualProtect(new IntPtr(mdHdrPtr), 4, MemoryProtection.ExecuteReadWrite, out _); + *mdHdrPtr = 0; + mdHdrPtr++; + if (*mdHdrPtr == 0) + { + mdHdrPtr += 3; + break; + } + + *mdHdrPtr = 0; + mdHdrPtr++; + if (*mdHdrPtr == 0) + { + mdHdrPtr += 2; + break; + } + + *mdHdrPtr = 0; + mdHdrPtr++; + if (*mdHdrPtr == 0) + { + mdHdrPtr += 1; + break; + } + + *mdHdrPtr = 0; + mdHdrPtr++; + } + } + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Runtime/EOFAntiTamper.cs b/AstroNet/Protections/Anti/Runtime/EOFAntiTamper.cs new file mode 100644 index 0000000..3872ef2 --- /dev/null +++ b/AstroNet/Protections/Anti/Runtime/EOFAntiTamper.cs @@ -0,0 +1,21 @@ +using System; +using System.IO; +using System.Security.Cryptography; + +namespace Astro_Renewed.Protections.Anti.Runtime +{ + internal class EofAntiTamper + { + private static void Initializer() + { + var assemblyLocation = System.Reflection.Assembly.GetExecutingAssembly().Location; + var stream = new StreamReader(assemblyLocation).BaseStream; + var reader = new BinaryReader(stream); + var newSha256 = BitConverter.ToString(SHA256.Create().ComputeHash(reader.ReadBytes(File.ReadAllBytes(assemblyLocation).Length - 32))); + stream.Seek(-32, SeekOrigin.End); + var realSha256 = BitConverter.ToString(reader.ReadBytes(32)); + if (newSha256 != realSha256) + throw new BadImageFormatException(); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Anti/Runtime/SelfDeleteClass.cs b/AstroNet/Protections/Anti/Runtime/SelfDeleteClass.cs new file mode 100644 index 0000000..065fa46 --- /dev/null +++ b/AstroNet/Protections/Anti/Runtime/SelfDeleteClass.cs @@ -0,0 +1,81 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; + +namespace Astro_Renewed.Protections.Anti.Runtime +{ + internal class SelfDeleteClass + { + public static void Init() + { + if (IsSandboxie()) + SelfDelete(); + if (IsDebugger()) + SelfDelete(); + if (IsdnSpyRun()) + SelfDelete(); + } + + private static bool IsSandboxie() + { + return IsDetected(); + } + + private static bool IsDebugger() + { + return Run(); + } + + private static bool IsdnSpyRun() + { + return ValueType(); + } + + private static void SelfDelete() + { + Process.Start(new ProcessStartInfo("cmd.exe", "/C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del \"" + Assembly.GetExecutingAssembly().Location + "\"") { WindowStyle = ProcessWindowStyle.Hidden })?.Dispose(); + Process.GetCurrentProcess().Kill(); + } + + private static bool ValueType() + { + return File.Exists(Environment.ExpandEnvironmentVariables("%appdata%") + "\\dnSpy\\dnSpy.xml"); + } + + private static IntPtr GetModuleHandle(string libName) + { + foreach (ProcessModule pMod in Process.GetCurrentProcess().Modules) + if (pMod.ModuleName.ToLower().Contains(libName.ToLower())) + return pMod.BaseAddress; + return IntPtr.Zero; + } + + private static bool IsDetected() + { + return GetModuleHandle("SbieDll.dll") != IntPtr.Zero; + } + + private static bool Run() + { + var returnvalue = false; + if (Debugger.IsAttached || Debugger.IsLogging()) + { + returnvalue = true; + } + else + { + var strArray = new[] { "codecracker", "x32dbg", "x64dbg", "ollydbg", "ida", "charles", "dnspy", "simpleassembly", "peek", "httpanalyzer", "httpdebug", "fiddler", "wireshark", "dbx", "mdbg", "gdb", "windbg", "dbgclr", "kdb", "kgdb", "mdb", "processhacker", "scylla_x86", "scylla_x64", "scylla", "idau64", "idau", "idaq", "idaq64", "idaw", "idaw64", "idag", "idag64", "ida64", "ida", "ImportREC", "IMMUNITYDEBUGGER", "MegaDumper", "CodeBrowser", "reshacker", "cheat engine" }; + foreach (var process in Process.GetProcesses()) + if (process != Process.GetCurrentProcess()) + for (var index = 0; index < strArray.Length; ++index) + { + if (process.ProcessName.ToLower().Contains(strArray[index])) returnvalue = true; + + if (process.MainWindowTitle.ToLower().Contains(strArray[index])) returnvalue = true; + } + } + return returnvalue; + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/AddMaths.cs b/AstroNet/Protections/Arithmetic/AddMaths.cs new file mode 100644 index 0000000..758a5cc --- /dev/null +++ b/AstroNet/Protections/Arithmetic/AddMaths.cs @@ -0,0 +1,50 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; + +namespace Astro_Renewed.Protections.Arithmetic +{ + public static class AddMaths + { + public static void Execute(ModuleDefMD md) + { + foreach (var type in md.GetTypes()) + { + if (type.IsGlobalModuleType) continue; + foreach (var method in type.Methods) + { + if (!method.HasBody) continue; + { + for (var i = 0; i < method.Body.Instructions.Count; i++) + { + if (!method.Body.Instructions[i].IsLdcI4()) continue; + var numorig = new Random(Guid.NewGuid().GetHashCode()).Next(); + var div = new Random(Guid.NewGuid().GetHashCode()).Next(); + var num = numorig ^ div; + + var nop = OpCodes.Nop.ToInstruction(); + + var local = new Local(method.Module.ImportAsTypeSig(typeof(int))); + method.Body.Variables.Add(local); + + method.Body.Instructions.Insert(i + 1, OpCodes.Stloc.ToInstruction(local)); + method.Body.Instructions.Insert(i + 2, Instruction.Create(OpCodes.Ldc_I4, method.Body.Instructions[i].GetLdcI4Value() - sizeof(float))); + method.Body.Instructions.Insert(i + 3, Instruction.Create(OpCodes.Ldc_I4, num)); + method.Body.Instructions.Insert(i + 4, Instruction.Create(OpCodes.Ldc_I4, div)); + method.Body.Instructions.Insert(i + 5, Instruction.Create(OpCodes.Xor)); + method.Body.Instructions.Insert(i + 6, Instruction.Create(OpCodes.Ldc_I4, numorig)); + method.Body.Instructions.Insert(i + 7, Instruction.Create(OpCodes.Bne_Un, nop)); + method.Body.Instructions.Insert(i + 8, Instruction.Create(OpCodes.Ldc_I4, 2)); + method.Body.Instructions.Insert(i + 9, OpCodes.Stloc.ToInstruction(local)); + method.Body.Instructions.Insert(i + 10, Instruction.Create(OpCodes.Sizeof, method.Module.Import(typeof(float)))); + method.Body.Instructions.Insert(i + 11, Instruction.Create(OpCodes.Add)); + method.Body.Instructions.Insert(i + 12, nop); + i += 12; + } + method.Body.SimplifyBranches(); + } + } + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Arithmetic.cs b/AstroNet/Protections/Arithmetic/Arithmetic.cs new file mode 100644 index 0000000..fa77160 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Arithmetic.cs @@ -0,0 +1,142 @@ +using Astro_Renewed.Protections.Arithmetic.Functions; +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections +{ + public static class ArithmeticPr + { + public static void Execute(ModuleDefMD moduleDef) + { + Arithmetic.Arithmetic.Execute(moduleDef); + } + } +} + +namespace Astro_Renewed.Protections.Arithmetic +{ + public static class Arithmetic + { + private static ModuleDef _moduleDef1; + + private static readonly List Tasks = new List() + { + new Add(), + new Sub(), + new Div(), + new Mul(), + new Xor(), + new Functions.Maths.Abs(), + new Functions.Maths.Log(), + new Functions.Maths.Log10(), + new Functions.Maths.Sin(), + new Functions.Maths.Cos(), + new Functions.Maths.Floor(), + new Functions.Maths.Round(), + new Functions.Maths.Tan(), + new Functions.Maths.Tanh(), + new Functions.Maths.Sqrt(), + new Functions.Maths.Ceiling(), + new Functions.Maths.Truncate() + }; + + public static void Execute(ModuleDefMD moduleDef) + { + _moduleDef1 = moduleDef; + var generator = new Generator.Generator(); + foreach (var tDef in moduleDef.Types) + { + foreach (var mDef in tDef.Methods) + { + if (!mDef.HasBody) continue; + if (mDef.DeclaringType.IsGlobalModuleType) continue; + for (var i = 0; i < mDef.Body.Instructions.Count; i++) + { + if (!ArithmeticUtils.CheckArithmetic(mDef.Body.Instructions[i])) continue; + if (mDef.Body.Instructions[i].GetLdcI4Value() < 0) + { + var iFunction = Tasks[generator.Next(5)]; + var lstInstr = GenerateBody(iFunction.Arithmetic(mDef.Body.Instructions[i], moduleDef)); + if (lstInstr == null) continue; + mDef.Body.Instructions[i].OpCode = OpCodes.Nop; + foreach (var instr in lstInstr) + { + mDef.Body.Instructions.Insert(i + 1, instr); + i++; + } + } + else + { + var iFunction = Tasks[generator.Next(Tasks.Count)]; + var lstInstr = GenerateBody(iFunction.Arithmetic(mDef.Body.Instructions[i], moduleDef)); + if (lstInstr == null) continue; + mDef.Body.Instructions[i].OpCode = OpCodes.Nop; + foreach (var instr in lstInstr) + { + mDef.Body.Instructions.Insert(i + 1, instr); + i++; + } + } + } + } + } + AddMaths.Execute(moduleDef); + Astro_Renewed.Services.ConsoleLogger.Log("Processing \"Arithmetic\" protection."); + } + + private static List GenerateBody(ArithmeticVt arithmeticVTs) + { + var instructions = new List(); + if (IsArithmetic(arithmeticVTs.GetArithmetic())) + { + instructions.Add(new Instruction(OpCodes.Ldc_R8, arithmeticVTs.GetValue().GetX())); + instructions.Add(new Instruction(OpCodes.Ldc_R8, arithmeticVTs.GetValue().GetY())); + + if (arithmeticVTs.GetToken().GetOperand() != null) + { + instructions.Add(new Instruction(OpCodes.Call, arithmeticVTs.GetToken().GetOperand())); + } + instructions.Add(new Instruction(arithmeticVTs.GetToken().GetOpCode())); + instructions.Add(new Instruction(OpCodes.Call, _moduleDef1.Import(typeof(Convert).GetMethod("ToInt32", new[] { typeof(double) })))); + //instructions.Add(new Instruction(OpCodes.Conv_I4)); + } + else if (IsXor(arithmeticVTs.GetArithmetic())) + { + instructions.Add(new Instruction(OpCodes.Ldc_I4, (int)arithmeticVTs.GetValue().GetX())); + instructions.Add(new Instruction(OpCodes.Ldc_I4, (int)arithmeticVTs.GetValue().GetY())); + instructions.Add(new Instruction(arithmeticVTs.GetToken().GetOpCode())); + instructions.Add(new Instruction(OpCodes.Conv_I4)); + } + return instructions; + } + + private static bool IsArithmetic(ArithmeticTypes arithmetic) + { + return arithmetic is + ArithmeticTypes.Add or + ArithmeticTypes.Sub or + ArithmeticTypes.Div or + ArithmeticTypes.Mul or + ArithmeticTypes.Abs or + ArithmeticTypes.Log or + ArithmeticTypes.Log10 or + ArithmeticTypes.Truncate or + ArithmeticTypes.Sin or + ArithmeticTypes.Cos or + ArithmeticTypes.Floor or + ArithmeticTypes.Round or + ArithmeticTypes.Tan or + ArithmeticTypes.Tanh or + ArithmeticTypes.Sqrt or + ArithmeticTypes.Ceiling; + } + + private static bool IsXor(ArithmeticTypes arithmetic) + { + return arithmetic == ArithmeticTypes.Xor; + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/ArithmeticEmulator.cs b/AstroNet/Protections/Arithmetic/ArithmeticEmulator.cs new file mode 100644 index 0000000..b774188 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/ArithmeticEmulator.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic +{ + public class ArithmeticEmulator + { + private readonly double _x; + private readonly double _y; + private readonly ArithmeticTypes _arithmeticTypes; + public new ArithmeticTypes GetType { get; private set; } + + public ArithmeticEmulator(double x, double y, ArithmeticTypes arithmeticTypes) + { + _x = x; + _y = y; + _arithmeticTypes = arithmeticTypes; + } + + public double GetValue() + { + return _arithmeticTypes switch + { + ArithmeticTypes.Add => _x - _y, + ArithmeticTypes.Sub => _x + _y, + ArithmeticTypes.Div => _x * _y, + ArithmeticTypes.Mul => _x / _y, + ArithmeticTypes.Xor => (int)_x ^ (int)_y, + _ => -1 + }; + } + + public double GetValue(List arithmetics) + { + var generator = new Generator.Generator(); + var arithmetic = arithmetics[generator.Next(arithmetics.Count)]; + GetType = arithmetic; + switch (_arithmeticTypes) + { + case ArithmeticTypes.Abs: + return arithmetic switch + { + ArithmeticTypes.Add => _x + Math.Abs(_y) * -1, + ArithmeticTypes.Sub => _x - Math.Abs(_y) * -1, + _ => -1 + }; + + case ArithmeticTypes.Log: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Log(_y), + ArithmeticTypes.Sub => _x + Math.Log(_y), + _ => -1 + }; + + case ArithmeticTypes.Log10: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Log10(_y), + ArithmeticTypes.Sub => _x + Math.Log10(_y), + _ => -1 + }; + + case ArithmeticTypes.Sin: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Sin(_y), + ArithmeticTypes.Sub => _x + Math.Sin(_y), + _ => -1 + }; + + case ArithmeticTypes.Cos: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Cos(_y), + ArithmeticTypes.Sub => _x + Math.Cos(_y), + _ => -1 + }; + + case ArithmeticTypes.Floor: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Floor(_y), + ArithmeticTypes.Sub => _x + Math.Floor(_y), + _ => -1 + }; + + case ArithmeticTypes.Round: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Round(_y), + ArithmeticTypes.Sub => _x + Math.Round(_y), + _ => -1 + }; + + case ArithmeticTypes.Tan: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Tan(_y), + ArithmeticTypes.Sub => _x + Math.Tan(_y), + _ => -1 + }; + + case ArithmeticTypes.Tanh: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Tanh(_y), + ArithmeticTypes.Sub => _x + Math.Tanh(_y), + _ => -1 + }; + + case ArithmeticTypes.Sqrt: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Sqrt(_y), + ArithmeticTypes.Sub => _x + Math.Sqrt(_y), + _ => -1 + }; + + case ArithmeticTypes.Ceiling: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Ceiling(_y), + ArithmeticTypes.Sub => _x + Math.Ceiling(_y), + _ => -1 + }; + + case ArithmeticTypes.Truncate: + return arithmetic switch + { + ArithmeticTypes.Add => _x - Math.Truncate(_y), + ArithmeticTypes.Sub => _x + Math.Truncate(_y), + _ => -1 + }; + } + return -1; + } + + public double GetY() => _y; + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/ArithmeticTypes.cs b/AstroNet/Protections/Arithmetic/ArithmeticTypes.cs new file mode 100644 index 0000000..4af7831 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/ArithmeticTypes.cs @@ -0,0 +1,23 @@ +namespace Astro_Renewed.Protections.Arithmetic +{ + public enum ArithmeticTypes + { + Add, // + + Sub, // - + Div, // / + Mul, // * + Xor, // ^ + Abs, // -1 + Log, // + Log10, + Sin, + Cos, + Round, + Sqrt, + Ceiling, + Floor, + Tan, + Tanh, + Truncate + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/ArithmeticVT.cs b/AstroNet/Protections/Arithmetic/ArithmeticVT.cs new file mode 100644 index 0000000..8506460 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/ArithmeticVT.cs @@ -0,0 +1,22 @@ +namespace Astro_Renewed.Protections.Arithmetic +{ + public class ArithmeticVt + { + private readonly Value _value; + private readonly Token _token; + private readonly ArithmeticTypes _arithmeticTypes; + + public ArithmeticVt(Value value, Token token, ArithmeticTypes arithmeticTypes) + { + _value = value; + _token = token; + _arithmeticTypes = arithmeticTypes; + } + + public Value GetValue() => _value; + + public Token GetToken() => _token; + + public ArithmeticTypes GetArithmetic() => _arithmeticTypes; + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Add.cs b/AstroNet/Protections/Arithmetic/Functions/Add.cs new file mode 100644 index 0000000..fb1784f --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Add.cs @@ -0,0 +1,18 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic.Functions +{ + public class Add : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Add; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(), arithmeticEmulator.GetY()), new Token(OpCodes.Add), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Div.cs b/AstroNet/Protections/Arithmetic/Functions/Div.cs new file mode 100644 index 0000000..b08d828 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Div.cs @@ -0,0 +1,18 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic.Functions +{ + public class Div : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Div; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(), arithmeticEmulator.GetY()), new Token(OpCodes.Div), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Abs.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Abs.cs new file mode 100644 index 0000000..43fe438 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Abs.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Abs : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Abs; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Ceiling.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Ceiling.cs new file mode 100644 index 0000000..243e89f --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Ceiling.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Ceiling : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Ceiling; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Cos.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Cos.cs new file mode 100644 index 0000000..348a68e --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Cos.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Cos : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Cos; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Floor.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Floor.cs new file mode 100644 index 0000000..fbc263b --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Floor.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Floor : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Floor; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Log.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Log.cs new file mode 100644 index 0000000..8dc7a38 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Log.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Log : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Log; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Log10.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Log10.cs new file mode 100644 index 0000000..a2d2963 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Log10.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Log10 : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Log10; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Round.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Round.cs new file mode 100644 index 0000000..1041ed0 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Round.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Round : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Round; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Sin.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Sin.cs new file mode 100644 index 0000000..219480f --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Sin.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Sin : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Sin; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Sqrt.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Sqrt.cs new file mode 100644 index 0000000..3baae77 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Sqrt.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Sqrt : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Sqrt; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Tan.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Tan.cs new file mode 100644 index 0000000..0aca182 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Tan.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Tan : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Tan; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Tanh.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Tanh.cs new file mode 100644 index 0000000..3586c48 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Tanh.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Tanh : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Tanh; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Maths/Truncate.cs b/AstroNet/Protections/Arithmetic/Functions/Maths/Truncate.cs new file mode 100644 index 0000000..bbc6ea4 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Maths/Truncate.cs @@ -0,0 +1,20 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections.Arithmetic.Functions.Maths +{ + public class Truncate : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Truncate; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticTypes = new List { ArithmeticTypes.Add, ArithmeticTypes.Sub }; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(arithmeticTypes), arithmeticEmulator.GetY()), new Token(ArithmeticUtils.GetOpCode(arithmeticEmulator.GetType), module.Import(ArithmeticUtils.GetMethod(ArithmeticTypes))), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Mul.cs b/AstroNet/Protections/Arithmetic/Functions/Mul.cs new file mode 100644 index 0000000..b65cc86 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Mul.cs @@ -0,0 +1,18 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic.Functions +{ + public class Mul : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Mul; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(), arithmeticEmulator.GetY()), new Token(OpCodes.Mul), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Sub.cs b/AstroNet/Protections/Arithmetic/Functions/Sub.cs new file mode 100644 index 0000000..2fc3043 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Sub.cs @@ -0,0 +1,18 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic.Functions +{ + public class Sub : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Sub; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), ArithmeticUtils.GetY(instruction.GetLdcI4Value()), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(), arithmeticEmulator.GetY()), new Token(OpCodes.Sub), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Functions/Xor.cs b/AstroNet/Protections/Arithmetic/Functions/Xor.cs new file mode 100644 index 0000000..b40cba9 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Functions/Xor.cs @@ -0,0 +1,19 @@ +using Astro_Renewed.Protections.Arithmetic.Utils; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic.Functions +{ + public class Xor : Function + { + public virtual ArithmeticTypes ArithmeticTypes => ArithmeticTypes.Xor; + + public override ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module) + { + var generator = new Generator.Generator(); + if (!ArithmeticUtils.CheckArithmetic(instruction)) return null; + var arithmeticEmulator = new ArithmeticEmulator(instruction.GetLdcI4Value(), generator.Next(), ArithmeticTypes); + return new ArithmeticVt(new Value(arithmeticEmulator.GetValue(), arithmeticEmulator.GetY()), new Token(OpCodes.Xor), ArithmeticTypes); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Generator/Generator.cs b/AstroNet/Protections/Arithmetic/Generator/Generator.cs new file mode 100644 index 0000000..c1fbcfa --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Generator/Generator.cs @@ -0,0 +1,29 @@ +using System; + +namespace Astro_Renewed.Protections.Arithmetic.Generator +{ + public class Generator + { + private readonly Random _random; + + public Generator() + { + _random = new Random(Guid.NewGuid().GetHashCode()); + } + + public int Next() + { + return _random.Next(int.MaxValue); + } + + public int Next(int value) + { + return _random.Next(value); + } + + public int Next(int min, int max) + { + return _random.Next(min, max); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Token.cs b/AstroNet/Protections/Arithmetic/Token.cs new file mode 100644 index 0000000..909993e --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Token.cs @@ -0,0 +1,26 @@ +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic +{ + public class Token + { + private readonly OpCode _opCode; + private readonly object _operand; + + public Token(OpCode opCode, object operand) + { + _opCode = opCode; + _operand = operand; + } + + public Token(OpCode opCode) + { + _opCode = opCode; + _operand = null; + } + + public OpCode GetOpCode() => _opCode; + + public object GetOperand() => _operand; + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Utils/ArithmeticUtils.cs b/AstroNet/Protections/Arithmetic/Utils/ArithmeticUtils.cs new file mode 100644 index 0000000..f1e169d --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Utils/ArithmeticUtils.cs @@ -0,0 +1,49 @@ +using dnlib.DotNet.Emit; +using System; + +namespace Astro_Renewed.Protections.Arithmetic.Utils +{ + public static class ArithmeticUtils + { + public static bool CheckArithmetic(Instruction instruction) + { + if (!instruction.IsLdcI4()) + return false; + if (instruction.GetLdcI4Value() == 1) + return false; + return instruction.GetLdcI4Value() != 0; + } + + public static double GetY(double x) => x / 2; + + public static System.Reflection.MethodInfo GetMethod(ArithmeticTypes mathType) + { + return mathType switch + { + ArithmeticTypes.Abs => typeof(Math).GetMethod("Abs", new[] { typeof(double) }), + ArithmeticTypes.Round => typeof(Math).GetMethod("Round", new[] { typeof(double) }), + ArithmeticTypes.Sin => typeof(Math).GetMethod("Sin", new[] { typeof(double) }), + ArithmeticTypes.Cos => typeof(Math).GetMethod("Cos", new[] { typeof(double) }), + ArithmeticTypes.Log => typeof(Math).GetMethod("Log", new[] { typeof(double) }), + ArithmeticTypes.Log10 => typeof(Math).GetMethod("Log10", new[] { typeof(double) }), + ArithmeticTypes.Sqrt => typeof(Math).GetMethod("Sqrt", new[] { typeof(double) }), + ArithmeticTypes.Ceiling => typeof(Math).GetMethod("Ceiling", new[] { typeof(double) }), + ArithmeticTypes.Floor => typeof(Math).GetMethod("Floor", new[] { typeof(double) }), + ArithmeticTypes.Tan => typeof(Math).GetMethod("Tan", new[] { typeof(double) }), + ArithmeticTypes.Tanh => typeof(Math).GetMethod("Tanh", new[] { typeof(double) }), + ArithmeticTypes.Truncate => typeof(Math).GetMethod("Truncate", new[] { typeof(double) }), + _ => null + }; + } + + public static OpCode GetOpCode(ArithmeticTypes arithmetic) + { + return arithmetic switch + { + ArithmeticTypes.Add => OpCodes.Add, + ArithmeticTypes.Sub => OpCodes.Sub, + _ => null + }; + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/Value.cs b/AstroNet/Protections/Arithmetic/Value.cs new file mode 100644 index 0000000..bad2db1 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/Value.cs @@ -0,0 +1,18 @@ +namespace Astro_Renewed.Protections.Arithmetic +{ + public class Value + { + private readonly double _x; + private readonly double _y; + + public Value(double x, double y) + { + _x = x; + _y = y; + } + + public double GetX() => _x; + + public double GetY() => _y; + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Arithmetic/iFunction.cs b/AstroNet/Protections/Arithmetic/iFunction.cs new file mode 100644 index 0000000..791a048 --- /dev/null +++ b/AstroNet/Protections/Arithmetic/iFunction.cs @@ -0,0 +1,10 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Arithmetic +{ + public abstract class Function + { + public abstract ArithmeticVt Arithmetic(Instruction instruction, ModuleDef module); + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Attribute.cs b/AstroNet/Protections/Attribute.cs new file mode 100644 index 0000000..2035e6f --- /dev/null +++ b/AstroNet/Protections/Attribute.cs @@ -0,0 +1,86 @@ +using dnlib.DotNet; +using System; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Text; + +namespace Astro_Renewed.Protections +{ + class Attribute + { + private static string ConvertStringtoMD5(string strword) + { + MD5 md5 = MD5.Create(); + byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strword); + byte[] hash = md5.ComputeHash(inputBytes); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hash.Length; i++) + { + sb.Append(hash[i].ToString("x2")); + } + return sb.ToString(); + } + + private static string randomMD5() + { + var bytes = new byte[16]; + using (var rng = new RNGCryptoServiceProvider()) + { + rng.GetBytes(bytes); + } + return "{" + ConvertStringtoMD5(BitConverter.ToString(bytes)).ToLower() + "}"; + } + + public static void Execute(ModuleDefMD module) + { + var attrLs = new List() + { + "Borland_Delphi", + "AstroObfuscator", + "ProtectedByAstro", + "AstroByLockT", + "...", + "..." + }; + + for (int i = 0; i < 20; i++) + { + attrLs.Add(randomMD5()); + } + + foreach (string attr in attrLs) + { + TypeRef attrRef = module.CorLibTypes.GetTypeRef("System.Runtime.CompilerServices", attr); + var ctorRef = new MemberRefUser(module, ".ctor", MethodSig.CreateInstance(module.CorLibTypes.Int32), attrRef); + var attrx = new CustomAttribute(ctorRef); + module.CustomAttributes.Add(attrx); + } + + Resource res1 = null; + + foreach (Resource res in module.Resources) + { + if (res.Name != "AstroNet.resources" && res.Name.EndsWith(".resources")) + { + res1 = res; + //res.Name = randomMD5(); + } + } + + foreach (Resource res in module.Resources) + { + if (res.Name == "AstroNet.resources") + { + res.Attributes = res1.Attributes; + res.Visibility = res1.Visibility; + } + } + + + module.Assembly.Name = $"[>AstroNet<] {randomMD5()}"; + module.Name = $"PE {randomMD5()}"; + + Services.ConsoleLogger.Log("Processing \"Metadata Attribute\" protection."); + } + } +} diff --git a/AstroNet/Protections/Base64.cs b/AstroNet/Protections/Base64.cs new file mode 100644 index 0000000..e86f3c0 --- /dev/null +++ b/AstroNet/Protections/Base64.cs @@ -0,0 +1,38 @@ +using Astro_Renewed.Services; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; +using System.Text; + +namespace Astro_Renewed.Protections +{ + class Base64 + { + public static void Execute(ModuleDefMD md) + { + foreach (TypeDef type in md.Types) + { + foreach (MethodDef method in type.Methods) + { + if (method.Body == null) continue; + for (int i = 0; i < method.Body.Instructions.Count; i++) + { + if (method.Body.Instructions[i].OpCode == OpCodes.Ldstr) + { + //Encoding.UTF8.GetString(Convert.FromBase64String("")); + String oldString = method.Body.Instructions[i].Operand.ToString(); //Original String. + String newString = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(oldString)); //Encrypted String by Base64 + method.Body.Instructions[i].OpCode = OpCodes.Nop; //Change the Opcode for the Original Instruction + method.Body.Instructions.Insert(i + 1, new Instruction(OpCodes.Call, md.Import(typeof(System.Text.Encoding).GetMethod("get_UTF8", new Type[] { })))); //get Method (get_UTF8) from Type (System.Text.Encoding). + method.Body.Instructions.Insert(i + 2, new Instruction(OpCodes.Ldstr, newString)); //add the Encrypted String + method.Body.Instructions.Insert(i + 3, new Instruction(OpCodes.Call, md.Import(typeof(System.Convert).GetMethod("FromBase64String", new Type[] { typeof(string) })))); //get Method (FromBase64String) from Type (System.Convert), and arguments for method we will get it using "new Type[] { typeof(string) }" + method.Body.Instructions.Insert(i + 4, new Instruction(OpCodes.Callvirt, md.Import(typeof(System.Text.Encoding).GetMethod("GetString", new Type[] { typeof(byte[]) })))); + i += 4; //skip the Instructions that we have just added. + } + } + } + } + Services.ConsoleLogger.Log("Processing \"Base64 String\" protection."); + } + } +} diff --git a/AstroNet/Protections/ConstantMelting.cs b/AstroNet/Protections/ConstantMelting.cs new file mode 100644 index 0000000..96f2609 --- /dev/null +++ b/AstroNet/Protections/ConstantMelting.cs @@ -0,0 +1,66 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; + +namespace Astro_Renewed.Protections +{ + class ConstantMelting + { + public static void Execute(ModuleDefMD module) + { + foreach (TypeDef type in module.Types) + { + if (type.IsGlobalModuleType) continue; + foreach (MethodDef method in type.Methods) + { + //Exclude the "_My" nammespace from VB.NET files + if (method.FullName.Contains("My.")) continue; //VB gives cancer anyway + //Exclude constructor, aka .ctor method in decompiler + if (method.IsConstructor) continue; + if (!method.HasBody) continue; + var instr = method.Body.Instructions; + for (int c = 0; c < 10; c++) + { + for (int i = 0; i < method.Body.Instructions.Count; i++) + { + //if instruction is an LDSTR (string) instruction then + if (instr[i].OpCode == OpCodes.Ldstr) + { + Random rn = new Random(); + for (int j = 1; j < /*rn.Next(16)*/1; j++) + { + if (j != 1) j += 1; + //Create a new local + Local new_local = new Local(module.CorLibTypes.String); + //Create another new local + Local new_local2 = new Local(module.CorLibTypes.String); + //add them in the method + method.Body.Variables.Add(new_local); + method.Body.Variables.Add(new_local2); + //set ldstr value to the local + instr.Insert(i + j, Instruction.Create(OpCodes.Stloc_S, new_local)); + instr.Insert(i + (j + 1), Instruction.Create(OpCodes.Ldloc_S, new_local)); + } + } + if (instr[i].OpCode == OpCodes.Ldc_I4) + { + Random rn = new Random(); + for (int j = 1; j < /*rn.Next(16)*/1; j++) + { + if (j != 1) j += 1; + Local new_local = new Local(module.CorLibTypes.Int32); + Local new_local2 = new Local(module.CorLibTypes.Int32); + method.Body.Variables.Add(new_local); + method.Body.Variables.Add(new_local2); + instr.Insert(i + j, Instruction.Create(OpCodes.Stloc_S, new_local)); + instr.Insert(i + (j + 1), Instruction.Create(OpCodes.Ldloc_S, new_local)); + } + } + } + } + } + } + Services.ConsoleLogger.Log("Processing \"Constant Melting\" protection."); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/CtrlFlow.cs b/AstroNet/Protections/CtrlFlow.cs new file mode 100644 index 0000000..3c0ae28 --- /dev/null +++ b/AstroNet/Protections/CtrlFlow.cs @@ -0,0 +1,172 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Astro_Renewed.Protections +{ + internal class CtrlFlow + { + public static void Execute(ModuleDefMD md) + { + foreach (var tDef in md.Types) + { + if (tDef == md.GlobalType) continue; + foreach (var mDef in tDef.Methods) + { + if (mDef.Name.StartsWith("get_") || mDef.Name.StartsWith("set_")) continue; + if (!mDef.HasBody || mDef.IsConstructor) continue; + mDef.Body.SimplifyBranches(); + ExecuteMethod(mDef); + } + } + Services.ConsoleLogger.Log("Processing \"Control Flow\" protection."); + } + + public static void ExecuteMethod(MethodDef method) + { + method.Body.SimplifyMacros(method.Parameters); + var blocks = BlockParser.ParseMethod(method); + blocks = Randomize(blocks); + method.Body.Instructions.Clear(); + var local = new Local(method.Module.CorLibTypes.Int32); + method.Body.Variables.Add(local); + var target = Instruction.Create(OpCodes.Nop); + var instr = Instruction.Create(OpCodes.Br, target); + foreach (var instruction in Calc(0)) + method.Body.Instructions.Add(instruction); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Stloc, local)); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Br, instr)); + method.Body.Instructions.Add(target); + foreach (var block in blocks.Where(block => block != blocks.Single(x => x.Number == blocks.Count - 1))) + { + method.Body.Instructions.Add(Instruction.Create(OpCodes.Ldloc, local)); + foreach (var instruction in Calc(block.Number)) + method.Body.Instructions.Add(instruction); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Ceq)); + var instruction4 = Instruction.Create(OpCodes.Nop); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Brfalse, instruction4)); + + foreach (var instruction in block.Instructions) + method.Body.Instructions.Add(instruction); + + foreach (var instruction in Calc(block.Number + 1)) + method.Body.Instructions.Add(instruction); + + method.Body.Instructions.Add(Instruction.Create(OpCodes.Stloc, local)); + method.Body.Instructions.Add(instruction4); + } + method.Body.Instructions.Add(Instruction.Create(OpCodes.Ldloc, local)); + foreach (var instruction in Calc(blocks.Count - 1)) + method.Body.Instructions.Add(instruction); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Ceq)); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Brfalse, instr)); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Br, blocks.Single(x => x.Number == blocks.Count - 1).Instructions[0])); + method.Body.Instructions.Add(instr); + + foreach (var lastBlock in blocks.Single(x => x.Number == blocks.Count - 1).Instructions) + method.Body.Instructions.Add(lastBlock); + } + + public static Random rnd = new(); + + public static List Randomize(List input) + { + var ret = new List(); + foreach (var group in input) + ret.Insert(rnd.Next(0, ret.Count), group); + return ret; + } + + public static List Calc(int value) + { + var instructions = new List { Instruction.Create(OpCodes.Ldc_I4, value) }; + return instructions; + } + + public void AddJump(IList instrs, Instruction target) + { + instrs.Add(Instruction.Create(OpCodes.Br, target)); + } + + public class Block + { + public Block() + { + Instructions = new List(); + } + + public List Instructions { get; set; } + + public int Number { get; set; } + } + + public class BlockParser + { + public static List ParseMethod(MethodDef method) + { + var blocks = new List(); + var block = new Block(); + var id = 0; + var usage = 0; + block.Number = id; + block.Instructions.Add(Instruction.Create(OpCodes.Nop)); + blocks.Add(block); + block = new Block(); + var handlers = new Stack(); + foreach (var instruction in method.Body.Instructions) + { + foreach (var eh in method.Body.ExceptionHandlers) + { + if (eh.HandlerStart == instruction || eh.TryStart == instruction || eh.FilterStart == instruction) + handlers.Push(eh); + } + foreach (var eh in method.Body.ExceptionHandlers) + { + if (eh.HandlerEnd == instruction || eh.TryEnd == instruction) + handlers.Pop(); + } + + instruction.CalculateStackUsage(out var stacks, out var pops); + block.Instructions.Add(instruction); + usage += stacks - pops; + if (stacks == 0) + { + if (instruction.OpCode != OpCodes.Nop) + { + if ((usage == 0 || instruction.OpCode == OpCodes.Ret) && handlers.Count == 0) + { + block.Number = ++id; + blocks.Add(block); + block = new Block(); + } + } + } + } + return blocks; + } + } + + public static class JumpCFlow + { + public static void Execute(ModuleDefMD module) + { + foreach (var type in module.Types) + { + foreach (var method in type.Methods.ToArray()) + { + if (!method.HasBody || !method.Body.HasInstructions || method.Body.HasExceptionHandlers) continue; + for (var i = 0; i < method.Body.Instructions.Count - 2; i++) + { + var inst = method.Body.Instructions[i + 1]; + method.Body.Instructions.Insert(i + 1, Instruction.Create(OpCodes.Ldstr, Services.RandomGenerator.randomMD5())); + method.Body.Instructions.Insert(i + 1, Instruction.Create(OpCodes.Br_S, inst)); + i += 2; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/LocalToField.cs b/AstroNet/Protections/LocalToField.cs new file mode 100644 index 0000000..397b543 --- /dev/null +++ b/AstroNet/Protections/LocalToField.cs @@ -0,0 +1,65 @@ +using Astro_Renewed.Services; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System.Collections.Generic; +using System.Linq; + +namespace Astro_Renewed.Protections +{ + internal class LocalToField + { + private static Dictionary _convertedLocals = new(); + + public static void Execute(ModuleDef module) + { + foreach (var type in module.Types.Where(x => x != module.GlobalType)) + { + foreach (var method2 in type.Methods.Where(x => x.HasBody && x.Body.HasInstructions && !x.IsConstructor)) + { + _convertedLocals = new Dictionary(); + Process(module, method2); + } + } + Services.ConsoleLogger.Log("Processing \"Local To Field\" protection."); + } + + private static void Process(ModuleDef module, MethodDef method) + { + var instructions = method.Body.Instructions; + foreach (var t in instructions) + { + if (t.Operand is not Local local) continue; + FieldDef def; + if (!_convertedLocals.ContainsKey(local)) + { + def = new FieldDefUser(RandomGenerator.randomMD5(), new FieldSig(local.Type), FieldAttributes.Public | FieldAttributes.Static); + module.GlobalType.Fields.Add(def); + _convertedLocals.Add(local, def); + } + else + def = _convertedLocals[local]; + + var eq = t.OpCode.Code switch + { + Code.Ldloc => OpCodes.Ldsfld, + Code.Ldloc_S => OpCodes.Ldsfld, + Code.Ldloc_0 => OpCodes.Ldsfld, + Code.Ldloc_1 => OpCodes.Ldsfld, + Code.Ldloc_2 => OpCodes.Ldsfld, + Code.Ldloc_3 => OpCodes.Ldsfld, + Code.Ldloca => OpCodes.Ldsflda, + Code.Ldloca_S => OpCodes.Ldsflda, + Code.Stloc => OpCodes.Stsfld, + Code.Stloc_0 => OpCodes.Stsfld, + Code.Stloc_1 => OpCodes.Stsfld, + Code.Stloc_2 => OpCodes.Stsfld, + Code.Stloc_3 => OpCodes.Stsfld, + Code.Stloc_S => OpCodes.Stsfld, + _ => null + }; + t.OpCode = eq; + t.Operand = def; + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Other/Calli.cs b/AstroNet/Protections/Other/Calli.cs new file mode 100644 index 0000000..7e49954 --- /dev/null +++ b/AstroNet/Protections/Other/Calli.cs @@ -0,0 +1,63 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; +using System.Linq; + +namespace Astro_Renewed.Protections.Other +{ + internal class Calli + { + public static void Execute(ModuleDef module) + { + foreach (var type in module.Types.ToArray()) + { + foreach (var method in type.Methods.ToArray()) + { + if (!method.HasBody) continue; + if (!method.Body.HasInstructions) continue; + if (method.FullName.Contains("My.")) continue; + if (method.FullName.Contains(".My")) continue; + if (method.FullName.Contains("Costura")) continue; + if (method.IsConstructor) continue; + if (method.DeclaringType.IsGlobalModuleType) continue; + for (var i = 0; i < method.Body.Instructions.Count - 1; i++) + { + try + { + if (method.Body.Instructions[i].ToString().Contains("ISupportInitialize") || method.Body.Instructions[i].OpCode != OpCodes.Call && + method.Body.Instructions[i].OpCode != OpCodes.Callvirt && + method.Body.Instructions[i].OpCode != OpCodes.Ldloc_S) continue; + + if (method.Body.Instructions[i].ToString().Contains("Object") || method.Body.Instructions[i].OpCode != OpCodes.Call && + method.Body.Instructions[i].OpCode != OpCodes.Callvirt && + method.Body.Instructions[i].OpCode != OpCodes.Ldloc_S) continue; + + try + { + var membertocalli = (MemberRef)method.Body.Instructions[i].Operand; + method.Body.Instructions[i].OpCode = OpCodes.Calli; + method.Body.Instructions[i].Operand = membertocalli.MethodSig; + method.Body.Instructions.Insert(i, Instruction.Create(OpCodes.Ldftn, membertocalli)); + } + catch (Exception) + { + // ignored + } + } + catch (Exception) + { + // ignored + } + } + } + foreach (var md in module.GlobalType.Methods) + { + if (md.Name != ".ctor") continue; + module.GlobalType.Remove(md); + break; + } + } + Services.ConsoleLogger.Log("Processing \"Calli\" protection."); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Other/StackUnfConfusion.cs b/AstroNet/Protections/Other/StackUnfConfusion.cs new file mode 100644 index 0000000..9719f2b --- /dev/null +++ b/AstroNet/Protections/Other/StackUnfConfusion.cs @@ -0,0 +1,60 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; + +namespace Astro_Renewed.Protections.Other +{ + internal class StackUnfConfusion + { + public static void Execute(ModuleDef mod) + { + foreach (var type in mod.Types) + { + foreach (var dnlibDef in type.Methods) + { + var def = dnlibDef; + if (def != null && !def.HasBody) + { + break; + } + + var body = def?.Body; + var target = body?.Instructions[0]; + var item = Instruction.Create(OpCodes.Br_S, target); + var instruction3 = Instruction.Create(OpCodes.Pop); + var random = new Random(); + var instruction4 = random.Next(0, 5) switch + { + 0 => Instruction.Create(OpCodes.Ldnull), + 1 => Instruction.Create(OpCodes.Ldc_I4_0), + 2 => Instruction.Create(OpCodes.Ldstr, "Isolator"), + 3 => Instruction.Create(OpCodes.Ldc_I8, (uint)random.Next()), + _ => Instruction.Create(OpCodes.Ldc_I8, (long)random.Next()) + }; + + body?.Instructions.Insert(0, instruction4); + body?.Instructions.Insert(1, instruction3); + body?.Instructions.Insert(2, item); + if (body != null) + { + foreach (var handler in body.ExceptionHandlers) + { + if (handler.TryStart == target) + { + handler.TryStart = item; + } + else if (handler.HandlerStart == target) + { + handler.HandlerStart = item; + } + else if (handler.FilterStart == target) + { + handler.FilterStart = item; + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Other/Watermark.cs b/AstroNet/Protections/Other/Watermark.cs new file mode 100644 index 0000000..b8528e3 --- /dev/null +++ b/AstroNet/Protections/Other/Watermark.cs @@ -0,0 +1,33 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Protections.Other +{ + internal class Watermark + { + public static void Execute(ModuleDefMD md) + { + foreach (var moduleDef in md.Assembly.Modules) + { + var module = (ModuleDefMD)moduleDef; + var attrRef = module.CorLibTypes.GetTypeRef("System", "Attribute"); + var attrType = new TypeDefUser("", "#AstroNet", attrRef); + module.Types.Add(attrType); + + var ctor = new MethodDefUser( + ".ctor", + MethodSig.CreateInstance(module.CorLibTypes.Void, module.CorLibTypes.String), + MethodImplAttributes.Managed, + MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName) + { + Body = new CilBody() + }; + ctor.Body.MaxStack = 1; + ctor.Body.Instructions.Add(OpCodes.Ldarg_0.ToInstruction()); + ctor.Body.Instructions.Add(OpCodes.Call.ToInstruction(new MemberRefUser(module, ".ctor", MethodSig.CreateInstance(module.CorLibTypes.Void), attrRef))); + ctor.Body.Instructions.Add(OpCodes.Ret.ToInstruction()); + attrType.Methods.Add(ctor); + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/ProxyINT.cs b/AstroNet/Protections/ProxyINT.cs new file mode 100644 index 0000000..d435e3e --- /dev/null +++ b/AstroNet/Protections/ProxyINT.cs @@ -0,0 +1,56 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using Astro_Renewed; + +namespace Astro_Renewed.Protections +{ + public static class ProxyInt + { + public static void Execute(ModuleDef module) + { + foreach (var type in module.GetTypes()) + { + if (type.IsGlobalModuleType) continue; + foreach (var method in type.Methods) + { + if (!method.HasBody) continue; + var instr = method.Body.Instructions; + for (var i = 0; i < instr.Count; i++) + { + if (method.Body.Instructions[i].IsLdcI4()) + { + var methImplFlags = MethodImplAttributes.IL | MethodImplAttributes.Managed; + var methFlags = MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig | MethodAttributes.ReuseSlot; + var meth1 = new MethodDefUser(Services.RandomGenerator.randomMD5(), + MethodSig.CreateStatic(module.CorLibTypes.Int32), + methImplFlags, methFlags); + module.GlobalType.Methods.Add(meth1); + meth1.Body = new CilBody(); + meth1.Body.Variables.Add(new Local(module.CorLibTypes.Int32)); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, instr[i].GetLdcI4Value())); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + instr[i].OpCode = OpCodes.Call; + instr[i].Operand = meth1; + } + else if (method.Body.Instructions[i].OpCode == OpCodes.Ldc_R4) + { + var methImplFlags = MethodImplAttributes.IL | MethodImplAttributes.Managed; + var methFlags = MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig | MethodAttributes.ReuseSlot; + var meth1 = new MethodDefUser(Services.RandomGenerator.randomMD5(), + MethodSig.CreateStatic(module.CorLibTypes.Double), + methImplFlags, methFlags); + module.GlobalType.Methods.Add(meth1); + meth1.Body = new CilBody(); + meth1.Body.Variables.Add(new Local(module.CorLibTypes.Double)); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ldc_R4, (float)method.Body.Instructions[i].Operand)); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + instr[i].OpCode = OpCodes.Call; + instr[i].Operand = meth1; + } + } + } + } + Services.ConsoleLogger.Log("Processing \"Int Proxy\" protection."); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/ProxyMeth.cs b/AstroNet/Protections/ProxyMeth.cs new file mode 100644 index 0000000..b341e5b --- /dev/null +++ b/AstroNet/Protections/ProxyMeth.cs @@ -0,0 +1,183 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Astro_Renewed.Protections +{ + public static class ProxyMeth + { + public static Random rand = new(); + public static List MemberRefList = new(); + + //Scan de toutes les MemberRef + public static void ScanMemberRef(ModuleDef module) + { + foreach (var type in module.Types) + { + foreach (var method in type.Methods) + { + if (!method.HasBody || !method.Body.HasInstructions) continue; + for (var i = 0; i < method.Body.Instructions.Count - 1; i++) + { + if (method.Body.Instructions[i].OpCode != OpCodes.Call) continue; + try + { + var original = (MemberRef)method.Body.Instructions[i].Operand; + if (!original.HasThis) + { + MemberRefList.Add(original); + } + } + catch + { + // ignored + } + } + } + } + } + + public static MethodDef GenerateSwitch(MemberRef original, ModuleDef md) + { + try + { + var type = original.MethodSig.Params.ToList(); + type.Add(md.CorLibTypes.Int32); + var methImplFlags = MethodImplAttributes.IL | MethodImplAttributes.Managed; + var methFlags = MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig | MethodAttributes.ReuseSlot; + MethodDef meth = new MethodDefUser($"ProxyMeth{rand.Next(0, int.MaxValue)}", MethodSig.CreateStatic(original.MethodSig.RetType, type.ToArray()), methImplFlags, methFlags) + { + Body = new CilBody() + }; + meth.Body.Variables.Add(new Local(md.CorLibTypes.Int32)); + meth.Body.Variables.Add(new Local(md.CorLibTypes.Int32)); + meth.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0)); + var lst = new List(); + var switchs = new Instruction(OpCodes.Switch); + meth.Body.Instructions.Add(switchs); + var brS = new Instruction(OpCodes.Br_S); + meth.Body.Instructions.Add(brS); + for (var i = 0; i < 5; i++) + { + for (var ia = 0; ia <= original.MethodSig.Params.Count - 1; ia++) + { + meth.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg, meth.Parameters[ia])); + if (ia == 0) + { + lst.Add(Instruction.Create(OpCodes.Ldarg, meth.Parameters[ia])); + } + } + var ldstr = Instruction.Create(OpCodes.Ldc_I4, i); + meth.Body.Instructions.Add(ldstr); + meth.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + } + + var ldnull = Instruction.Create(OpCodes.Ldnull); + meth.Body.Instructions.Add(ldnull); + meth.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + brS.Operand = ldnull; + switchs.Operand = lst; + return meth; + } + catch + { + return null; + } + } + + public static void Execute(ModuleDef module) + { + ScanMemberRef(module); + foreach (var type in module.GetTypes()) + { + if (type.IsGlobalModuleType) continue; + foreach (var method in type.Methods.ToArray()) + { + if (!method.HasBody || method.Name.Contains("ProxyMeth")) continue; + var instr = method.Body.Instructions; + for (var i = 0; i < instr.Count; i++) + { + if (method.Body.Instructions[i].OpCode != OpCodes.Call) continue; + try + { + var original = (MemberRef)method.Body.Instructions[i].Operand; + if (!original.HasThis) + { + var proxy = GenerateSwitch(original, module); + method.DeclaringType.Methods.Add(proxy); + instr[i].OpCode = OpCodes.Call; + instr[i].Operand = proxy; + var random = rand.Next(0, 5); + for (var b = 0; b < proxy.Body.Instructions.Count - 1; b++) + { + if (proxy.Body.Instructions[b].OpCode == OpCodes.Ldc_I4) + { + if (string.Compare(proxy.Body.Instructions[b].Operand.ToString(), random.ToString(), StringComparison.Ordinal) != 0) + { + proxy.Body.Instructions[b].OpCode = OpCodes.Call; + proxy.Body.Instructions[b].Operand = MemberRefList.Where(m => m.MethodSig.Params.Count == original.MethodSig.Params.Count).ToList().Random(); + } + else + { + proxy.Body.Instructions[b].OpCode = OpCodes.Call; + proxy.Body.Instructions[b].Operand = original; + } + } + } + + method.Body.Instructions.Insert(i, Instruction.CreateLdcI4(random)); + + /* MethodSig originalsignature = original.MethodSig; + var methImplFlags = MethodImplAttributes.IL | MethodImplAttributes.Managed; + var methFlags = MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig | MethodAttributes.ReuseSlot; + var meth1 = new MethodDefUser("ProxyMeth" + rand.Next(0, int.MaxValue).ToString(), + originalsignature, + methImplFlags, methFlags); + module.GlobalType.Methods.Add(meth1); + meth1.Body = new CilBody(); + for (int ia = 0; ia <= originalsignature.Params.Count - 1; ia++) + { + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg, meth1.Parameters[ia])); + } + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Call, original)); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + instr[i].OpCode = OpCodes.Call; + instr[i].Operand = meth1;*/ + } + } + catch + { + // ignored + } + } + } + } + } + } + + public static class EnumerableHelper + { + private static readonly Random R; + + static EnumerableHelper() + { + R = new Random(); + } + + public static TE Random(IEnumerable input) + { + var enumerable = input as TE[] ?? input.ToArray(); + return enumerable.ElementAt(R.Next(enumerable.Length)); + } + } + + public static class EnumerableExtensions + { + public static T Random(this IEnumerable input) + { + return EnumerableHelper.Random(input); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/ProxyString.cs b/AstroNet/Protections/ProxyString.cs new file mode 100644 index 0000000..db43187 --- /dev/null +++ b/AstroNet/Protections/ProxyString.cs @@ -0,0 +1,40 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using Astro_Renewed; + +namespace Astro_Renewed.Protections +{ + internal class ProxyString + { + public static void Execute(ModuleDef module) + { + foreach (var type in module.GetTypes()) + { + if (type.IsGlobalModuleType) continue; + foreach (var method in type.Methods) + { + if (!method.HasBody) continue; + var instr = method.Body.Instructions; + foreach (var t in instr) + { + if (t.OpCode != OpCodes.Ldstr) continue; + var methImplFlags = MethodImplAttributes.IL | MethodImplAttributes.Managed; + var methFlags = MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig | MethodAttributes.ReuseSlot; + var meth1 = new MethodDefUser(Services.RandomGenerator.randomMD5(), + MethodSig.CreateStatic(module.CorLibTypes.String), + methImplFlags, methFlags); + module.GlobalType.Methods.Add(meth1); + meth1.Body = new CilBody(); + meth1.Body.Variables.Add(new Local(module.CorLibTypes.String)); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, t.Operand.ToString())); + meth1.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + + t.OpCode = OpCodes.Call; + t.Operand = meth1; + } + } + } + Services.ConsoleLogger.Log("Processing \"String Proxy\" protection."); + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/RemoveNamespace.cs b/AstroNet/Protections/RemoveNamespace.cs new file mode 100644 index 0000000..5689ae6 --- /dev/null +++ b/AstroNet/Protections/RemoveNamespace.cs @@ -0,0 +1,17 @@ +using Astro_Renewed.Services; +using dnlib.DotNet; + +namespace Astro_Renewed.Protections +{ + class RemoveNamespace + { + public static void Execute(ModuleDefMD module) + { + foreach (TypeDef type in module.Types) + { + type.Namespace = ""; + } + Services.ConsoleLogger.Log("Processing \"Remove Namespace\" protection."); + } + } +} diff --git a/AstroNet/Protections/Rename.cs b/AstroNet/Protections/Rename.cs new file mode 100644 index 0000000..eb3bdb9 --- /dev/null +++ b/AstroNet/Protections/Rename.cs @@ -0,0 +1,65 @@ +using Astro_Renewed.Services; +using dnlib.DotNet; +using System.Collections.Generic; + +namespace Astro_Renewed.Protections +{ + class Rename + { + public static void Execute(ModuleDefMD module) + { + string namespaceCustom = RandomGenerator.randomMD5(); + + foreach (TypeDef type in module.Types) + { + if (!type.Name.Contains("") && !type.Name.Contains("AstroNet") && !type.IsGlobalModuleType && !type.IsRuntimeSpecialName && !type.IsSpecialName && !type.IsWindowsRuntime && !type.IsInterface) + { + type.Namespace = RandomGenerator.randomMD5(); + type.Name = RandomGenerator.randomMD5(); + + foreach (PropertyDef property in type.Properties) + { + property.Name = RandomGenerator.randomMD5(); + } + foreach (FieldDef fields in type.Fields) + { + fields.Name = RandomGenerator.randomMD5(); + } + foreach (EventDef eventdef in type.Events) + { + eventdef.Name = RandomGenerator.randomMD5(); + } + foreach (MethodDef method in type.Methods) + { + if (method.Name == "InitializeComponent") + { + method.Name = RandomGenerator.randomMD5(); + Program.VirtualizeMethods.Add(method.Name); + } + else + { + List a = new List(); + a.Add("Main"); + a.Add("Run"); + //a.Add("..ctor"); + //a.Add(".ctor"); + //a.Add("ctor"); + //a.Add("Main"); + //a.Add(""); + //a.Add("AstroNet"); + if (a.Contains(method.Name)) + { + if (true) + { + + } + method.Name = RandomGenerator.randomMD5(); + } + } + } + } + } + Services.ConsoleLogger.Log("Processing \"Methods Renamer\" protection."); + } + } +} diff --git a/AstroNet/Protections/StringEnc.cs b/AstroNet/Protections/StringEnc.cs new file mode 100644 index 0000000..bf826cb --- /dev/null +++ b/AstroNet/Protections/StringEnc.cs @@ -0,0 +1,200 @@ +using Astro_Renewed.Services; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Security.Cryptography; +using System.Text; +using Astro_Renewed.Services; + +namespace Astro_Renewed.Protections +{ + public static class StringEnc + { + internal class stub + { + public static string Decoder(string plainText) + { + var assembly = Assembly.GetExecutingAssembly(); + string resourceName = assembly.GetManifestResourceNames() + .Single(str => str.EndsWith("AstroNet.resources")); + + string result = ""; + + using (Stream stream = assembly.GetManifestResourceStream(resourceName)) + using (StreamReader reader = new StreamReader(stream)) + { + result = reader.ReadToEnd(); + } + return DecodeComplete(plainText, result); + } + + public static string DecodeComplete(string plainText, string result) + { + string line = plainText.Replace("AstroNet_", ""); + line = line.Replace(line.Substring(line.Length - 6, 6), ""); + int lineNum = Convert.ToInt32(line) / 1337; + + string[] readLines = result.Split('\n'); + + return Encoding.UTF8.GetString(Convert.FromBase64String(EncryptStr(readLines[lineNum - 1]))); + } + + private static string EncryptStr(string plainText) + { + return Decrypt(plainText, true); + } + + public static string Decrypt(string cipherString, bool useHashing) + { + byte[] keyArray; + byte[] toEncryptArray = Convert.FromBase64String(cipherString); + byte[] resultArray; + string key = string.Empty; + + //key = ConfigurationManager.AppSettings.Get("SecurityKey"); + key = "MAKV2SPBNI99212"; + + + if (useHashing) + { + MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); + keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key)); + hashmd5.Clear(); + } + else + { + keyArray = UTF8Encoding.UTF8.GetBytes(key); + } + + TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); + tdes.Key = keyArray; + tdes.Mode = CipherMode.ECB; + tdes.Padding = PaddingMode.PKCS7; + + + ICryptoTransform cTransform = tdes.CreateDecryptor(); + resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + + + tdes.Clear(); + + + return UTF8Encoding.UTF8.GetString(resultArray); + + } + } + + public static string Encrypt(string secureUserData, bool useHashing) + { + byte[] keyArray; + byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(secureUserData); + string key = string.Empty; + byte[] resultArray; + + // Get the key from Web.Config file + //key = ConfigurationManager.AppSettings.Get("EncKey"); + key = "MAKV2SPBNI99212"; + + + if (useHashing) + { + + MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); + keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key)); + hashmd5.Clear(); + + } + else + { + keyArray = UTF8Encoding.UTF8.GetBytes(key); + } + + TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); + tdes.Key = keyArray; + tdes.Mode = CipherMode.ECB; + tdes.Padding = PaddingMode.PKCS7; + + ICryptoTransform cTransform = tdes.CreateEncryptor(); + + resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + + tdes.Clear(); + + return Convert.ToBase64String(resultArray, 0, resultArray.Length); + } + + private static string EncryptStr(string plainText) + { + return Encrypt(plainText, true); + } + + private static int countEnc = 0; + public static List lsLines = new List(); + + public static void Execute(ModuleDef module) + { + InjectClass1(module); + foreach (var type in module.GetTypes()) + { + if (type.IsGlobalModuleType) continue; + foreach (var methodDef2 in type.Methods) + { + if (!methodDef2.HasBody || !methodDef2.Body.HasInstructions) continue; + if (methodDef2.Name.Contains("Decoder")) continue; + for (var i = 0; i < methodDef2.Body.Instructions.Count; i++) + { + if (methodDef2.Body.Instructions[i].OpCode != OpCodes.Ldstr) continue; + var plainText = methodDef2.Body.Instructions[i].Operand.ToString(); + countEnc++; + var operand = string.Concat("AstroNet_", countEnc * 1337) + new Random().Next(100000, 999999); //EncryptStr(plainText); + lsLines.Add(EncryptStr(Convert.ToBase64String(Encoding.UTF8.GetBytes(plainText)))); + methodDef2.Body.Instructions[i].Operand = operand; + methodDef2.Body.Instructions.Insert(i + 1, Instruction.Create(OpCodes.Call, InitMemory.Init)); + } + methodDef2.Body.SimplifyBranches(); + } + } + if (File.Exists($"{Path.GetTempPath()}AstroNet.resources")) + { File.Delete($"{Path.GetTempPath()}AstroNet.resources"); } + + File.WriteAllLines($"{Path.GetTempPath()}AstroNet.resources", lsLines); + var bytes = File.ReadAllBytes($"{Path.GetTempPath()}AstroNet.resources"); + //bytes = bytes; + + module.Resources.Add(new EmbeddedResource("AstroNet.resources", bytes, ManifestResourceAttributes.Public)); + File.Delete($"{Path.GetTempPath()}AstroNet.resources"); + Services.ConsoleLogger.Log("Processing \"String Encryption\" protection."); + } + + private static void InjectClass1(ModuleDef module) + { + var typeModule = ModuleDefMD.Load(typeof(stub).Module); + var typeDef = typeModule.ResolveTypeDef(MDToken.ToRID(typeof(stub).MetadataToken)); + var members = Inject_Helper.InjectHelper.Inject(typeDef, module.GlobalType, module); + InitMemory.Init = (MethodDef)members.Single(method => method.Name == "Decoder"); + InitMemory.Init2 = (MethodDef)members.Single(method => method.Name == "EncryptStr"); + InitMemory.Init3 = (MethodDef)members.Single(method => method.Name == "Decrypt"); + InitMemory.Init4 = (MethodDef)members.Single(method => method.Name == "DecodeComplete"); + + InitMemory.Init.Name = RandomGenerator.randomMD5(); + InitMemory.Init2.Name = RandomGenerator.randomMD5(); + InitMemory.Init3.Name = RandomGenerator.randomMD5(); + InitMemory.Init4.Name = RandomGenerator.randomMD5(); + + //Program.VirtualizeMethods.Add(InitMemory.Init.Name); + //Program.VirtualizeMethods.Add(InitMemory.Init2.Name); + Program.VirtualizeMethods.Add(InitMemory.Init3.Name); + Program.VirtualizeMethods.Add(InitMemory.Init4.Name); + foreach (var md in module.GlobalType.Methods) + { + if (md.Name != ".ctor") continue; + module.GlobalType.Remove(md); + break; + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Protections/Virtualization.cs b/AstroNet/Protections/Virtualization.cs new file mode 100644 index 0000000..bfaf3e8 --- /dev/null +++ b/AstroNet/Protections/Virtualization.cs @@ -0,0 +1,16 @@ +using dnlib.DotNet; +using System.Collections.Generic; +using KVM; + +namespace Astro_Renewed.Protections +{ + class Virtualization + { + public static void Execute(ModuleDefMD module, string outPath, List mList) + { + Services.ConsoleLogger.Log("Processing \"Virtualization\" protection."); + new KVMTask().Exceute(module, outPath, "", null, mList); + //Core.Protector.Protect(module); + } + } +} diff --git a/AstroNet/Services/ConsoleLogger.cs b/AstroNet/Services/ConsoleLogger.cs new file mode 100644 index 0000000..04d9925 --- /dev/null +++ b/AstroNet/Services/ConsoleLogger.cs @@ -0,0 +1,97 @@ +using System; + +namespace Astro_Renewed.Services +{ + class ConsoleLogger + { + + private static void PrintTime() + { + ConsoleColor oldColor = Console.ForegroundColor; + string time = DateTime.Now.ToString("HH:mm:ss"); + Console.ForegroundColor = ConsoleColor.Gray; + Console.Write("["); + Console.ForegroundColor = ConsoleColor.DarkCyan; + Console.Write(time); + Console.ForegroundColor = ConsoleColor.Gray; + Console.Write("]"); + Console.ForegroundColor = oldColor; + } + + public enum PrintMode + { + Info, + Protection, + Success, + Warning, + Error + } + + private static void PrintType(PrintMode mode) + { + ConsoleColor oldColor = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Gray; + Console.Write("["); + switch (mode) + { + case PrintMode.Info: + { + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.Write("i"); + break; + } + case PrintMode.Protection: + { + Console.ForegroundColor = ConsoleColor.Magenta; + Console.Write("*"); + break; + } + case PrintMode.Success: + { + Console.ForegroundColor = ConsoleColor.Green; + Console.Write("+"); + break; + } + case PrintMode.Warning: + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write("!"); + break; + } + case PrintMode.Error: + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Write("x"); + break; + } + default: break; + } + Console.ForegroundColor = ConsoleColor.Gray; + Console.Write("] "); + Console.ForegroundColor = oldColor; + } + + public static void Log(string msg, PrintMode mode = PrintMode.Protection) + { + PrintTime(); + PrintType(mode); + ConsoleColor oldColor = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Gray; + if (mode == PrintMode.Protection) + { + ConsoleColor oldColor2 = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.DarkGreen; + string[] splitt = msg.Split('"'); + Console.Write(splitt[0]); + Console.ForegroundColor = ConsoleColor.Magenta; + Console.Write("\"" + splitt[1] + "\""); + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.Write(splitt[2] + "\n"); + Console.ForegroundColor = oldColor2; + return; + } + Console.Write(msg + "\n"); + Console.ForegroundColor = oldColor; + } + } +} diff --git a/AstroNet/Services/InitMemory.cs b/AstroNet/Services/InitMemory.cs new file mode 100644 index 0000000..b4d4d17 --- /dev/null +++ b/AstroNet/Services/InitMemory.cs @@ -0,0 +1,12 @@ +using dnlib.DotNet; + +namespace Astro_Renewed.Services +{ + class InitMemory + { + public static MethodDef Init; + public static MethodDef Init2; + public static MethodDef Init3; + public static MethodDef Init4; + } +} diff --git a/AstroNet/Services/InjectHelper.cs b/AstroNet/Services/InjectHelper.cs new file mode 100644 index 0000000..f6ee945 --- /dev/null +++ b/AstroNet/Services/InjectHelper.cs @@ -0,0 +1,334 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Astro_Renewed.Services +{ + class Inject_Helper + { + ///

+ /// Provides methods to inject a into another module. + /// + public static class InjectHelper + { + /// + /// Clones the specified origin TypeDef. + /// + /// The origin TypeDef. + /// The cloned TypeDef. + static TypeDefUser Clone(TypeDef origin) + { + var ret = new TypeDefUser(origin.Namespace, origin.Name); + ret.Attributes = origin.Attributes; + + if (origin.ClassLayout != null) + ret.ClassLayout = new ClassLayoutUser(origin.ClassLayout.PackingSize, origin.ClassSize); + + foreach (GenericParam genericParam in origin.GenericParameters) + ret.GenericParameters.Add(new GenericParamUser(genericParam.Number, genericParam.Flags, "-")); + + return ret; + } + + /// + /// Clones the specified origin MethodDef. + /// + /// The origin MethodDef. + /// The cloned MethodDef. + static MethodDefUser Clone(MethodDef origin) + { + var ret = new MethodDefUser(origin.Name, null, origin.ImplAttributes, origin.Attributes); + + foreach (GenericParam genericParam in origin.GenericParameters) + ret.GenericParameters.Add(new GenericParamUser(genericParam.Number, genericParam.Flags, "-")); + + return ret; + } + + /// + /// Clones the specified origin FieldDef. + /// + /// The origin FieldDef. + /// The cloned FieldDef. + static FieldDefUser Clone(FieldDef origin) + { + var ret = new FieldDefUser(origin.Name, null, origin.Attributes); + return ret; + } + + /// + /// Populates the context mappings. + /// + /// The origin TypeDef. + /// The injection context. + /// The new TypeDef. + static TypeDef PopulateContext(TypeDef typeDef, InjectContext ctx) + { + TypeDef ret; + IDnlibDef existing; + if (!ctx.Map.TryGetValue(typeDef, out existing)) + { + ret = Clone(typeDef); + ctx.Map[typeDef] = ret; + } + else + ret = (TypeDef)existing; + + foreach (TypeDef nestedType in typeDef.NestedTypes) + ret.NestedTypes.Add(PopulateContext(nestedType, ctx)); + + foreach (MethodDef method in typeDef.Methods) + ret.Methods.Add((MethodDef)(ctx.Map[method] = Clone(method))); + + foreach (FieldDef field in typeDef.Fields) + ret.Fields.Add((FieldDef)(ctx.Map[field] = Clone(field))); + + return ret; + } + + /// + /// Copies the information from the origin type to injected type. + /// + /// The origin TypeDef. + /// The injection context. + static void CopyTypeDef(TypeDef typeDef, InjectContext ctx) + { + var newTypeDef = (TypeDef)ctx.Map[typeDef]; + + newTypeDef.BaseType = (ITypeDefOrRef)ctx.Importer.Import(typeDef.BaseType); + + foreach (InterfaceImpl iface in typeDef.Interfaces) + newTypeDef.Interfaces.Add(new InterfaceImplUser((ITypeDefOrRef)ctx.Importer.Import(iface.Interface))); + } + + /// + /// Copies the information from the origin method to injected method. + /// + /// The origin MethodDef. + /// The injection context. + static void CopyMethodDef(MethodDef methodDef, InjectContext ctx) + { + var newMethodDef = (MethodDef)ctx.Map[methodDef]; + + newMethodDef.Signature = ctx.Importer.Import(methodDef.Signature); + newMethodDef.Parameters.UpdateParameterTypes(); + + if (methodDef.ImplMap != null) + newMethodDef.ImplMap = new ImplMapUser(new ModuleRefUser(ctx.TargetModule, methodDef.ImplMap.Module.Name), methodDef.ImplMap.Name, methodDef.ImplMap.Attributes); + + foreach (CustomAttribute ca in methodDef.CustomAttributes) + newMethodDef.CustomAttributes.Add(new CustomAttribute((ICustomAttributeType)ctx.Importer.Import(ca.Constructor))); + + if (methodDef.HasBody) + { + newMethodDef.Body = new CilBody(methodDef.Body.InitLocals, new List(), new List(), new List()); + newMethodDef.Body.MaxStack = methodDef.Body.MaxStack; + + var bodyMap = new Dictionary(); + + foreach (Local local in methodDef.Body.Variables) + { + var newLocal = new Local(ctx.Importer.Import(local.Type)); + newMethodDef.Body.Variables.Add(newLocal); + newLocal.Name = local.Name; + newLocal.Attributes = local.Attributes; + + bodyMap[local] = newLocal; + } + + foreach (Instruction instr in methodDef.Body.Instructions) + { + var newInstr = new Instruction(instr.OpCode, instr.Operand); + newInstr.SequencePoint = instr.SequencePoint; + + if (newInstr.Operand is IType) + newInstr.Operand = ctx.Importer.Import((IType)newInstr.Operand); + + else if (newInstr.Operand is IMethod) + newInstr.Operand = ctx.Importer.Import((IMethod)newInstr.Operand); + + else if (newInstr.Operand is IField) + newInstr.Operand = ctx.Importer.Import((IField)newInstr.Operand); + + newMethodDef.Body.Instructions.Add(newInstr); + bodyMap[instr] = newInstr; + } + + foreach (Instruction instr in newMethodDef.Body.Instructions) + { + if (instr.Operand != null && bodyMap.ContainsKey(instr.Operand)) + instr.Operand = bodyMap[instr.Operand]; + + else if (instr.Operand is Instruction[]) + instr.Operand = ((Instruction[])instr.Operand).Select(target => (Instruction)bodyMap[target]).ToArray(); + } + + foreach (ExceptionHandler eh in methodDef.Body.ExceptionHandlers) + newMethodDef.Body.ExceptionHandlers.Add(new ExceptionHandler(eh.HandlerType) + { + CatchType = eh.CatchType == null ? null : (ITypeDefOrRef)ctx.Importer.Import(eh.CatchType), + TryStart = (Instruction)bodyMap[eh.TryStart], + TryEnd = (Instruction)bodyMap[eh.TryEnd], + HandlerStart = (Instruction)bodyMap[eh.HandlerStart], + HandlerEnd = (Instruction)bodyMap[eh.HandlerEnd], + FilterStart = eh.FilterStart == null ? null : (Instruction)bodyMap[eh.FilterStart] + }); + + newMethodDef.Body.SimplifyMacros(newMethodDef.Parameters); + } + } + + /// + /// Copies the information from the origin field to injected field. + /// + /// The origin FieldDef. + /// The injection context. + static void CopyFieldDef(FieldDef fieldDef, InjectContext ctx) + { + var newFieldDef = (FieldDef)ctx.Map[fieldDef]; + + newFieldDef.Signature = ctx.Importer.Import(fieldDef.Signature); + } + + /// + /// Copies the information to the injected definitions. + /// + /// The origin TypeDef. + /// The injection context. + /// if set to true, copy information of . + static void Copy(TypeDef typeDef, InjectContext ctx, bool copySelf) + { + if (copySelf) + CopyTypeDef(typeDef, ctx); + + foreach (TypeDef nestedType in typeDef.NestedTypes) + Copy(nestedType, ctx, true); + + foreach (MethodDef method in typeDef.Methods) + CopyMethodDef(method, ctx); + + foreach (FieldDef field in typeDef.Fields) + CopyFieldDef(field, ctx); + } + + /// + /// Injects the specified TypeDef to another module. + /// + /// The source TypeDef. + /// The target module. + /// The injected TypeDef. + public static TypeDef Inject(TypeDef typeDef, ModuleDef target) + { + var ctx = new InjectContext(typeDef.Module, target); + PopulateContext(typeDef, ctx); + Copy(typeDef, ctx, true); + return (TypeDef)ctx.Map[typeDef]; + } + + /// + /// Injects the specified MethodDef to another module. + /// + /// The source MethodDef. + /// The target module. + /// The injected MethodDef. + public static MethodDef Inject(MethodDef methodDef, ModuleDef target) + { + var ctx = new InjectContext(methodDef.Module, target); + ctx.Map[methodDef] = Clone(methodDef); + CopyMethodDef(methodDef, ctx); + return (MethodDef)ctx.Map[methodDef]; + } + + /// + /// Injects the members of specified TypeDef to another module. + /// + /// The source TypeDef. + /// The new type. + /// The target module. + /// Injected members. + public static IEnumerable Inject(TypeDef typeDef, TypeDef newType, ModuleDef target) + { + var ctx = new InjectContext(typeDef.Module, target); + ctx.Map[typeDef] = newType; + PopulateContext(typeDef, ctx); + Copy(typeDef, ctx, false); + return ctx.Map.Values.Except(new[] { newType }); + } + + /// + /// Context of the injection process. + /// + class InjectContext : ImportResolver + { + /// + /// The mapping of origin definitions to injected definitions. + /// + public readonly Dictionary Map = new Dictionary(); + + /// + /// The module which source type originated from. + /// + public readonly ModuleDef OriginModule; + + /// + /// The module which source type is being injected to. + /// + public readonly ModuleDef TargetModule; + + /// + /// The importer. + /// + readonly Importer importer; + + /// + /// Initializes a new instance of the class. + /// + /// The origin module. + /// The target module. + public InjectContext(ModuleDef module, ModuleDef target) + { + OriginModule = module; + TargetModule = target; + importer = new Importer(target, ImporterOptions.TryToUseTypeDefs); + importer.Resolver = this; + } + + /// + /// Gets the importer. + /// + /// The importer. + public Importer Importer + { + get { return importer; } + } + + /// + public override TypeDef Resolve(TypeDef typeDef) + { + if (Map.ContainsKey(typeDef)) + return (TypeDef)Map[typeDef]; + return null; + } + + /// + public override MethodDef Resolve(MethodDef methodDef) + { + if (Map.ContainsKey(methodDef)) + return (MethodDef)Map[methodDef]; + return null; + } + + /// + public override FieldDef Resolve(FieldDef fieldDef) + { + if (Map.ContainsKey(fieldDef)) + return (FieldDef)Map[fieldDef]; + return null; + } + } + } + } +} \ No newline at end of file diff --git a/AstroNet/Services/RandomGenerator.cs b/AstroNet/Services/RandomGenerator.cs new file mode 100644 index 0000000..92a4eec --- /dev/null +++ b/AstroNet/Services/RandomGenerator.cs @@ -0,0 +1,43 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace Astro_Renewed.Services +{ + class RandomGenerator + { + private static string ConvertStringtoMD5(string strword) + { + MD5 md5 = MD5.Create(); + byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strword); + byte[] hash = md5.ComputeHash(inputBytes); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hash.Length; i++) + { + sb.Append(hash[i].ToString("x2")); + } + return sb.ToString(); + } + + public static string randomMD5_disable() + { + var bytes = new byte[16]; + using (var rng = new RNGCryptoServiceProvider()) + { + rng.GetBytes(bytes); + } + return "{" + ConvertStringtoMD5(BitConverter.ToString(bytes)).ToLower() + "}"; + } + + private static Random random = new Random(); + + + public static string randomMD5() + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678903490"; + return new string(Enumerable.Repeat(chars, 9) + .Select(s => s[random.Next(s.Length)]).ToArray()); + } + } +} diff --git a/AstroNet/Services/WriterMemory.cs b/AstroNet/Services/WriterMemory.cs new file mode 100644 index 0000000..a039580 --- /dev/null +++ b/AstroNet/Services/WriterMemory.cs @@ -0,0 +1,11 @@ +using dnlib.DotNet; + +namespace Astro_Renewed.Services +{ + class WriterMemory + { + public static ModuleDef Init; + public static ModuleDef Init2; + public static ModuleDef Init3; + } +} diff --git a/AstroNet/astro.ico b/AstroNet/astro.ico new file mode 100644 index 0000000000000000000000000000000000000000..88321c7e2fd2712f5959927b8d0acfe78d4028be GIT binary patch literal 26773 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

dNp+A5iNx{)%1S>ZFrZ|W`4n+|5O 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 literal 0 HcmV?d00001 diff --git a/AstroNet/bin/Debug/KoiVM.Console.dll b/AstroNet/bin/Debug/KoiVM.Console.dll new file mode 100644 index 0000000000000000000000000000000000000000..c67f7ea46f6bf774a23d1f982c0f4deadd1589c1 GIT binary patch literal 12800 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 W>mT>EDfrF!?(_b*!|=yC`~L>&L1N?p literal 0 HcmV?d00001 diff --git a/AstroNet/bin/Debug/KoiVM.Console.pdb b/AstroNet/bin/Debug/KoiVM.Console.pdb new file mode 100644 index 0000000000000000000000000000000000000000..bf163247a6d35d7d93bec63487853f354fe2031b GIT binary patch literal 28160 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

qTM_me40HLu;zsbr8tW#?tl|HTjq^&XCPi( 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

GWa!v=?+2Ic-U&c4~<7eS3_zX_fPZg>4}B6f3v�SNE4> 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
  1. Yz14z zqhx7BX%xm=UrBfGBCPR3#oFO~Naz^W3QjGt&5xDA_e0^DL=E72qtL&b8KQLEaw}Vy zmoTT6m&6fz{>|FMVsZYiCHJ*hoWG)}#9s(ix*qer(o&~0uuD*_l~docrfqb3tBPr* zs~XLA*FvuGw^lX2f#@$v*P@pw@t32OUYlpG1M3+bIAp~0f%@y>Vf(x5Zk#cy>&g~J ze>QePA5vHTinY>vzOfgklXFB!6{{yXegzgpB*Gm%32IXgE zi8=is$84mIi_GHr>vp3w^zr$UgYvy~yye8FHL(-iQ!O6M7J==PSbwcC z%Rh=(V)5e3jLM*%ReNxg(ZWKJK;v&~t7{*pHSRi~gN3Nm(db3k3>xBTw6D^>o<`h) zsy&JsNQv80Y1uDErLYdFw&Wbu@~_=f$9ZC%hON&hSx-v+?Z#}jLTE}*lSwpl9nSPc zJKRfaH;KN#Oi!bdXpw7$c9`W+z{7rgF05Ax+t{_$>m&4%Xpgw|Pdz6}!-i{lwY7M6 z5{pkq4z?hcSiE^aVIAaO%KzRnT6;Q9yOBmVeNav*Cw}-x?TI<@pRlHIUUK3)V2iSa zoD=VXJrq-vcDEyX8)2g~w4Bb$QJQg4gx-S&J8x0m**hn`C|i4MPP|WDqqTt+rDfj| zeI)T+jaf?9l!u{xCGkxUD6tM6Y#E{N;ELaoX{hHp`Pa+ATWsvle>6hJCB&&cC%-YB zIC|dxiRe#+jm57=?^IgvG{Nanj52lYv)%l?`ifC;*GleCEpLemPT&${!}agxtNd~r zuAEuKU-9QzDvPebygL=7<s`twKMo4p*E3v@_e{>ZuwwF{kO6f&bT9Au*QYYjqsu z-#f#({lDpxI!C;VzE)dmgXdx;p2wN;x3tWrsX_~3AJmsRu#=dGoQ-fViBPF`BGgD+ zOFgA^km!04_PvG;seg*@Nk!)4bjIyfRi7b4GDG#35fGNEhHH#!S-LaurV z9k?k%*9qMU*HJ?2x<>F$9fzHcuv3M8hU+Y$2M}VBPz#i3xez`OOY4QE42{ssAncnl zOT8iV#ys6?MCsG@u-l;}_6X~fNwgQX*+Fp)$3nPT{kt9!j{U^>stfwY7l>I`dnI1& zmAIEE@oKNctGyDh_Da0kD{&7~;?-Vh*{?>Y!*Ww?^JhjIJO>3~^{H#r>Ha&--`XYS z%JzZ!WBWj<681PsY$+&B|G~6xgRu4JyT`QW)T89ZN@0yBT8FLnU`H=C9Jq_CmB~uI4oVHDEt11$~D0I!aUuu|$aHwX#Ax&{`FRxUcDYeo^3>ILGp7 zBZr8^OJLM0-IS@ZVD*DF$6Aygtbwn@gA#k)Cs-vp-B`Th`9^#?ty)Rfu32JQe-FWD z6zZ>t({)&*R9kb<=-WSxn)ET6k2OmDjdWTLt68v8U>ZfTtJ=P3u* zK|?9Wdza&^OK6?byUk52P{gR3)1O#>IYik1k|-A|F{hD4EzgVuw& zwZ~Hh#DXXK9q?2E6s4;DBGd|0kNEVcy|^yFiR9F(Q@rn85$Yt`Cu1m}mj)moGRH0& zVY_$!ohUw=!*3@IC+dO_i9O=s#;V2Q7uJf1Yv*|F?s~7FbNnb~LViXXmN#*{)xhl7 z1M%VPW)soXl9#s4@Pq_Zg$nk->@BW*r-M)0B6Rx!&0i9YM9c8rFYzRB5Y~_DB}B^{ zqjgTF)@c$o!)!KILNvQRLbnRdLawF=O?y?JMJG`@=swYY^Rdb|Yi5bI6n4p6p&{;? zinio&6rr{^5G@o}e%|w>P{+U@o|s=tv>aN5I*isk7!kT2#I+Wofq0^=vGiRWq1EEA zOKlyYSZzv}Yj3m+KMhKvt>bhSz=|^xzmOW|SbhTW=+3VXMQ9afhUX>b-mrK!3M~O` z721Y5_En*(=fbKNnhDx3bROt)p~JOse@N&A=x3pe;2J^ihUE_`BJ?QeG@;ojM>(N) zK~;seg3eWfzw?Ez05umH0lG|R5{NBWv>sCHCUhgh_7&;_*C9e{L8FBVgKibtix5+U z)`9L5`Wmitgsz45sL+#$Z#gKNZi5A|PUr!Uo)QmQs4Gb}{Sd4v*;EGh#)}fRxbQ-9BCKd0>;cDAQG+UZuOO@CR;55R8Hn6LiY(%^GA)n4-W z2DC7Z_h9NeZnlNJ<_n|2p2qBh=I|LU-Mfc8BMnD_UAzoBV0?6y__{y1I5lK#8S1_6X4lDdij| z?j@|{-#7Bx`SWuFJ)8S?t)E2i_qOxcFPvsNnbn-%Oqdg&a=tykyd^{D@hW~3A)9hA z8u?jPEdJ4j+Nu#c3#%mW4WbFw*M95+_=GBP=AYk%=y$1&GH3;*N&yw{XW#|s_*y-I z#FG|S;kwu5eR6G#oBU3R|M^yNex=0O#`|i`2~(`E^>NeviWPgLkSkedOg($pLA)-^*QYHZunlg)B&%JO8jg` ziC0M_UL}=yl~m$YQi)edC0-?!c$HM*RZ@vpNhMw-mH63?52$+Ms=St+R?}S)fjA4)ngtq$h2ZZj6QIGoiN@swZd5Um8vv{=sm)iumg>RJlxuhM&?Rm+JFpKY|euFiEi@%2tMoQ4N0T~54dGxN8l zkzom_hN;FVH>X=#exh|hkaQ?#Q22uKQ9;^)PcETqT`g|c9{-R{N z$_Rx|Zo_@D#T>3e*fagd)|r26QCNJ5edx#YF`AHrocJVIjNGrHbZau+Jdj-3{iZ0j zTdXTdl&*hHDJOn+5CSKuht0LyAzhC`e~Dr7GwHz{x#1;^+7&fAy_C_b>n*+qg47U8 z5^m;5uFhShcjU6^JJ^oA;v|-c&ybtLUo76YgAt$gsdll`#7(BP|0)u=Uh}2V99Sb7 zV!6{x9`iidnCd#o>7Bi%o#*~KW5rQ_{LEUZ0P?29=Y&dax|+r|h-yD$6;k>H<3p+Y z5~FK9jR78WmeUxgmz>6Wh=J=Y=1*~Mp)t?#oU-ks8lOrsg}pA(F7AvLSFUP$@gh-;bUZ-Z^B~jR_ zr`BZtHB`%M$nHVm9{dMpweWM7s<6$l`qk4Kipo<^oskaVe(ZPRYO@~RsCtTMla$SF zSVign&vcK2r=maFY}RfJ?)r(p^Ls_;4WU{s?D?OE6*oLc_9-F8n&em^XUZuNTk zw{>7MFl_IYnwnZNZzER?=oO4N9x37N*$6!kyNS=z)ZcsXmpIpP2!5)iH)@pz{e@dn zqOlF9#Fm>9+h$5^n<;I=`liGu6H0tCq4dgErt$7wwe6k;pLwXpZy6}@Nrw_!mP+S2 zeVAcdG0zKIk?L=R6Q5D2#%B~td`C$s>KdQ0sKzH9N~@j5bh8kA!lJHx!lE<^`x_} z8lR!4Kfe8>G`FWw`Cp8xVOCMsLzumlj$%$^!gHO=^w|mS_+A&GkG$vTdCBj^@azd1 zPQc3;@zW92`00oeKOJF8jE{GBtl=JQADnS}%)G0N#dF&d9haCJgjsJIh*dBZ!>j!q{d?=n`$F9rGZFI={Cfy zbRJSu+Tz;1NKLi68ES82)A28iu3coVBb=5aM;hXa1xh*^wdDMar6_V5ip(c!>_fKOmNw!*Uo@plM)LvN=Zhd+J;AZ(e$ zyzu?(a}gpIA6U_df2mtF{-tiFB*G{3siedbzA0euBqdQ2Mvtymr>3UXYdy)cttoha z72~6!}&yw(JytJ;*_R=_XN&AdOhO zK1P6!+RFk;rjjKi@^mDbnme6`aXAcWBop7BT@mM;=2s%#o!lgO`Dg&X`>VMcjrSac z{umAmUZ~`aT31oJ^J#0r{NfummT0G{RlBXB!y7}5PF<3F5=en#;6?qI7f?-q#SVAJ)M|Li`MEnNS@4YL!qU&^n>VJ7Am(@eKTuP~~ZO zIwDlW=|i-KY8|oG?t&}&${L#m+SbHxw@ZkyujMz&!v1Hy4!h4gBJ_d8S7>&GK9g8d z7e?r7(WamrIxbt{{7Pq}muC}gXuu`sx#sW|&PK#@s_LEaD)QE0AF z3n(!M?QSAE3$BS;e~kDll5RLIPaW}kLdD-WkI=N{5vnP%{L&h$u+RYz_p8eOjIT0% zz7S^$aIH-JP*=@`Za`h}oKu7EeU4lQyA=lMR2?qWheB1BoCk?>bl=m+G5zg~|z05uY- z3%W?C2SQvf^bq3fD)bDr0YYcNRv9Vu>E{ueAoS&D5xN@`r32fE<_axFh$lf2>fPPu z=l)1zjkvZ3y(BaN{&onBhPFrO7;?W~h~G#%B2;5BN-0zVL{m7mHP~CFf^a)y8*Cb( zzCB>m2yI1QQ>*3b0h)tss)f;*1=nnf1~yGLHFO$QRYPRc)6k-@XmjFYFVNXLv5(ij z7Ed%#@L`%dSe$Ev?fr;j{rdC$R` z`nr<9{)0uqHbXK!{~x{2kW81BiUce6?N0o)3SOs^>9fNcHd(%JSsnF~O#B6l`XKaC z^vviy5gKVtAv(TqSZIvL&Qhfidc4(^?wknS=`^XMx$>7i*cHz?FsnQ#^b}S) zwM8$R0v#hcTvIU5HP_Vz_ggUptQiSfosq;$`%d=?xEkeCB&0m{WFq?_S^Uxll z5?FOLmeJTlDCJzMcUZ8x26Iz{_->izbaJrkz`JFza@FqqVFbxZbc9|Qh&x4yIVawx za71=gSmh8i@2&8a@t~hx8J`@Cp3d6x_olZn%5=O{LeEiRTb|$Q)|uhBgy1(%e--*1_4k+1Gsr>8ojgMK zpgl4{xF_i|NH}lsEKo{Z!+B%uYHjl<@vXnI63c;SZ4L`({(s)(cY&=^MZy*bu@w}h zcVHi!E81tEhC=1w+ES<=sGZOxP)w*gsJBo<&~-v@Vip)F^de}y&^bA}Mq%u~W;vaY z7OW$6bu-TEbkufv-Of-xdmJ|(5jN)cHe>P8*!k-h9Wol?J6s4Gi`NP$nTlb)nuZX` z^h~zylapz}{k9UHf17Cyx?`0Tf4gz=#4B+!{qA)1MWO}bx&n2&LRRtVPV0SF{)1Ef z(;|TdfM0D4s5au`TaL-p%PDt<<)vwIgr1Nze&~jqltNXos%g3f*1<9mt-Wj2U3-6= zo{vHK?D*`tWf?fxEI@slB zQ@_S$Z?qd|E7Oyh9d+Fbckkgz!YYgzp1IKbG4JwT9Cx!p--$L0#HToV=R{{^`-)a9 zJ|Fg#o|i;W&q`(S+>a?rz0rsCdkSICu5b;}cBvQc*?WYzXYUu{p8bW?)u}xjcT?c{ zz4+sv{hRp9uV-KUAN;=NU7Y7u?^!Qi{DD#Y6QkdP)j2}LozA*i=i(@ZXB17kVqbyy z@YDmd#TgQ_?Zxvy_o25mmMlNh%JT2^Wl`FLI^MGA+hFF;q7Ii@h~p?1uLfCE94RR^ zxWwqvfTC0s=N4=&>FFS!hhfKt8lQ^sfqmZ>W~IHbOT%KX6^v;OQAx`2@6HnwPjSr7 zNvt6|O^K47*yLX?VXv!;{V$*KU@z_`S$qz1w$wA9gVdG${qq^^jWw}OONhQTU^fU2 z#onqD2zkaXL2c2euTaXS14p?9|N1^`x) z6*41r?W22$WLmd4A~(7d?QH(a9M6upC+>9n&1ON>>Ti9r1D;aoyt@Ul=nA&#GCLXL z^F%$ZI5qcKbj!W?iVVt@MYHb1{dS@Dps_-AW)j^l6u$?*)+cl&w14Z&!S@R zmm$<>22M_d<|ExILWSV(T%q1@Z78%At}TV?AZE6hvgmhcF`>T zx<4p%9CTDD74(x(b<`D2<2*M)YDI*KA%7)>x+2{QLZ89kIYPIg^N>C@Oo-WfC*LnW%57{DGN9pWbW?DBLaLYj3q|jpBM)C1F2$6mL9$@TSEL zwi8(d8*_`evcDbT8r~louu^Aqd@J#r2)!--Uff9Z9w^b4=O@OTzgV1a=_&C&K_$K? zs5JByb8YO@v!ZGBol-MQyScd0;xa}foa(_o(3l&~G2&;(s`Yu&=poNb3}->=%Fkhy z4h>U^_-P~d!)@`zQ)+`P-%o{p>8N!Op~lZ)K7baLFKQka*Hha=pGWbj749h@FKlIm zZP|djwbMOu11bcYn0LnwXgYefQa08=rEAYMt!{0jV#m$(ts$l@8f^6B)keFqC+1j^ ziEU9{HPmKR;x&M6nq=ZNK#A{E^0zgU>DplJPNw;-w4Wx^?tl{Qrtmu_;WuXN>r;un zq{2)*kwsm_;+wLJErW}8gSkG7nozAN>}e&gNhPjHrYP~-^Gf{YF4u1OY&J?=9>dNH{?uyWH{3!> zrmx??S^adbUEb$0;Upg=PXocm9&TUL;IIFb6jy#$US3?S55ZRZ1#619+MCLWIjDj7 zs)_4b)KJ~O35&CbATRi0+c?V$hvg7as&fxclO^oIQR<3wm1}L@m^B9LmbjJ}X#1_Y zr%+-nLlAaqoJ-j^h%cEcl(*XW4)w&Y$@F=k;eJjK0(RYKtPn^|dz0?Q_{^vSv{;w}!Ceb0Gje>mep4%C9$k2I8iK<>3Ix5Hm&@%PaP3;Qelu`6x`BQHt^ z&{|3l24P`?jkMaZ5zv4xuWO_6vkn@f0d;q+VybCLV4X7TTmMS%SCm6r-EoHXh zV)5&$6ZMgj_jGC;P?X+6|LZTguYVK1`V5Ma$}lDY0DTl!39YT3gt#N+q#N zP}+2dX}p_K?E(+Gd%bGdZ=$ZW#t$P0`VM8NZAPt4mVVF>HL3nW*H8;7j3w0a3laLu z&oxZ<6|^dkp2S`<7Hxjh-_{lPHFk}~Kfp@DgnvN}`<-l-a&cQWaGFhyeFS>QgQ!kCA2T=H|UInW|B6Sd1T2%eju#+B|x zu1;?AsN4sBRAMQ$49{^SM4Q*}6cDWtrCKd1IZ>iiLgvHFd%Vw2%!QNCYiY+Kd)Zh9| z%zc>Jc&yVq#9!`3cy2HB7fwVpS1;pc$Ooc5@ru>ttC-EWMA_JUsCAf3+n%!3zVuon zo?~_0-vW*6FPS!Ph|tG~FPUCjqVXkDr4r_Pmup{Us+JRvo~Qnzv=rq%BzYNE0Ka1_ zWZ%HSo6xhgEhDt?Ys+cP(RPY6<8_S>Zywaqc_Xnl!uY~F38gNx-J(6O&7?bb;&iZQ zVm}C5Id#Ce$Z;*PKrmAXBt6rMQX3?NADe+m)asQ7pNPt*88>S{IS_Me3; zwft{Cl?%pY#O>24O>d2-{|Jly$f5`pz`f*Ma|e{t9(x?25# zSxTwS2Gd4dp@gqV zvzrRyn)5tblP< z+g%T1_oS{ToQ~~PEtw+Qf^{L`w<@lwf!k=3?&3y9)tebrbo#TtX~&(W7BlVn(ngCS zMmsATHNvc?Y1DK&?5>+UmR%kTCfgvy`|fYCr@IfWr}0fHYLr{bXzrOtIpvLtpJkNe zIk?1WX;X8pSAo?GcumpXSra|>e$-!tcsIc(F?hCmv#u2w7nLE$sXc4kL4DpF__0S#3iT~rI%6nO0AqOaLRGI#wpinn$vAg zH#seITIw{!X}!}h&)=_4SZy42N^#dpP9>e*YG%3L?6lr#zte(Z=C7lN?d{ausgBba z53$s>IZhkB#uqysg=MKVxyH5YU0aR5rmkh3dOBU{)XHhU$MUn6V}Mgvr;$$6oNjgM z;^jEv+LKPRof>+&)tshb=F&VD^1M`WYT;DZX|RVK=hVh~-C*}O)~Q;mrEy<|QHe8* zel26v(?fK0I^tBsQ@hLQ4R`&`=`^P=eDq9lZMTQL*hlCDufHKqeVt}HRcmZH-Hf?T zYi*j-1gCMB_0)B}hb`lj;Z((`fm2PV0qpwicT1%ianroYp(N>-4(QL*6GJbsFle zwa)9giKkoITjna)27CVA^}L*iwM=tW)v1WnRo;uIczNr2d1tt50nba9nigLL@6T`h z{QRTS3D3bLwJby-&vQS|^I=c-UQc6!yYBPUUURDK@s)J?(OnNYP4V1!^m_iew&mrB zQ?Acu&79gf4fXcu>oGs&T0zf2ORxKGUZM;y5qXcj&8dv{x^>=%ntM*S1fw?mjzi+E z%`8TI6BVUYt6%`aGDZDnQk3HF;5Y8>X0791qPIYJ&f$B5m%HG$$gQkZoQgHR2>T1) z|2;JgJTbve_ydV0+$Hc+fR7~&w(1WFvHg5RXbaAZzm*WY7y40%_d>r5nJpisAye_y z{ChYrX7Olwi-`9At2l25<-`}DZ*VDfPscV$Hg&@IU<)OarmevH6*sVUoonsZtCmT> zAQt{ThbVP`zta$3G|$e9Eq#2Q3H!G*C0#ySiVE@BQgsRO*+ckhnh=+~q0m>C;a<4V zvkP>ef*T*$@9Ue?M+@51+=(6S3GdHcl^Rg<4{%D1unp+J^|&!2bomz3_^UapUHgN% z{`j0xTg0cXUEeo)sf*F?rOn?5t4*7QR?rYPp+_jC2mYc|W*F{GNIB{+wEf`cC#+xb zoOSKO$A1GBjVl=Rpx$^nFx_*o& zY)ZW_mniYqd6iys*Bp1{-zHMm=bkcZh5fl|CFfau$CHfSz1&=PZ#Ruk!8FACXBy31 zX8smoRH$pr>;8OE4=5E!UsK}eoJu__8r65=r<>}^PdAlb!2U>S8|GpqerHsP z$B`0`BPAY3N<5B~cpNG5I8x$qq{QP$iN}!=k0T`>M@l@7lz1E|@i<~i+_T?@cDq9Q z{rBDQT{@xB-hJ9CN>LiLM8BknuNXDfy?BHopsNrc-aP%*er+>( zmF?vI`F=^aX?O~Qu$|)N@Z68*(`@a!waI0lHtv&b^apF;>_I zMSBUZ^MrWST_hBph@1GJD%7Wqt-5Wl#>p5`!<(Z{qnz$?diEOgH^XVM)8^~(>urb` zHy4N67cjrP)W#sMsV|6YETCw@Z({OYFzvM4U1zQ_*H6pfMgVe=MPb> zwJ-;4PingVoR`pFej`4NIdt9S_19{VrSZLwD7LgTT{|hyk~eZy3v(a(W9wC2TREL| zQr&AS+}G0lg|Y0v#c~k#y87Ph!VpvS|a4S}bFx8L_Rbxhjjju2Psr*#Bnw zJT%eA%!IWT;zY0-WKj;D(`h+Uum@8L%MnsI0>Y8J-E(lB&zL1ASWZKKVQtvl6s1Oe z)gNx;ePh%bvp0X~N57==9@dXUyX1cCvUrV(#o6A_)rxnETnACQ7`sKKzuP17Tk*O_ zRN_6N67La}c&sY%9#M&FSBdwCN<6nK@g7l$_lQcoM^xfHq7v^Bm3WV+#Ct>~-XkjU z9#M(+h)TRiRN@&^iT8*~yhl{xIZ=uCh)TRiRN_6N67La}c#o*WdqgGPBP#J8QHl46 zO1wu@;yt1gk5wh!BP#J8QHl46O1wu@;yt1gk1{3RBP#J8QHl46O5E?2c#o*WdqgGP zBP#J8QHjTb67La}c#p`GXrB(pTBfI4>u<-cQ}nQ?-xtL@S$)jHGg}JxgfL_Bs+)N0 zo-HW0fw40|2z7n=C$o(1apHHxxS!%3YwTh^lMs`pYA?ojVw&O|ZP9MPiPyK17u)yX z4#6OzU&M95V54eI`-YnK>~%&bTzlKKGlrS#^+Sx>IZg8TK6QTuT}yF)-(PQGS2^A7 z^oobL*mKapg>pK zb}W8NDt_hZ9+}}XjV_0UqS_A_p-SHs!LK}tzj2uBl>UPiLTP+mqoz&Gb@WuDeHhc~ z?=6p|xch7Sw1sWuTFEris=LN_RWz25Jid25zBAq5E$b}o<*rro`0Ba#k%x`C)(LBw zrm?_F)Y4tse``5-?IoknJTDKwYT7rh)%nx3ao-qqc+=9@g*i-9yUkPU;I&cK^SpkO zg`MDKtLCnQx|!>J=NS$1RxRPJ+P18@uBu`*(nBou+Gy)x>$-LRM}aU3=DPhKC^cx72g6*wbz4sXgx@ zN_vQAezY{|d7Bs8XRTGo>wc)W+tRk?I^rv%7d)0`9?KCQGb6Lj-=ZUy+JA7Wp=H}! z#HbQ>)~X#o!|1OjMx!n=ddamCUZSKVbDin&on6AT%RRozkEOEbYMzIfkzwh+ z-O+Nj!dri$bGqZGr8W{L9h&a>zZ;G69-HhV{>U;5al=8Q zGykv*~t)I)sisVzBT{tEk=@_?r?#rt0$?>Q;nb6S+Ou#bCRyUVqoT&v{$uZy?& zV2`<_$NZ)D>`ETX9UjXV*FJTvsK@-3_k(rbW8d%|TgH3r$KGS#YGS!>qR(UiW>vnQM1ny9avjtTfMDHw7)Dwh!Cw`t8($_cFCxi(8bS zY}#KHcTI)9a~f8~w9QW4oHDb_wS|Xh?Ak`xs=7A8!wz(9wre-LHp|0a;o2bAsyXfV zu*+PV=yb1#ZSDTf4Jh&UcHPS(R1_r-Z(!@Q=&5nm_?tSq+u?8OC|!Izb|Vs^+uac= zE!4P?-9v7?z|M>LJz=ihWIFPOy*X6>X8eCTYah9`%js+M4Rx*lw7z!&f6owA@NHgy3lNtlHdDG_IsAe)Cp%dwc#2iewJS!6#hm_c*_>g?Vi;7 z!*j7wdM7&k;wNhRJKJC0i&*s8*rK;=2gz;3_C4AMJ4ij>ux}jUIoNFbCg3N#aZ3O> zh{b2rv#@Out|c^_@sF^uE8F8KylAr;o|+o(VKucd-S8VsmV*eDL*LLn>{GjJH(Lw) z)pm$E>~%^0)(4&~&cT}kaK)1ql#<_S&hJ}Icn@!_#+*cd-DH$DRw+vMi)=aZD{=pY zpI~Lv9*l~Ch!4LmkFhXBXpPgE7(J>La!Nu7)kdHv4o8SgT5uu0(=BxF_4?E@lPaJ$ zahvN|J*SpMFQG^9>XJo+RubKY5LxubU)qPV=!{iFcZfFpC|=AKO2V4Q)PM^2!+C*F zDJR~waSv-iWw1gh@fxbc{aK0aNhP)?mDrwCVtZ1FEe|EOJe1h-P-4qNiRXJIp6``- zzE|S;UWx5fCALbHc+FE{`$dVZ7A0OGl-PbzVjEM5?N}wYW0lyBRbo3# zuEhIuCEkH6@g7@=chO3`w^!obyAtoum3RlP#Ot{d+u2HND=V?Zt;ANd65HNNY(Fcp z6|Tf~yAs>uN^FlSu|2ND_KOl*K}uhGYHS6m##WFLTR}=}1u5~_h!R^ZN^Aow@g7l$ z_lQbtMJllssl;a}N^IpSv4x_<_M{TqlS*t)DzQzi#I~{$@As8>zpupmeI?%SEAj4F ziFe0Jy#H0={jUw-HixTfxl-OcaVk=UK&nT4mWI~D0Bb4|QLW$2Al=yT(iO&?2_#{Dz&q0*_&-qSxS7mrNp~RCEk%L@i~nWpWP_&IhPWjUn%h^lMIh3mH13hiBAHR_#{w?&oY#FAFsq`OG8{p3wc)UW!DasGwoe>U5PeQe@Pz8 zTo19@X_1Hc&SN>~+A|)@R?qVe&*@I5;U3>T9`aLey2g$S>9Km8!l>9W(IdCDEQZ8{euE%EXv{Txb%Wy{T)bY~BCXi=0)% zv=Y!XmSdO?)L(zZvP{ArK-g763$pN*z0m$jh(%~jdAunvv;(Pa0qJw>2C{SDUEsIa zk!8sj{dxD4L_IJ!?FU6^BW8>5P=~m!j=syg^28nFCtGnJ4F2#%xlQK!p=;OWsFqCE z;9HX%3%*bj++(IM2SY9~Czmrl3UGuK5J6`a$Y_-=$%O08p* zf|gdTK0+|%t&Q0j*Z4AJP#Y2A-`3_|TS}(J0pa(lP%pD4u)o_-FFVji2!Wo+zt0q* zhq2e-ShObh!8KW0Ms6ZV?e0HG%Od+GLKeMC$qNO9@_vP9$D%b32wx)M@=9tPv*zV|tYBJyPoli)x*PN@!v1qk zwO&q$zx-0;a{S+lCBO0}=Ffhu4`1e|F5-C zVjB7NjWFH0sAnGg5#o`ob;{{#o!*1m)tcmb*1Yt^3aeVlv(4YhE6M57!%nXIGNOHo z_KnHRx*}LfaKpt@`#%wjrh9T;o|0L#|6^K?Wa<-;_UyCr8F?qif;>;fiYlu?4<}wP zHD>nMMVKwF4zTS7PQd!)a(6)f3_sJ6snU=A&JZkJd6Dt<^~yzPE`z(~A?? zQdo|AM$=JpO}E`i{#47!M~mg7bvs#0IC4#K%hB)T{K;B-T^^0^B62TICcdf2yW>b#iawU%kX>JldD-lDr|xiGA?jgcyk&gzLHHO4G0}ASKiF@8ZjAGLHT(-JAY4 z77L*&#`DZR-Kf;EV^ukzLSJ+r?${<66MYFRB5e~`+?e+Y|HceOv&^v z`lP99)k^M#~zD7Jg zLSMq4hB)SQLc;Re^SjW=D@o-3lhfrlU$}?qQz)fQYxJ2Re$8Vpp2H$U7EQsqt z@O>$)ba*=?pu9ah4I%Q*SNsc15xT1czKlGH>FzT~e*G^(5|%x0zpAX}(CtC&irN+PfgtxNs#7Sf36}AFmjuL;liht!KB$Q^YzNZvEH!YZO zYurNo@9~#KeBYZ#XcmoIWj*5cVDFqvb6xvtrMZ@H*V%Z&tM5mBaHEz@-!kA|+svYR zee8GQZdibCgi3k&8$JBHkx}Xetvwbk*pnI3AT4No={yCXecwTmU zUN*Z{akb^IwbQ5W`lr+7NSEJSYd~|e@Vh9;K`DBoAbvwys9h1IWO}R_e%T9JGCc%Z zC#%K=^pY!~Y1m#8;$xie_7!?Q6Yp9|h?4h4=uYhFBXr?4B)>|Bn*=@W$v1!dn187* znYQ-PT1%GsnZNItOsn6pa`gCGT{X3vC5^QONPhdF6m3Mh4~RAw=`I$kh5W4-Du}+j zL#Q40Bp(P}5heOssBvYYzl6%cR?d8Y>)>P5MrEN3iRe6`%CHw&2`w&al!m&>741^c zAfZC2HU8E%VnJT+5xOG@r%^)F;cpozi}7d>c^F+}7peX%{`vMI`yJCzIz7%{1?pr`hrn{fElb!c5R{57A!e0{2 zqC=Ny{<4VQPtiGc=@nL@k!!U7<*nWP<~9D6yS($-Z&JI>(f@eVHlVai;A6(At(9MV z{9AedW>zka__Rly0n+hXPKd`Zle$(F?NA|{%Y%~rZc4Juv3&BW{_2ar3Fue+C4HQs zEYq(ICezxbc)wQ0<#QSMl{;}=5zK#48rB`RK%hlvEoPO$w=u;r!znGj-RL^k76cml z{bhLT9AU#57+-Bi-Sd|>vuN!uZ4b>~clawsQIw;Pgs{Cq7UdSz*3!1jdw;{{&V(J% z{Y^1y5lbw-5hsvJCF>~ZxhVJ3So{(AyI%aYuWNMZe5FKx-)0ky5`WjiRjEl6qZ60~ zSxXGTIT-6XP~sdgCHmtW+$#P!2TGg+rbK_7gWJU)=Rk>bpu{;~!d)Mn@7|dwEbj;J zk+74yW9AZ?f_}^N&u?w%iM6ihysuDtJh*KWrCFFac>flq?j>y}7d>BlL^8!-zsx`y z$&}{W&0pz!fN!D0`rU&er|?)@^H27YB)^%wQNR5H!M>aue@hxp`88_C-qhK+#n zkW2@i&N`vrr%9$Vu%$T9$<%MXg-HIvw3I(AzAH=UEh(*WP9qkdjn!+8)YUfBxYDB1 zM(dnjbBZ@q*YL}IS=4;AS`S(BOUgR4j>2;_UUib`Kb5dnT+hU|<5rN4g)cF~m7;f0 zvmby^Lj241j1?oGEc&3ImMDw%9@Y|dtcXR8CZGA*RruZmC_-IMQF@CqOMcgW0ZND8 zbW$ay##B5{5#>4!MM+H~v{aOds-%pCpWGT8YHFa|0i~ZPGXf=!R$@N|XkMU9hr)ge z&|+02hpP~CL3%zxc?Jr8_bfr#1SN%1u%@G2DYNhf9LHRYG6H2O6ppzVl@62}v(-;= ziU!JEP}om#svaoWID_c}C4=e)N=qoiL}?Nz!va5KSNkIIm>G>KZ763K5+NKWEW3fifQ>>?|lz8Z64>l-~0(gF~rIBLgK4h1;|;-6Bd@_9`?@ zlx;*`qCGM5R;2|&sD)UQry=#Kv@}pEEH>rYK*`9#N{`-Ol{N+nr>^mAS4C>9ki@eu zLCJuUMTbS1m2%(H_*+8^Kvu9d>$!W>1r8{mmr(un{#( zP-5`Yn7St@y`VIu@uGYlIc+14etdhEri-#gl)_1@%n?P~o&7YYM?~3{V)_Cn&c= zX-BWZM(1(CqlxpJLqCc#S!Tcc;3tR9tj>NWQhLn@&4tp528*(VPTNStW$!{;M43SA z3n3l&$)$prPi!{6wJ9vXMnymSkn4Db@*%e z@_RD&e6(DYi799NsJ*T)Z3z6-#r+Q+xqaz{Ksiwerv(z~_dua!y!{P7{itb8PHZAA z`hmpH0O}~p1X>P-{S2hlqJ%x+I(jZa;rp`J(E(9zlkt9L3M@KGsl_pW9(fGqdIf%l zP-{^p(BxyP45fPmKXq|;j?)@OZv}qNLAhADfzCNsZ;ODN}@e6{G#!w1u zLoP+63ci&K-1$Ln}##7B~ zj(Gw-iX5_XD|HZMGR=gY&^ehXPFIQYNo4*N_+Auz$EmL<6X{umx;&kgk%6Dl2sJ|d zOb{h(uQ=V6pm2M|>45}g9nzXW3lo$GTJUx{D9QwChEnVug73}H?+Hp9__>p^>vAb3 zryM-0*2Pq68YtZBR%1<^N{^``edD%@yozkg6Y6eyDCWDo{%7z?=c)0g4C81Fvuhq8apKpgatP`^F6FTwmk)yr-^cGihO<>_j}% z;E3TYf7=RO20sV{<*53RQmFD{f|4PA{t!iH+D}kFv#9WS9MLSAw-N8fBie_km?#rG zo`>ihQ6|%!C>O{45cLU^2VJ>0P?o#0BT$}qg;T<)DVo^<^9n}#Ln=Ud^YjSyI7#{W z6eSJo7h7>*sBstPRW_ZXta%mB`;cB3ihtknWTow;d6mPM9$%c97;4G0Y9EI2+ z7hxN3KS`;GdE?~T_!Ab<$x543{A8`m>*t+uc~f69IAJY&(EQrfiiyu zPP!2D9O@q^{m_3nKXYhkpv-BdJ!%e(4wN^ctju9QaaAPGoWnU3!9J18b=w-Pjd_%= ziu;*I{Q^ISmJof4Q1fX>psbv%Ywmm+6)0A&`E*O5+;YF>a6U~6lzO*mTJvdopv-P$ z%FICF8v9bxTBwTWXFkIKS*hWG^%gjz^V0_7sa{G%urtK#u2q$fq0 zK!f1t7x;OEN;Kk_KTow;;xQ@{C^kzxMwJ4^W{JnBdZ5@W@fg(&6q_X;qsD<^v&3W6 zGEi)mc#PTvip>&_(G`JWv&8?$*PX!mRQ>-0zuWoTd$LW8l6)me){=xQg%pJl2~pOF z7L|$!!}z33F?QKA8QB>-S*Ib{ifk!MOx7rhMEzgybKd83Z~Y#R|2!VQU-kUH&$;K^ zLLb!IWGL(Sd&;xE0JN%WHGHohBcSPv=SLs7K>>mGORT$rj^LBHnW&kBE$Nc#k3L`)*cqq zN@Q4vSxhUDVVz_#twe_P3yWzbGOQ~srj^LB{$Vk#M26*KRgTUL(@JDmNlNrs!X0N> z8CIEEI>wwonN}qhbN*yn)mhB>lWEmqG3QUF)sV%UKbclD7IXe&TCG{k`IBjNU@_-U zrq!LroIjaXPZo3jWLj^snDZyo>c?WvpG<2Ai#dNXt>G-@{K>RNvzYTI)0)I$&Yw(c zCW|?LGOf8R=KRUDvRKUdlWDDCG3QUFwVB17Kbh9oEav>lwDz!=^C#2#p2eI$nbuD% z=KRUD&a#;EC)2vbV$PpT>n|2_{$yHiZGGI$`IBkoVKL`Vrd5c=oIjaXF(u*olWCQC zgz||8b7twaf;mnpU<-9Sk+l>+O1o^IaVDO(_7848nV2LmY;fuIaV_k>I<~A zX2}|=+uk`=2bMwHch9l9v%HTO8Wqg3da<-bjFvturjMIr4bqZmY3EoK>QKGX)mlnE zTq*PDKk=6%nv}(=5(FKa`pXe-;~ru$$O0qzD(%&?wuK3)@cMt{RHoizVa%g7@cu0F z31u6~T>f9uU_5?f=wDJEV}P3f61y|jH~uBbkSG5o_guhA1!R#ap`dlhR{uv{fGqx3 z%uA50e+kXsm;Os=J#%?Nj-l70k#IutQBOi6^W|2zIutg}YW*1AC`Hc8twBmgTd!gC zH3+iWI;A9C$p?@xtY&p7Rl3#bPTMNo1m85XS}Pf6b*PBdaKvn~xLrZXHbAynPCW`6XRR$^Df!x>Z^V*h-KJ%`)thDC!&-J&^I5*) zn4MOxl3Z!dja}9sEau$UW!YHSq!!zp8@sIhEau$UW!=tV&W&AG85VPH?6MwYG3UlE zt2v7~?z^luEaq(4Wp!sUXUi^Yo)Ue%Z^7Q!Z6#yQK=VtplC#IEqa@vW2Iu^@h}mQH zRx(6gP2WTIT8EYBe2zo*TR%r62{|6LevQZ}#2m6*oD*nUR6ds=KUxJMaszVAx;-M^ zc#QU}dm{1}T7X=uazyeX=4Y#RL<&JpThBz~e~|N5$B2}IT(n+}NIA%F*4BtT0Que8 z6Oo4?SF9hDOU)Jb|&{cWE z`ZOYRRsL-)i3nYlmc2pAF?$PNm6m-%i!8%erDX?bbLl8QhPLHl)WWhaD@iZ%4b~;L zbt1{zP{*`!@O#eKx@AA1Bp#S^)v}wjm~+*#+py5N`k2bOi; z5#!jiBk~NywXd?6z3SPep46$#UKMr|CF!b7cpj-@b~}zq-lhALz&@a4ob@c`uw4)n z*cUlfmo-M}G*UUM64DtJ*iDsS-S{m$4TMzE?h=tVAbIV#S(t2qbyB}TGoemQK9wud&5V*bp< z`XS^NyA})Gt(XQWV)tfA-)mX3A-CIAo}yIx`dSRR!>+F+tXBzpT|}r}ciH<{Oug>0 zPq3JJm9c}Sx;&;{W$ijFre5Xj*(|1B` zK&sn)S?H?V0I6ZWuOvsUY;T3sw8yg)+JK7$C97?(QleW(YW-^4n<7GMO%L1KmBfRZ zS-L!R?7b{!78p6qV(L}LKFjhm&yMTZmstLU&>gxuc9EyCNsQUjitBvp+V`+bgiuUf z`$?ATy!Co^8!hT8*o}JCv->JZv0mJ$>-Cu3Pf5CU6M9c-B_6ZiXG!6n`Z0S13-#R; z^SC{ZB`?Q3julcWVY*duweH^=*z{BhwFy;mbZ8$ov{$mcA4k89@-(z_BXSV(qkK&#bja!=8BUo;!irG41n%U!7 z?!@(eRmpS~x>9Jpu9>}`<*^c$bzQ|AWua?_MyJi}+gj=}e^fx<3utDSVxg;vM#9bP z4oZetPb6|qV=0)(XC+I%M5<$)Pb%7$LXz@1$3j;ntxz?y%RHmEPFE!@12(g}u+UZc zKb%X=?CC83bj6)y74tny{cDzWlajoxbUt+DKAMkGz05*wW)fnW+uI`&zX^AI?CQ_z zR1{MkHEm`0VtEj?xD~0MwX3w&G1a+Vt?ia9^C162Ol!MW8y&L{LU&l&*dtl);8bnw zLoDMHF~?alf7T=OHulAc+=ZOm*cIC9oadd??M7R>7t0ZpndUof?J+E+Z{TSmq-tv) zVyVVCKWCp}84jVGpR=ENPUl<(LVK*8-GznPx=M&?Z|AUl=Hls6?6DW@ok~(HyN=%a z3-(Elu}fheBGn6a;dVM_l1CsN?E53q5Yox+7?Gxs&h~o|X@q0Z)t()Z)`)qLE=2t0 z>jK;AX*Y`G z(+%>9-8mw!L0+@_MTD;R*X=P%QdMjG4r1Q4zf_VVzeH^YL*BNxupD7|$J9a;+Mrvu zKK55SAJzKN|J=vkt0Wu|^|8I@siwMj_y9TgvCAn*x1Psri{xFqo|2rPFs^%QN&4H5 zv1D8}(vW5QMk9?_Xs^PDIDAD~pJ;U&xJzU3FLy-^FVt`Fg zjnGK%AW~6z2G}b(W-iK;jxrChgBK_!$0~+0--Vn9+5K6lWuxnBi2Vi259e{6B4&u4 z&2k*IpsPETHc0shGirMOUqYjc4-;ZW7au3&wi0^OG$J8pbb&`?)nAS0t0OWSGR^)`r%H^mr`u~`Ifr6$UTg1Bslrj^TKjtz)7GuEPq3J_WvyL|=1Lfg znzrQ&ySWm5Olj=5&hD-x+p@paSLJ$pf=-nfL$0@HvzQiXqrF1O5R0xj8nbP*Hz*lx zrDfuGYq7^R*~L23)<;`aPiV=uCo4&}R-gsAh^sQkre}<)1)!YiDT^)k6(vIgvr4no z_PS8a5X-FOY_%sVNwJPSuFJgDu7#@zEk@$(-D*FjB-~?L?N%&ik8QP|SEBdEc9eOm zJxEDdudnS7l;~?`FJiXaGj%?R{j-h zVySn;2z|jEdo>spv#l%0*>!5NWI%2xsn4ml6vX!g^J6sZG-lZY@g|aVVOfS1;5-oF zyv&jfxmn3uO5(xGKjT*pAu;DYmUkh=m5gBdyZ}~-A-*%2^P!dY@=7vT20`vuGM{C@ zIvo=@%UC{yP)y*gW0~I#BSwgH=$rRgF}1&i*!VZ;oZ^_m*m^w`bCKotnR>J=ovSR5 zU&%P@PK<&taNC~ImYhgYcAtjyG5!nGL<*Zc_w+^F~pewGlvyJ5}u2U^PC`qwy z$-pW*Qk8bBUTQzv>e*DtJx=|IoPv~f-d7U0X!QOoq?|J@B7Z_EII~&i?M3VO3Eug4 zj=oMg$E`PWunqvZ&&hs+B*l6Pax0{=Q~ymZ{UF654>)dbk{r9?X4FYZ0VT)mPFNwR z1gYvIvlMHIH)|l(ohmF3ZP!x6slzf5<0yd~YdQ5$OghnBCR2hI=$Yan(CapLmD^}BJvuf zp;Pj0ipiDpF`A?P>j|fVl5ESg#!oo?SxhVXgtLLgw3$yhmENIzvMtlrJ>d*gl4F_u z{DiYeNs4th_B^$Rjh)MVC{?=k+-H~>qdbkB?tQhKC}&$kAx)iO?`k<-08i~fS~wXj zw{O5(V33y1iGCELYdRg$%30Q5rAmwsTRYz=NwMP!mI_H#(ww}lSIRNSA#0S#0##zrV#5YAC-JQ`a#aCL^DacFCbe5bU z7^OgZI4f8x;62s9Aw8Y1Sn@%{B)oOv>|@z^9oHaYUU7b6d43SyI6%y+&NY^eGw?-Z z$ZO8cgLHZRK+9Gd(#t8%^6=M|RT1*KQ-x*HF3YL{dBfSjLT^Y@OmFA66rIm2NL35+ zmJ=HsN+U=grx;7>G4!yIeoo_vP^tk=YD6eiinErbTqEp1NUB4>O-=i-&kv{*WT=zI z((E{%+l9oPLa7v!jyK!140FmT8E0KUObTK?bXu|`K|X{GcLuT4hKz=!IrCT=oWOU= zARjpgSk@oG+pmz19dD>E&xOkP&Ix3MQ;B6aWCdiT(~jjmi?hIqO1@aYSl(Up2 z=_kCE2^sAiW${kpts}@7CvRMD>kv|%fQ)q>WO);N^*m&pQ-`JTV$1piGTzDizE0J6 zAO1NRV<4vs%UYx&`NTQO^4(sHm>`p!yu);=bi|NMb{eug@*R3t$P_1oWfo#craDO< zP^!_^jnlSuJ7k*kx{`4gozJBp)14tKbUxn?nc<9OS&NwJkWZcIEUob@@gtC#&IXnu z-=m#_eCAjm>TS`v`ZQ#gb9uNf^M+$+42KR z(D&_33~lQ>=U_x=TZf#h5ut4zb&92jsc2h2J7rkPRMho4>(q@1ZR;0@zGFk%q8QrN zZ%(g>(6+8PBO*fEy5VF+gtq0m>sj`%*YyhA0}-KZ<#EqPgtk?{^+)NgQ!3h4vRgVL zw5_5py$w$#q!`-Poo*|ZJ-n^EU3&kWVn}FPW!%(=(6%bLQzJs#y5IdGBDAe)?y-o_ zwjOrr&2`F|TDC2adhQh#YR5?GyWVIWL$U|*xLYeC$01L+Z?NR=hP@7HGN^tNW@!e#n`mhx<0m0W6w619{mU$uj;q)Cuy6yO3or$Gqxp zWBCCs_Vb8&&E3y(4J|-7NH6yU%UMV-$m{N}EEUm;_JzFR{>`%F2-f)_Z@PKL=`tTj z8$KM;+bzPf2{H!qmP^lHQN3P9K2soXyOmk;L1sbTaUWq3Xw?@&`nZi*{zS}5NME-N z%MQp!$h+=~Eams) zToxLWkPLFyvdltnLz3d|V5z|^?O^vLOY$K+M}wFlEF|wvd%zK-NNIwOnS<) zEXHs=!8L`U9Yg*JDmh0G7 z-0h>qqBr>5srZ7eOLwp6shDml_@xfW2X12}ajWhw-1UGAcWER^G4uvsDagledGwgk zmB|rqQzh}>WOKBI$YF&0EDPN&r*Y;8w}X;gY1Vc|y4_jK+RjM#br!R>lkWCqF>5>N z?qC+Pax%)LkqPP-l*9fhj}ne@X=FlUezTG@+MUE=R&qwW87yWcXN)_K#jNCvahI`} zHJPz4jZ7$KvnDgvjiJq<8JStT80!{^2(4X=cWWvM*DfZy4Oz_E#YC5SXUf^EU3}uU zXEAFRpSV3)%-Y2yw=auXyO`vD#A4PiCcBeZ%-Y3dcMi+u68dbJ?5<)lYZsHMKOmkmnF>4po-GMA-?P9t+n#HVL%y2VU%-Y2aca@TG z4m-o8RtRUEy1tU|Z!_H85uv%~r*3bYjV6ZXr!(C$(@1g>^W_Y;l9F)6HN$;`#jLny zxD8m$ife}3jK!?De&)7hagOK}ywBWcS!(}iq%BLvBCH&sY@fO9S>Btj=kK4nU0KX^ z`kDI*i@8oebBD5+>vWd;5sSG_XSw58%ypXSPE`_Kr z`nkJ{#aySKy9boSgGxNpoZ}v4c?d!?);aEJPG#0b=eqwW$+pcLf38~ydx6d|vo1Q< zy^F=Hi_UfLVKM8XbKPnzW?giy+eAsYE;`rk$T6lRnd`o!Bp&RTsrUR`_hXJRZOdGD zrIN61nd@$g2(>Nq-SeEvtcxymud$f6Wufb#ccFTjwq=o9fW@>ei`@UQn6_oHTb{+V zEsNbpSWMfp#BIW2+Lk45I~LQnEOC3Xn6_n!`!0)VTb8&Vu$Z=Gi93PCv@J{AOcv9& zEOA$|n6_n!o5Nz-mMnKai)mZ3+>-eab1S>_gIF>T8-_bwLG zwk&t=XEANda`!P7)3&T|Td|n7Wrf>QN!TW=aNkrCuA!}P`zZf8#qVMJ(kZl(KdL>|W0SG(OK z(g^Z}yDuWt`fYSCMub|(P3|C!y6DU_t8<&(VM?+sb5(A3udX; z-Ac1a!u|85`|{^XtfD9IOet1_zjQxk`S@+ydJZN0(w(a$9_+ywvWt=|mUECEO4hQZ zpVfV3j+@Pr0ihN09CruH=s9|Xw#EI9Wg&!OwzxmCyz-IGXRDjbk_w@it?mUDe6~T2 z^uBVhu;hVI%vUa6!N6ZUcy)kny^a!Ya|4z&2}#nDc)DhrTPz|}uWjxyCAl`u+WJDi zc3aLo}rK(Zuf}Liu6u*FAKfRO)xk_c2Rdj`6(7EKhTc=WS+r zuZG^1@boKp0lCZysc_kv!6vs5?-KQjOeR2oh zOM>`bH7xzdcHs(!89&enI zu#d~*&DJr&t6ZKu-XfM%2$eaHw~8gUQkO8Vw~?hFgtng7+s0A_>!N)j`MhsgzWrK1 zkDbpu#Bu^cPb}o~eqxz=9jy&g<@e6AEQbtHa#=~ZR||O8IY#8yIT!Fel!LC6TOpKl z0WY7DaaK|@%$1Q(l6PxF#zSuQN=9TRq>y)SM3z8q@oGjS8&cGJoMly9=UmKd9udm< ze_s2DP|kOFJt9Imm-PBXgmNzJrLru-8U78Vj5i`8-$TlIlOl2oQqh|ok*kpVy%iD3 zGadICz0EAyobyB8&WKRXHN8U-p`0J~evSy`T+jO>B9wCj&snAReB#V}(kmPhI)9$@ z?u*E6NY%(|7Lhw4O}su4sQ_u_&5lS7NK5Z%L>fWbcqLX__|v1N7a%WqPe$ZbNN10J zb;!gFf^_qiXi?Y2M99nDekI{`@v?VRi9Ua(shHCdnGJcxyA+Y7kk`DwBeEIthIi8% z3x7JF?;vk`$t-mKP|kh4|3!py?(5wX5z4urS2-e-^8oMRh)~Xhy@pD{F=VRONr`R~ z=vbtB{Ub5dvJLg7MdUd0iF;o~`<}+j22(AK?v(NHS!MH&=%K-f119_IwG%O!o4BLHUGxezJF~l6X)QcLS+SnC#u5C2@{T_8wBAbG{8ZPxe|y zVyH!$>b(__(%9BCZ%RZeL1uW{BT^fZ;r$#DYJWcSoOM(}y{*R(Gs`QYB(7@F95UOx zTT75WLzj8BS5Zr%%(K0Qk$kAkv%Sud7%KA|Z)ilQ%yYd35uq~A_kN5Bm3fhOEh1Fr z#ojIJsm!{B&mv}tcbAfIePfANnZ>McEb(fvnDvb%-lIC7VEr!r9!Hkfh-DXqzIvDC zwPg8cx4yH#)N99*?;HJO+ETBplCTY5=Dnh068mSF_f|yOqs+^^;Yz|;$qH{wB!*@j zE4*VIW1f^-m>L=t=mVA>;%p8_HsJAZR5|*An z8(Gcr%KJt(u@q}#YPyZZOUSn@Yw_hSo%11<*AC;Zwc2CHmFPV`Ny)j0dL|skV5fSj;=cTfFOE>X>g2;LUra+Tt}v!-u16-+BmlZXsWxMW(+T@#0F`S_}C) zAsIVy?m)IDq{2cSv%~A7@)>8b}8klPsl1=-E1vPA*3^xsf5a=WRh8K?Wj^8+V=-ku>Xl_NWj^LrRg!I) z@*MZNa*Qd@Nv}VPDbH!|GbLdk_lq~5W6ain@m8~#tzYoAvY4%3^bRNqxBjbF0ap?A zL}u%ky+>Kh)~|Z+C<(WI!yCvkX6rY+k66ss|Mn)an63Zg%~KL?-4ZRg{d?=K=)+>R z?u%ne!mZ~Or#Z%KJ+JtK#cVyFaKF|$o2};;NlL=47Z8tdjH!D;(Tc@v{T9(jNx1df z#UL%gZ_nBmt=-)&hOs!U@oNT3(v{@ORLreitb-L387$3b>J`^w;&)E96lWdHo=BHIf3~dt~FVk066Zu(8Us+Ai*CY|6_92aS zs*8IfvK(7~NK{jD%TllV#$X+Mx)%C z;yR02m#8Itj9{qD?_!TpOf6A}#mvNOi`!XDO>2u%EFGrmC(j=i6<7vAXr1<9@gU35 zRrvZD%KV6^&2k=+t>kf*+L+VOtiO(E!SWP@_D>zrk;UxQy5dz9vsdei{#p{_jd~(A zB2=$>Vsu1~PsbCR;`4}njq*Guaw4)1(omdL5*~}j;*yS0$KnKH8jB(r^F>GRjYVH2 zVJp#Cq(tP5N|mO?8uA>D%*}XuL`-IR@djq<$g!C?z(P;+UPG$pqB=&CI9^sA#Mo#% zo)%46C?+4Ig=iO%TOch(b|h6vNGq{3B9$P|igQ}jKBWG=jkvBP*RJpb-Wo?tTe1FI zwe`e)eokzO2$lIcu{$CK3gWnmLrQe-N$-ITSRAHgFDXGkQAk{zWAPiHzks|iy!|>=qcd1_%fQ@IbYSU==j%v55Q|vWVI-0t@}bE1UZ-k+ zezh3nBXOOj{{pnKkdH-UjLc}Qdry{rN@s)^!*U3vpeI8{itS2Lta@l6%OO>|XpJ*~ zYI+ld&iPSd5zG6_^_4qHY(1i5~Y871*xO;Ou=0Oc7i+Oy<99#Zlm%bwo0RR=Og^jDH?pMlsG$w(#P+bCniERHev zcgBd-9AoafjuG2f%w5+pVh4-4>pDjKz+&#YjuDrXgm+!X2>+Oczj#pWE!|U(5%k|Q z%ALpO&lqv5j5N$2C2r1 zTb1NkW?SP$Q6=HrYP=|=B-=83Y`kd4V)oB?v7N=-{~9lf{SK7 z^wr%N<(ViJMdWqJB(XIjgCSGJnTVuAri<$lnF*OGik+aX>zuP7pNSeu^p%?fnJrps zQP(@28*{~8mOhy8Xh}Uu`J`Aq5|Yhg&gZ$}ijwero-1Oxlqy%6^Lehw&tlH!x#Ct9 zb3V@#x3d)bQ9lbYPZU=Y59k?&Jt*NkaSsbU!*EbZB~E4f-1(w9i|KRci@Ka@7J5$_ zXD$#=uq=ffMLr9})11mYd$3S+R}wyZuu$~p7<0}q6oXjIIloYhWHIObLNSZ;G3UlY zv06zyI57avw_@uH#cr10Am^3*%+hP1j#(sbu%tjJW|2rnn?l#lql0wJVo{EzC4^!Y zi@GcwI^e4vkR_tEk`(JVh>i41#AGGe_Dz@cI}uC7=SotolZlumoX^Hf`Z`@A4l4 z>HWM^ELWnRLdk>uvs4^Z5)Texk5WF%#aWhf5E}a}7k{$M=9m>C&uM*hHge1gahsBy z#M4kK#hpsRmUgA6qEjVW+LfYKL}=W*QZ$H2A(U{Hcse5ggRBv+DGA%&b)t`w@JWMp z;uMRyn%0S07!8KZ`JAd(;_c3jqKp#UdBoL3$9qjqDH*uY}$x^5DiSxhUjNqnv3m^3ZGCb5&nv=W=dH!Q_J z(O*v9B=#!NJy9*S^}{UG6V+34l4X5!J&M~b&a>=*(4EK4;t!Tx*z@%Ma<=%Jj`W#RDu?AhdtJ7Ij#jZ>qPoT{K~7o{+XI4=1D>%X=G5s@^OO&+681yGUVakFzBW zCEG4OW_cqalT4~JCT2EEp1r!v+eH@3Ef6a6cCnFV9E5V-A$GA0Ovn!`yT3Cr=UC1S z(PiEtuCZK)P}{phhzqn2<3ajlooc5j#4-g!F+0VbEK@Q1qOI=|m09LPC}x+a!&0rS z-qvo>oTWa5Vs?ucSWI8=jp)T<`hsu70G5+G^|rnhBUpZeP(I&^DJ)xY4pMpchy^U) zLnvmCSj&>|iMYp_skmdzOZ%1)VM5iPJ1?AhhSd6E|2o^8VQ;@?X?@tVBZY zVtG9w)mc_0qzOyoWx8Jb#PckjAXJ`x;$@Z{kLZ~F;ysohAQZD-3}-QY7z#(dFLnq#7z zlCXb2CTc6u^CnsYIVKuMWCrp%E`})y`|eX>q>`}jJ|(Qnw5{;{+*6_{i)oQgi7ra? zwx~BhCH_c0D|xRa%H zLQ1ii-u$enp(O0h&x)rw#`N81MROL@cb^p)gx=sDI17|aX4wEarQ|5*^E-s{xhSe!p`5er zYdDK3)kRTFNvieaG80orNj!MA3`Y1(DW)~c3y=#c)np|pmRDA%`c+(1l5O9KoGI0> z;*ye7Yjq;#I_EQMt6rh{RU}`f^2CD`kjKzd|0-H5NwMhe5S95iF;7XhT?W?>y(|5j zSg0h`x|E1nsU%kpx)*mnP{QBDZk9C2btTDv(za5pB@oK_lIX4^+un_wDb*#>Q%SBo zxE${R%_2!<$%RNITRERPD|9}WMX_s?bGE$$M~6~f7I!E~wPq$_$|wnEZI?xLmTZ)V zTJ_7~aTYUcyDXY131@AW#V{q|tnGI(l4H!Q?RPPO#mw4%7c-RP%Hl`$Q)hpO1uW$u zNhtFlVg-vCvt1F}l!WuRD`E$W8O2=@yIIUU?uyvMV&-vI#6A`?kGmocvY2_?6>*rw z%;T315u~GYMU-OsXeHKzXOKLqBv)3$wWDL2b46(Zs$705iH$-)o|1~q)YQRzsLcQ<}@ifcl z=k(V979CkuLMY~M@iNPFl$7@BKcXMY0tm(YBjPOUc>HX|Ca`=9p%^PRi^Yt-?AS^c zGy1Y)IV{7`BG9&+*a4O)5X#4i<+7L&h#R}gVn!ftEQT2`oh|**Hc&oZtO(0U2<79& zO0&3VNhn6dshH@&N8-)&L^KcBhm^v7mlrsNC(KRv4cv&u}#s~2_@m!rf96? zKUBhSY*REgo5l2%MPrv)Os`iomaKY!Y|HdkMPn6MOfOS3)|kcg4n#27ia8XMVkM#9=?D2=ti6(OtW`YrGK*OiDIV+1 zlG0JnYKzC-V=*JEJ7Os;W>w^lSgMkEQ2br|Qa!eHM=Xt{4CDhPV>y)>+mwh+VKHNy z60upFsyq5z>V@x&Ens;YLVfq0u@#)kjM+-Yb|?wQY$apIIL55Nl#Kn#Vn%T#W52VQ zQC!KGaA}X_N;8Tp8M|Fcct@jT>^>#BT^)&fm5e>DBp&pBLSId#VlS|K0HLd?RP1Gz zyE*3WSYMV}9CLSUh?4M%D;*oDBqwndl#WeM5?%$RW7Bm$iPgE%vDp!sfD)FDeW@fo z!^_5YD+$l=vavcI)jd4J%f?133D3H+u^8^dMc?r$AFHIr>UJ~UXz7F%jo6|*D#qG; zyOHd>NXA*YbMWi|%2Pgel;tPLLP*8f871k~+%;G)hg6D{D5X;kM$TVA9*EUp`4Ksj zREc$98HkuKArHo0W%(X4B-LX5m84s=t=*7^Vkiv$azwLC%Q^w66}!f%NX|lP$Gp4s z)=7ScJQC}|(mDf)q4i?DSuU2ty-3L8vCAy<8|20De^17|(mJ2Zh$#zc5_^y3&A5(f z7E5F4$1yEp;vSu9%T%m}AyunbGRymjc@)wn_7O`nl;>$kyV!J=Q;6vX=@>i5QU);t zATP$OGCJo2h#3v(8EedPFV^ekKzhYGuuMbD7m&AN^H}O3hU)fiESqH^VlF^ZV&%%} zoL3+w|7_g7ja6safS4kX4`VMyVoE{MV*MjA4?xmm3s`9X)Q60VZD67O(-bl>c7cV; zLNSwLR=IFLQ_Qs3y)1OR+Ce^z)nTFI)dMms_9_eQ=XW71$W*cOJZJmT^_2%Vn|jjnT2Yx7P36{C=1nsVphdkve4N= zF>7OkS*R9YLDt8{uuv`bLpH}Yu~033hHQ!LWuaPJhHQ&@7;(}yNVRZ3#|l-f1Phfp zFJxz|77LZRFl1M(F${&O&9b2{{tG z#zJLo1o{$kTbE~EOadTLe9oUvQWJSL(awK zu~5B+L(a$6vQWLoK`zG5vQWJ!=2GlB3)PEa{)m;s42t$4)oUi?&sZH6s@HnRKe10) zs9rxnguj%9>U9PZ_$OGXUVlRJ_||%WSkrbQid?pHx|=DmD~%+7a`B z--~773?1{JPv66$oHwGTl&Y#<>48vYAyqYhG7IHQQr*9|N|^I}$U}Y$7Rs4oYWjUx zC}+CMS<64cLiv!?_FsQ6%x4)=J?xKTp?oN&j=!3P^7#TWb^RY$C?Aq~K7QIm)q-l8 z4SCcr#X|W|%wv8-7Rra_jF0<^StuWp2L75zKHHJ1p}!-N55+v`?`NrWMnBur$iL3A z7Tem3RE_<{59{*Kwhlv{@>jCZwn&=#PhvHe_B@sOCrC5@H5Mu}#XRkgQIc-;!}&~a zt+wz_u-pbYi6lIP@Wn_-JHHFd5?lp^AnpCh zENyVk7lSjjLQBNPnba7@!w&gr;3h3-t|Yal!Tmxyyu@+l9L#95AuIkqDR6s zo*(4Prj&Es8gve`FkA&Gei4>}Xg}!PrNMq<7J9$?59B=9U(ZteJ( zrTT|he2z)=PqCEZn4$hv7Rs5Pog3=E&`gylF$;+M1C@kxy}17|OW%%q{vP+ov7|ug z4rbh+#$x7r@B1^A#Dn%YLvNrK@B4F=3<f7a3`BX-RC)Gr zDzloJ=I64Qb(=K*l9F(JHO>En#jLNU`G2yQ_0=^0I*VCfP4oX@G3%>ozVkHgm1EMZ zucrBe#jLNU`2mYrUrqD#u$cALG(SI!Szk@_Z)P#;t7(2Ri&#J#gQ6+kA zey2Ku6(Uj|^0D7kNj&%nqb53|M*3}8K7r5~HPY|F(qp;a&*}bKEQ=E|h^1dbhO^we zRiCTr{&<%95Xw2-pUu)1l7@XZ%3r~fvBk)jESn+J+Klpdu^i`^(f$uC0rH`k(f-dY zr#a^_{vRy)zS1#ce7l7@UUtwLV;_`fte;28W_MyCE#v)s95d?~j8G6W(J#w#V274T zer1;8dojXAEvEQYSk_`BLfe??rz#0s(W(AvCE?n|RR32c;R@bV|Idg}3ozApTT*^H zrasCu%`X^{#*i6)O(o&_MuuNsNw~g|;V)$|_v14B;2Fv}+cH;ohTmFAy47aCZ9R*e zGyGH~;Tp(ieyLWJO0T?iKuo5erew2Y_F<-fNJ)xy97pCw#C+~wQxdkubA9QZ} zE%fIp(c7Zu-WU1>+Jr~>J?zyb{sT(lLE;HXzo8QSD;`5s%&QSegJk({>r|>=rqTOS zKOPZ!hI5%eE+S)*YB}aS^p_*dmtj^K$!FemU7Zlqn}=e~pHR%VebyvWnQx1QV!kaF ziutzK+C(b4Pkl4i)k87g7W*O*W4;m=iup=dDCYZG>k_HVx3fYq-_8ofd^>A>B9-}e zRw(A%SsM~D=G$4J(EK$G`*&j^#(X;~l+7jn8)Lqm6~>rvXN6+EofV4tc2+3n+gYKQ zZ)b&KzMZuxQ9|?WtWeCivolenDcf>+T zd+NWbVu$`KU+w#^eADE=^5u8`l`4n-D<%F<%&+_Z8#Cem$OTWgV_})i7(0~5KGDxH zhEn{fzW*Ldc?jKq4<#Kk5l3iiVy`ZROhfw<%JLuelQUl>V$Ab4p_peFLNU)Ugkt)y zZHau$y_-->FB6J+ZYLD;6iO)ODU?vmUGlFJ+p2d&*CG`2yD*`cUrPz4{QpU1-dqS{ zrt|&@#XMOQig{Kf6!WY|DCXIW?TIp*J8Pk|I5*7O)1jERoY4zaE9v#5DZd&;Fe(^otoZkNep# z&(dd}ZBdy|`Bhm`Aynp5{^Klrxc@rsw`BR|7oGEIzY~i$+(<8$r*LP3wtm_l!1DT1 zy{*&!hb-?wXj`ZKNi4^NPIbng!}57so%0!gHOujYY-6chRp)%hKgiM;LOGxD&$E2N zIiL0aVTp4-XZ^zM^d4K6kn$|)SoNV=ob_w4WI|{kp7kGNDTuddX&;{RTe92%p{<|u zyR*>K<&@8Pe*jC%>qf?~JovYfIVL6{8(4ZKWS(t}FZ8ka+waTrDTI#u-+qP?y*DP! z!2LLXb3_`TJXWwfBF!OAa3LbkLA>Cvh;)beLFpH0>v8MqPTT4O$rC)nGBOKyvLJbb z=OZyGkbFU3mY0s>r>7xFL8_7zi)04m<{)opRWGZ@*LX)0QYdK5Qh5;Oi;(1CHcOsv zxOW3799(7Th^^;9ZVB3T(fQC9{dYlb4Yo#PAEZctpFBn_(yeYOxGo^K1>KaSSS=6g zTHGFtWGPY@cb^bbEU5LO&Uy6vXrCbe3yO9liK|*%gcJ|TDAD!u7vL$K;GB|l>&r{F zbqD0`;5w(GeOL}sI*4`G`H(ySxhJ?)Ns5*J7w#59$_Aw(LNVonUN7nLY&wcNW{?U& z{vKLruRac`7*t`QZ!JCzxi6T`a`Q3V^?+0gPO+?7jc?CF?hl&u49oKhq;k+YB5y+; z2$Ek3W9UBPgTaJ|3_?uR;DnMC>yBHnVhyPl^nX>CkoMsyNcEuBYhgZg+-n5Al;~7b z5mPe=dWA8WkXk{7h|tP^?V!V3VGLcl4+p)J;8&eU1Ns85IiEK} z>IFFw*$#O$xUM8co%7#8>IbKAHJVgMAdd&d`h;={(jb@@kzXMVgIayVm}`(Hf-w9$Agw>e z=vov@mcAYJSfY9G6pI;4G!LF-F>{%xgSJZI!R{e?rulTxiRDKK ztx!E3^yE}#zSAN|Q4+4RwFt&?jF|zo2tH#mBl8x)Y!)*PZxO6yF=O=>!A>RNI$Mk2 zxRP+4twnG~N!S{<2!2x%_8={SYZ0MZvATy#xP!U33U)vzY6mL+}`jxh^^c zPqCQmqGLc`*F`H4te>yHq0}*G%d!nZ_Zd3|omuF<-s3o?or0b$bYHKrlHM$4WZpUG z&tgXAor9q)=1s{i!AC6SP0237I3?j)ch_K^lJFYr8f@Sga}9P4cC(mkuxqfF#ax43 zgA**~8tfWeQxaZ-U4#6CXm99wK?~HYYfwUoew&i&-YqD{LT^)2-MaWnLA`>Bff+r)A0eLrQ z7m+29_k#WrSqB*ye4<3pJ?Tp|gM*b?)E6-5Eu^8r? z2o|%Lx=#!?u-wvBAJd7!P8PE_CI*LDDkfsiu>6EMF3q4P2KF$$4>J=|L`z~HP7Lmj z2pzA9!Tk~W6Y@z=J0doo3Yr`|5s{l9(}G?~!u>om*rQ{DlPDp*SwA!Qp5+$^y$>=o zIKlGwbRClsoMX9phK|VyerIV~SKmMVEV#ka8A4aVXF==(UDJ~v>3n7d`B^SPXj`*_ zTeT$Wo*CQ~5sJwS?u$q=>NPv48Ij_UIYEPnl!wd@dMOF(zBpK~V}f2k>EpgQ*upXx zB5-sT2fJCu@)2AT{HR5hkdDQY;8aBDSY!nSKct$5+gcV>Q4$Z%eT+E@%Cjt}%hI=_ z9zQP&o?@wo^%nZg-(^87mahNkvt?P(QH$C-jS7|pJt9J7ULL#|k-FH{iXbH-Pe4`$ zBb1D@##F$!;vj2+2@z=pSsP4eIXD`#KgbtBW<)wc)&&cdV2)ovx5n#(6)f*Us21yk z^*U9s6Fv1yNVPuL&T@!lV{nk=ojf{bbCAo@o#o5m63Z``=Tbgf0(Us==W)RSmal?j zCAl{JTHKq6`8s%zh34=gCt=PfAb$t5BXSY)Pf&eQ7;^<;$<&C@(<8R5KRJwXF+z3Z$cPl6d){(U zMCi$LPkK|rRJR~T$Yv3tr?_LX%(O6uo)7nB|A>@Csz7dy2tAK2WwGg$DqKCdNp4p% z&Z2K$--}c?$>bRnqvZ~?KY8RWO2QSGyz*`q(}U!d6St5)%Bn18rkPJZ#A5El z=99Hp%-zy_@)0Gt=YoA%1Lesl8?gKdp%sLDvKgl`GtK<6HH(>P=9e8gmHFyI0r?V( z`RYOe`39#lt363_n38a&nItE3jG1XB$$2bhrkNxcvY44>l3dSXW|~RzJ0;;vGfAG~ z81v*ql5G5`KBnUiVr33BO_JVBEtxDg%Z5tAr$Yg-v_ zEpj>weRD?3E*AQQ==Lh+FiU;JXvs56Z|lK9=!MYo-y(~!&@V)5X`m!rnY=|dQ!>VS zXuoZBRymJX5{^8J$Z1N#6^|k^Q;BYWXuMHGE|17-$mce>JtBP}x61<&i9?FZ8xa`? zDJf;9s)ZVz&V<}8?^P16ijD;W|lKxroKAf|ixnm4vIHW#z}SXZiI<8pi^V+6Qc*5vF>Pi=xr)U+yHZiEWihR2 zMY*2EJYiB%Zc-9{zonww#$vwTQc><Dm4{g}Agh#|WTB@GH$d)_zp&6f z`Wz)!l!QIJt%8&jQN)7gR-}h@U51rvOmX|ui{jd z^ppm*;pVG2Rpm!Y!f%;YlhZjL^G(8Pawd!EbF0Z&ET+$`CO>B}eQq^5kHz%4)#O4J z)8|%`OIS>wTTL!wF@0_|xst{7xz*$v7Srcelj~SapIc3CWHEhiHJQy~`rK-Ai;{S7 z`6Rwii=$Ib9%s1$p)r3od6wl%oORa_Q(eYzpMdt^UWkP|+|^|PCArc(z4nm2gJUZE ztdHPBvLeeloGo-rACk2>m3hAIA=!wv=<%suHRX#e zH}}RbTB1BP^<_OJ_@*Uh9@K_EE}O8>cZ8@7e_Xa_G2antAiJ`d?+7)JZ?dFs z)HQ7&Q&`M*gc`^ZEap2x4dfIS^BtiEaxRPcj!*-+ipAVdX&|?-nC}QRko#E7cZ3?q zV=NP|>GCv`7g;`o&@(3urUf7r^MowSGXI3m=Sg`F%NG!ec~U;e zl5dATdmG6HEVn}_rjdMx<@|OX(^z(6xdEY=#}$zr~J^t7zRV!poELe^t3Uteq?o3VV0ewD72ma-GeX$WnrrR>FWgH|_j zWmCR(xpNLt;GHJGn+00^o|Fo6-hNV&) zeJonZ?^*u9`WWT>tUS%)am=&w50(}@PiZa161@+*K&W1=WfIFLcm{^@X(LOr%!5!& z8(E2EAJ+6Jrmd{UavDN0ZDli-k{xx-bMgh22O$*mob18!ey)ybC;PBWfKW_3Ihf@c zj%hE)u)NAK?d7K|=|%PNdR{JOnFXPIo|kJ`p5>SqSWsHlq#iCVy0--vlIiNgm~xo_G_mDWs>o&hp6)Ew4zil=k5< z`{*8hzw$L1unc@q_dC60YnB78aCRe~Ub2%Cy)BYAWEYP4uqBQaq_-TzGJm_4x8(;c zm%i28>Lb%w##PbV>MIW`$-&a5p6B+JCzOP9#=i23lJM!`zVgmx>P$%7sp%`9iwNDR z=_|WMq&rIZu6#2hZ$SFXfe{%987R{tk_H(pe^C<7BIEL^l5ES&LE^IEaw<=@Wo8_4 zIf2E@FXHkfi}`L?T*?(Xl^M^+WhE9fR*%c+EN0Xlmj_tP7&|UYtkn6KkwaXzR1)6V zN6xD#M!y9)8TA?_4=d4cLDKm%OeU|U7%g;^Ka`D?q*ysPb3cWo$&M@oaJy$7sWS&Dm_vgCR#h4G|; zI~IFQ)>0C;Hde5$vWS@@Q?#ghRf5cw=}N*ihxu|kOW%(AZr6M{o5id-%$JK<%$maj zxlBns2nJwWjGPz9FIWme>L|%!DPF`@U#wjycd}H1&>f$Ja=(&rrnyL-R}!wBE|T^J zs%bd0TO@C0F>}vFvM`I8doGf9vzWQ(B3V;OxOTcoHdS&=_CJbaH671Q$}TL^AoNz$ zBALqh&^bo;mlw;~EM^sAvCLsHYp_e?K_&6v2=aM$2JW%ST$Za4x=Xc0UQiOwCbFcz zQPF|)`lnag5kky-LIif6BI+V_U1_B$i{4XO(2IRDe7WSuJx|9)fgHvP(;% zjanm5M1=BLBQHgSQmvIYBGMD`g{+dTN@%@`JH>B7*314Ztswm&8{{;W4I_I9dyzf2hz4#^M#x}A% z26;ltHXVce*egi&Wo$P~e@Ld3gDn5HQQ!O95-VT{?m``55#}7kPP6>{m#Y74js4D2 z;-aemY>i!J8FLu-W~AB{EB>Y2ujmZOOl)gg%weIozRibhkCkQ_23aiSdL>0i^{ZI2 zA+%p##abFdslJYNGvqzUj@WZj!rH~ISh|$(PP;2Ml||oacg1G1r1w^%UAtlnS@fOu zo7kHydfneQvA3mUM2r8Zj^Q`4_gMslj^Q`4k2#fIpSwG@j^%}g>RGuv_Bp5OT3)@0 zWq0f=md7CUjN2Xij#KHo-?yedglIdC-g#LlqvhR|BgJ+VJn>U2^u z-^H%7G=@;jcd=4i)ES)3F?(Y!%R3yiH+HR*@OiN>R$EH=yx13O!7=*jurJn{ML!+( z#k#QQr^CM36P%C!E$@rHC?zB6{uHrxpoIHk8B)eaD?n%t!@k&5jwvxXV(mf9{@7cb z&+SjC+Ufq-I*w_Bn8Pw=H^&Ts&_3^v9p{)zUq$2_&iBWzu+)dpd(rpDx@}d*XWI6N zRfv4Pj}2j20y!gPhm>?{1B9Xv#FDqse{&;O&ST`L14&($d2AF zv^Vmhv6}<24lF|;G_rpn){UjlW9oN$FxH2qO_4m!GNwqzuzb}gVx7m<55{Il$&LI2 zp|T!~y~{DRX5d|UGG-G?QwYr`IT$N}a!?P|BM|yud9iL%awCsozbI8+>>(*QgF{p+ zDK9pVB^^he+QNCUQ7nnRT3(eBj-%zpW^v5N*Q$5Z<;51VM)C+nQ#iJ4)j$Ox64s*;W{lVvwn z{ZPygvH!8q(~Q0o@k8u!mJ^5(*!mB#r&z8+N=q5e62XzbGY9iqVwo(ZA^(%IS4z57 zgU`;9Sk14ggt?KsahxgDk=QL#GNSR#7*#{gM`HC^=*>&jr8H%sH!sza(wZgbp@{X< z49uK~wP&HVhV>AWAG@Dr17sUw3Stkl?1Rv%?}AuAmYGTF>>P~^*7-o_>>Q0PWa;u& z#JU5ij>S%}463V+;j!2`7OO}uvm_Ns6g_TqcB(bdOKFz7i(+nKu@S2BX~A-$Xj`3Go-2wO%yO|PW-QCFxXx!9OUvuEEM__J zE{+z?U}0<-%Wn|+GDKl)HOty6D%Hu@=PYx|Yx$PtgChBnWfS+sos9j=@?}vBtudqX zHD?rRU)a{kn1%jFk`<5#q{LW0!_`9Hzc>{OSPntxs~M+a*Rjkm6OpaapJF$#tbtH# z^ru*|lyvL$k*LKX=hLyC9P{GO>Rg{g>Ee zmiip?Yiu^l{~(mludz2-+T!<0=k#oBB}*>|#hi_;XK93-Ddt>kCrdlt*16arDTR@w zO=5Mf2h&dly%yQ*E zB^P4HrKDT`_C{X|V*ZGg{#NCzS6u!XOJUKgDgTPKH)6&j)y3ElLumcrrPyRcXuaOw zu_cDk>b%Rb9fr`#yDPDChS18pt1)L!SRPt=_fM>*A(OE6e`D^dy<@dTl0VK-&zb|=;V%^>N-avkznj1szbFP57j??F6!vJ}i0O;YoFeLI(9=pFtv z@6@+<8sg&)>Dvbk`4IU8_T77_6a|s_=o?%MNwPb$bm@XO^gznk<5-67P;#yPD$6?V z2`q1Cvh-}A>Hyc-`BDladgau0_E|${=shCMD*IXo9xycb9zL?5{Rj3cVTG?DJ!Kf%V9`WDPs*umNJti6EU|#Znl@O zO#cB-b1BaERKn@j%+e9-UPvuFO$z#Z^DyQBNw%M0c^oqeABEJhpOg}|#OvCbQo@#a zU3^}^-3~6b{exMSnZC&#* z#-QzTQnIWz_?0I?+SvCSF%=0~GU7?$ULNN4*7LwZ8G*o_Q%0@Bs)Xvi=~H~TR|#zP*m#~P9e>1j_gWH#gx zdzK+@L3-Q8k5GBC<+)f1>0>)m)cUy3AdlIDaUIjI>8t-?{Q=~0djd<>)QGhU(%-IM zKrtCs3^CtB2H1lPp&IoQ_Ao9e zLgjeY-eU;$BRy+hlrr9;*1EM8BS&^c)OTsW_Pn549M9WhS!hl&{oC_)#X=SH-eJ{i z^t@dK^GGPw!6KQ<(&1$t)Akg_WLX)wLk8Fua+Z>7C2dl*uaWi&DO==SomMN4vR9s_ zR2kNvbMZVusu%3dEH59#Js$F+{VhxT{kW$>#@GccG}E#^WUT!gOT)3~X@{iS5!4+i z=cXkiRtv~DyEIEJ>}OlZc)PJ79Uv3z_ADn4p`Ra;VGl8+7vyC-orOk_Xno)$JB#Ix z^AYQ5$Sd|DmK*S78xDEZUd57KfIWarwhtJR0eQ{-iDfN%H8LSn?Mp1>FW?Rd$+Tl< z)PAi#fc`p2mR*r0b}v?6L8jShhAe|*+nre6tb_X@WQN_F<>Q|s)@P6$`)QVYa0YWB zGwpPi33Je&2bpDOv3!Jj-yX6f2yl$^#d8q_eghA%mxh&)ELE8c{*FI&) zuaJ566_%yw!?*}pU{^s)jLsm*zmSD?1C|mvJF!nNPG)y8gr2!?+N)SHadv#fyk+~p zs(jky;>{nBx9t=|DnZ_{%bim(i!Y(p0D0H$&+;hFXZ2PTWV1b4%6Mxx?nWCRxppqcT*W=+Ysgmn zxFLri+wEKbpc0O^%HTftD`bb=&XB(#JMF%PSnIG#%YMO-7~~r}hh<93h?Riswm&eW z0_0nJn<3R9d+g&ZYjH=a4f)O<@~0}#YP9ffgY2^>OTlb0v@_`6_SxnBqW@-D5%ihA zDM-djNw=;+6O#HszPER?)Wa|34&?K_z2hRKO1D;^PSP53z@Gd!2}UQsz>^bl*j{Ex zH^>k6DVC#4P^*L-v8!KJsi>!ldM^v?jx2wn=ZtzU3+$JrjJL+2w|O8^71)_92VcZ2 z1IST(HcM~Ze?~x#*>AAy#C0?la@>B8r5Nt3FGEh)t62Kt_dW$uXm4V94!_(PkdyWg zhRlVWvQM#8$CdCl7f9?P?RTuII`kP$JtzIf$t$T1&~X=o^CzAk{=KPDSfIsbzPgc+?OY-?>TjHH1c& zYKVS@T%Cn8B>Edt0{Pr5o-ibU)DnXXxn({^<;7q_Xsjez3^9a8Mrw;^451oq9Wm69 zCD@C)VwfQeH#=I%BU z6AbwP<+)8{7&2fHT9IO+Ax+R0ZX#YWyPe4EyOC88|JBdR10yD<-P%0x)oQ~SlP2`yt0KT zS3(KpL+hJbiUTD>`3!r}N~A_ZnS-OzTC|CULTeuH6r&BHwUcc`4?B#Z^{{t|3x?20 zR$H-NgfX-N^lnkr35C{I{!cVFgjT<{6VDk!U+--%rWisifA0|+4avn`+$)Y6@-?J` zu;SsiXjN}VG1d@TCE7_`H3jG5K2gC9Q_;%J&f-o(=&QtC#1KPhyz+i=#Sj`L?<#tG zVLp3Mo(IG%LukEcH*wLBgNW%aCi-Eje8_|1upzXj_#x3E2xDkHY!5Ne5L#3Gu$W;8 zt*7oOHX1@Jb{`Sn8bWKOdx^7#&}#19;>JX{En1EHs7PZ;->R;$J|e@2$$bN}F~u8( zoWx!{CKemgaRz2uiq8%C6)}&CT$XXTdM`lwiy%pDo$h{Ao&n-IL#WJ8h-!w=o(>er zhR~i45)BQZYyL^m%n&N!V3B4B{ZgJ1cN;=w9wP2Dgv$K1=wZlZ$TMPvA@o(6XT=pm zN}+x{RJ1J}?pFYLPE0qXB4n7zH>3vSd68TuOm!<{xEOB8hbZ9)vBQu%5HnJgD;uV2 z3mGN)8qyguTC6anC*%cj#gP7x7e(7^!+dC@c#Oz3gvK<-iUWqwJhXICyIh!x-ZL;x z^f821ca9h7hR~Y_CWr-w(44N9#Ak-k%JB@b+Ynl%^|FYR54T0@TqcSnLuhr(B+=d! z?AI&e6GKKoUKL*(LhIiriysW39{bnCSt;QxlqupLmJz+xe7`B8)OA#z!dNvcdPxcUy0gV@7Cm<*TU4niOIXy8oh?R63E$E@LyVJB7}4LG zm?2&=qz0bvGsQ$h>O*FWSEYpQg4e}N6;t$<=GVnrEczOIT`XtO*VyY~4U2xa{2cKK zi@xgSi1jS`o$zzSMk!dqmyUJ{p51fARw?77ts(R@pCfj246Q94i(krIagc@9mQu}X zt~kna;AK2LaLvyXr&&%wsCGI}oR<==KbGez9@0M`t7X1RX}eWTOca3P@R|V z01HGfDe2Z9kO;1ug<_SI+=%{W^g{8mlnHV?T*YkSeDs_47m5Qc`c3-_Ma4?A^>ix@ zJwlXfkr*N+H?s3Q+Eut~EfUX4nP9zH6f;^%IEQMHn8vB}jPXU{ZI02uuSH@Fi~fBr z5}&Z>-`66sokjn?7KtNL!r#{-ab8MBbS%mc2=d zVA1nn7l}bq)Vj6|oaIGgD(AB=rgDB$%wzcxLL=92ig#H4`cB0x7OPnzdsWP0v5{p# zU))ns!nedumZcEN=PmI)%k@`O%-iAwODzb+ye-bMSeI4IJK`S}4?;2Th*%Z1@A|v# zOGE`0{oVE@;%1i7msCFQil!|3`|t0HyQPHpmZhSHijj8!x;B=IzJ^d6ZK)V+$P^sI z_rwT8av;k^j+F5JvqH?5l56R!cZK+jMPGF*#BmmVMXeBBs?wf@<8dp*5-DnYkjC0p zh$=Twj9Oo?2wVS9yd*`jq)js{e_;K zcVs@jSgcYJ>wU;aqQ4ZZUTlkgW5{Z;M2S3N>!mo=Re2hqzm8fHAB){mGOSBasbAb$ zvFS#NNw?1aj=8HywN_kU8G+wmN&MRPYX(x0d@5?zP%+gX z#*x6&e7zXTQU$3pgK(>iC9J9Y`#JVD-Gs`f6p$AuJTO~j z3$1RTt8Tm4$x;gE;+oG$3RvnwXzSa>IVtLSLH(lJMY&pZd@z#>y%fHTX(~ls^K>r0 z5}gc*Bj>NhU_+ilPt8s-!H_bD`9>^~qQ7vbBijE z{+`r6QJqCUsrQLw7X75&CmOQoC-r{Om_A;#9ge_`T@PqMxwei$^&Xov+XF8$2MMV4?Fxwf6(!Sx%*&l?TOS7X7R|D0WK; zpOtx{dNLi2@L8EBYDfv6m3bmXO8BhI6Kyz^zO&_t2RTMR8S_L>7X4(*6N6dwlQBWU}Zwz+thFMb`lii;XNvCoHSVB1*M`r5dC*uBgLepA^i3L`_-F zdKLK`Q|u#k$NoW-t4n(kzP;f`QAJ8dRKLC9M^TeSzrEo{QBO+v_J$*(HH)r+91#Ph zge!55h`}s+CC(A?G>cw|b3_bf(JOI|i04`KN}MBNB#T~&b40wrqF3S^5o1~ON}MBN zJd0k5b3|mY=#@A}#3UBI66c7R%%WG~91&Al^h%r~Vwx0H*J^+xe?+X7k`c{&L*4xf z#8#Fw5USf0h;8j^~=I3eyaqz&YxctT28+c_k#1%uR|M`q4SzjJQc{J#`^NaAMgl~-eRiv@#H%6Wn_o!6S4=^G|ztgj#4~u?# z=UFjWrHbkDoD~Sf-jvS(-xVK3~dtg7eWUtV=n=rQ}%8 z=b>JVJuT%_Y^2V``s0{&28lVtSr%t6!stwKxT}D`$d~@Q4M@WJBoq1kMaYyaYz* zoCQ+UwOW92veM4GMhxwHS!bmoluub_ogtLZwNCDT@+t4^GGZv73eJ8*D4z<>5kn}S ziq22}$)}QY-iV=msyLSop?s=1C2psqq4u5fsp_~=!u_h|lv6R$*N3aKe4|r^Jh5pWHzO3rCT&l<{-|_&CV4mS=JknGmvDbe=5bORMcx! z$5}5W-J&noTtQ4-XZ#&9rl{Abo->U_*G20&ue0d7Xg%jmDe5Z&G*|yt=RFqs%77e? zb5^nFT4jA_J&UeY)_1;Sp*|vd8-D|5Ckxe1Y5c2!gI&PimiU+Wf6)yXvvc-y%qh%R zp;Qf>d=~u<|Ax*VEc%@@jhtf5G%g#{QhX zEVQPNM#S1Wqm6v-MLu^sb5%Y?eYx$O4N}4~w|BNl3CrBxY21R!6V?jaI}@d-GCzcz z+dKQDgeC0Y98fXQ+vi|p2{9divM<o+ba8r13HPguGe}CfUtOHTEc#q@agtkwM}8D??&6Fv zgzj1oIO&E=M9c%uD~4o4x;e9ySk#;GCgdT>maeOI-G5vkUzD|9X!bO;q{07Duou(}M`;2{^b}ah)jD4MlSoHT9`#OW9 z7tW)uB zDq&%Sw$%Z9S}yjdAKp36IYhCryevJ`W?+Sf?)wmHBbVIA@{}GZ-@7S!ToxhrHzMHe$v= zGMo!W%p}M}r%b#5zdVzic2dIfOmcciQRT@*s#lz`EL5J?A(NfOM$96}YtA+!<~_(% z=Zq2aAtclB+lS|3J!G2GfQ8Nll{wq#X2ejLXE>vcm@gnX&O#$*CuEkhSxR`EXFGpM z3HNKZ6TL@mowl_Xsa|)IS!ln0gv@pBkrL)J&lxWz%x9i6-N@$zQq6bP8u^@sEOZY3 zC!a-*cQ0){%x95PMT$Dkeqv z7|RpmRbBLB=UJAA(AHBi=`7b@t7R%nizzyvg)Ck1+*YYpvea3l<#U!rvvoe-v3%KE z%W;+(gS7m?GGL&VQl02%q(|*1wOq^ceNn2KEXDD>Rpn{ILaliv|6`ei_KuQ=SaN6T zoCmQ~`&-Anpkui9{;@NKC4uoumCpi}eZzD$#v$kY@VQ= z-CLX$hLk~{`BrBm%WK#c<+IKC#t_QqE9W@NI}24lJDiJ#P(C}IYdWhkcjA0@IoBFO z`RsO*S*!&rpFK{RA(YQ|P6w7haF(e&d!0uNp?vl`Ls{N^N9A+CnP>>*bI_T|@+Ie! z=e%PG<#X6s&oTxr8>-v<=zGqCt*bVYI z>Xc!5dy#6&-R6{yJocIz$dP2Oo)16Xf$expdkVL%1gG%T={~V-rd=3lkDb;_< z#NRSvsQzDt+K>dKNxYsR6(LRIO%1sTa!0(IAt{jN z@xF%K4rvkJFD2a?j;8~yO>Py>H)5!E+A2P|Z!vk^=`2(2^v-znF(q`Csm9nQzKVrn zsK(efp3*Ojp=xtq=_?!$n%JKB%UcHU2f||NUyjxxR~4v zDq(y+wijP3Mg6|0uHH9Z>RF1(l0CN*k*Z(3rj!iXS4p+^{_%>#C`P54hL{2ISuAue z7DEQcFGx{a{{S*5-uih;rQ|cn;P`YYDj%xF4T*0WPBCg*REv8iK5K*$D)TjvXXC9$ zhA~u&doKQ!lys|O<%q2N4T~ROq4IoG2gWg!xb_V0^s7i(z^8e2!U*@tTGl zhGfJ`j0t0?6)-V=fQ8CTt$0uXD<}R43&s3}R5Rm) z42fWs(d_sYL#RbICq6nO%!gWJ^WukDC?9HZ%#ZhYIgFte$HMqF7K)+P#G-iHiD3-2 zCfJU*!tqQJBebltbJI)SqAcUyn+;U9ae(86R&AVO~||PTtjY!ycgeX zNGfD`eD*7pGrq}%XC=u8@s(0k&TSwoB?!;Z>E2YG@BaR>!}WqEhvRd>k(@ zWH98D_}_*MhkP0@F)h8Yy`i&8SI%llN$-^N?dQ2Ee)?L(?P@lA%DgzSyi$q8eAgY1uYGvqSlKzy+w zC37)qA0IkXr8JiAfc%~s#!r$W^=TZz--{Xi4 zfLw@Al%lSL=OBN^@0b_nGY)bo-qsM>ugmd^EOd4zL$1cV%%@c8R=<2D|HOB*P)s&r z{*5OuP%)P<)0t95+dDlq~tQS`8`X`U}-w&|Q5aBp6z5mTwUgcN;HKIArC@s zbQ`>-V(5tVh176glag-5aO6p9y4yI0_G=*IW;g9^wHGAML2hwZNm0+!F_7ABxp%^? zXF%$>OIT=InUE9=>`}~?qJH&yF8(h`Nm>U@tDZx773+!UO(XT)6qzc=+J6LhedN=? z?P$m%NF#TdA@4()xO)xx1k%(!W5`xWGuL~U%A<1r4wB|pG2|$umD|dYbC5P}7egZ0 zng6*%4e=rOxSLqMExjF zkdf{cDQf2Vfj4pgbsH_C@+divm~n1DC05)Pm^Q#-5}-_cPLBc@wnb0ue$45Mq^Bq zzOFvmz4DPtwLA}3C1NJK?N*V5Yb#!JA7s%Zn6J5yvgi@a*W7_DdhBnC`;?T7qHh>Y zai3?ohh|4&->0}^Ih7tCoa*LC3C9Pgx=T4mj}K0D*RkmF!Kv;B7CrVi)!oISM+~RB z$EAdGwx_xmrDR02@=>c=h<;#|hFQSGz{zi_t#OEQGk%VfIM zr4+`}cs6F1n=D0*JVuaXmfJw3lA}~gQVpSevfOrt(AKB94@wEgt+L&|Qo?boYbd)()GNc=1kz2=*K9I$3XG1EXzjBG&+YlO6eAgXn2px^3?l?neb@_X4rXf!w z=Vfl+wX%d3&77gVSnf`ck}YL8VwSt{PbdaAgP+t|p_Oh0DH+j0oNA@pjOE^MREvJ4 z+m=Niv6XH|7JYnHy4_gxFGBhgM98zm!f)-sf1s;3k=zYm@V!KB~~@0+6~#}o?-D>zH(DH$i1+pv_YRJVs^Os zo0NQnd)+a}H*VTyk}PXTGTw~|+2fYWRnp>J^t?g7bB9RDw)W%5N4KFK?#|+v(=6Y+ zX1NpE9VokmR|;S$3diULJDTovEbgy$46!B~rrs{1JBzi@whv zaW}B&`}`4iE6bW6)wP=Me#N5i{Q2%q7X9VEe0MjCUT2r@e#fG}!I$sumlD1=KHojY zvVNiZ?c}?^aH?gCwfw~~-6v>?Y^9@77#sbP7Qv$DxaPZMS^mY{k><4LyH#1@TgJPPo=x0H`+k!=}yvuj*mNGtC3%^QQd6)0@ zVrc}S6?6ISVkzlXO9K3>*i=L@l;Ko_>Ox*(4XVEit3*00YJyW;9Ez6>3>K3@=S@cZZ z0=FWIo~c{lR%X#Nbqm}Zq^Mcs?*VIxo_a;vDB1FYB<(O8Fs9EkO+)f-5>!oA*NeRE|c)}gc zG5Q-TC)_N~=f2(%tB%~(I~>y+qPF!Z=cB*;c*6abWAv96=!PvuNJQh9gz0f@; zB_pcmy%)N5zgE}tfe+PjKIz^jC8KEG`$@MWi=Ov>(w!~^v-|khbjm#?B{%X1eoZvT z{*?POr&>H%z4QE(8`+`G=~f6Gu~TkYDH+irZ$zwS*o#wcGRI7XsF)TULo;65%9sZ@ zrYS_l43ZMAzc}TN;}|{r`jnf)F}mJ+%6*$f*LzR7@3QE6?<$fb2toNRB zk4edh?!i?@cZpN(d6qYNX(_&w_C5SY;VCysN=Ebm_Ee>+#egoI*+FgVtb03)o@sg3y^Ez;QA`(> z7dGouy;<7+tV(#+9nA7Do?levv+gLCXNqK^PKCZ)6*GfH;Fn8fKI<-IDGQ-8pLO47 z$$?O+bMAVUF-7tf%Wgi)=iGxVXU3~CpL0*LT!GL`-E;2mELn3^&cC_Vx9S+qgHX(G zuFImo_xHP7nMHr^?{~L0%WV&;ZJl?Uv9yLzKIh%`EO~FJm<#U1EN37TbHN?Ra$=V% z&mZn+mfs;1^N0Hi%Qiec=xF@u&S5zOp_o72cUi={D&{YD9ZMAm#r)-NV`=-YI`S9Y z{Vd%fbmT9(r&)UQ@wwz)*7+2PzegRhr;Fr9mQRZ0c9!<5)qY)a+p#9m-^Eoo^*h?ra6a}`x2=>6i`M?%hkNfo?rfIF#$c2WVtH>F@&u%q zx5|(akdj{8z491Zl1A5ZhbGlIW(sB_X`SEH#T{z&@2v?>Q0c4Wts@ z2$qgTGMQy|QL22FmHp6ik*UrY@(CpFT{L7H#P=reSKFdgd63fH4wh$epFajE;~ire zx+P-$1}W>EHRLL!oOi_#XFK|7z5d^;oGDc$NM&yc%LF_NYCx)Z8(H$uL)8#c)%)6z z7LaP*0Yf@MZt_|mP&reoM}?xj(QZG!DR0pL+A|F@m3i^XRw}k z$`Cq(4ZX4l)wa&y8l$7y$h*N1I;xGm6hr8!Hud@%LPxc^H=U&d$}<8bO!IOLq2tri z`<;c}%=8kZmG_S!S&%zDCr_1!VirQ$dTEBx(P-}tW+}f*t(3gS8*a#lh`HD6c8Kyx zx4!1uMMrNsOZ-h$-{|P=mQoP;`F^x~k*cGYCq;d=kmNq^Fvl$Kj8QB|7w;lVE`CiU zUA@R*+Ezit-lNulck@cHtgNrL)!pmDa#L4~Vj)#`ucs8XEs}@4UL12A+u93x*qg}m z54J_}h&PX=HE*l8w~*yDZ|hO-3X6W@`lH@IEc%V>eZAU0s50v}uJ`lqV9{?}@9(9t z=r^tp@G@DF9zg3ELy|ygT zhH6`*yjd*zTbZN0H>9X-wfP8R^xk5Q(cj7(<85Nm-^xt)wzKGOWsdiDu;_1PPVg!o zq5aCR@^Sz92W6h%4PvP}O5LMg@|H=-wrYNhyW>}g_NwPoDy&vc$2|-((JPb^_MuJk zepN9=y{VJDNCBk^XLU~UnoCiAJJhn98Do-A2pu zQje*8bc-y@o5Z49Qd!P9zAqUwQjP!ipNzxx}B2cjb_oUk}U5qi*D~^ zdC4bKD%~o{^5(MW-sUXt6pQYc$nvg8QAeKMfRW{mEu?(LTPylTtZF!h*&vpX6!sFb${V3mVO#W8(luVD zl#FO6)L^NOwAS0r(icMYv9+H6t1M4+;BPAC6R#Z0OAw0r#2YC^ot?k%>{;hcFk}I? z{;6l3mHAkGJE?Q=nb%QDhL!i4>dpAfn=2*!CdFr-bBI-b^!iFkx0)jr$tG_J zOTCH_YZ{r+P z7OyeO``9|Q@wa$~r4$x@1!jxa`aGq|wpzEv>`-idi`UhVb&#!Ie?vAyws|8B*#_C} zO)%se$XDK8DLFFdn=r@hYp>=7+Ln_2h}q$_HslA$POq0C$057C(T4mC`No@N$bECs zEA3f-ggH~c@wZ+@Lw-l9Jzir&E0Nw|?{BVs2! z1mbT?$>bj}{)OJ;liqL{lVe@L)!Pl*I_1qWhFaXnMaS?_`&6!W`R{cm+n zV@EL?0rIEU+K_ROOWs(P`;iaDT=f(;6F zQqTdw-xt?BcvQ8vgnzq?nPAyL?S1+B@>;10{p>tZrKOiN?O2w6V22$O>V90sMjeeR{ zoN_MqAdU~UscZNPrKDRlL!cV&nUDy@q{}w-RivuvUu5ZpoN2XbEx%$h6|?lgh!sQK zx0XMoq>^}1Olnlg7(N=c{K+gY@SfK4cT4%AnBLP`e#;o83P-7u{f;bplq%Wp#**G! z^#msSy;<}qRc*g7iyoz_?LW?<$E0fePq65BKi2l2loF0f)%J(5tY4_kX>ETbr_y6m zwfzYkqsOFb`%^eZk4e?`XR+upsoMUVEP70;w*Nkh9+Rr=uVv9=Qnmd}EP70;wvTVd z$|I)7q-y(Lv*tKwmO4-AQ5b%jz2*P z-Zg~U1*NLvzbqvjg{k9DWznNBb^KXUFakb7jl$IR7qaM4n7aPEoJ!9ON%1#I31^0+ z_}_7i?jcX{kFn?;@)W<2MfZ@W_(@gLw+G=4$%s1(1il<+M*DgGdqcRp4%v=sj-ma*fsJj0^L>{9&aSoD}(ia(r1 zkJ+X8qgeEqU5fuAiypH}@zYuKm|coLfkltmrT8zi=rOw#{}mQJW|!i>#-hjUQv6I7 zJ!Y5UXG>9iaa8+C@#h*cSRSA4EEDjoq?mgCUPCCRo?pVDvy*N8b^v!ZTw}NTO{IkG z!TNqHDdBvZ`hHg_>JCY79Ifv^X2{LRr=kC}A&nr7{drQtmR+jjAyb9-x@LX}mvSzQ z>3dx>-(k`Bx@LYEDFrco{WSN>vFK~8xnGf`((CFe)7)>%`RK8d=Kjkp`g(5ePiOgN zp}N;K_vdpycVm>C#!s93%UK3MsFmH^U&X2P{V>hnz(T)w8e32Ex3TE^VVb{(Mc)t8 z{39&-ewgN;VbS-)H2+T)eLqa||6$Sh!!*B?r;ee%AEx;(i@y7%`DLYKL~9&Uzri%W zD$Dn%5lqH8Nb{3f8Xwnk8%r%bJylFgmK*L;edcNYJuGjd=BZ-3u{>NPeONAC(fJH! zS=Uad8o@IC106GgWp`1`RF*!6bN_)AB9L zHAOLpSr$K}w|OxsPQF?mu)_PxBvP@wla#<_}^y zdJksK?x2_vQdF5~&On+!QOcI6{=K*GGgT_ti`5>fTKJ#-Csivy_dlsx``e6ElyhtU z+yBJe>F@hb%$@#^N}}m4)fsH#pJ6G%Pog&d-z=s1Nz}%V26QemqJOSYE$B9W8I}@= zp?65O@o!++cbocpW*a}5rE`ghHDnpZjFO^`Mpx`<8$ZL49+0;Fo1Dr*@9t!5wVnSy zOP3;9BPBeB?fi8rMjpe*ZlP4UhLl7;?fqSbJce!E;~zAHzRTIcKQ1NAxs!j&h@qT2 z`M(=NIp61BG2}_)+}Xb-A&;0W5A|c;?~z0`AD z^HogrC-go|#uGzVN-s76siB*377%5vUy{F^+ms#|lj`OD~ zDY`?B^Rrp>o{sZ#SoEHb^XExXbuHS9@&4N?rf6Fe{N*fqTNC_MDpm9to@mtLF~MIi zMV;m9DDwn=he}mco(zAtN+pjN#bo$-|B0FC|M;JniTTWy=Lf6l$zO6)-htAhz|2iq*)iTAe#Hr|=!*m@^@o!@J5JLG( z@#`A-)WLpD^_xox>!Mlyy)3#en&o$8(RI-*{}C45?w;m9%A(ud)BJucy4^j^A0#Dg zWl!@bv*>!}G=Bw)u4hj3ceCi3VA+1PvUGgH`H}MhAg^mmF+iX(QT`2zbT7uTV?yrSajPe+i$_5+g90rYZl$M%J%PK z(QT`2zrB>OHJa@YV$rqtZ2wgjU3<^=XRzp+dA7emNwxpgzk-z`OLomQI6@+)5_kC=Sp*3?ay&Ft4?q4ja}_K$gf zij=U-^ZmwB!qMCLerpvI9e7f;8Rz?tv3%G{ozwaLlPvT$Kk9Lv?~i1;SR_-V{7r%kwPj z{NGp(VC;sK8f#RJ*qZ#86M zJ&f7;-y702j`29ZkmVLmwadR?2&MYQFL6EXX@(_ZkZO;g#6stk-e$AcugXGi{Hsz1 z<7j?eL$Z+1e!rO^Ga(23dkvv{4*5L{nU9#m{y;+(Lw@u}8S);az< zPWj7N7IFzs`|Av$68`LOH-t*~i+|7%D&aZ*q#;zo-~2xfp%R|=OI1=wjJ8E3{L?RI z2$k?}zosEn!mIvmEVp8&<#1dH|N8A%Xg1VXNF?ZK$jgvo!80snC!iJsDG_8CG80lN zc%9|kPb!~iu-p*JCl+jGxxPb0_H>EhJ3|&AMg)Z{3)iR^C%DKmrT6W0c+f)1mZJ9?$Ai0B^g6P5&`C;o&x{9;N>RU*CD>Lx7|25R-W3op zcveby@AZRG|H;P>CQ8Y+uHxRi2C4jDZWY>#Z0ilw7`H>p1Q(@bS${Rcy9glH2IZ=% znC;I+iC z>L*B*U}Ci})m|5CkAvwf4-CVabi`B-zLJtU|BX+-TiJ3Y8Wxaapm0-+-}6sU9@)4hNa>Z^e#Z^2A!p3S#==vbVvz$ z8A5M+t`|&{l4JF%9kI^f`E_eB-4KCoH3;TO$%sBs6Lp&osFwt9u{;7fi&lT5;C+@$ z{UcU@RJR3dloYk!Zws~?auzdHZVL`bNw?@b@+6Iex;N3$D2&iIO)4OtCPAu{f{6Zt zNt2+pl(0Nag7z%BJWYc8St^Z;ST`Y`+k=N$YC@8w^keCcXYOQdwQ2Ay%VR|{mW9^B z)JLkO!9*oR`_(jMVZiL*Be(l$t` zr(*8Ldjh9H?hY18!F$M&^XriR1#1m?8`3^VyOmO@m{pJtK{rD-K{^G;4cP_h67;Vh zrpkkK4UQX92=PX%+Oq+8#-resL)qm(Vy$zN3M{psM8lw9i=+AWP| zq2DH0dpqS^7@2@A(|!J#U<-?AizgMf^=$AL%ci?9GXnBla7|NLo}ypVb3r{Rg|TKI z;EQsdD5eREzW+QIv{0#{x*q;qaJP{U9kJ(v-ckx84`aV>z_x}3Ppf<)KYWNce0IhA zqk?pn4!mC@gI8Iu+pYF=WRT6W4EJZ+(~-dJJgI|p^bTjJnbVnK!ydxz%8e@VFSoF~t6Ref8rD(s# z1ZVD0=R)sSdT@b7?^k+og+=dIda$G!r3zbi(pR+ zOPNY;oxXpX8T`dE;wav0_$Kayf!#{QT!R)O$+Vz4ONni`F0ifaU_DC<+*igxW(3Kt zRjO}sPk0S7GZ<~iOvvnDy_78LzIA9idw7g1J)Ct#T*T$n2`%Cn@3VtkuCaT`1@9 z3SS*~Ecyyx9b79#{hEG7&Z~o}hWr6p6C_Jf{k?RrTN^Yrsa)!X+yAAN_ce!ig`h)2Psu}&F2L!i@xUbg0fOn zJ`qIc1ve{^PmmhOIWK5zNL|RGV2~k=A%}yphO~hc1fNO?pNxgU_fo=Z{!~!nAu3^( z^&Os!_aoKmV62qFi2fD)5=>;#zk*+aOcwns_$A2iq4Iemh*N zmiV(LZ9UzhbD9e&o+$Z<5-QIQNXbNLDFu<_juH87!D|vXXnDu7j=zoiR-&<#94ia& ztlp1QvBV&jw^2{{5h4=vrDR$6pv8I$5>Kp?l5IV7E@GX9xQSCNWq*rUmmq$kd@m|b zc;84Qsz}L@=e;;uN{PfvDyFDDmXw$!CA=pjB`Wr&d{lkRL#on=DlED_RwnTPi>{Ad zn|NGGc-38-7%e5snwy6AJ|UlL6T7A4SW_|fUKvs@QT4N z)U4pjiASY`HKNLiXE;V*y;T!qS@hLgRd2nduH{xuOyn4SJ?og73)bP8*8e_aZ5&Yp0>;GT*54DXGgGiY{R&FKklv-kWr)qN7@~Nc2%H zl9Kuu)=aFEdl6mji%#fn? zf}~MmvC5}tFK$b$V$pliB(Z}vtq(vdlmq2*or@tYKLKp_pcgjY?!4iAvZ!v0F;` ztV~PHe_Y<#ik^%u6DwHsQEi!6%c75JOZ^)xN$usW*m|oX(f8-pMWXM|ZHnY$em1p9 zEa^{MPmk(8tGg1bSvsPfOD*WT65Cli^SQVy@dL{V{7Ps<{;ouUl=0Eii&fk6uEYf? z>WZ3OxcXp{#va z{oX_Q5<(>m7FpWDCgoe(357mvBU4 zCyOrOh(sQXF5!s8Q5Ido5s9B!bO}c$&a>zej!ax;(Ip(2DDfg4!;C0>Cw=7&=n+bk zW})w-i{_}ICT>(Bud(s>qyHz-PD)`>O=fJOi;9tTzY~oxR+L!CLg$?%JrNxvw`EPo zk*8nWxWr2=be5HDlA^BpJ8=xhC3=jdR7xIzyp+f{WB_DhVpe(>GYax*;;8uA$A!^9awo`IhAf9{NTf~-Q*DH7PGlPLEhIOw*N|h7t%1izDg`H1LR<0tRcN2hZCC&c@}acalw$6AV(8BCWraVgq%oN zuZ8k1#nODU-C!knNCiN!E-o<`ASpQWryhfmBNROiEazuA1~EOKN7s`WG=(lXfbR zcaqqCk}Djuc@lbiAk~tp=Fqk>qK6>YOG#$=gJY^Ebz&*~ii)Y8)Pv>UiFjTh)s0E% zEM<_YmXygXw?HW7rlgfDZ8+wpr1dNvxy&_^jQ&R zAa@|<=A=O?#`>^1zR&@wmDFW6rOL8$A?+c_NwcMdEtk4Uiwx<5n7TL*2BS7najZ2&`&s(w;Ti98o0rPSmY-6m?7l)_SKK8|xI z)ZUXC8>uEBRl}r-98(K9PlnuvhorRbtNhxzwc^+oDJ?Sx)ThM-A zjF_fLPqH+EER`~hMbB_cO?r`~$wEB85R;me!Sc_Th_znI6c*i%OHImQ8QK`%DV8zw zSq7#=tZh=>W_by+OUnB!W9s5N5mMH$ltv8oT&E^&VA+9~d?{O4)|%NK5sYO^ z*)L^$wBac=rjVNSBTG97jT5CNosxogv~I$z5Tv>zsli-2hG83|RZ=R8ZiBQ+YAq!r z`q9Ix-qI?mE6eyI>CfU9$w-!)iexfNalD^|>OZZL7O;F>6!YQ#qwBuIt0>yPf$u>A z2MNuyJG*F3cB7zxASeiksEDBmktWhXkd8=ER8SB?Aao^k1SC}Hy-JZ1Ly;zeRHgTh z5l~Rx@66mYyF9<^%^%Nm`Qe_jWoBn*XZMht)AAEZL7nOtNl7iYNG>;1Ip>@r&yBrW zq9mK9s+iIw#~^%!_Ew}l$!MIbyoQO9J|uG?JSH)+l;lT>sS?>na)@H8MDCM3R#lD$ zt40cZC+qVxgy&N=QibFeMxMN^YLTWSF&GK+m}-%4ND^>v@R;h6StJ!8Jf?c&2+3HA zc{_50WGThG9eHM|EPW`>AD&N*$SWk%AUvNMk&j4@P)yB83dwDXsTo;K@&-m)JfEb< zZjz=Do=;LFlrGD9qn(U-Ct{P-gYcMlA~i{>U=D=mQ!CPnq$z~Q)QXHH$x}t{pW2c6 zBvA;DsU0~%^4*6rpE{AhNOnVbOr1#4X}mru;ZKUleCkGCBpCqVF?Aydz+Xn5r&`MK ze7#6T86$eO$RWIY64^CFY?l#kgFY3~m{MiNa48FE@`$_!Y5IsHLYh4yH6hI(k$R98 zk*k5S8bjWHB&H>#Wh8c{tPex!?IEoq#YxIw-Dwxd2azO_&5%zats|XDc%6Gg+C+wv zG=uOuw~Z_ysR7}2Zudy(DUkM&T@+KVwM^CFk(i-~=@_|6F&|M(r$=Ja5c6Rqc9z_V zeTdNuroUq?!%s8tF{Zsg%0&0`6G2c1nC*+9EkY? z(kn7NAm<=oMAii4D&)(^*?{~B=^e@cy{r!}>mNv;NX3AJ4&&Y`(t%_i>Kumjjf@FM zK1jdFCXyo93I<7zTqRj>9#?8e|480BvaH>CLgMJ8L<*5C{R?9s#0-d3C#eG|2^kpa zBqZ7RtdhJ6r$)XMGQi+7Ipq{|01eWIKtAezhuOSR`?- ztWTMa@?LL55$2h{Cj20hNbwDJY-5_0LcMt(;~=sk?kZ~C(E8T zJ(9jprsDPGeZsUzp=CRPh^!}RkLwPPSsqFIjmM-J8!#`L7cna$ON0zCCcJ@xT ziic!A53yFngRF^c7m{qmoWorSU{91qA%$mU3;V=^BeQxmDSM0y0I8RVzPagy%X_KuM4kpahL&fBo<*)f~E zGqO)evT>_5e)|$VrleTQNfj`90F}G|xHNi2W7oav>)oyGT|!Qcgz- zos%*5T4Uw_H9Qw-CInAQ*W#>0s`HUuLI#L@E<-Lyob!Ipe?hKA8j*~^{>zS5cQbO5 zZ!7Sc|acANd&O1ClaWC&RBhAv5cWj2SusZ(t)Po7wNGly~tZ=W3A0%tqI^q!_(w zpl5?*H=XNTPK7>=4T;_+rL&p2q_J~>a7LW1QFhtB+Bl{?s;qCQKWow=1(MQA3kO7BT@VCDYL^JxyMdjly6SOnWIRy;OynAHR8;%A%^f6HG5X@qwxZ@QB<1GHd!nd$oMhfLC1**x zA|HPL6*d2nBK8lTD~OsgcllPxW5Iv@C*I5-kU7|^o>@_f(e=E%Z+gb;DI~?{vq_%M z&zS3l_-Ain)4C`3v)ZfAnNbq8SD!PBkf^=-oY_N&zY?{GIg&)JL@i?Om8tZ)i=yTs z617*0nkR&$hP!_%-_I>-UJ#NJ{>7Giqo{d<|7k+d5qV~Uyf-+U`l!W}RJ z!}nn^vxpG6$9Sq@=GRih6OEl=FUm3&L4Jq4Xl@tc@72=g_6Lvd)tAkEBxhtgwa|ww$4_`6Ykf`(U6?2mmaYmg(onJA34#*A2t7euExsLH4$m?eI z|Kyg6r#a|t-!SV7Nfpl`dCPs%Tto6T&N{w&_D%DRhdfoX(Y1m+7H^t8Ncuozsx}4= z31V9GlV4qU(_Bw7PRB$;GG@R8m8ud+>+UM&IV6=gVZIzSeA7Hla@9h=3wg`DNAe|7 z@fs$Y-5!%USJ!erJC_WjKuA8LPc*Yg{%MDIcaTpN(~FTYIr>SdW+sueJSF9AvnNR* z^fo+IO>-v6@8}b_ykqVo8H4AUTxy#SgrtUNWA2ony>-o;Ie1y}Snxeo*DNfA-q6Q0 zsk&xe8Ka-5zH5FVW5k_Zex!QOOcRn3Qrp$Q978eu2`}%X8k!eLX5$*i_gF)-5N|NJ z;~0mzI3Cl;>>?y1)H^C;8ks#QX7QkqQ5dNjn_EeKTq>oBxt~&fh*W$_o0?}Srp8dY z?aj?@VOiFfy`{Wwj?5+YbLi&(K3R1f2eAH3yu0eLmP>Qfz~j{E0Y z)N$`+o~2arrRA1>X(r~DHM~pP-p3q6vW2#^uX&5)I@K`QED|eIRib=S%z;8=?>A{0 z<^jyFg=B`+Ona(1j^y*fA)^G2PO6zMQ-yOuN(=d!#Dcscmn!wFiNlPnq+GU|wY+LEXhL4(bY zNJ^9s84X0trzC3a(_pg?iGk5zGZ8b8q{~fwdtb;1DWZqudu*^dJ|G@gX0k7R3KC8hGqm|SR0GA5&d zlrJWs9}{JnrWCclWtdsslG6BR*-nRVBKF2tLjL}rRB2|2@zPVn>RD2n87oDk8jMtFX5)a2gp3xg;4vD> ze4hg|9weEe0$*bdY(=bmUgN47n!cX_87f5BW7^zFCaqJqYiH=bNQTLUgV!FkdAxAvJLJE-({G z5(~(D7Me*U^&mW-h30!CA6~@ocA@k|W^)H7Am&m1)b&43Z*!@OJDrUMCrfyJKFT<>nod@ep3ta`Pcc#FScTZnX@4N0qvp##1xXBr0Z0< z-fyMpko1M{EA>h(2X`)H80W-}6&6TP~Swj{mL8}n`d!TgBi8wlU_AIzRYdu)%ng+x7H-ec}0nSyhSKVRNs z?k9Psja(}+o}}+FPm}PrGY6&bF)x#-mBV{ar@0pPxI0T7!%jad6NC+;b){w!}W_FcR!W7>iufwFDzqTz!-7`>inzO zjpQs+ZG#*(x04h`Pr}~}I&MA?l58xY7WcdP__H#f5LyAhGX8FQBuSHGeSSBygd`gk zaE{5C*ynhvWTPeI2+I21Y(w&RP4s+d?cwy62TRX&$eGRGhUFTmuikRGLY-$ zZ$btb)wf|>2f1n9rx^b1rVQkk87?VPapB*{{?qJ3qMj4oF-HqI70Q1ZbH)p>M!}p# z(f~RC2KmQaF2sM9bl=P%QO}b8H4jP=qXK?(9-6-k@n@eNnsM?IU>wqk=8iilWw8k~c9k5c-45;J4*=EgFtd3Z$4dfh37m!WXk*Ys#31c!Cf? z%=6X)5`Le;S9%w>K272={`=-7tbs!OIoJ}`2og10Si%}BBsDy7xjd#NtT|Fdt89yN zqlA?qMa=0viPB%N^1Z{$^4~fvX?a5Y`MMXa^(1N*w6v8$qUP<f0cqd|hd)Q7xWx zMp&&>DPwgIBKs)5Ql*UbP{tVQImoM)SzDws)N_zmtqvsWImoM4@ppMlrdZ#?pM$(= zB?W}9bEs&o2?$>q@|snszMqP(-+0{`84$jjN>Ff96ufsxKtNP)~EJT16W2R2hbPnp4d>OQN3URJZyy zk}+LR$)`DQTMtOo)0`UCfX1S9{SAtm)-WNd;rP08e!iwPnxxeZdA8KFCXsZ5@Ux|+ zHIt+Qo}=+MR+6j*BrQ9JjE!goN!E6fz7YN;jU+3s2`@c0yka(f(Fy0+J60hn`Wp9+ zRaJ=p_VhbeHzEF;lJ8g-g^V*6VgynI`P8!VG!;4Pd}>*i5dT_P%PKBo!fH07mQ{u% zKjt@zi+o-qQL`eottupyF;7w&F}1B)Bx)|Dj@5ufyRR1M z)JV9V)suwZMOHvr^{iwPHQ(~CHH0J?{o$L4dDj|6qDHy(t#3(=BBnZG>RU5}q=au{ zG|1n)d(WCrk^>_>{^s3#)(T2>aU-6z;|Mme)|03^y9QPUiF*I5fwfzR-~TkU4w9(; zr=j&brJB1&o>2|0b0kBwTq8-qHLf=5+|c@qq!gsFkpHCUquj`fZRQ_$J`d2y8X&~) zqZ(VioAa3D@Vs5}`A$=7pAi44VpHodiR!hQS|?>HL-p8At(z31`mv@~Mq5$3u^}v< zXf(63w-aR4v!< zeg$b^Z4;8J+j0wQFA4wE3_kX2VI3wJ*HrHL_pOs8^B}w}zi(Y4SvypY*;-n6N#-Xi ziD@skH2jwqCPf^JHmFZatGEKeGA- zg!kB8tg8XxJ$6^CQAa-&@3FgC83Exvc6X~(CqIVw*dJSU0>XRjPpobM;XQT_>v%wT zkNv4t{X;(=-eZ4ebqEOWu|Ky43&{}Q#o{Bho>rmGJXMCie)Y8Cx^PK09&e3uuzz}5 zZG>d#D_SpW6UD@TFUNJgtQWhw4CiDrNk2XJf)X) z_A4nL_EcrXB}=)C(V*P+mq~K9Qc{cLhi{d%C&@NLNk5YH9h6KaX|-QT_5QM~D_TyH zJcX6Rvh)EdGN!ebA_KViSL$9?#eq`PmHG>-x{zdX?e2}^{-sqtRmP}mcOR?1kYt0) z0K|M{l^G;s)YZJ7RY?e*51vA+L`<@keK3#7#4odA%>d@8Q>;2da7H19uap~TjSL81 zc{a$}Cq(8m2KfxJ(ueST@JshtA$emwX1}f9gk%_M%I!=)_3|LuZ|w$_t0jKMe@GS=!aLdG;gUzY_L zZ$0rf7yl|V(Rz|ZU1cU(PYX#2zl1v=et$aAdP#^JRn}O^rIAdf-?0AHTJVj?S-%TB z*;+xOt_72=^(3n2pKQ$;$y3QMJn--7O|kX{Bzyw%>ef9WWTj!;Se99tbzGaN&F)2oQ#9W(+ z`Dd%VkW@oGom^;rLo&TD#=JjH_o*V|*|n##*MA5tx4k5zy~wUj+pEg}Bb zQTAGmgvhVnrK7C9)?p$3SMT;&71PC57)e*Yz6%N?%%9UB$GGci3eg1S@~!182R-)E{Co6g!uO$N351Y z{CkiiR{5DcmHb)@|4Q>wE0IKf4d9sdDT(?T!0*;zA^v>b@78r8{z&h4D>O^wtk?hi zZsj6T$NhJ!fDoAvx=rJE%M;??t^Z-YAXDkS?xgiPi8_L(t*RvI2%ffTk*Fhh+G-|5 zu5ep}{d30JD#YK4GuF>Cm9Fy{>sJz0=QGwZ67{W^GuBNK^~U!ZD@#afxIadwybnKP zRhc7>VE8+XH>A8nvJ{dN|9Hk~KvKWAj5%wyAZZQZF=wszBvw0_^Es<4Ndkn&oU?k8 zgp*{IEcOWBCMaly)1gnz)9puWU%$+}LW*5F;T{v%O){)+YFVwpi?Pvxd z6n@y~=CR^EVALLYs@dPzv8q4vg2D^bRXxuyta?QdHvWsJU;$+Ff{Om_6@$5H1j ztH>HzXD@1KWO9T}rr%0sIW ziE1eit(JjQ{Auz->#!7~%K;p7)CY@G*UK$U!5r-0kjGdlk|DSjgid0{o+Xj+RJkBA zYt#qD=8^ESUW4Ri6-jtmRUr9T??9@0kSExL zK&r-&2wNt^@3l;}Pe_W<05eN15yRM3A!){5T&>zeY*u}v+|TNaD#+Gv;*xB%NyL+! zb$EiyE|Mf)z?cPROB^e|S;mZPFRv+4mK2aWxLc31e}wom1Mw`|7Fm{Rr|~S7M76JY z)+R&d%%vM@=(7BoQkG-JwHG9TB??J1*5Dq$FXU-_@e6Li>gmKosX)ImKarfdDi4-UitvNUaJE8K!~jKq-ppX5}P7Lf8Xy_ zHcyK2=0kiP|0L#(*>aM}n{f3IvOXYJAQjopfZT?>#tsMMZ^-NHd_as-m`P??0m%ue z#Io(;bxsw%R$j=PEPp^ONM#lukT}R&tVBSbfh4ku0VxKl!fFQOMMzcFBp~G>)mX=X zyaB1sdIqFA*rtGd1gXu8-F(}V zaYe&i3#1O~ASBiJZ86^YgS^XnPz;w;NPTvIt_^J)J*zHx$>hO7-q z8#_WiYRHIy%kTDjiny~zP#j(&=q9)8CQL}1ISOQ7!DtNa7shYB) zBqJcRguEogZw1X*4H+Xw4k2uFGggmMsqaiSWABsPOvmah)jrlW>)WbYTxj;@-uT6VjE1_woHa&fpS0jrlrOL`bp_8`6Un|5YB-`Z&T- zAr}uyS(r=8XYAq;DHZ48cMuTMlT|#*CCwOtKJ#VB7pxlz|K07^AYZbXLXwT)xbNnp z%HHh7VLs;3>oa-8HjpUkGfMB#Rie6E66DJjTCXb zMj_`>Y}WteGlpdd@$aq1u%4&*wvRKK-Uu1rBGnjnK!`t!K9(IPQSE&!J4f=}LbS-K zNYAd3d=C-7m&ERnjNWD#{ZPhu_8-XYS&tP9!SlsjRz96|O!rWUNI# zQ(3P-J|XP8scd*aVuYkqKB~^?YzB$SIi1auslwr}aQ$C_xj43rBm$`i4WIiOTtV)>))&&$ay|1PBIxXWhs}JrRZ&6z^Vs?*Kh%ACdA+N zh3tJ2we1U8JDE!Ns|#6|KtB9Uw}ou@|KziXee*y0EMnvSC!a;^yZ^~&5nKO1`7CBX z{!c!OStjN4+J~5J#3JBlQ#q1uXQhR<0d;0vNdwvOfogX(E?~#1BJ7nBN4VSUzBnu%QujkT^WXqSBCqT?{)`es*gvTsr zpOZB095T9phgHg~uM~YuSFlk5;aj?b%@*Px)0J!?i8`h$*$SB|%=aPBc_mvP$cOL4 zm27W7c+M-?8Oles%2n(#iOP8uyCqYF2fit{eHHtgWE_NV*D99ng52}jz6lxsV%t}< z$EE1)TFs(D{H<8c3X!O?RUkto3Y3KzPi0_M;HLtPL!aM3uFH?Ut#+=cud=>>$Z) zDr*D#Ly9hIBRd}uUe-qTmk__KAK3#ERo0K}v5WG!tFnG%xk*%6KQdE_E^8Bu3kWZ3 z6MJ5WU)E;!5{W8nGkZm*3Qz1OfAxDady`~7#PIfbf>Gl?@HZ6FBY}Y?=_i&fC}=5>@AIY_UwG>%5JvCQ)_X z#x_aOrEh2319A=9wVfRj;+M69{XwG2+QH7rRN;?5z_%<=!yW9J6rJ-9W?YiTOZAyM zSeQgzt#+^iB%`{?Hz0Phf+XKTc>CJPo+jaKrzpz$nH3}9ZKtG=(j@z7UH2~bD#=Mm zTO9XYERp2cF!|JeH%lV90^u>c*?T07+R1U|9@dhLAHrR?Zbm?n@lC%ysL>+2ie|0KD-w_$WBvC>5$w%2iawkS0Q}=9AtlzG{ME4 zkBxt0_et7Ac%6S^*)Pju@l$PlAp|jpSS-n52#-0$ERySMWIl&kl;k0V#~fzQk`%{t zVV=(s_5w*FgvT6VfSm7&T|A?HsLr$_L zLj1Sg&$FH+>TUP)Y`qZw9_<2q>8hU(KY|xn9Vy`%Kj5h}a=ySCkt~7?71Bz@;NBq( za*=f;*$m-hwu`Kn5Py$dWPM1~9=pg!kf=R&@sT^JNg`)thQF;je@FY`HN42iid6oc z)I~N$<|FQRWU6!__yXZTd9A$2=8$ZI@bmB@TPj5#ol9(OKzPh0wq3{>LzRA+?G%!1 z8<%r47(!ly1{rfV9$&BAVzWI@K`j^i@BPoipwUsk>*&v{kDD=b!u zuHjW?24ouc&sA1Th+o6&thf-rhSynbA$|?7vwAY0a8b0B$EIT*pEV&V4>>uLOKT~* z^c(EMfbf_b>%#9rl6{zw|q-rVzjMJFJ$>N0)wwH6T%?-(l~QsB`QtYfqxi zvAe9B6kWr6tY<*x;{3VCz82!w@EhX1j9Li`&3$DX?J=n?#n#S8I|;D78{5>>T z@oN~ipSsESvp=gAwqFRy7UUDQ8%PPO`^wyQ3leo-ncHqpqQ+XWc2^QL){3=zlC10= zGIk^9Ja#{l49KrShLFrTE!P|8wa1Zc$}O)%dF>e_2O&98{k(Rj5dYeg&)!L*u1)#u zqa^Cul+Qj*`Ao%n3da{vG0dIVd!5ckxB_UWNR1sJ6v0VB|(OVH`|0pFql}@1t=pH}L-bd1x z?(w7cVUj^~j~}&9k?{Gkr%|7H`x40w2p>7b+kcZ3?}Xo?6)~Ydd7V?kGaxdi07-f) zc}E{_7bLj=kugO{LYN=pBbj*nMUny#K9Y&IE0FLvZOfu8*RD+R4TR_8+VzC^XNzk$ zAW>(FYquj&XNzlhp?og(#+;|f`7@GxkeMra&V5OYpK&J4Gz`xkL=u5q6Ecz{ZW_L6 ziF^|5!z3LcyoL$3mzACGA91|uikKb&X$pD9F8-H@5zn^TLJHfRh2Z_uTezEmJZn!5 zNEgU+_F+oJzcutZq=+4NCp$08$bMO-Dr&bOX@L6h5n3_3TR^@-s$%voAt~X!mGQkV z$n*9ADMpj?A>$h%#qaW*Q;bU^LdIms3wARhX~t7XwGi^6eLx7l6NvT3s~|7gz3=f< z$;Q8EgPR~_>~8;ZNiz=Nu6949yq)7eE;45WtEbS3$AF4n;2!1HDMbCNj_e!u*t-H+to z0M^F&C*RJPMdzMy>GvL}+HQa*3l(@73dK8f}`l5-GVR-(N^iqRYU=Wo=o zikfCF^5U`6L~Jx?O2hY{1SNVIXr{5D+T09NG-dOkTj$J zI=qJmscT;(d9tQ_I$7WLLcCt%jC1IJ$|L4IyN-}F<67Jb|E41DQ7dpw6OaLk@r?zAs^W5rHJRAeIRY^tjA)I zGrk9#f@gz}cJ{rnl%jZsxB$n#gMA>El=5%k*%x9u+6j+KF(4BlAKH~j_*pjv(%GIW z#NW>!+53dZr<^kp^O1d1rV=f8Eu_2MCU=aek9l3TrXKcTl3$mGj7-Gzu-}iBG3x8M zpV_@hPH)B?KVo{?-Aoy?Z>D_y-pig$QU!J9qth?!{FaP)oa9Tp2MK>Kl7FMMx1Gp% z%s68tp4}Wp&VB3-HW%5x?m|**{3rf0^K`8vXY2=Rsr|m}qqM~EH+K0io%wR&N7)8b zRjQb6xK@VF;~dpe9{r&W8Ls7hw77W42rbpB$=Sj*Ez7G)8Kq@QGOmG0HCoHF{bcE5 zwA`7G{ex$|zT8IJ;oCe`$8^g;|Ac(TX(>KX?$wD}9-E0X95LT&nKS{bIUv)tB;ct> zL&!WW7f>HQx3f@7kA-qZXpxr1&xec_NVQmt>c^JZ+r-iF?~a$*dxfNi)t6zG*@sBf zmtmIKC#8t5`M0ZMymDp%{Up89kY(pARFxgQ7Qa9<0f+pEJ5F{&c$x zQu)GX%=q5$g|7qQ_3?$T`gl~P=EwV|kEG&HT@xP>KFY22h^TRe4%mu|_O54n%s8WYAG}QnxopQhC*^a< z7mzFVAR)4>6v#Duf)sJZ9|5^x_b4jM>a_?faM$8XBlZlE$MKDUj5U}wve%Q;DI{z7 zr+rO|=piQ}AAH}cm@J+5W3wT5?IJ?ZlOPpe|NOx2K*D1-Am(5DL2+4nWAtqNt)GW> zixM)Q&-UUMf?8q|ogO6od%2xja7iVZbq;T=ASUFD6(YCv%nW>2#MvN4Z0XM^E5_L_ zB-!}*3Z6nhayk!4-p0s^OD^YX8D4st(P9?n<{`PA@-NF8?l>)1;N*3>ku1bE@!7(> z&L)!2kb&?8I`158K~qeNf+FWHWe|o-;^;q2g{fePAihOFUXh@PJfaY zN=kXbnL+YTmP}RBSwk}CBYb5AIhS-ARhBuY;+eRVStNYq`GJVZAW6ovEgnF}0J zwF>hIQr45G(P=3sE|JH`QCxeZdeIp!L>`^)kkZZ)A@T?ggp_x}Rb#v_=v1#N zMU5d}bHu8WkVNOKkTj$7HeA~wRUGqena`7hafU;xIn_yW{e|Z( zkm^ovl2J~`I0JdxxmQD`DtjtqT!z$eI@FXh1N%7(lH}A$lCm57`994kZ^B0h+i4#{(#;nIkxGbcpbNpQ?f6v6%*dWcF>h+~0V0PtgNK5A;Nd+98hLG0I z;rDng)u!LM-Qy8H>`LnlK>vbYBs1nKIOX(-Do zjjQ=2$R|z*A(iLzkUx+*tHlog7Ir*B% z`l!*@K*uIgqpyLEtAs{h1D)rD;43u!eD&5&bqRyyv=QknA;U9+JP9l$Cq&p`mM%6IgdG39_ zrLu;69w6OGlp?N!{B5sk&MG09VRhC`cQ(oxy;gs^lPM%QtY++|J9{an*p!grVB2Rn zhbX2jBwol#iYbbbUSY^g=OV?t1bJS_EsA*sSCE$=vz)(4-hxyVlD(za3Q^~O_hJO* z>=Ke}+`-rUsv%~MQ>~RermCgPbLuFemNL)jCL}eyp`UCi^PF^&iVN|ZFSBrO?p!0` zE4b<+=Xp;44|vYWh6QOVWU&z0|M1o{&)FnI?&lDq7dqSjkDQkhegdlzTJgJn=em&O zunXxb=a8k&OB7QKk}Ra6jL~PyGUq1Ar^shGVwO8C+sOUX9&#N= zXQgwTnGm;tj zZGv-%+2u?S;`eNOol>27suZJThWsswUz~Iy{%Co>vsQ?|pZ7bPNmTE*-`PQ;dcXb7 zFC?mO+3y?{k}B$a6ZP5e6!}QjIi&}F`3Ul>^QI8LT^w+d0`d?s2b?uR#u;5|<9x>5 z%Wux~t~?)^Dgrs;EDK0;jEIgoTZD`YU%zh{1rhVRv!CR1%w2Ff;hZ2jOfjdN8zdbl z=8W@zWDlOT@l@xW9Nl>7CYhMlGBK!eKLM!33A!#DJ0Y2axFLR zPo0q@rH9Ji=BhKDM7@!5)yWWoHxtokzKDFTI%kFWd+eHXH6XloUvnM?kz(%>b6r& zNJ@AN#;e0opFf?>LS&u!SGE6i`U}a_BiO&3;W9>?Exebw<6ISzX5>69ztM5mxhEvq zD2wC8uT6hD`+D&0N;WQ3k>~S2j`gXO=4V1iWo-L>r#Q)+TeucL9yn)7s(mQu)gL-1 zKa;5vM#&lAht8PKx!`$Id-?9tLuZMQWaB>is8!4Hj|K1bl zq@0$&)=7CqO9tLIGOl8GMFPBSxEfnEBYxN%Rj?hmRcIQxcQi#)?G5_!33Vbsd1Re^S%n$t z;fR~2WB46C{~E0?-z=2R<9zuZ@@Py2?2Sj|(DNZ95B98|s>LjM+-K{u`1PId)wx>u zuj%n4I8V#gK6n=dvQSHMtdvDsHbx^XfdGrCM?l9NEvi0Sw5&r9$?LpT3;$gq zUV4TWRl{vsRDE`8QT6#*i>l8qEvi0ywW#{+)1vD0ixyR%{aRFg4r*CX=f+_z{0_PV z_J%KN&mYq<_jh3K5HWuU;q8>48?Qr7=ol{-e!XQp+J=_#kZOoIqoo6+5Ms`0x%@ev zj3DNMmaDi5H-cQz(yLd;J!((==EDP6U68iP^Xb*zQZ zQlqJiN!F4Ac?vP9z8u6@9Wq4A$-i;+K&$*l3;)UrpU)hnm~TPI#){y>cVqgsO8xg@GC-)rCL7k zCR44}a=VF?by`;7>r6c7AGO>+E%(n>Eh|33tSoZQ)KUQ3)fKW!%d0q_dqaNFvIzTU z0OWv{oH)u;A*ZzL!SPxJxvHfGQvC*bpye5~$}5l@PpQ^)Dpr0Y@o_C1km@hQcj7np3t&;Cw|Es!>fpv-j9Wh+(>0aS1Y&D>{Wn}4 zAO*F=EXGPYNW7LiZ{oW&xEn2`Wj|WVi-;+#C5-VIf7V|@%Q$R1->apxJpKcENTe#Q z<S)Oi;dgfRwM72G$O|#=X=#LZ!DAX} zX|Moa*Fj8UEz8kT_?H!1Xc2RIRmC!1a`;YOAGUEqMgnYngE!>tK

    @|~8FF=!W% zd0NV2yUswCX~{MgcgK*`TE0ZP_#5)0mI63lyx;gqODfKJerE2_(t1AbL~mjqNlVo) z<@qB(H$fslSKthoGT8dMQFQZWBPmoUm9mDTflOeVizWQhw z{{=MG|uXyI$jRzgZ>X}(9!fxM_i9WP(h@hYoh)bT2( zMIEp5TGa9KMIEmSIz}C@SGB0)^|}^yysB$a$E&s$b-WsBQOB#L7InOQQOB!|j#0;} ztrm5>d{M`%osQwhYa{k*XD#Y@b?f6nzQKh}?Ve)I-M{!ra9z#H`eEp`Yxv)@V_yI@fC9t2*x^)emtG#C)BcJH4?Q=UH6- zJ~60;T#1q67W(Isa5 zA=~51knnFqRcnJ)L2)0GRH9yDPh1a@`B_-Yk5qf&?vqse1wB?Sj0WSvePzxQ=VG*s znEi2mNM5C~4#W*1IlWnybtrBuNo14U&qw1X2$9>)*9jkuThNc^oN1_ghhuSTlBK9S zvU712`%6*d!z*zkg`5g?qA|&}xQQf#Xf${;E}dj1jRtSUeNWPuMuUIGEh1@&Bg{vG zf5ojNd5T7ZcjMNRoL(eHgAd}ilKe`e!EDi;B#UV@_*nE8l5-Db8_XR&O!CQWIU39x zJwb9|tsD&&h@K}|aZHW|o#-`^aWoo?Mzcu1qS0XC=zWq=2jyt+g=n@EzQ<05t{srq z<(HzlNN!^6$47&uqxnf*rqN*8s7+FuMuX*|@gyT@G*~fOn4~|A{a%k2C$VYlS1DSW zq#%v`Dn~1j^rNv~mFSx!#c1qTEn1!Aa~k{Ah}I@~kH&sAqYX%2p|M}>XmgUDH1>Np z+J+>S#(qtrACgR@vETdAk4ehV*spc87s+lK`?ZhuBe}R$j{Q1B2a)8XvEN70uSwRm zlViVb(Xk{K{*+_CUeU=Uu{8D@7@a|4(b#W9bRNkG)R~X{Mn#vBG@`NJx6w5u*XPTz zUwZUMlGZf#n;Fd{sf3XgAN$RU?k0JL#(qnp2S`@Z*l$_%7|8(|`>lwcCK>moY`LqW zmxN@7RI6May-A{4?uO`H64g$(MgJpF_tZP0F#|+f4yn16UC~$}1B|z(;fqq}TYicD zC*)MdjYb2L(9`gBwo6$s)501zgp+BQF zNuHz`p}Wy~B&}#B=RveFNy(OSej{6aOOhfKlQX_O$u~43lqbFm$xZArKC|>h{HG)X zXhz71?@cn9W`xj`N&3-@(9`ilN#3Oyp(62VB=ykS@VT8A;wO+)LeIvfbo^A3;W+2H zl#icH@-g*Vuf;DUS&sd~=YJ~4uOR6}^FMFLuOmsP`JYSI+kIiw~2uhVa>*l=yrkTWGdtU_2vffs%R7 zL*k<(A@o0dwr50qA(DDD+cP@;d6L~U+cQ4?C6aGwwr5iODo=XHI-A5{7e?&r2+fe~)Ac_6DErSrXrj&&mlPY@zU z4pq=gT#Yve@nex;g!aom>RNoFkW54ME!W~NlBizmcKqbQJXNNldZc^t<%e+b-{ZI+ zUtLJDSV_p=DZU>+Scoj0|8D7n_;CSALVf;?&!BwNnC)TwK@v4)Gu*QzYRndL*AA7X zt1(-Q`xA*8vxVK;Bx=l-+sz_TW47FGw_!3LHD=4}_9IbawtQ|Di5jyNaE;+Il^U~| zZXqG5;WD_#uaE7r-QrTj+QKG6DhkOAtF>y5+lWN1XLH;hBx)6$l6$>x8{Ya)&mFpNwy4y+kb85b_v80MF4 zPx^4jy^&V?ow;+jnkF~B_M2IZ?HcGGSek)@PHT%@ST}`6q#~Qd9Bz!iEm)gMH zPom!CZ0P2iBI;wPnSmy5VG{M0Xj8X5iF*6Bh1-Ti%`kl6_9Id6pSE^4knkBi{`PAp z_W+4{*Y!j9CW(5pwX>V+J6Rv~?rm2$N}}e+y1B(k)SHss-QiPZD)p}G=k5v;K4Zr3 z==-_((`Af$V>j7tMxx%>?eESaQLQ`0%@iW{d+gy%I5i80r{D2zjtv2_YQ;IQY0ZrEbTMu2g;}5Fw6r$M!35I!haLzYxitGiX-M5H!C17L(<$b(`B9SVs@?~WVBnKB0rk?=lT%0Dtycs%a3_}ZS$Zq9kUtkm$$SMc;7`D}Lck*FiM*)1kT zd>Mv+D`vC%k`RB?z1e*yC?cN`LXwRK*z>t_V|&~=Bn8mEHXtU`JuM_7G^V*6neTMZ z3h~F-JKZdb;XME!WAAidm@ke+Xg%&__;2U^?3NRfYP83ea@pl31!M=x+U+-yKQ$6vSM?Z;)Tz@(XzB$;KP#!!AG$yXGRX4~;S%@jMrD z)GZ#62ax0La~njAILCOeb;2zv#6L4nxGx1__?daaZ7M|eE&R+p;|>twpPA>~HCx5r zFrLI&R}MYfMYnv0luI}>rK}N>Y>aCq`;Ck4O_Hr7m)s&h@l?si*$-sQWw#|sVax~f z-sXxsfn*@bRd=5dzg=8&*JR4lRlB(Erf-v?+QkjG%yucNUEFlzc1Tg};+C6zCl|k6 z+;)cx@!Q26H~h1VX+$mMZ@0dX45J9%m(BSn?!Vl_Lj2zEp?gV)-^5>?hPm5-wv(2lFJy9!kCMbIZr0p*&6TEh*UF4I<8mwEFkHQRx4vxkQ5uM zQmrSMi~DyOlR<&eN?QshD7yIvEENYQo~oj#%Ov8-h1?Rlc*jk);mfvY?fT380(!TX@XYC z_fM>MgJkpo%-f)bvEBm`_1kB$Ud}z@n1&yF4&MhT$7AvdNeR!cAis+h>)9kLA$)au ztmjD)d*fB)oX5+Q`53*6W6lpPCBJusWDrRK?~)L|XL~~Ju{`S9qV{2o>RU`Ls&BEhsJ?}1 zd6TZxwwA__4yd7{h0&GzNi7D&Jf)=^VtA^kmSwn_b8)p4r?L{XG^1YhX)QHKp3$-y zz46D$r;wIT)MG!ZC9$=Pc}~lD2=B3rYNsl+!W&=y;Xa64@lj8x_2my}SqTM+FtUJVG+Vsts1~EE3fQD|k^7)dnkguaKxV zSi!4GqS{~uuNH}FgB836B&rQo@LG_lHdw)HN21zb1+NQS|uy+eG=O zmRr+1OrlzDk{8)8%Tg`3mRE#CwcOfX8xqxW>w4)Vs^z}x9V1aK_dV|>iE6nGyh6Xq zvQ*1$=rtlyEw_<3lSH-LCf;EZ)pDD9g$~GkRLgDdH6l?hw}rQWM77-aJ>wv4DYe{| zUJ{9FxgU4~gd`i&&oMPH}!w<`{R1eV3%Mg-mT%@wvdk2ol7}Y1V_hOIAvKmo7 z9lQrZG7Z&Bbnwa?lQBPb3zx&Dx%dXi3_ zN1}R?554*%swe5}eM6#pk}h7lkPPwFAby|H#oKj)=RDd-co+BgIG?+Eu_t|*20ZA{q8y(_hKPPimz331xmV_;n_pn1elZ20rpG19zcyS~% zBUrg7N-so`1LF-@pW-CXjmL^ak*bUoJ*FMvRSHNk#0>M=oR{0qzi(3(^0oJykkoK~ z++p+i=QQsRA<1DI!k-SLc^4?A)eiY3u~FU)is=U7GjF53dlb{MW60Pz7H5fPT;OFT zhxHwfK2yl zUXnTUe7=Ot@S2kFvIatCd94F6!y&W1v_Q-_$Q*BZAZ7|=uD3N1^F3s~w<{2{2(rK{ zb=lvpHIPN#AQE1mA0dmq@qw5fkfq+#K+HbKGH-Vv<|t%^cOwvU3bNA6cf~L33S_lc zh=iAQ8?wf$7l?TP`N8WEhvcrqH<{#5Wkeyy(5`IiSfb8-r z1Y$Zuc6&7fF`q#8di4S^UqJSG9|vLvK=yls0x`oNzk1^XF=HVIy{Uni$&lZ?-GP|d zki*`MK+HnO5ij3$e;=-f9PbsG*$X-0bqd5Bft>P&2Vzb_ zPJ2HDVlG3@ddCAXw;<=d$8Y%cxevME6(`~K$#w@bIbOv;Of2NGml%kNK(2W812Iv^ zHLqD9rV!-1Hz5%70_3K*JrMIUwkc zsB26@8Z}Bcgfb*#O2`%dYwfkZXFq4Z=k&gjJN*9F`(fGNXYIAuUVH6%I8AepC3tQi zWc%E-1kas>?2ucS;2AU1N96q7lGS^m+ z0?&TA>k>TgP^{LuX9J#ta-09t%i((y?Q&ZSQjl|Su1$jHW0KQ8*CpUNEH^a4!*V+0 zMg%;E=f)>^mXe$!a$g5LopMM0RIJZ2xf2B`=yPnYXM*Q@lG8aiAmBMZ_eO$;Z$O-o z`zYY)np=CNPm67MQf_NO3Td5^>yhC3nbPW>yFTDKJvTSO!*b5ZEe&|i&TaRzPmA?A zC%2a%g|yDg^+@nk&`GBAbG-tdi*hd|c(^Ps&dm>aF3WB3OL1D4=e8E4kXFxJ#{>_T z*Oj?00nb&rOA|b-^VPZQ1D@Ww(Fq=wb4_k+z|$u;Kf%K~_sxAB@LZSM;n!lFug|p- zq@eSSxib=h{?AYe250Aa4B3WjZj| zDc~8LyDP!N`rMrx9`FpwjSYB)<|YR`_vAiG@YJJnzc-gn73*_A1;drawi5n zBXTzdJP+mW33x{4CM9@S=SOn00-i^6OA|cnkv@OPwMrN3Gdee25T_5z8IzkI@cccu zJi)^@d^%SzQ!MAXTzf&BoE)X~d~SHa^J;GUtcz91`-EI8K?>zHF?U9Shi~~!%JmO; zrsd`*cvzp;b6*EMGjlss__Y2+`pn985~PsUo4F?wJe=0N+^m4-?cAodyc{mCcXCYy zDad&@cXWcMIi>Yp?y3aRijWU;BZ63;D=t#5P71D@}4TU7d-axe3Ju7e;2eOBh4PVjJx{c~v%bwRw`;DNI^~}Iym6TMqL7)TG4d@Pwi-Mz*8rBHNnH4uvWAn;He*NvKH$j=d9XN zSu}`j0_i|V!>Fl4qDK_LZ_TeCjS|ERJetl4Q>^u) zXC1OA)&Fq1k>QZn6uFpqE+Ea;kLEbUj~v#I7K)roKCQtkFzZK46xo$dSqSpABG@%s zKUyJ(^A_I4TR&Q_F6Uj=doQ5WH;7(IAlDGGY4o*2Za2IJaswe-M2FP#CCDp*`RLC{ zgjON)(TRe%^BV&x)|SywMfd~`BU?p(6{N7!w{`S)MR*sFPnc{Sz37lWmE8&9o@481 zqVn**9{-ZiHqi`4kkf6Vd4jl{KInM9O(0JY(lpwzzRN}BX}8fkAA~fEnmD9)P%F|AHc8U&Go{h=soYu}!N9Acs2+P?y z>Y_Yn-6}l0MBS99Cn3zUOLUgZd#ps+`@TTa~Aq z%4r_mr92m_oaWJRT00M*AwyTB^^!Q9I?y4-kF!i;hs9T?yf|_KP|z&-Geft)r8bXNZ

    + Returns types without getting stuck in an infinite loop + + + + + Gets a list of all types and nested types + + A list of types + + + + Assembly flags from Assembly.Flags column. + + See CorHdr.h/CorAssemblyFlags + + + No flags set + + + The assembly ref holds the full (unhashed) public key. + + + Processor Architecture unspecified + + + Processor Architecture: neutral (PE32) + + + Processor Architecture: x86 (PE32) + + + Processor Architecture: Itanium (PE32+) + + + Processor Architecture: AMD X64 (PE32+) + + + Processor Architecture: ARM (PE32) + + + applies to any platform but cannot run on any (e.g. reference assembly), should not have "specified" set + + + Propagate PA flags to AssemblyRef record + + + Bits describing the processor architecture + + + Bits describing the PA incl. Specified + + + NOT A FLAG, shift count in PA flags <--> index conversion + + + From "DebuggableAttribute". + + + From "DebuggableAttribute". + + + The assembly can be retargeted (at runtime) to an assembly from a different publisher. + + + + + + + + + Bits describing ContentType + + + + A high-level representation of a row in the Assembly table + + + + + The row id in its table + + + + + + + + + + + + + + + + + From column Assembly.HashAlgId + + + + + + + + From columns Assembly.MajorVersion, Assembly.MinorVersion, Assembly.BuildNumber, + Assembly.RevisionNumber. + + If is null + + + + + + + From column Assembly.Flags + + + + Attributes + + + + From column Assembly.PublicKey + + An empty is created if the caller writes null + + + + + + + Gets the public key token which is calculated from + + + + + From column Assembly.Name + + + + Name + + + + From column Assembly.Locale + + + + Name + + + + + + + + + Initializes + + + + + + + + + + + + + Gets all modules. The first module is always the . + + + + + + + Initializes + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + true if is not empty + + + + + Gets the manifest (main) module. This is always the first module in . + null is returned if is empty. + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the processor architecture + + + + + Gets/sets the processor architecture + + + + + true if unspecified processor architecture + + + + + true if neutral (PE32) architecture + + + + + true if x86 (PE32) architecture + + + + + true if IA-64 (PE32+) architecture + + + + + true if x64 (PE32+) architecture + + + + + true if ARM (PE32) architecture + + + + + true if eg. reference assembly (not runnable) + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the content type + + + + + true if content type is Default + + + + + true if content type is WindowsRuntime + + + + + Finds a module in this assembly + + Name of module + A instance or null if it wasn't found. + + + + Creates an instance from a file + + File name of an existing .NET assembly + Module context or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a file + + File name of an existing .NET assembly + Module creation options or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a byte[] + + Contents of a .NET assembly + Module context or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a byte[] + + Contents of a .NET assembly + Module creation options or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a memory location + + Address of a .NET assembly + Module context or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a memory location + + Address of a .NET assembly + Module creation options or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a stream + + This will read all bytes from the stream and call . + It's better to use one of the other Load() methods. + The stream + Module context or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Creates an instance from a stream + + This will read all bytes from the stream and call . + It's better to use one of the other Load() methods. + The stream + Module creation options or null + A new instance + If is null + If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + + + + Gets the assembly name with the public key + + + + + Gets the assembly name with the public key token + + + + + Finds a . For speed, enable + if possible (read the documentation first). + + Full name of the type (no assembly information) + true if it's a reflection name, and nested + type names are separated by a + character. If false, nested type names + are separated by a / character. + An existing or null if it wasn't found. + + + + Finds a . Its scope (i.e., module or assembly) is ignored when + looking up the type. For speed, enable + if possible (read the documentation first). + + The type ref + An existing or null if it wasn't found. + + + + Writes the assembly to a file on disk. If the file exists, it will be truncated. + + Filename + Writer options + + + + Writes the assembly to a stream. + + Destination stream + Writer options + + + + Checks whether this assembly is a friend assembly of + + Target assembly + + + + Adds or updates an existing System.Reflection.AssemblySignatureKeyAttribute + attribute. This attribute is used in enhanced strong naming with key migration. + See http://msdn.microsoft.com/en-us/library/hh415055.aspx + + Identity public key + Identity strong name key pair + Signature public key + + + + Gets the original System.Runtime.Versioning.TargetFrameworkAttribute custom attribute information if possible. + It reads this from the original metadata and doesn't use . + Returns false if the custom attribute isn't present or if it is invalid. + + Framework name + Version + Profile + + + + + + + + + + + + + + + + + + + + + + + An Assembly row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Simple name + If any of the args is invalid + + + + Constructor + + Simple name + Version + If any of the args is invalid + + + + Constructor + + Simple name + Version + Public key + If any of the args is invalid + + + + Constructor + + Simple name + Version + Public key + Locale + If any of the args is invalid + + + + Constructor + + Assembly name info + If is null + + + + Constructor + + Assembly name info + If is null + + + + Created from a row in the Assembly table + + + + The module where this instance is located + + + + + + + + + + + + + + + + + + + + + + Constructor + + The module which contains this Assembly row + Row ID + If is null + If is invalid + + + + Hashes some data according to a + + + + + Constructor + + If is an unsupported hash algorithm, then + will be used as the hash algorithm. + The algorithm to use + + + + + + + Hash data + + If is an unsupported hash algorithm, then + will be used as the hash algorithm. + The data + The algorithm to use + Hashed data or null if was null + + + + Hash data + + Data + + + + Hash data + + Data + Offset + Length + + + + Hash stream data + + Stream + Number of bytes to hash + Temp buffer + + + + Computes the hash + + + + + Creates a public key token from the hash of some + + A public key is hashed, and the last 8 bytes of the hash, in reverse + order, is used as the public key token + The data + A new instance + + + + Any ALG_CLASS_HASH type in WinCrypt.h can be used by Microsoft's CLI implementation + + + + + + + + + + + + + This is a reserved value in the CLI + + + The only algorithm supported by the CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extension methods + + + + + Gets the field type + + this + Field type or null if none + + + + Gets the return type + + this + Return type or null if none + + + + Gets the parameters + + this + The parameters + + + + Gets the parameter count + + this + Parameter count + + + + Gets the generic parameter count + + this + Generic parameter count + + + + Gets the parameters after the sentinel + + this + Parameters after sentinel or null if none + + + + Gets the locals + + this + All locals + + + + Gets the generic arguments + + this + All generic arguments + + + + Gets the property + + this + The type's property or + false if input isnull + + + + Returns true if it's an integer or a floating point type + + Element type + + + + + Returns the size of the element type in bytes or -1 if it's unknown + + Element type + Size of a pointer + + + + + Checks whether it's a value type + + this + true if it's a value type, false if it's not a value type or + if we couldn't determine whether it's a value type. Eg., it could be a generic + instance type. + + + + Finds and returns an + + this + The assembly to find + The module that needs to resolve an assembly or null + An instance owned by the assembly resolver or + null if the assembly couldn't be found. + + + + Finds and returns an + + this + The assembly to find + The module that needs to resolve an assembly or null + An instance owned by the assembly resolver or + null if the assembly couldn't be found. + + + + Finds and returns an + + this + The assembly to find + The module that needs to resolve an assembly or null + An instance owned by the assembly resolver + If the assembly couldn't be found. + + + + Finds and returns an + + this + The assembly to find + The module that needs to resolve an assembly or null + An instance owned by the assembly resolver + If the assembly couldn't be found. + + + + Finds and returns an + + this + The assembly to find + The module that needs to resolve an assembly or null + An instance owned by the assembly resolver + If the assembly couldn't be found. + + + + Checks whether appears to be the core library (eg. + mscorlib, System.Runtime or corefx). + + If is a reference to a private corlib (eg. System.Private.CoreLib), + this method returns false unless is an + whose manifest (first) module defines System.Object. This check is performed in + the constructor and the result can be found in . + + Note that this method also returns true if it appears to be a 'public' corlib, + eg. mscorlib, etc, even if it internally possibly references a private corlib. + + The assembly + + + + Converts to a instance + + The assembly + A new instance + + + + Converts to a + + The type + true if we should try to figure out whether + is a + A instance or null if + is invalid + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns the base type of . Throws if we can't resolve + a . + + The type + The base type or null if there's no base type + + + + Returns the base type of + + The type + true if we should throw if we can't + resolve a . false if we should ignore the error and + just return null. + The base type or null if there's no base type, or if + is true and we couldn't resolve + a + + + + Gets the scope type, resolves it, and returns the + + Type + A or null if input was null or if we + couldn't resolve the reference. + + + + Gets the scope type, resolves it, and returns the + + Type + A instance. + If the type couldn't be resolved + + + + Resolves an to a . Returns null if it + was not possible to resolve it. See also + + Field to resolve + The or null if is + null or if it wasn't possible to resolve it (the field doesn't exist or its + assembly couldn't be loaded) + + + + Resolves an to a and throws an exception if + it was not possible to resolve it. See also + + Field to resolve + The + + + + Resolves an to a . Returns null if it + was not possible to resolve it. See also . If + is a , then the + property is resolved and returned. + + Method to resolve + The or null if is + null or if it wasn't possible to resolve it (the method doesn't exist or its + assembly couldn't be loaded) + + + + Resolves an to a and throws an exception + if it was not possible to resolve it. See also . If + is a , then the + property is resolved and returned. + + Method to resolve + The + + + + Returns the definition assembly of a + + Member reference + + + + + Gets the normal visible parameters, doesn't include the hidden 'this' parameter + + this + The normal visible parameters + + + + Gets the normal visible parameter count, doesn't include the hidden 'this' parameter + + this + Normal visible parameter count + + + + Checks whether any normal visible parameter exists, doesn't include the hidden 'this' parameter + + this + true if there's at least one normal visible parameter + + + + Gets a normal visible parameter, doesn't include the hidden 'this' parameter + + this + Normal visible parameter index + + + + + Converts a to a + + The sig + + + + Returns true if it's an integer or a floating point type + + Type + + + + + Gets a if matches a primitive type. + + this + The type + A or null if it didn't match any primitive type + + + + Gets a if and + matches a primitive type. + + this + Namespace + Name + Definition assembly + A or null if it didn't match any primitive type + + + + Gets a if and + matches a primitive type. + + this + Namespace + Name + Definition assembly + A or null if it didn't match any primitive type + + + + Log an error message + + this + Sender or null + Message + + + + Log an error message + + this + Sender or null + Message + Message arg #1 + + + + Log an error message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + + + + Log an error message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + + + + Log an error message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + Message arg #4 + + + + Log an error message + + this + Sender or null + Message + Message arguments + + + + Log a warning message + + this + Sender or null + Message + + + + Log a warning message + + this + Sender or null + Message + Message arg #1 + + + + Log a warning message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + + + + Log a warning message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + + + + Log a warning message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + Message arg #4 + + + + Log a warning message + + this + Sender or null + Message + Message arguments + + + + Log an info message + + this + Sender or null + Message + + + + Log an info message + + this + Sender or null + Message + Message arg #1 + + + + Log an info message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + + + + Log an info message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + + + + Log an info message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + Message arg #4 + + + + Log an info message + + this + Sender or null + Message + Message arguments + + + + Log a verbose message + + this + Sender or null + Message + + + + Log a verbose message + + this + Sender or null + Message + Message arg #1 + + + + Log a verbose message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + + + + Log a verbose message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + + + + Log a verbose message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + Message arg #4 + + + + Log a verbose message + + this + Sender or null + Message + Message arguments + + + + Log a very verbose message + + this + Sender or null + Message + + + + Log a very verbose message + + this + Sender or null + Message + Message arg #1 + + + + Log a very verbose message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + + + + Log a very verbose message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + + + + Log a very verbose message + + this + Sender or null + Message + Message arg #1 + Message arg #2 + Message arg #3 + Message arg #4 + + + + Log a very verbose message + + this + Sender or null + Message + Message arguments + + + + Resolves a type + + this + The type + A instance or null if it couldn't be resolved + + + + Resolves a type + + this + The type + A instance + If the type couldn't be resolved + + + + Resolves a type + + this + The type + The module that needs to resolve the type or null + A instance + If the type couldn't be resolved + + + + Resolves a method or a field + + this + A method/field reference + A or a instance + If the method/field couldn't be resolved + + + + Resolves a field + + this + A field reference + A instance or null if it couldn't be resolved. + + + + Resolves a field + + this + A field reference + A instance or null if it couldn't be resolved. + If the field couldn't be resolved + + + + Resolves a method + + this + A method reference + A instance or null if it couldn't be resolved. + + + + Resolves a method + + this + A method reference + A instance or null if it couldn't be resolved. + If the method couldn't be resolved + + + + Resolves a token + + This + The metadata token + A or null if is invalid + + + + Returns , but if it's a nested , + return the non-nested + + this + The scope type + + + + Finds a . Its scope (i.e., module or assembly) is ignored when + looking up the type. + + this + The type ref + An existing or null if it wasn't found. + If type couldn't be found + + + + Finds a + + this + Full name of the type (no assembly information) + true if it's a reflection name, and nested + type names are separated by a + character. If false, nested type names + are separated by a / character. + An existing + If type couldn't be found + + + + Finds a + + this + Full name of the type (no assembly information). Nested types are separated by / + An existing or null if it wasn't found. + + + + Finds a + + this + Full name of the type (no assembly information). Nested types are separated by / + An existing + If type couldn't be found + + + + Finds a + + this + Full name of the type (no assembly information). Nested types are separated by + + An existing or null if it wasn't found. + + + + Finds a + + this + Full name of the type (no assembly information). Nested types are separated by + + An existing + If type couldn't be found + + + + Checks whether a exists. 's scope (i.e., + module or assembly) is ignored when looking up the type. + + this + The type ref + true if the exists, false otherwise + + + + Checks whether a exists + + this + Full name of the type (no assembly information) + true if it's a reflection name, and nested + type names are separated by a + character. If false, nested type names + are separated by a / character. + true if the exists, false otherwise + + + + Checks whether a exists + + this + Full name of the type (no assembly information). Nested types are separated by / + true if the exists, false otherwise + + + + Checks whether a exists + + this + Full name of the type (no assembly information). Nested types are separated by + + true if the exists, false otherwise + + + + Removes all C optional/required modifiers + + A instance + Input after all modifiers + + + + Removes pinned signature + + The type + Input after pinned signature + + + + Removes all modifiers and pinned sig + + The type + Inputer after modifiers and pinned signature + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Returns a + + The type + A or null if it's not a + + + + + Gets the next field or null + + this + + + + + Gets the value or false if + is null + + this + + + + + Gets the value or false if + is null + + this + + + + + Gets the element type + + this + The element type + + + + Gets the full name of the type + + this + Full name of the type + + + + Gets the name of the type + + this + Name of the type + + + + Gets the namespace of the type + + this + Namespace of the type + + + + Returns the if it is a . + + this + A or null if none found + + + + Returns the if it is a . + + this + A or null if none found + + + + Returns the if it is a . + Nothing is resolved. + + this + A or null if none found + + + + Returns the if it is a . + + this + A or null if none found + + + + Flags used by + + + + + Compare assembly simple name + + + + + Compare assembly version + + + + + Compare assembly public key token + + + + + Compare assembly culture + + + + + Compare content type + + + + + Compare assembly simple name, version, public key token, locale and content type + + + + + Compares two assembly names + + + + + Compares the name, version, public key token, culture and content type + + + + + Compares only the name and the public key token + + + + + Compares only the name + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Constructor + + Comparison flags + + + + Compares two assembly names + + First + Second + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Compares two assembly names + + First + Second + true if equal, false otherwise + + + + Figures out which of two assembly names is closer to another assembly name + + Requested assembly name + First + Second + -1 if both are equally close, 0 if is closest, 1 if + is closest + + + + Gets the hash code of an assembly name + + Assembly name + The hash code + + + + Stores assembly name information + + + + + Gets/sets the + + + + + Gets/sets the or null if none specified + + + + + Gets/sets the + + + + + Gets/sets the public key or token + + + + + Gets/sets the name + + + + + Gets/sets the culture or null if none specified + + + + + Gets the full name of the assembly + + + + + Gets the full name of the assembly but use a public key token + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the processor architecture + + + + + Gets/sets the processor architecture + + + + + true if unspecified processor architecture + + + + + true if neutral (PE32) architecture + + + + + true if x86 (PE32) architecture + + + + + true if IA-64 (PE32+) architecture + + + + + true if x64 (PE32+) architecture + + + + + true if ARM (PE32) architecture + + + + + true if eg. reference assembly (not runnable) + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the content type + + + + + true if content type is Default + + + + + true if content type is WindowsRuntime + + + + + Default constructor + + + + + Constructor + + An assembly name + + + + Constructor + + The assembly + + + + Constructor + + Assembly name info + + + + + + + A high-level representation of a row in the AssemblyRef table + + + + + An assembly ref that can be used to indicate that it references the current assembly + when the current assembly is not known (eg. a type string without any assembly info + when it references a type in the current assembly). + + + + + The row id in its table + + + + + + + + + + + + + + + + + + + + + + + + + + From columns AssemblyRef.MajorVersion, AssemblyRef.MinorVersion, + AssemblyRef.BuildNumber, AssemblyRef.RevisionNumber + + If is null + + + + + + + From column AssemblyRef.Flags + + + + Attributes + + + + From column AssemblyRef.PublicKeyOrToken + + If is null + + + + + + + From column AssemblyRef.Name + + + + Name + + + + From column AssemblyRef.Locale + + + + Culture + + + + From column AssemblyRef.HashValue + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + Same as , except that it uses the PublicKey if available. + + + + + Gets the full name of the assembly but use a public key token + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the processor architecture + + + + + Gets/sets the processor architecture + + + + + true if unspecified processor architecture + + + + + true if neutral (PE32) architecture + + + + + true if x86 (PE32) architecture + + + + + true if IA-64 (PE32+) architecture + + + + + true if x64 (PE32+) architecture + + + + + true if ARM (PE32) architecture + + + + + true if eg. reference assembly (not runnable) + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the content type + + + + + true if content type is Default + + + + + true if content type is WindowsRuntime + + + + + + + + An AssemblyRef row created by the user and not present in the original .NET file + + + + + Creates a reference to CLR 1.0's mscorlib + + + + + Creates a reference to CLR 1.1's mscorlib + + + + + Creates a reference to CLR 2.0's mscorlib + + + + + Creates a reference to CLR 4.0's mscorlib + + + + + Default constructor + + + + + Constructor + + Simple name + If any of the args is invalid + + + + Constructor + + Simple name + Version + If any of the args is invalid + + + + Constructor + + Simple name + Version + Public key or public key token + If any of the args is invalid + + + + Constructor + + Simple name + Version + Public key or public key token + Locale + If any of the args is invalid + + + + Constructor + + Assembly name info + If is null + + + + Constructor + + Assembly + + + + Created from a row in the AssemblyRef table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this AssemblyRef row + Row ID + If is null + If is invalid + + + + Resolves assemblies + + + + + Gets/sets the default + + + + + true if should find an assembly that matches exactly. + false if it first tries to match exactly, and if that fails, it picks an + assembly that is closest to the requested assembly. + + + + + true if resolved .NET framework assemblies can be redirected to the source + module's framework assembly version. Eg. if a resolved .NET 3.5 assembly can be + redirected to a .NET 4.0 assembly if the source module is a .NET 4.0 assembly. This is + ignored if is true. + + + + + If true, all modules in newly resolved assemblies will have their + property set to true. This is + enabled by default since these modules shouldn't be modified by the user. + + + + + true to search the Global Assembly Cache. Default value is true. + + + + + Gets paths searched before trying the standard locations + + + + + Gets paths searched after trying the standard locations + + + + + Default constructor + + + + + Constructor + + Module context for all resolved assemblies + + + + + + + Add a module's assembly to the assembly cache + + The module whose assembly should be cached + true if 's assembly is cached, false + if it's not cached because some other assembly with the exact same full name has + already been cached or if or its assembly is null. + + + + Add an assembly to the assembly cache + + The assembly + true if is cached, false if it's not + cached because some other assembly with the exact same full name has already been + cached or if is null. + + + + Removes a module's assembly from the cache + + The module + true if its assembly was removed, false if it wasn't removed + since it wasn't in the cache, it has no assembly, or was + null + + + + Removes the assembly from the cache + + The assembly + true if it was removed, false if it wasn't removed since it + wasn't in the cache or if was null + + + + Clears the cache and calls on each cached module. + Use to remove any assemblies you added yourself + using before calling this method if you don't want + them disposed. + + + + + Gets the cached assemblies in this resolver. + + The cached assemblies. + + + + Finds an assembly that exactly matches the requested assembly + + Assembly to find + Search paths or null if none + Module context + An instance or null if an exact match + couldn't be found. + + + + Finds the closest assembly from the already cached assemblies + + Assembly to find + The closest or null if none found + + + + Returns true if is inserted in + + Assembly to check + + + + Called before + + Assembly to find + The module that needs to resolve an assembly or null + We're trying to find an exact match + null or an enumerable of full paths to try + + + + Called after (if it fails) + + Assembly to find + The module that needs to resolve an assembly or null + We're trying to find an exact match + null or an enumerable of full paths to try + + + + Called after (if it fails) + + Assembly to find + The module that needs to resolve an assembly or null + We're trying to find an exact match + null or an enumerable of full paths to try + + + + Gets all search paths to use for this module + + The module or null if unknown + A list of all search paths to use for this module + + + + Gets all module search paths. This is usually empty unless its assembly has + a .config file specifying any additional private search paths in a + <probing/> element. + + The module or null if unknown + A list of search paths + + + + Gets all private assembly search paths as found in the module's .config file. + + The module or null if unknown + A list of search paths + + + + See CorHdr.h/CorCallingConvention + + + + The managed calling convention + + + + + + + + + + + + + + + + + + + + + + + + + + + Unmanaged calling convention encoded as modopts + + + generic method instantiation + + + used ONLY for 64bit vararg PInvoke calls + + + Calling convention is bottom 4 bits + + + Generic method + + + Method needs a 'this' parameter + + + 'this' parameter is the first arg if set (else it's hidden) + + + Used internally by the CLR + + + + Base class for sigs with a calling convention + + + + + The calling convention + + + + + Gets/sets the extra data found after the signature + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Returns true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + true if there's an implicit this parameter + + + + + true if this contains a + or a . + + + + + Default constructor + + + + + Constructor + + The calling convention + + + + Gets the calling convention + + + + + A field signature + + + + + Gets/sets the field type + + + + + Default constructor + + + + + Constructor + + Field type + + + + Constructor + + Field type + The calling convention (must have Field set) + + + + Clone this + + + + + + + + Method sig base class + + + + + + + + + + + + + + + + + Gets/sets the calling convention + + + + + Gets/sets the return type + + + + + Gets the parameters. This is never null + + + + + Gets/sets the generic param count + + + + + Gets the parameters that are present after the sentinel. Note that this is null + if there's no sentinel. It can still be empty even if it's not null. + + + + + A method signature + + + + + Gets/sets the original token. It's set when reading calli instruction operands + and it's a hint to the module writer if it tries to re-use the same token. + + + + + Creates a static MethodSig + + Return type + + + + Creates a static MethodSig + + Return type + Arg type #1 + + + + Creates a static MethodSig + + Return type + Arg type #1 + Arg type #2 + + + + Creates a static MethodSig + + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Creates a static MethodSig + + Return type + Argument types + + + + Creates an instance MethodSig + + Return type + + + + Creates an instance MethodSig + + Return type + Arg type #1 + + + + Creates an instance MethodSig + + Return type + Arg type #1 + Arg type #2 + + + + Creates an instance MethodSig + + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Creates an instance MethodSig + + Return type + Argument types + + + + Creates a static generic MethodSig + + Number of generic parameters + Return type + + + + Creates a static generic MethodSig + + Number of generic parameters + Return type + Arg type #1 + + + + Creates a static generic MethodSig + + Number of generic parameters + Return type + Arg type #1 + Arg type #2 + + + + Creates a static generic MethodSig + + Number of generic parameters + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Creates a static generic MethodSig + + Number of generic parameters + Return type + Argument types + + + + Creates an instance generic MethodSig + + Number of generic parameters + Return type + + + + Creates an instance generic MethodSig + + Number of generic parameters + Return type + Arg type #1 + + + + Creates an instance generic MethodSig + + Number of generic parameters + Return type + Arg type #1 + Arg type #2 + + + + Creates an instance generic MethodSig + + Number of generic parameters + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Creates an instance generic MethodSig + + Number of generic parameters + Return type + Argument types + + + + Default constructor + + + + + Constructor + + Calling convention + + + + Constructor + + Calling convention + Number of generic parameters + + + + Constructor + + Calling convention + Number of generic parameters + Return type + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Arg type #1 + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Arg type #1 + Arg type #2 + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Argument types + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Argument types + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Argument types + Parameters after sentinel + + + + Clone this + + + + + + + + A property signature + + + + + Creates a static PropertySig + + Return type + + + + Creates a static PropertySig + + Return type + Arg type #1 + + + + Creates a static PropertySig + + Return type + Arg type #1 + Arg type #2 + + + + Creates a static PropertySig + + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Creates a static PropertySig + + Return type + Argument types + + + + Creates an instance PropertySig + + Return type + + + + Creates an instance PropertySig + + Return type + Arg type #1 + + + + Creates an instance PropertySig + + Return type + Arg type #1 + Arg type #2 + + + + Creates an instance PropertySig + + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Creates an instance PropertySig + + Return type + Argument types + + + + Default constructor + + + + + Constructor + + Calling convention (must have Property set) + + + + Constructor + + true if instance, false if static + + + + Constructor + + true if instance, false if static + Return type + + + + Constructor + + true if instance, false if static + Return type + Arg type #1 + + + + Constructor + + true if instance, false if static + Return type + Arg type #1 + Arg type #2 + + + + Constructor + + true if instance, false if static + Return type + Arg type #1 + Arg type #2 + Arg type #3 + + + + Constructor + + true if instance, false if static + Return type + Argument types + + + + Constructor + + Calling convention + Number of generic parameters + Return type + Argument types + Parameters after sentinel + + + + Clone this + + + + + + + + A local variables signature + + + + + All local types. This is never null. + + + + + Default constructor + + + + + Constructor + + Calling convention (must have LocalSig set) + Number of locals + + + + Constructor + + Local type #1 + + + + Constructor + + Local type #1 + Local type #2 + + + + Constructor + + Local type #1 + Local type #2 + Local type #3 + + + + Constructor + + All locals + + + + Constructor + + All locals + + + + Constructor + + All locals (this instance now owns it) + Dummy + + + + Clone this + + + + + An instantiated generic method signature + + + + + Gets the generic arguments (must be instantiated types, i.e., closed types) + + + + + Default constructor + + + + + Constructor + + Calling convention (must have GenericInst set) + Number of generic args + + + + Constructor + + Generic arg #1 + + + + Constructor + + Generic arg #1 + Generic arg #2 + + + + Constructor + + Generic arg #1 + Generic arg #2 + Generic arg #3 + + + + Constructor + + Generic args + + + + Constructor + + Generic args + + + + Clone this + + + + + A high-level representation of a row in the ClassLayout table + + + + + The row id in its table + + + + + + + + + + + From column ClassLayout.PackingSize + + + + + + + + From column ClassLayout.ClassSize + + + + + + + + A ClassLayout row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + PackingSize + ClassSize + + + + Created from a row in the ClassLayout table + + + + + + + + Constructor + + The module which contains this ClassLayout row + Row ID + If is null + If is invalid + + + + A high-level representation of a row in the Constant table + + + + + The row id in its table + + + + + + + + + + + From column Constant.Type + + + + + + + + From column Constant.Value + + + + + + + + A Constant row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Value + + + + Constructor + + Value + Type + + + + Created from a row in the Constant table + + + + + + + + Constructor + + The module which contains this Constant row + Row ID + If is null + If is invalid + + + + Default implementation of + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Constructor + + The owner module + + + + Constructor + + The owner module + Corlib assembly reference or null if a default + assembly reference should be created + + + + + + + Gets the required alignment for the stubs, must be a power of 2 + + Stub type + + + + + Gets the size of a stub, it doesn't have to be a multiple of + + Stub type + + + + + Gets the offset of the code (entry point) relative to the start of the stub + + Stub type + + + + + Gets the RVA of the func field that the stub jumps to + + Reader, positioned at the stub func + PE image + Updated with RVA of func field + + + + + Writes stub relocs, if needed + + Stub type + Reloc directory + The chunk where this stub will be written to + Offset of this stub in + + + + Writes the stub that jumps to the managed function + + Stub type + Writer + Image base + RVA of this stub + RVA of a pointer-sized field that contains the absolute address of the managed function + + + + A custom attribute + + + + + Gets/sets the custom attribute constructor + + + + + Gets the attribute type + + + + + Gets the full name of the attribute type + + + + + true if the raw custom attribute blob hasn't been parsed + + + + + Gets the raw custom attribute blob or null if the CA was successfully parsed. + + + + + Gets all constructor arguments + + + + + true if is not empty + + + + + Gets all named arguments (field and property values) + + + + + true if is not empty + + + + + Gets all s that are field arguments + + + + + Gets all s that are property arguments + + + + + Gets the #Blob offset or 0 if unknown + + + + + Constructor + + Custom attribute constructor + Raw custom attribute blob + + + + Constructor + + Custom attribute constructor + + + + Constructor + + Custom attribute constructor + Constructor arguments or null if none + + + + Constructor + + Custom attribute constructor + Named arguments or null if none + + + + Constructor + + Custom attribute constructor + Constructor arguments or null if none + Named arguments or null if none + + + + Constructor + + Custom attribute constructor + Constructor arguments or null if none + Named arguments or null if none + Original custom attribute #Blob offset or 0 + + + + Constructor + + Custom attribute constructor + Constructor arguments. The list is now owned by this instance. + Named arguments. The list is now owned by this instance. + Original custom attribute #Blob offset or 0 + + + + Gets the field named + + Name of field + A instance or null if not found + + + + Gets the field named + + Name of field + A instance or null if not found + + + + Gets the property named + + Name of property + A instance or null if not found + + + + Gets the property named + + Name of property + A instance or null if not found + + + + Gets the property/field named + + Name of property/field + true if it's a field, false if it's a property + A instance or null if not found + + + + Gets the property/field named + + Name of property/field + true if it's a field, false if it's a property + A instance or null if not found + + + + + + + A custom attribute constructor argument + + + + + Gets/sets the argument type + + + + + Gets/sets the argument value + + + + + Constructor + + Argument type + + + + Constructor + + Argument type + Argument value + + + + Clones this instance and any s and s + referenced from this instance. + + + + + + + + + A custom attribute field/property argument + + + + + true if it's a field + + + + + true if it's a property + + + + + Gets/sets the field/property type + + + + + Gets/sets the property/field name + + + + + Gets/sets the argument + + + + + Gets/sets the argument type + + + + + Gets/sets the argument value + + + + + Default constructor + + + + + Constructor + + true if field, false if property + + + + Constructor + + true if field, false if property + Field/property type + + + + Constructor + + true if field, false if property + Field/property type + Name of field/property + + + + Constructor + + true if field, false if property + Field/property type + Name of field/property + Field/property argument + + + + Clones this instance and any s referenced from this instance. + + + + + + + + + Stores s + + + + + Default constructor + + + + + Constructor + + Initial length of the list + Context passed to + Delegate instance that returns original values + + + + Checks whether a custom attribute is present + + Full name of custom attribute type + true if the custom attribute type is present, false otherwise + + + + Removes all custom attributes of a certain type + + Full name of custom attribute type that should be removed + + + + Finds a custom attribute + + Full name of custom attribute type + A or null if it wasn't found + + + + Finds all custom attributes of a certain type + + Full name of custom attribute type + All s of the requested type + + + + Finds a custom attribute + + Custom attribute type + The first found or null if none found + + + + Finds a custom attribute + + Custom attribute type + Attribute type comparison flags + The first found or null if none found + + + + Finds all custom attributes of a certain type + + Custom attribute type + All s of the requested type + + + + Finds all custom attributes of a certain type + + Custom attribute type + Attribute type comparison flags + All s of the requested type + + + + Searches for a type according to custom attribute search rules: first try the + current assembly, and if that fails, try mscorlib + + + + + Constructor + + The module to search first + + + + + + + Thrown by CustomAttributeReader when it fails to parse a custom attribute blob + + + + + Default constructor + + + + + Constructor + + Error message + + + + Constructor + + Error message + Other exception + + + + Constructor + + + + + + + Reads custom attributes from the #Blob stream + + + + + Reads a custom attribute + + Reader module + Custom attribute constructor + Offset of custom attribute in the #Blob stream + A new instance + + + + Reads a custom attribute + + Reader module + Custom attribute constructor + Offset of custom attribute in the #Blob stream + Generic parameter context + A new instance + + + + Reads a custom attribute + + Owner module + CA blob + Custom attribute constructor + A new instance + + + + Reads a custom attribute + + Owner module + A reader positioned at the the first byte of the CA blob + Custom attribute constructor + A new instance + + + + Reads a custom attribute + + Owner module + CA blob + Custom attribute constructor + Generic parameter context + A new instance + + + + Reads a custom attribute + + Owner module + A stream positioned at the the first byte of the CA blob + Custom attribute constructor + Generic parameter context + A new instance + + + + Reads a custom attribute + + Owner module + A stream positioned at the the first byte of the CA blob + Custom attribute constructor + Generic parameter context + A new instance + + + + Reads custom attribute named arguments + + Owner module + A reader positioned at the the first byte of the CA blob + Number of named arguments to read from + Generic parameter context + A list of s or null if some error + occurred. + + + + Gets the enum's underlying type + + An enum type + The underlying type or null if we couldn't resolve the type ref + If is not an enum or null + + + + Converts to a , possibly resolving + a + + The type + A or null if we couldn't resolve the + or if is a type spec + + + + A high-level representation of a row in the DeclSecurity table + + + + + The row id in its table + + + + + + + + + + + + + + From column DeclSecurity.Action + + + + + + + + From column DeclSecurity.PermissionSet + + + + + + + Initializes + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + true if is not empty + + + + + Gets the blob data or null if there's none + + Blob data or null + + + + Returns the .NET 1.x XML string or null if it's not a .NET 1.x format + + + + + + A DeclSecurity row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + The security action + The security attributes (now owned by this) + + + + + + + Created from a row in the DeclSecurity table + + + + The module where this instance is located + + + + + + + + + + + + + + + + Constructor + + The module which contains this DeclSecurity row + Row ID + If is null + If is invalid + + + + + + + Reads DeclSecurity blobs + + + + + Reads a DeclSecurity blob + + Module that will own the returned list + #Blob offset of DeclSecurity signature + A list of s + + + + Reads a DeclSecurity blob + + Module that will own the returned list + #Blob offset of DeclSecurity signature + Generic parameter context + A list of s + + + + Reads a DeclSecurity blob + + Module that will own the returned list + DeclSecurity blob + A list of s + + + + Reads a DeclSecurity blob + + Module that will own the returned list + DeclSecurity blob + Generic parameter context/// + A list of s + + + + Reads a DeclSecurity blob + + Module that will own the returned list + DeclSecurity stream that will be owned by us + A list of s + + + + Reads a DeclSecurity blob + + Module that will own the returned list + DeclSecurity stream that will be owned by us + Generic parameter context + A list of s + + + + Reads the new (.NET 2.0+) DeclSecurity blob format + + + + + + Reads the old (.NET 1.x) DeclSecurity blob format + + + + + + See CorHdr.h/CorElementType + + + + + + + System.Void + + + System.Boolean + + + System.Char + + + System.SByte + + + System.Byte + + + System.Int16 + + + System.UInt16 + + + System.Int32 + + + System.UInt32 + + + System.Int64 + + + System.UInt64 + + + System.Single + + + System.Double + + + System.String + + + Pointer type (*) + + + ByRef type (&) + + + Value type + + + Reference type + + + Type generic parameter + + + Multidimensional array ([*], [,], [,,], ...) + + + Generic instance type + + + Typed byref + + + Value array (don't use) + + + System.IntPtr + + + System.UIntPtr + + + native real (don't use) + + + Function pointer + + + System.Object + + + Single-dimension, zero lower bound array ([]) + + + Method generic parameter + + + Required C modifier + + + Optional C modifier + + + Used internally by the CLR (don't use) + + + Module (don't use) + + + Sentinel (method sigs only) + + + Pinned type (locals only) + + + + A CIL opcode. If the high byte is 0 or if it's , it's a 1-byte opcode, + else it's a two-byte opcode and the highest byte is the first byte of the opcode. + + + + + Extension methods + + + + + Determines whether a is experimental + + The code + true if the is experimental; otherwise, false + + + + Converts a to an + + The code + A or null if it's invalid + + + + Converts a to an , using a module context to look + up potential experimental opcodes + + The code + The module context + A or null if it's invalid + + + + Gets the opcode or if is null + + this + + + + + Gets the operand or null if is null + + this + + + + + Gets the offset or 0 if is null + + this + + + + + Gets the sequence point or null if is null + + this + + + + + Resolves a token + + An object + The metadata token + A or null if is invalid + + + + options + + + + + No option is enabled + + + + + Some fields/methods have an unknown declaring type and don't have a context with + that information. If this is enabled, the reader will try to guess it but it doesn't + always work. If you get an , try enabling this option. + + + + + Reads code from a DynamicMethod + + + + + Constructor + + Module that will own the method body + This can be one of several supported types: the delegate instance + created by DynamicMethod.CreateDelegate(), a DynamicMethod instance, a RTDynamicMethod + instance or a DynamicResolver instance. + + + + Constructor + + Module that will own the method body + This can be one of several supported types: the delegate instance + created by DynamicMethod.CreateDelegate(), a DynamicMethod instance, a RTDynamicMethod + instance or a DynamicResolver instance. + Generic parameter context + + + + Constructor + + Module that will own the method body + This can be one of several supported types: the delegate instance + created by DynamicMethod.CreateDelegate(), a DynamicMethod instance, a RTDynamicMethod + instance or a DynamicResolver instance. + Importer + + + + Constructor + + Module that will own the method body + This can be one of several supported types: the delegate instance + created by DynamicMethod.CreateDelegate(), a DynamicMethod instance, a RTDynamicMethod + instance or a DynamicResolver instance. + Importer + Options + + + + Reads the code + + + + + + Returns the created method. Must be called after . + + A new instance + + + + + + + + + + + + + + + + + + + + + + A CIL method exception handler + + + + + First instruction of try block + + + + + One instruction past the end of try block or null if it ends at the end + of the method. + + + + + Start of filter handler or null if none. The end of filter handler is + always . + + + + + First instruction of try handler block + + + + + One instruction past the end of try handler block or null if it ends at the end + of the method. + + + + + The catch type if is + + + + + Type of exception handler clause + + + + + Default constructor + + + + + Constructor + + Exception clause type + + + + Type of exception handler. See CorHdr.h/CorExceptionFlag + + + + + + + + + + + + + + + + + + + + CIL opcode flow control + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A CIL instruction (opcode + operand) + + + + + The opcode + + + + + The opcode operand + + + + + Offset of the instruction in the method body + + + + + PDB sequence point or null if none + + + + + Default constructor + + + + + Constructor + + Opcode + + + + Constructor + + Opcode + The operand + + + + Creates a new instruction with no operand + + The opcode + A new instance + + + + Creates a new instruction with a operand + + The opcode + The value + A new instance + + + + Creates a new instruction with a operand + + The opcode + The value + A new instance + + + + Creates a new instruction with an operand + + The opcode + The value + A new instance + + + + Creates a new instruction with a operand + + The opcode + The value + A new instance + + + + Creates a new instruction with a operand + + The opcode + The value + A new instance + + + + Creates a new instruction with a operand + + The opcode + The value + A new instance + + + + Creates a new instruction with a string operand + + The opcode + The string + A new instance + + + + Creates a new instruction with an instruction target operand + + The opcode + Target instruction + A new instance + + + + Creates a new instruction with an instruction target list operand + + The opcode + The targets + A new instance + + + + Creates a new instruction with a type operand + + The opcode + The type + A new instance + + + + Creates a new instruction with a type operand + + The opcode + The type + A new instance + + + + Creates a new instruction with a method/field operand + + The opcode + The method/field + A new instance + + + + Creates a new instruction with a field operand + + The opcode + The field + A new instance + + + + Creates a new instruction with a method operand + + The opcode + The method + A new instance + + + + Creates a new instruction with a token operand + + The opcode + The token + A new instance + + + + Creates a new instruction with a method signature operand + + The opcode + The method signature + A new instance + + + + Creates a new instruction with a method parameter operand + + The opcode + The method parameter + A new instance + + + + Creates a new instruction with a method local operand + + The opcode + The method local + A new instance + + + + Creates a ldci4 instruction + + Operand value + A new instance + + + + Gets the size in bytes of the instruction + + + + + + Updates with the new stack size + + Current stack size + + + + Updates with the new stack size + + Current stack size + true if the method has a return value, + false otherwise + + + + Calculates stack usage + + Updated with number of stack pushes + Updated with number of stack pops or -1 if the stack should + be cleared. + + + + Calculates stack usage + + true if method has a return value + Updated with number of stack pushes + Updated with number of stack pops or -1 if the stack should + be cleared. + + + + Checks whether it's one of the leave instructions + + + + + Checks whether it's one of the br instructions + + + + + Checks whether it's one of the brfalse instructions + + + + + Checks whether it's one of the brtrue instructions + + + + + Checks whether it's one of the conditional branch instructions (bcc, brtrue, brfalse) + + + + + Checks whether this is one of the ldc.i4 instructions + + + + + Returns a ldc.i4 instruction's operand + + The integer value + isn't one of the + ldc.i4 opcodes + + + + Checks whether it's one of the ldarg instructions, but does not check + whether it's one of the ldarga instructions. + + + + + Checks whether it's one of the ldloc instructions, but does not check + whether it's one of the ldloca instructions. + + + + + Checks whether it's one of the starg instructions + + + + + Checks whether it's one of the stloc instructions + + + + + Returns the local if it's a ldloc, stloc or ldloca instruction + + The locals + The local or null if it's not a ldloc, stloc or ldloca + instruction or if the local doesn't exist. + + + + Gets the index of the instruction's parameter operand or -1 if the parameter + is missing or if it's not an instruction with a parameter operand. + + + + + Returns a method parameter + + All parameters + A parameter or null if it doesn't exist + + + + Returns an argument type + + Method signature + Declaring type (only needed if it's an instance method) + The type or null if it doesn't exist + + + + Clone this instance. The and fields + are shared by this instance and the created instance. + + + + + + + + Converts instructions to strings + + + + + Converts an instruction to a string + + The instruction + The result + + + + Gets the instruction's operand as a string + + The instruction + The operand as a string + + + + Add an instruction's operand to + + Place result here + The instruction + + + + Add an instruction's operand to + + Place result here + The instruction + A string that will be added before the operand, if there's + an operand. + + + + Thrown when invalid data is detected while parsing a .NET method + + + + + Default constructor + + + + + Constructor + + Error message + + + + Constructor + + Error message + The inner exception or null if none + + + + Constructor + + + + + + + A collection of s + + + + + Gets the number of locals + + + + + Gets the list of locals + + + + + Gets the N'th local + + The local index + + + + Default constructor + + + + + Constructor + + All locals that will be owned by this instance + + + + Adds a new local and then returns it + + The local that should be added to the list + The input is always returned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A method local + + + + + Gets/sets the type of the local + + + + + Local index + + + + + Gets the name. This property is obsolete, use to get/set the name stored in the PDB file. + + + + + Gets the attributes. This property is obsolete, use to get/set the attributes stored in the PDB file. + + + + + Constructor + + The type + + + + Constructor + + The type + Name of local + + + + Constructor + + The type + Name of local + Index, should only be used if you don't add it to the locals list + + + + + + + Method body base class + + + + + A native method body + + + + + Gets/sets the RVA of the native method body + + + + + Default constructor + + + + + Constructor + + RVA of method body + + + + CIL (managed code) body + + + + + Size of a small header + + + + + Gets/sets a flag indicating whether the original max stack value should be used. + + + + + Gets/sets the init locals flag. This is only valid if the method has any locals. + + + + + Gets/sets the size in bytes of the method body header. The instructions immediately follow + the header. + + + + + true if it was a small body header ( is 1) + + + + + true if it was a big body header + + + + + Gets/sets max stack value from the fat method header. + + + + + Gets/sets the locals metadata token + + + + + true if is not empty + + + + + Gets the instructions + + + + + true if is not empty + + + + + Gets the exception handlers + + + + + true if is not empty + + + + + Gets the locals + + + + + Gets/sets the PDB method. This is null if no PDB has been loaded or if there's + no PDB info for this method. + + + + + true if is not null + + + + + Gets the total size of the body in the PE file, including header, IL bytes, and exception handlers. + This property returns 0 if the size is unknown. + + + + + Default constructor + + + + + Constructor + + Init locals flag + All instructions. This instance will own the list. + All exception handlers. This instance will own the list. + All locals. This instance will own the locals in the list. + + + + Shorter instructions are converted to the longer form, eg. Ldc_I4_1 is + converted to Ldc_I4 with a 1 as the operand. + + All method parameters, including the hidden 'this' parameter + if it's an instance method. Use . + + + + Optimizes instructions by using the shorter form if possible. Eg. Ldc_I4 1 + will be replaced with Ldc_I4_1. + + + + + Short branch instructions are converted to the long form, eg. Beq_S is + converted to Beq. + + + + + Optimizes branches by using the smallest possible branch + + + + + Updates each instruction's offset + + Total size in bytes of all instructions + + + + Reads strings from #US heap + + + + + Reads a string from the #US heap + + String token + A string + + + + Resolves instruction operands + + + + + Reads a .NET method body (header, locals, instructions, exception handlers) + + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Use parameters from this method + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Use parameters from this method + Generic parameter context + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Method parameters + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Method parameters + Generic parameter context + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Method parameters + Generic parameter context + The module context + + + + Creates a CIL method body or returns an empty one if is not + a valid CIL method body. + + The operand resolver + All code + Exceptions or null if all exception handlers are in + + Method parameters + + + + Creates a CIL method body or returns an empty one if is not + a valid CIL method body. + + The operand resolver + All code + Exceptions or null if all exception handlers are in + + Method parameters + Generic parameter context + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Exception handler reader or null if exceptions aren't + present or if contains the exception handlers + Method parameters + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Exception handler reader or null if exceptions aren't + present or if contains the exception handlers + Method parameters + Generic parameter context + + + + Creates a CIL method body or returns an empty one if doesn't + point to the start of a valid CIL method body. + + The operand resolver + A reader positioned at the start of a .NET method body + Exception handler reader or null if exceptions aren't + present or if contains the exception handlers + Method parameters + Generic parameter context + The module context + + + + Creates a CIL method body or returns an empty one if is not + a valid CIL method body. + + The operand resolver + All code + Exceptions or null if all exception handlers are in + + Method parameters + Method header flags, eg. 2 if tiny method + Max stack + Code size + Local variable signature token or 0 if none + + + + Creates a CIL method body or returns an empty one if is not + a valid CIL method body. + + The operand resolver + All code + Exceptions or null if all exception handlers are in + + Method parameters + Method header flags, eg. 2 if tiny method + Max stack + Code size + Local variable signature token or 0 if none + Generic parameter context + + + + Creates a CIL method body or returns an empty one if is not + a valid CIL method body. + + The operand resolver + All code + Exceptions or null if all exception handlers are in + + Method parameters + Method header flags, eg. 2 if tiny method + Max stack + Code size + Local variable signature token or 0 if none + Generic parameter context + The module context + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Use parameters from this method + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Use parameters from this method + Generic parameter context + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Method parameters + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Method parameters + Generic parameter context + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Exception handler reader or null if exceptions aren't + present or if contains the exception handlers + Method parameters + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Exception handler reader or null if exceptions aren't + present or if contains the exception handlers + Method parameters + Generic parameter context + + + + Constructor + + The operand resolver + A reader positioned at the start of a .NET method body + Exception handler reader or null if exceptions aren't + present or if contains the exception handlers + Method parameters + Generic parameter context + Module context + + + + Initializes the method header + + Header flags, eg. 2 if it's a tiny method + Max stack + Code size + Local variable signature token + + + + Reads the method body header, locals, all instructions, and the exception handlers (if any) + + true if it worked, and false if something failed + + + + Reads the method header + + + + + Reads the locals + + All locals or null if there are none + + + + Reads all instructions + + + + + + + + + + + + + + + + + + + + + + + Reads all exception handlers + + + + + Creates a CIL body. Must be called after , and can only be + called once. + + A new instance + + + + Method body reader base class + + + + The method reader + + + All parameters + + + All locals + + + All instructions + + + All exception handlers + + + First byte after the end of the code + + + Start offset of method + + + + Gets all parameters + + + + + Gets all locals + + + + + Gets all instructions + + + + + Gets all exception handlers + + + + + Constructor + + + + + Constructor + + The module context + + + + Constructor + + The reader + + + + Constructor + + The reader + Method parameters or null if they're not known yet + + + + Constructor + + The reader + Method parameters or null if they're not known yet + The module context + + + + Sets new locals + + A list of types of all locals or null if none + + + + Sets new locals + + A list of types of all locals or null if none + + + + Reads all instructions + + Number of instructions to read + + + + Reads all instructions + + Size of code + + + + Fixes all branch instructions so their operands are set to an + instead of an offset. + + + + + Finds an instruction + + Offset of instruction + The instruction or null if there's no instruction at . + + + + Finds an instruction and throws if it's not present + + Offset of instruction + The instruction + There's no instruction at + + + + + Reads the next instruction + + + + + Reads the next OpCode from the current position + + + + + Reads the instruction operand (if any) + + The instruction + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a (a parameter) operand + + The current instruction + The operand + + + + Reads a (a local) operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a operand + + The current instruction + The operand + + + + Reads a (a parameter) operand + + The current instruction + The operand + + + + Reads a (a local) operand + + The current instruction + The operand + + + + Returns true if it's one of the ldarg/starg instructions that have an operand + + The instruction to check + + + + Returns a parameter + + A parameter index + A or null if is invalid + + + + Returns a local + + A local index + A or null if is invalid + + + + Add an exception handler if it appears valid + + The exception handler + true if it was added, false otherwise + + + + Gets the offset of an instruction + + The instruction or null if the offset is the first offset + at the end of the method. + The instruction offset + + + + Restores a 's body with the parsed method instructions + and exception handlers + + The method that gets updated with the instructions, locals, and + exception handlers. + + + + Converts a type address to a . The address can be found in + RuntimeTypeHandle.Value and it's the same address you use with the WinDbg SOS command + !dumpmt. + + + + + Converts to a . + + Address of type + The or null + + + + Instruction utility methods + + + + + Shorter instructions are converted to the longer form, eg. Ldc_I4_1 is + converted to Ldc_I4 with a 1 as the operand. + + All instructions + All locals + All method parameters, including the hidden 'this' parameter + if it's an instance method. Use . + + + + Optimizes instructions by using the shorter form if possible. Eg. Ldc_I4 1 + will be replaced with Ldc_I4_1. + + All instructions + + + + Short branch instructions are converted to the long form, eg. Beq_S is + converted to Beq. + + All instructions + + + + Optimizes branches by using the smallest possible branch + + All instructions + + + + Updates each instruction's offset + + All instructions + Total size in bytes of all instructions + + + + A CIL opcode + + + + + The opcode name + + + + + The opcode as a enum + + + + + Operand type + + + + + Flow control info + + + + + Opcode type + + + + + Push stack behavior + + + + + Pop stack behavior + + + + + Gets the value which is compatible with + + + + + Gets the size of the opcode. It's either 1 or 2 bytes. + + + + + Constructs an experimental opcode. + + + + + Creates a new instruction with no operand + + A new instance + + + + Creates a new instruction with a operand + + The value + A new instance + + + + Creates a new instruction with a operand + + The value + A new instance + + + + Creates a new instruction with an operand + + The value + A new instance + + + + Creates a new instruction with a operand + + The value + A new instance + + + + Creates a new instruction with a operand + + The value + A new instance + + + + Creates a new instruction with a operand + + The value + A new instance + + + + Creates a new instruction with a string operand + + The string + A new instance + + + + Creates a new instruction with an instruction target operand + + Target instruction + A new instance + + + + Creates a new instruction with an instruction target list operand + + The targets + A new instance + + + + Creates a new instruction with a type operand + + The type + A new instance + + + + Creates a new instruction with a type operand + + The type + A new instance + + + + Creates a new instruction with a method/field operand + + The method/field + A new instance + + + + Creates a new instruction with a field operand + + The field + A new instance + + + + Creates a new instruction with a method operand + + The method + A new instance + + + + Creates a new instruction with a token operand + + The token + A new instance + + + + Creates a new instruction with a method signature operand + + The method signature + A new instance + + + + Creates a new instruction with a method parameter operand + + The method parameter + A new instance + + + + Creates a new instruction with a method local operand + + The method local + A new instance + + + + + + + Contains all valid CIL opcodes + + + + + All one-byte opcodes + + + + + All two-byte opcodes (first byte is 0xFE) + + + + + CIL opcode type + + + + + + + + + + + + + + + + + + + + + + + + + + CIL opcode operand type + + + + 4-byte relative instruction offset + + + 4-byte field token ( or ) + + + int32 + + + int64 + + + 4-byte method token (, + or ) + + + No operand + + + Never used + + + 64-bit real + + + + + + 4-byte method sig token () + + + 4-byte string token (0x70xxxxxx) + + + 4-byte count N followed by N 4-byte relative instruction offsets + + + 4-byte token (, , + , , , + or ) + + + 4-byte type token (, or + ) + + + 2-byte param/local index + + + 1-byte relative instruction offset + + + 1-byte sbyte () or byte (the rest) + + + 32-bit real + + + 1-byte param/local index + + + + CIL opcode stack behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Event attributes, see CorHdr.h/CorEventAttr + + + + event is special. Name describes how. + + + Runtime(metadata internal APIs) should check name encoding. + + + + A high-level representation of a row in the Event table + + + + + The row id in its table + + + + + + + + + + + + + + + + + From column Event.EventFlags + + + + + + + + From column Event.Name + + + + Name + + + + From column Event.EventType + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Gets/sets the adder method + + + + + Gets/sets the invoker method + + + + + Gets/sets the remover method + + + + + Gets the other methods + + + + + Initializes , , + and . + + + + + + + + + + + + + + + + Reset , , , + + + + true if there are no methods attached to this event + + + + + + + + true if is not empty + + + + + Gets/sets the declaring type (owner type) + + + + + + + + Called by and should normally not be called by any user + code. Use instead. Only call this if you must set the + declaring type without inserting it in the declaring type's method list. + + + + + + + + + + + Gets the full name of the event + + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + + + + An Event row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Name + + + + Constructor + + Name + Type + + + + Constructor + + Name + Type + Flags + + + + Created from a row in the Event table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this Event row + Row ID + If is null + If is invalid + + + + + + + A high-level representation of a row in the ExportedType table + + + + + The row id in its table + + + + + The owner module + + + + + + + + + + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always returns false since a does not contain any + or . + + + + + + + + + + + + + + + + + From column ExportedType.Flags + + + + Attributes + + + + From column ExportedType.TypeDefId + + + + + + + + From column ExportedType.TypeName + + + + + + + + From column ExportedType.TypeNamespace + + + + + + + + From column ExportedType.Implementation + + + + + + + + + + Called to initialize + + + + true if it's nested within another + + + + + Gets the declaring type, if any + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the visibility + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the layout + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the string format + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit. See also + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + true if this type has been moved to another assembly + + + + + Resolves the type + + A instance or null if it couldn't be resolved + + + + Resolves the type + + Source module or null + A instance or null if it couldn't be resolved + + + + Resolves the type + + A instance + If the type couldn't be resolved + + + + Converts this instance to a + + A new instance + + + + + + + An ExportedType row created by the user and not present in the original .NET file + + + + + Constructor + + Owner module + + + + Constructor + + Owner module + TypeDef ID + Type name + Type namespace + Flags + Implementation + + + + Created from a row in the ExportedType table + + + + The module where this instance is located + + + + + + + + + + + + + + + + Constructor + + The module which contains this ExportedType row + Row ID + If is null + If is invalid + + + + Field flags, see CorHdr.h/CorFieldAttr + + + + member access mask - Use this mask to retrieve accessibility information. + + + Member not referenceable. + + + Member not referenceable. + + + Accessible only by the parent type. + + + Accessible by sub-types only in this Assembly. + + + Accessibly by anyone in the Assembly. + + + Accessible only by type and sub-types. + + + Accessibly by sub-types anywhere, plus anyone in assembly. + + + Accessibly by anyone who has visibility to this scope. + + + Defined on type, else per instance. + + + Field may only be initialized, not written to after init. + + + Value is compile time constant. + + + Field does not have to be serialized when type is remoted. + + + field is special. Name describes how. + + + Implementation is forwarded through pinvoke. + + + Runtime(metadata internal APIs) should check name encoding. + + + Field has marshalling information. + + + Field has default. + + + Field has RVA. + + + + A high-level representation of a row in the Field table + + + + + The row id in its table + + + + + + + + + + + + + + + + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + From column Field.Flags + + + + Attributes + + + + From column Field.Name + + + + Name + + + + From column Field.Signature + + + + + + + + Gets/sets the field layout offset + + + + + + + + + + Called to initialize + + + + + + + + + + + + Called to initialize + + + Reset + + + + Gets/sets the field RVA + + + + + + + + + + Called to initialize + + + Reset + + + + Gets/sets the initial value. Be sure to set to true if + you write to this field. + + + + + + + + + + Called to initialize + + + Reset + + + + + + + + + + + + Called to initialize + + + + + + + + + + + + Called to initialize + + + Reset + + + + + + + + + + Gets/sets the declaring type (owner type) + + + + + + + + Called by and should normally not be called by any user + code. Use instead. Only call this if you must set the + declaring type without inserting it in the declaring type's method list. + + + + + + + + Gets/sets the + + + + + + + + true if is not null + + + + + true if is not null + + + + + Gets the constant element type or if there's no constant + + + + + true if is not null + + + + + Gets/sets the field type + + + + + Modify field: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the field access + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Returns the full name of this field + + + + + Gets the size of this field in bytes or 0 if unknown. + + + + + Gets the size of this field in bytes or 0 if unknown. + + Updated with size + true if is valid, false otherwise + + + + Gets the size of this field in bytes or 0 if unknown. + + The declaring type of this + The field signature of this + Updated with size + true if is valid, false otherwise + + + + Gets the size of this field in bytes or 0 if unknown. + + The declaring type of this + The field signature of this + Size of a pointer + Updated with size + true if is valid, false otherwise + + + + + + + A Field row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Name + + + + Constructor + + Name + Signature + + + + Constructor + + Name + Signature + Flags + + + + Created from a row in the Field table + + + + The module where this instance is located + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Constructor + + The module which contains this Field row + Row ID + If is null + If is invalid + + + + File row flags. See CorHdr.h/CorFileFlags + + + + This is not a resource file + + + This is a resource file or other non-metadata-containing file + + + + A high-level representation of a row in the File table + + + + + The row id in its table + + + + + + + + + + + + + + + + + From column File.Flags + + + + Attributes + + + + From column File.Name + + + + Name + + + + From column File.HashValue + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + + + + + + + A File row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Name of file + Flags + File hash + + + + Created from a row in the File table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this File row + Row ID + If is null + If is invalid + + + + Redirects .NET framework assembly references from older to newer versions + + + + + Redirects a .NET Framework assembly from an older version to the correct version + loaded at runtime. + + Current assembly reference that might get updated + Module using the assembly reference + + + + Tries to redirect a .NET Framework assembly from an older version to the correct version + loaded at runtime. + + Assembly reference + Module using the assembly reference + Updated with the redirected assembly if successful + + + + + Redirects a .NET Framework 2.0-3.5 assembly from an older version to the correct version + loaded at runtime. + + Current assembly reference that might get updated + + + + Redirects a .NET Framework 4.0+ assembly from an older version to the correct version + loaded at runtime. + + Current assembly reference that might get updated + + + + Tries to redirect a .NET Framework 2.0-3.5 assembly from an older version to the correct version + loaded at runtime. + + Assembly reference + Updated with the redirected assembly if successful + + + + + Tries to redirect a .NET Framework 4.0+ assembly from an older version to the correct version + loaded at runtime. + + Assembly reference + Updated with the redirected assembly if successful + + + + + Helps create a name + + + + + Checks whether the assembly name should be included when printing + the full type name. The assembly name isn't required in custom attributes + when the type already exists in the same module as the CA, or if the type + exists in mscorlib. + + The type (TypeDef, TypeRef or ExportedType) + or null + true if the assembly name must be included, false otherwise + + + + Creates type names, method names, etc. + + + + + Checks whether the assembly name should be included when printing the full name. + See for more info. + + Owner module + The type (TypeDef, TypeRef or ExportedType) + or null + true if the assembly name must be included, false otherwise + + + + Checks whether the assembly name should be included when printing the full name. + See for more info. + + Owner module + The type (TypeDef, TypeRef or ExportedType) + or null + If false, don't add an assembly name if it's a type in , + if true, don't add an assembly name if it's a type in or the corlib. + true if the assembly name must be included, false otherwise + + + + Returns the full name of a + + The TypeRef + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the full name of a + + The TypeRef + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the name of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The full name + + + + Returns the name of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The full name + + + + Returns the namespace of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The full name + + + + Returns the namespace of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The full name + + + + Returns the assembly qualified full name of a + + The IType + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly qualified full name of a + + The IType + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the full name of a property + + Declaring type full name or null if none + Name of property + Property signature + Type generic arguments or null if none + String builder to use or null + Property full name + + + + Returns the full name of a property + + Declaring type full name or null if none + Name of property + Property signature + Type generic arguments or null if none + String builder to use or null + Property full name + + + + Returns the full name of a property + + Declaring type full name or null if none + Name of property + Event type + Type generic arguments or null if none + String builder to use or null + Property full name + + + + Returns the full name of a property + + Declaring type full name or null if none + Name of property + Event type + Type generic arguments or null if none + String builder to use or null + Property full name + + + + Returns the full name of a field + + Declaring type full name or null if none + Name of field + Field signature + Type generic arguments or null if none + String builder to use or null + Field full name + + + + Returns the full name of a field + + Declaring type full name or null if none + Name of field + Field signature + Type generic arguments or null if none + String builder to use or null + Field full name + + + + Returns the full name of a method + + Declaring type full name or null if none + Name of method or null if none + Method signature + Type generic arguments or null if none + Method generic arguments or null if none + Generic parameter owner method or null + String builder to use or null + Method full name + + + + Returns the full name of a method + + Declaring type full name or null if none + Name of method or null if none + Method signature + Type generic arguments or null if none + Method generic arguments or null if none + Generic parameter owner method or null + String builder to use or null + Method full name + + + + Returns the full name of a property sig + + Property sig + String builder to use or null + Property sig full name + + + + Returns the full name of a property sig + + Property sig + String builder to use or null + Property sig full name + + + + Returns the full name of a sig + + Declaring type or null + Name or null + Method sig + Owner method or null + String builder to use or null + Sig full name + + + + Returns the full name of a sig + + Declaring type or null + Name or null + Method sig + Owner method or null + String builder to use or null + Sig full name + + + + Returns the namespace of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the namespace of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the name of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the name of a + + The TypeRef + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the full name of a + + The TypeRef + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the full name of a + + The TypeRef + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the assembly qualified full name of a + + The TypeRef + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly qualified full name of a + + The TypeRef + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly where this type is defined + + The TypeRef + A or null if none found + + + + Gets the scope + + The TypeRef + The or null if none found + + + + Returns the owner module. The type was created from metadata in this module. + + The TypeRef + A or null if none found + + + + Returns the namespace of a + + The TypeDef + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the namespace of a + + The TypeDef + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the name of a + + The TypeDef + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the name of a + + The TypeDef + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the full name of a + + The TypeDef + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the full name of a + + The TypeDef + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the assembly qualified full name of a + + The TypeDef + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly qualified full name of a + + The TypeDef + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly where this type is defined + + The TypeDef + A or null if none found + + + + Returns the owner module. The type was created from metadata in this module. + + The TypeDef + A or null if none found + + + + Returns the namespace of a + + The TypeSpec + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the namespace of a + + The TypeSpec + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the name of a + + The TypeSpec + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the name of a + + The TypeSpec + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the full name of a + + The TypeSpec + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the full name of a + + The TypeSpec + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the assembly qualified full name of a + + The TypeSpec + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly qualified full name of a + + The TypeSpec + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly where this type is defined + + The TypeSpec + A or null if none found + + + + Gets the scope type + + The TypeSpec + The scope type or null if none found + + + + Gets the scope + + The TypeSpec + The or null if none found + + + + Returns the owner module. The type was created from metadata in this module. + + The TypeSpec + A or null if none found + + + + Returns the namespace of a + + The type sig + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the namespace of a + + The type sig + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the name of a + + The type sig + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the name of a + + The type sig + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the full name of a + + The type sig + Set if output should be compatible with reflection + Helps print the name + Type generic args or null if none + Method generic args or null if none + String builder to use or null + The full name + + + + Returns the full name of a + + The type sig + Set if output should be compatible with reflection + Helps print the name + Type generic args or null if none + Method generic args or null if none + String builder to use or null + The full name + + + + Returns the assembly qualified full name of a + + The TypeSig + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly qualified full name of a + + The TypeSig + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly where this type is defined + + The TypeSig + A or null if none found + + + + Gets the scope + + The TypeSig + The or null if none found + + + + Gets the scope type + + The TypeSig + The scope type or null if none found + + + + Returns the owner module. The type was created from metadata in this module. + + The TypeSig + A or null if none found + + + + Returns the namespace of a + + The ExportedType + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the namespace of a + + The ExportedType + Set if output should be compatible with reflection + String builder to use or null + The namespace + + + + Returns the name of a + + The ExportedType + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the name of a + + The ExportedType + Set if output should be compatible with reflection + String builder to use or null + The name + + + + Returns the full name of a + + The ExportedType + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the full name of a + + The ExportedType + Set if output should be compatible with reflection + Helps print the name + String builder to use or null + The full name + + + + Returns the assembly qualified full name of a + + The ExportedType + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly qualified full name of a + + The ExportedType + Helps print the name + String builder to use or null + The assembly qualified full name + + + + Returns the assembly where this type is defined + + The ExportedType + A or null if none found + + + + Gets the scope type + + The ExportedType + The scope type or null if none found + + + + Gets the scope + + The ExportedType + The or null if none found + + + + Returns the owner module. The type was created from metadata in this module. + + The ExportedType + A or null if none found + + + + + + + Constructor + + true if it's for generic types, false if generic methods + + + + Pushes generic arguments + + The generic arguments + + + + Pops generic arguments + + The popped generic arguments + + + + Resolves a generic argument + + Generic variable number + A or null if none was found + + + + Replaces generic type/method var with its generic argument + + + + + Pushes generic arguments + + The generic arguments + + + + Pops generic arguments + + The popped generic arguments + + + + Pushes generic arguments + + The generic arguments + + + + Pops generic arguments + + The popped generic arguments + + + + Replaces a generic type/method var with its generic argument (if any). If + isn't a generic type/method var or if it can't + be resolved, it itself is returned. Else the resolved type is returned. + + Type signature + New which is never null unless + is null + + + + A high-level representation of a row in the GenericParam table + + + + + The row id in its table + + + + + + + + + + + + + + Gets the owner type/method + + + + + + + + Gets the declaring type or null if none or if is + not a + + + + + + + + Gets the declaring method or null if none or if is + not a + + + + + From column GenericParam.Number + + + + + + + + From column GenericParam.Flags + + + + Attributes + + + + From column GenericParam.Name + + + + Name + + + + From column GenericParam.Kind (v1.1 only) + + + + + + + + Gets the generic param constraints + + + + + + + Initializes + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + true if is not empty + + + + + + + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets variance (non, contra, co) + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the special constraint + + + + + true if there are no special constraints + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + + + + + + + + + + + + + + + + + + + A GenericParam row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + The generic param number + + + + Constructor + + The generic param number + Flags + + + + Constructor + + The generic param number + Flags + Name + + + + Created from a row in the GenericParam table + + + + The module where this instance is located + + + + + + + + + + + + + + + + Constructor + + The module which contains this GenericParam row + Row ID + If is null + If is invalid + + + + + + + Generic parameter flags. See CorHdr.h/CorGenericParamAttr + + + + + + + + + + + + + + + + + + + + + + type argument must be a reference type + + + type argument must be a value type but not Nullable + + + type argument must have a public default constructor + + + + A high-level representation of a row in the GenericParamConstraint table + + + + + The row id in its table + + + + + + + + + + + + + + Gets the owner generic param + + + + + + + + From column GenericParamConstraint.Constraint + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + A GenericParamConstraintAssembly row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + The constraint + + + + Created from a row in the GenericParamConstraint table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this GenericParamConstraint row + Row ID + Generic parameter context + If is null + If is invalid + + + + Generic parameter context + + + + + Type context + + + + + Method context + + + + + true if and are both null + + + + + Creates a new instance and initializes the + field to 's + and the field to . + + Method + A new instance + + + + Creates a new instance and initializes the + field to and the field + to null + + Type + A new instance + + + + Constructor + + Type context + + + + Constructor. The field is set to null and NOT to + 's . Use + if you want that behavior. + + Method context + + + + Constructor + + Type context + Method context + + + + Resolves assemblies + + + + + Finds and returns an + + The assembly to find + The module that needs to resolve an assembly or null + An instance owned by the assembly resolver or + null if the assembly couldn't be found. + + + + The table row can be referenced by a MD token + + + + + Returns the metadata token + + + + + Gets/sets the row ID + + + + + All *MD classes implement this interface. + + + + + Gets the original row ID + + + + + An assembly. Implemented by , and + . + + + + + The assembly version + + + + + Assembly flags + + + + + Public key or public key token + + + + + Locale, aka culture + + + + + Gets the full name of the assembly but use a public key token + + + + + Gets/sets the bit + + + + + Gets/sets the processor architecture + + + + + Gets/sets the processor architecture + + + + + true if unspecified processor architecture + + + + + true if neutral (PE32) architecture + + + + + true if x86 (PE32) architecture + + + + + true if IA-64 (PE32+) architecture + + + + + true if x64 (PE32+) architecture + + + + + true if ARM (PE32) architecture + + + + + true if eg. reference assembly (not runnable) + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the content type + + + + + true if content type is Default + + + + + true if content type is WindowsRuntime + + + + + Implemented by and , which are the only + valid managed entry point tokens. + + + + + Interface to access a module def/ref + + + + + Type of scope + + + + + It's an instance + + + + + It's a instance + + + + + It's a instance + + + + + Implemented by modules and assemblies + + + + + Gets the scope type + + + + + Gets the scope name + + + + + Interface to get the full name of a type, field, or method + + + + + Gets the full name + + + + + Simple name of implementer + + + + + Implemented by all member refs and types + + + + + Gets the owner module + + + + + Methods to check whether the implementer is a type or a method. + + + + + true if it's a type + + + + + true if it's a method + + + + + Implemented by types, fields, methods, properties, events + + + + + Gets the declaring type + + + + + true if it's a or a that's + referencing a field. + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + All member definitions implement this interface: , + , , , + , and . + + + + + Gets the declaring type + + + + + Implemented by the following classes: , + , , , + , , , + and + + + + + Implemented by types and methods + + + + + Gets the number of generic parameters / arguments + + + + + Implemented by fields ( and ) + + + + + Gets/sets the field signature + + + + + Implemented by methods (, and ) + + + + + Method signature + + + + + Implemented by tables that can be a token in the ldtoken instruction + + + + + The table row can be referenced by a coded token + + + + + TypeDefOrRef coded token interface + + + + + The coded token tag + + + + + HasConstant coded token interface + + + + + The coded token tag + + + + + Gets/sets the constant value + + + + + HasCustomAttribute coded token interface + + + + + The coded token tag + + + + + Gets all custom attributes + + + + + true if is not empty + + + + + HasFieldMarshal coded token interface + + + + + The coded token tag + + + + + Gets/sets the marshal type + + + + + true if is not null + + + + + HasDeclSecurity coded token interface + + + + + The coded token tag + + + + + Gets the permission sets + + + + + true if is not empty + + + + + MemberRefParent coded token interface + + + + + The coded token tag + + + + + HasSemantic coded token interface + + + + + The coded token tag + + + + + MethodDefOrRef coded token interface + + + + + The coded token tag + + + + + MemberForwarded coded token interface + + + + + The coded token tag + + + + + Gets/sets the impl map + + + + + true if is not null + + + + + Implementation coded token interface + + + + + The coded token tag + + + + + CustomAttributeType coded token interface + + + + + The coded token tag + + + + + ResolutionScope coded token interface + + + + + The coded token tag + + + + + TypeOrMethodDef coded token interface + + + + + The coded token tag + + + + + Gets the generic parameters + + + + + true if is not empty + + + + + HasCustomDebugInformation interface + + + + + The custom debug information tag + + + + + Gets the custom debug infos + + + + + true if is not empty + + + + + Access to .NET core library's simple types + + + + + Gets a System.Void + + + + + Gets a System.Boolean + + + + + Gets a System.Char + + + + + Gets a System.SByte + + + + + Gets a System.Byte + + + + + Gets a System.Int16 + + + + + Gets a System.UInt16 + + + + + Gets a System.Int32 + + + + + Gets a System.UInt32 + + + + + Gets a System.Int64 + + + + + Gets a System.UInt64 + + + + + Gets a System.Single + + + + + Gets a System.Double + + + + + Gets a System.String + + + + + Gets a System.TypedReference + + + + + Gets a System.IntPtr + + + + + Gets a System.UIntPtr + + + + + Gets a System.Object + + + + + Gets the assembly reference to the core library + + + + + Gets a that references a type in the core library assembly + + Namespace of type (eg. "System") + Name of type + A instance. This instance may be a cached instance. + + + + Custom attribute interface. Implemented by and + + + + + + Gets the attribute type + + + + + Gets the full name of the attribute type + + + + + Gets all named arguments (field and property values) + + + + + true if is not empty + + + + + Gets all s that are field arguments + + + + + Gets all s that are property arguments + + + + + Interface to decrypt methods + + + + + Gets the method's body + + Method rid + The found in the method's Method row + The method's parameters + Generic parameter context + Updated with the method's if this + method returns true + true if the method body was decrypted, false if the method isn't + encrypted and the default body reader code should be used. + + + + Interface to decrypt strings + + + + + Reads a string + + String token + A string or null if we should read it from the #US heap + + + + events + + + + + An error was detected. An exception should normally be thrown but the error + can be ignored. + + + + + Just a warning and can be ignored. + + + + + A normal message + + + + + A verbose message + + + + + A very verbose message + + + + + Simple logger + + + + + Log something + + Caller or null + Logger event + Format + Arguments + + + + true if this event is ignored. If the event is ignored, the caller can + choose not to call . This is useful if it can take time to + prepare the message. + + The logger event + + + + Dummy logger which ignores all messages, but can optionally throw on errors. + + + + + It ignores everything and doesn't throw anything. + + + + + Throws a on errors, but ignores anything else. + + + + + Constructor + + If non-null, this exception type is thrown on + errors. It must have a public constructor that takes a as the only + argument. + + + + + + + + + + A high-level representation of a row in the ImplMap table + + + + + The row id in its table + + + + + + + + + + + From column ImplMap.MappingFlags + + + + Attributes + + + + From column ImplMap.ImportName + + + + Name + + + + From column ImplMap.ImportScope + + + + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the char set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets best fit + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets throw on unmappable char + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets calling convention + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Checks whether this is a certain P/Invoke method + + Name of the DLL + Name of the function within the DLL + true if it's the specified P/Invoke method, else false + + + + Checks whether this is a certain P/Invoke method + + Name of the DLL + Name of the function within the DLL + Treat as Windows + true if it's the specified P/Invoke method, else false + + + + An ImplMap row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Scope + Name + Flags + + + + Created from a row in the ImplMap table + + + + + + + + Constructor + + The module which contains this ImplMap row + Row ID + If is null + If is invalid + + + + options + + + + + Use s whenever possible if the is located + in this module. + + + + + Use s whenever possible if the is located + in this module. + + + + + Use s whenever possible if the is located + in this module. + + + + + Use s, s and s + whenever possible if the definition is located in this module. + + + + + + + + Don't set this flag. For internal use only. + + + + + Re-maps entities that were renamed in the target module + + + + + Matches source to the one that is already present in the target module under a different name. + + referenced by the entity that is being imported. + matching or null if there's no match. + + + + Matches source to the one that is already present in the target module under a different name. + + referenced by the entity that is being imported. + matching or null if there's no match. + + + + Matches source to the one that is already present in the target module under a different name. + + referenced by the entity that is being imported. + matching or null if there's no match. + + + + Matches source to the one that is already present in the target module under a different name. + + referenced by the entity that is being imported. + matching or null if there's no match. + + + + Overrides default behavior of + May be used to use reference assemblies for resolution, for example. + + to create for. + or null to use default 's type resolution + + + + Imports s, s, s + and s as references + + + + + Constructor + + The module that will own all references + + + + Constructor + + The module that will own all references + Generic parameter context + + + + Constructor + + The module that will own all references + Importer options + + + + Constructor + + The module that will own all references + Importer options + Generic parameter context + + + + Constructor + + The module that will own all references + Importer options + Generic parameter context + Mapper for renamed entities + + + + Imports a as a . If it's a type that should be + the declaring type of a field/method reference, call instead. + + The type + The imported type or null if is invalid + + + + Imports a as a . Should be called if it's the + declaring type of a method/field reference. See also + + The type + + + + + Imports a as a + + The type + A list of all required modifiers or null + A list of all optional modifiers or null + The imported type or null if is invalid + + + + Imports a as a + + The type + The imported type or null if is invalid + + + + Imports a as a + + The type + A list of all required modifiers or null + A list of all optional modifiers or null + The imported type or null if is invalid + + + + Imports a as a . This will be either + a or a . + + The method + The imported method or null if is invalid + or if we failed to import the method + + + + Imports a as a . This will be either + a or a . + + The method + Always verify method signature to make sure the + returned reference matches the metadata in the source assembly + The imported method or null if is invalid + or if we failed to import the method + + + + Imports a as a + + The field + The imported field or null if is invalid + or if we failed to import the field + + + + Imports a as a + + The field + Always verify field signature to make sure the + returned reference matches the metadata in the source assembly + The imported field or null if is invalid + or if we failed to import the field + + + + Imports a + + The type + The imported type or null + + + + Imports a as a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The sig + The imported sig or null if input is invalid + + + + Imports a + + The sig + The imported sig or null if input is invalid + + + + Imports a + + The sig + The imported sig or null if input is invalid + + + + Imports a + + The sig + The imported sig or null if input is invalid + + + + Imports a + + The sig + The imported sig or null if input is invalid + + + + Imports a + + The sig + The imported sig or null if input is invalid + + + + Imports a + + The field + The imported type or null if is invalid + + + + Imports a + + The method + The imported method or null if is invalid + + + + Imports a as an + + The field + The imported type or null if is invalid + + + + Imports a as an + + The method + The imported method or null if is invalid + + + + Imports a + + The method + The imported method or null if is invalid + + + + Imports a + + The member ref + The imported member ref or null if is invalid + + + + A high-level representation of a row in the InterfaceImpl table + + + + + The row id in its table + + + + + + + + + + + + + + From column InterfaceImpl.Interface + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + An InterfaceImpl row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + The interface the type implements + + + + Created from a row in the InterfaceImpl table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this InterfaceImpl row + Row ID + Generic parameter context + If is null + If is invalid + + + + Resolves types, methods, fields + + + + + Resolves types + + + + + Resolves a type + + The type + The module that needs to resolve the type or null + A instance or null if it couldn't be resolved + + + + Resolves fields and methods + + + + + Resolves a method or a field + + A method/field reference + A or a instance or null + if it couldn't be resolved. + + + + Resolves tokens + + + + + Resolves a token + + The metadata token + Generic parameter context + A or null if is invalid + + + + Interface to get the full name of a type + + + + + true if it's a value type + + + + + Returns the name of this type + + + + + Returns the reflection name of this type + + + + + Returns the namespace of this type + + + + + Returns the reflection namespace of this type + + + + + Returns the reflection name of this type. See also . + + + + + Returns the reflection name of this type, and includes the assembly name where the + type is located. It can be passed to to + load the type. + + + + + Gets the assembly where this type is defined + + + + + Gets the scope, which is different from since it + can differentiate between modules within the same assembly. + + + + + Gets the type whose scope is returned by and whose assembly + is returned by . This is always a + , or null. It can also be a + nested . + For example, if this type is a System.String&, then this value is a System.String. + If it's a generic instance type (eg. List<int>), then the generic type is + returned (eg. List<T>). In other words, the first or + that is found (without searching generic arguments) is returned. + + + + + true if it's an integer or a floating point type + + + + + Implemented by types and calling convention signatures. + + + + + true if this contains a or a . + + + + + Finds s + + + + + Finds a + + Full name of the type (no assembly information) + true if it's a reflection name, and nested + type names are separated by a + character. If false, nested type names + are separated by a / character. + An existing or null if it wasn't found. + + + + Finds a . 's scope (i.e., module or + assembly) is ignored when looking up the type. + + The type ref + An existing or null if it wasn't found. + + + + Interface to access a local or a parameter + + + + + Gets the variable type + + + + + Gets the 0-based position + + + + + Gets/sets the variable name + + + + + A high-level representation of a row in the ManifestResource table + + + + + The row id in its table + + + + + + + + + + + + + + From column ManifestResource.Offset + + + + + + + + From column ManifestResource.Flags + + + + Attributes + + + + From column ManifestResource.Name + + + + Name + + + + From column ManifestResource.Implementation + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Gets/sets the visibility + + + + + true if is set + + + + + true if is set + + + + + A ManifestResource row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Name + Implementation + + + + Constructor + + Name + Implementation + Flags + + + + Constructor + + Name + Implementation + Flags + Offset + + + + Created from a row in the ManifestResource table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this ManifestResource row + Row ID + If is null + If is invalid + + + + ManifestResource flags. See CorHdr.h/CorManifestResourceFlags + + + + + + + The Resource is exported from the Assembly. + + + The Resource is private to the Assembly. + + + + Reads s + + + + + Reads a from the #Blob heap + + Module + Blob offset + A new instance + + + + Reads a from the #Blob heap + + Module + Blob offset + Generic parameter context + A new instance + + + + Reads a from + + Owner module + Marshal data + A new instance + + + + Reads a from + + Owner module + Marshal data + Generic parameter context + A new instance + + + + Reads a from + + Owner module + A reader that will be owned by us + A new instance + + + + Reads a from + + Owner module + A reader that will be owned by us + Generic parameter context + A new instance + + + + Base class of all marshal types + + + + + The native type + + + + + Gets the + + + + + Constructor + + Native type + + + + + + + Contains the raw marshal blob data + + + + + Gets/sets the raw data + + + + + Constructor + + Raw data + + + + A marshal type + + + + + Gets/sets the size + + + + + true if is valid + + + + + Default constructor + + + + + Constructor + + Size + + + + + + + A marshal type + + + + + Gets/sets the variant type + + + + + Gets/sets the user-defined sub type (it's usually null) + + + + + true if is valid + + + + + true if is valid + + + + + Default constructor + + + + + Constructor + + Variant type + + + + Constructor + + User-defined sub type + + + + Constructor + + Variant type + User-defined sub type + + + + + + + A marshal type + + + + + Gets/sets the element type + + + + + Gets/sets the size + + + + + true if is valid + + + + + true if is valid + + + + + Default constructor + + + + + Constructor + + Size + + + + Constructor + + Size + Element type + + + + + + + A marshal type + + + + + Gets/sets the element type + + + + + Gets/sets the parameter number + + + + + Gets/sets the size of the array + + + + + Gets/sets the flags + + + + + true if is valid + + + + + true if is valid + + + + + true if is valid + + + + + true if is valid + + + + + true if ntaSizeParamIndexSpecified bit is set, false if it's not + set or if is invalid. + + + + + true if ntaSizeParamIndexSpecified bit is not set, false if it's + set or if is invalid. + + + + + Default constructor + + + + + Constructor + + Element type + + + + Constructor + + Element type + Parameter number + + + + Constructor + + Element type + Parameter number + Number of elements + + + + Constructor + + Element type + Parameter number + Number of elements + Flags + + + + + + + A marshal type + + + + + Gets/sets the GUID string + + + + + Gets/sets the native type name string + + + + + Gets/sets the custom marshaler + + + + + Gets/sets the cookie string + + + + + Default constructor + + + + + Constructor + + GUID string + + + + Constructor + + GUID string + Native type name string + + + + Constructor + + GUID string + Native type name string + Custom marshaler name string + + + + Constructor + + GUID string + Native type name string + Custom marshaler name string + Cookie string + + + + + + + A , or a + marshal type + + + + + Gets/sets the IID parameter index + + + + + true if is valid + + + + + Constructor + + Native type + + + + Constructor + + Native type + IID parameter index + + + + + + + Metadata token + + + + + Mask to get the rid from a raw metadata token + + + + + Max rid value + + + + + Number of bits to right shift a raw metadata token to get the table index + + + + + Returns the table type + + + + + Returns the row id + + + + + Returns the raw token + + + + + Returns true if it's a null token + + + + + Constructor + + Raw token + + + + Constructor + + Raw token + + + + Constructor + + The table type + Row id + + + + Constructor + + The table type + Row id + + + + Returns the rid (row ID) + + A raw metadata token + A rid + + + + Returns the rid (row ID) + + A raw metadata token + A rid + + + + Returns the table + + A raw metadata token + A metadata table index + + + + Returns the table + + A raw metadata token + A metadata table index + + + + Gets the token as a raw 32-bit signed integer + + + + + Gets the token as a raw 32-bit unsigned integer + + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + + + + + + + + + + + + + + + + + Represents the #Blob stream + + + + + + + + + + + Reads data + + Offset of data + The data or null if invalid offset + + + + Reads data just like , but returns an empty array if + offset is invalid + + Offset of data + The data + + + + Creates a reader that can access a blob + + Offset of blob + A new stream + + + + Creates a reader that can access a blob or returns false on failure + + Offset of blob + Updated with the reader + + + + + Contains all possible coded token classes + + + + TypeDefOrRef coded token + + + HasConstant coded token + + + HasCustomAttribute coded token + + + HasFieldMarshal coded token + + + HasDeclSecurity coded token + + + MemberRefParent coded token + + + HasSemantic coded token + + + MethodDefOrRef coded token + + + MemberForwarded coded token + + + Implementation coded token + + + CustomAttributeType coded token + + + ResolutionScope coded token + + + TypeOrMethodDef coded token + + + HasCustomDebugInformation coded token + + + + Returns all types of tables + + + + + Returns the number of bits that is used to encode table type + + + + + Constructor + + Number of bits used to encode token type + All table types + + + + Encodes a token + + The token + Coded token + + + + + Encodes a token + + The token + Coded token + + + + + Encodes a token + + The token + Coded token + true if successful + + + + Encodes a token + + The token + Coded token + true if successful + + + + Decodes a coded token + + The coded token + Decoded token or 0 on failure + + + + + Decodes a coded token + + The coded token + Decoded token or 0 on failure + + + + + Decodes a coded token + + The coded token + Decoded token + true if successful + + + + Decodes a coded token + + The coded token + Decoded token + true if successful + + + + Info about one column in a MD table + + + + + Gets the column index + + + + + Returns the column offset within the table row + + + + + Returns the column size + + + + + Returns the column name + + + + + Returns the ColumnSize enum value + + + + + Constructor + + Column index + The column name + Column size + + + + Constructor + + Column index + The column name + Column size + Offset of column + Size of column + + + + Reads the column + + A reader positioned on this column + The column value + + + + Writes a column + + The writer position on this column + The column value + + + + MD table column size + + + + RID into Module table + + + RID into TypeRef table + + + RID into TypeDef table + + + RID into FieldPtr table + + + RID into Field table + + + RID into MethodPtr table + + + RID into Method table + + + RID into ParamPtr table + + + RID into Param table + + + RID into InterfaceImpl table + + + RID into MemberRef table + + + RID into Constant table + + + RID into CustomAttribute table + + + RID into FieldMarshal table + + + RID into DeclSecurity table + + + RID into ClassLayout table + + + RID into FieldLayout table + + + RID into StandAloneSig table + + + RID into EventMap table + + + RID into EventPtr table + + + RID into Event table + + + RID into PropertyMap table + + + RID into PropertyPtr table + + + RID into Property table + + + RID into MethodSemantics table + + + RID into MethodImpl table + + + RID into ModuleRef table + + + RID into TypeSpec table + + + RID into ImplMap table + + + RID into FieldRVA table + + + RID into ENCLog table + + + RID into ENCMap table + + + RID into Assembly table + + + RID into AssemblyProcessor table + + + RID into AssemblyOS table + + + RID into AssemblyRef table + + + RID into AssemblyRefProcessor table + + + RID into AssemblyRefOS table + + + RID into File table + + + RID into ExportedType table + + + RID into ManifestResource table + + + RID into NestedClass table + + + RID into GenericParam table + + + RID into MethodSpec table + + + RID into GenericParamConstraint table + + + RID into Document table + + + RID into MethodDebugInformation table + + + RID into LocalScope table + + + RID into LocalVariable table + + + RID into LocalConstant table + + + RID into ImportScope table + + + RID into StateMachineMethod table + + + RID into CustomDebugInformation table + + + 8-bit byte + + + 16-bit signed int + + + 16-bit unsigned int + + + 32-bit signed int + + + 32-bit unsigned int + + + Index into #Strings stream + + + Index into #GUID stream + + + Index into #Blob stream + + + TypeDefOrRef encoded token + + + HasConstant encoded token + + + HasCustomAttribute encoded token + + + HasFieldMarshal encoded token + + + HasDeclSecurity encoded token + + + MemberRefParent encoded token + + + HasSemantic encoded token + + + MethodDefOrRef encoded token + + + MemberForwarded encoded token + + + Implementation encoded token + + + CustomAttributeType encoded token + + + ResolutionScope encoded token + + + TypeOrMethodDef encoded token + + + HasCustomDebugInformation encoded token + + + + See COMIMAGE_FLAGS_XXX in CorHdr.h in the Windows SDK + + + + + See COMIMAGE_FLAGS_ILONLY in the Windows SDK + + + + + See COMIMAGE_FLAGS_32BITREQUIRED in the Windows SDK + + + + + Set if a native header exists (COMIMAGE_FLAGS_IL_LIBRARY) + + + + + See COMIMAGE_FLAGS_STRONGNAMESIGNED in the Windows SDK + + + + + See COMIMAGE_FLAGS_NATIVE_ENTRYPOINT in the Windows SDK + + + + + See COMIMAGE_FLAGS_TRACKDEBUGDATA in the Windows SDK + + + + + See COMIMAGE_FLAGS_32BITPREFERRED in the Windows SDK + + + + + Used when a #~ stream is present in the metadata + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets a rid list (eg. field list) + + Source table, eg. TypeDef + Row ID in + Column index in , eg. 4 for TypeDef.FieldList + Destination table, eg. Field + A new instance + + + + + + + A custom .NET metadata stream + + + + + Constructor + + + + + Constructor + + Data reader factory + Offset of metadata + The stream header + + + + .NET metadata stream + + + + + Reader that can access the whole stream. + + NOTE: Always copy this field to a local variable before using it since it must be thread safe. + + + + + null if it wasn't present in the file + + + + + + + + + + + Gets the length of this stream in the metadata + + + + + Gets the stream header + + + + + Gets the name of the stream + + + + + Gets a data reader that can read the full stream + + + + + + Default constructor + + + + + Constructor + + Data reader factory + Offset of metadata + The stream header + + + + Called after gets recreated + + + + + + + + Dispose method + + true if called by + + + + Checks whether an index is valid + + The index + true if the index is valid + + + + Check whether an offset is within the stream + + Stream offset + true if the offset is valid + + + + Check whether an offset is within the stream + + Stream offset + Size of data + true if the offset is valid + + + + Base class of #US, #Strings, #Blob, and #GUID classes + + + + + + + + + + + Initializes .NET table row sizes + + + + + Initializes the table sizes + + true if #Strings size >= 0x10000 + true if #GUID size >= 0x10000 + true if #Blob size >= 0x10000 + Count of rows in each table + Count of rows in each table (debug tables) + + + + Creates the table infos + + Major table version + Minor table version + All table infos (not completely initialized) + + + + Creates the table infos + + Major table version + Minor table version + Initialized to max present tables (eg. 42 or 45) + All table infos (not completely initialized) + + + + Used when a #- stream is present in the metadata + + + + + + + + + + + + + + + + + + + + + + + Converts a logical Field rid to a physical Field rid + + A valid rid + Converted rid or any invalid rid value if is invalid + + + + Converts a logical Method rid to a physical Method rid + + A valid rid + Converted rid or any invalid rid value if is invalid + + + + Converts a logical Param rid to a physical Param rid + + A valid rid + Converted rid or any invalid rid value if is invalid + + + + Converts a logical Event rid to a physical Event rid + + A valid rid + Converted rid or any invalid rid value if is invalid + + + + Converts a logical Property rid to a physical Property rid + + A valid rid + Converted rid or any invalid rid value if is invalid + + + + + + + + + + + + + + + + + + + Gets a rid list (eg. field list) + + Source table, eg. TypeDef + Row ID in + Column index in , eg. 4 for TypeDef.FieldList + Destination table, eg. Field + A new instance + + + + + + + Linear searches the table (O(n)) for a rid whose key column at index + is equal to . + + Table to search + Key column index + Key + The rid of the found row, or 0 if none found + + + + + + + Represents the #GUID stream + + + + + + + + + + + + + + Read a + + Index into this stream + A or null if is 0 or invalid + + + + Heap type. The values are set in stone by MS. Don't change. + + + + #Strings heap + + + #GUID heap + + + #Blob heap + + + #US heap + + + + Represents the IMAGE_COR20_HEADER structure + + + + + Returns true if it has a native header + + + + + Returns the IMAGE_COR20_HEADER.cb field + + + + + Returns the IMAGE_COR20_HEADER.MajorRuntimeVersion field + + + + + Returns the IMAGE_COR20_HEADER.MinorRuntimeVersion field + + + + + Returns the IMAGE_COR20_HEADER.Metadata field + + + + + Returns the IMAGE_COR20_HEADER.Flags field + + + + + Returns the IMAGE_COR20_HEADER.EntryPointToken/EntryPointTokenRVA field + + + + + Returns the IMAGE_COR20_HEADER.Resources field + + + + + Returns the IMAGE_COR20_HEADER.StrongNameSignature field + + + + + Returns the IMAGE_COR20_HEADER.CodeManagerTable field + + + + + Returns the IMAGE_COR20_HEADER.VTableFixups field + + + + + Returns the IMAGE_COR20_HEADER.ExportAddressTableJumps field + + + + + Returns the IMAGE_COR20_HEADER.ManagedNativeHeader field + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Reads metadata table columns + + + + + Reads a column + + The table to read from + Table row id + The column to read + Result + true if was updated, false if + the column should be read from the original table. + + + + Reads table rows + + Raw row + + + + Reads a table row or returns false if the row should be read from the original table + + Row id + The row + + + + + Version strings found in the meta data header + + + + + MS CLR 1.0 version string (.NET 1.0) + + + + + MS CLR 1.0 version string (.NET 1.0). This is an incorrect version that shouldn't be used. + + + + + MS CLR 1.0 version string (.NET 1.0). This is an incorrect version that shouldn't be used. + + + + + MS CLR 1.0 version string (.NET 1.0). This is an incorrect version that shouldn't be used. + + + + + MS CLR 1.1 version string (.NET 1.1) + + + + + MS CLR 2.0 version string (.NET 2.0-3.5) + + + + + MS CLR 4.0 version string (.NET 4.0-4.5) + + + + + MS CLR 1.0 any version + + + + + MS CLR 1.0 any version + + + + + MS CLR 1.1 any version + + + + + MS CLR 2.0 any version + + + + + MS CLR 4.0 any version + + + + + ECMA 2002 version string + + + + + ECMA 2005 version string + + + + + Portable PDB v1.0 + + + + + MDStream flags + + + + #Strings stream is big and requires 4 byte offsets + + + #GUID stream is big and requires 4 byte offsets + + + #Blob stream is big and requires 4 byte offsets + + + + + + + + + Extra data follows the row counts + + + Set if certain tables can contain deleted rows. The name column (if present) is set to "_Deleted" + + + + A MD table (eg. Method table) + + + + + + + + + + + Gets the table + + + + + Gets the name of this table + + + + + Returns total number of rows + + + + + Gets the total size in bytes of one row in this table + + + + + Returns all the columns + + + + + Returns true if there are no valid rows + + + + + Returns info about this table + + + + + Constructor + + The table + Number of rows in this table + Info about this table + + + + Checks whether the row exists + + Row ID + + + + Checks whether the row does not exist + + Row ID + + + + + + + Reads .NET metadata + + + + + true if the compressed (normal) metadata is used, false if the non-compressed + (Edit N' Continue) metadata is used. This can be false even if the table stream + is #~ but that's very uncommon. + + + + + true if this is standalone Portable PDB metadata + + + + + Gets the .NET header + + + + + Gets the version found in the metadata header. The major version number is in the high 16 bits + and the lower version number is in the low 16 bits. + + + + + Gets the version string found in the metadata header + + + + + Gets the + + + + + Gets the metadata header + + + + + Returns the #Strings stream or a default empty one if it's not present + + + + + Returns the #US stream or a default empty one if it's not present + + + + + Returns the #Blob stream or a default empty one if it's not present + + + + + Returns the #GUID stream or a default empty one if it's not present + + + + + Returns the #~ or #- tables stream + + + + + Returns the #Pdb stream or null if it's not a standalone portable PDB file + + + + + Gets all streams + + + + + Gets a list of all the valid TypeDef rids. It's usually every rid in the + TypeDef table, but could be less if a type has been deleted. + + + + + Gets a list of all the valid ExportedType rids. It's usually every rid in the + ExportedType table, but could be less if a type has been deleted. + + + + + Gets the Field rid list + + TypeDef rid + A new instance + + + + Gets the Method rid list + + TypeDef rid + A new instance + + + + Gets the Param rid list + + Method rid + A new instance + + + + Gets the Event rid list + + EventMap rid + A new instance + + + + Gets the Property rid list + + PropertyMap rid + A new instance + + + + Finds all InterfaceImpl rids owned by + + Owner TypeDef rid + A instance containing the valid InterfaceImpl rids + + + + Finds all GenericParam rids owned by in table + + A TypeOrMethodDef table + Owner rid + A instance containing the valid GenericParam rids + + + + Finds all GenericParamConstraint rids owned by + + Owner GenericParam rid + A instance containing the valid GenericParamConstraint rids + + + + Finds all CustomAttribute rids owned by in table + + A HasCustomAttribute table + Owner rid + A instance containing the valid CustomAttribute rids + + + + Finds all DeclSecurity rids owned by in table + + A HasDeclSecurity table + Owner rid + A instance containing the valid DeclSecurity rids + + + + Finds all MethodSemantics rids owned by in table + + A HasSemantic table + Owner rid + A instance containing the valid MethodSemantics rids + + + + Finds all MethodImpl rids owned by + + Owner TypeDef rid + A instance containing the valid MethodImpl rids + + + + Finds a ClassLayout rid + + Owner TypeDef rid + The ClassLayout rid or 0 if is invalid + or if it has no row in the ClassLayout table. + + + + Finds a FieldLayout rid + + Owner Field rid + The FieldLayout rid or 0 if is invalid + or if it has no row in the FieldLayout table. + + + + Finds a FieldMarshal rid + + A HasFieldMarshal table + Owner rid + The FieldMarshal rid or 0 if is invalid + or if it has no row in the FieldMarshal table. + + + + Finds a FieldRVA rid + + Owner Field rid + The FieldRVA rid or 0 if is invalid + or if it has no row in the FieldRVA table. + + + + Finds an ImplMap rid + + A MemberForwarded table + Owner rid + The ImplMap rid or 0 if is invalid + or if it has no row in the ImplMap table. + + + + Finds a NestedClass rid + + Owner TypeDef rid + The NestedClass rid or 0 if is invalid + or if it has no row in the NestedClass table. + + + + Finds an EventMap rid + + Owner TypeDef rid + The EventMap rid or 0 if is invalid + or if it has no row in the EventMap table. + + + + Finds a PropertyMap rid + + Owner TypeDef rid + The PropertyMap rid or 0 if is invalid + or if it has no row in the PropertyMap table. + + + + Finds a Constant rid + + A HasConstant table + Owner rid + The Constant rid or 0 if is invalid + or if it has no row in the Constant table. + + + + Returns the owner TypeDef rid + + A Field rid + The owner TypeDef rid or 0 if is invalid + or if it has no owner. + + + + Returns the owner TypeDef rid + + A Method rid + The owner TypeDef rid or 0 if is invalid + or if it has no owner. + + + + Returns the owner TypeDef rid + + A Event rid + The owner TypeDef rid or 0 if is invalid + or if it has no owner. + + + + Returns the owner TypeDef rid + + A Property rid + The owner TypeDef rid or 0 if is invalid + or if it has no owner. + + + + Returns the owner TypeOrMethodDef rid + + A GenericParam rid + The owner TypeOrMethodDef rid or 0 if is + invalid or if it has no owner. + + + + Returns the owner GenericParam rid + + A GenericParamConstraint rid + The owner GenericParam rid or 0 if is + invalid or if it has no owner. + + + + Returns the owner Method rid + + A Param rid + The owner Method rid or 0 if is invalid + or if it has no owner. + + + + Gets a list of all nested classes owned by + + A TypeDef rid + A new instance + + + + Gets a list of all non-nested classes. A type is a non-nested type if + returns an empty list. + + A new instance + + + + Finds all LocalScope rids owned by + + Owner Method rid + A instance containing the valid LocalScope rids + + + + Gets the StateMachineMethod rid or 0 if it's not a state machine method + + Owner Method rid + + + + + Finds all CustomDebugInformation rids owned by in table + + A HasCustomDebugInformation table + Owner rid + A instance containing the valid CustomDebugInformation rids + + + + Disposes of this instance + + + + + Common base class for #~ and #- metadata classes + + + + + The PE image + + + + + The .NET header + + + + + The MD header + + + + + The #Strings stream + + + + + The #US stream + + + + + The #Blob stream + + + + + The #GUID stream + + + + + The #~ or #- stream + + + + + The #Pdb stream + + + + + All the streams that are present in the PE image + + + + true if this is standalone Portable PDB metadata + + + + Sorts a table by key column + + + + + Remembers rid and key + + + + + Constructor + + Row ID + Key + + + + Constructor + + The MD table + Index of key column + + + + Binary searches for a row with a certain key + + The key + The row or 0 if not found + + + + Find all rids that contain + + The key + A new instance + + + + Constructor + + The PE image + The .NET header + The MD header + + + + Initializes the metadata, tables, streams + + + + + Creates empty heap objects if they're not present in the metadata + + + + + Called by + + + + + Binary searches the table for a rid whose key column at index + is equal to . + + Table to search + Key column index + Key + The rid of the found row, or 0 if none found + + + + Finds all rows owned by in table + whose index is + + Table to search + Key column index + Key + A instance + + + + Finds all rows owned by in table + whose index is . Should be called if + could be unsorted. + + Table to search + Key column index + Key + A instance + + + + Dispose method + + true if called by + + + + Low level access to a .NET file's metadata + + + + + Create a instance + + The PE image + A new instance + + + + Create a instance + + The PE image + Runtime reader kind + A new instance + + + + Create a instance + + The PE image + true if we should verify that it's a .NET PE file + A new instance + + + + Create a instance + + The PE image + Runtime reader kind + true if we should verify that it's a .NET PE file + A new instance + + + + Create a instance + + The PE image + Runtime reader kind + true if we should verify that it's a .NET PE file + A new instance + + + + Create a standalone portable PDB instance + + Metadata stream + true if we should verify that it's a .NET PE file + A new instance + + + + Represents the .NET metadata header + + IMAGE_COR20_HEADER.Metadata points to this header + + + + Returns the signature (should be 0x424A5342) + + + + + Returns the major version + + + + + Returns the minor version + + + + + Returns the reserved dword (pointer to extra header data) + + + + + Returns the version string length value + + + + + Returns the version string + + + + + Returns the offset of STORAGEHEADER + + + + + Returns the flags (reserved) + + + + + Returns the reserved byte (padding) + + + + + Returns the number of streams + + + + + Returns all stream headers + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Constructor + + PE file reader pointing to the start of this section + Runtime reader kind + Verify section + Thrown if verification fails + + + + #Pdb stream + + + + + Gets the PDB id + + + + + Gets the entry point token or 0 + + + + + Gets the referenced type system tables in the PE metadata file + + + + + Gets all type system table rows. This array has exactly 64 elements. + + + + + + + + Equality comparer for all raw rows + + + + + Default instance + + + + + Raw contents of an uncompressed Module table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed TypeRef table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed TypeDef table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed FieldPtr table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Field table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed MethodPtr table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Method table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ParamPtr table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Param table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed InterfaceImpl table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed MemberRef table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Constant table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed CustomAttribute table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed FieldMarshal table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed DeclSecurity table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ClassLayout table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed FieldLayout table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed StandAloneSig table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed EventMap table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed EventPtr table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Event table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed PropertyMap table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed PropertyPtr table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Property table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed MethodSemantics table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed MethodImpl table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ModuleRef table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed TypeSpec table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ImplMap table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed FieldRVA table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ENCLog table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ENCMap table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Assembly table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed AssemblyProcessor table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed AssemblyOS table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed AssemblyRef table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed AssemblyRefProcessor table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed AssemblyRefOS table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed File table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ExportedType table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ManifestResource table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed NestedClass table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed GenericParam table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed MethodSpec table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed GenericParamConstraint table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed Document table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed MethodDebugInformation table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed LocalScope table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed LocalVariable table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed LocalConstant table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed ImportScope table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed StateMachineMethod table row + + + + + Gets a column + + Index of column + + + + + Raw contents of an uncompressed CustomDebugInformation table row + + + + + Gets a column + + Index of column + + + + + Stores a list of rids + + + + + Gets the empty instance + + + + + Creates a new instance + + + + + + + + Creates a new instance + + List of valid rids + + + + + Gets the 'th rid + + Index. Must be < + A rid or 0 if is invalid + + + + Gets the number of rids it will iterate over + + + + + Enumerator + + + + + Gets the current rid + + + + + Disposes this instance + + + + + Moves to the next rid + + + + + + Gets the enumerator + + + + + + Storage flags found in the MD header + + + + + Normal flags + + + + + More data after the header but before the streams. + + The CLR will fail to load the file if this flag (or any other bits) is set. + + + + A metadata stream header + + + + + The offset of the stream relative to the start of the metadata header + + + + + The size of the stream + + + + + The name of the stream + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Represents the #Strings stream + + + + + + + + + + + Reads a + + Offset of string + A instance or null if invalid offset + + + + Reads a . The empty string is returned if + is invalid. + + Offset of string + A instance + + + + The metadata tables + + + + Module table (00h) + + + TypeRef table (01h) + + + TypeDef table (02h) + + + FieldPtr table (03h) + + + Field table (04h) + + + MethodPtr table (05h) + + + Method table (06h) + + + ParamPtr table (07h) + + + Param table (08h) + + + InterfaceImpl table (09h) + + + MemberRef table (0Ah) + + + Constant table (0Bh) + + + CustomAttribute table (0Ch) + + + FieldMarshal table (0Dh) + + + DeclSecurity table (0Eh) + + + ClassLayout table (0Fh) + + + FieldLayout table (10h) + + + StandAloneSig table (11h) + + + EventMap table (12h) + + + EventPtr table (13h) + + + Event table (14h) + + + PropertyMap table (15h) + + + PropertyPtr table (16h) + + + Property table (17h) + + + MethodSemantics table (18h) + + + MethodImpl table (19h) + + + ModuleRef table (1Ah) + + + TypeSpec table (1Bh) + + + ImplMap table (1Ch) + + + FieldRVA table (1Dh) + + + ENCLog table (1Eh) + + + ENCMap table (1Fh) + + + Assembly table (20h) + + + AssemblyProcessor table (21h) + + + AssemblyOS table (22h) + + + AssemblyRef table (23h) + + + AssemblyRefProcessor table (24h) + + + AssemblyRefOS table (25h) + + + File table (26h) + + + ExportedType table (27h) + + + ManifestResource table (28h) + + + NestedClass table (29h) + + + GenericParam table (2Ah) + + + MethodSpec table (2Bh) + + + GenericParamConstraint table (2Ch) + + + (Portable PDB) Document table (30h) + + + (Portable PDB) MethodDebugInformation table (31h) + + + (Portable PDB) LocalScope table (32h) + + + (Portable PDB) LocalVariable table (33h) + + + (Portable PDB) LocalConstant table (34h) + + + (Portable PDB) ImportScope table (35h) + + + (Portable PDB) StateMachineMethod table (36h) + + + (Portable PDB) CustomDebugInformation table (37h) + + + + Info about one MD table + + + + + Returns the table type + + + + + Returns the total size of a row in bytes + + + + + Returns all the columns + + + + + Returns the name of the table + + + + + Constructor + + Table type + Table name + All columns + + + + Constructor + + Table type + Table name + All columns + Row size + + + + .NET metadata tables stream + + + + + Gets/sets the column reader + + + + + Gets/sets the Method table reader + + + + + Gets the reserved field + + + + + Gets the version. The major version is in the upper 8 bits, and the minor version + is in the lower 8 bits. + + + + + Gets + + + + + Gets the reserved log2 rid field + + + + + Gets the valid mask + + + + + Gets the sorted mask + + + + + Gets the extra data + + + + + Gets the MD tables + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Constructor + + factory + Offset of metadata + Stream header + + + + Constructor + + factory + Offset of metadata + Stream header + Runtime kind + + + + Initializes MD tables + + Type system table rows (from #Pdb stream) + + + + + + + + + + Returns a MD table + + The table type + A or null if table doesn't exist + + + + Checks whether a table exists + + The table type + true if the table exists + + + + Checks whether table is sorted + + The table + + + + Reads a raw Module row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw TypeRef row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw TypeDef row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw FieldPtr row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Field row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw MethodPtr row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Method row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ParamPtr row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Param row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw InterfaceImpl row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw MemberRef row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Constant row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw CustomAttribute row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw FieldMarshal row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw DeclSecurity row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ClassLayout row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw FieldLayout row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw StandAloneSig row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw EventMap row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw EventPtr row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Event row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw PropertyMap row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw PropertyPtr row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Property row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw MethodSemantics row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw MethodImpl row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ModuleRef row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw TypeSpec row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ImplMap row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw FieldRVA row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ENCLog row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ENCMap row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Assembly row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw AssemblyProcessor row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw AssemblyOS row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw AssemblyRef row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw AssemblyRefProcessor row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw AssemblyRefOS row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw File row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ExportedType row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ManifestResource row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw NestedClass row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw GenericParam row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw MethodSpec row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw GenericParamConstraint row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw Document row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw MethodDebugInformation row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw LocalScope row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw LocalVariable row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw LocalConstant row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw ImportScope row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw StateMachineMethod row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a raw CustomDebugInformation row or returns false if the row doesn't exist + + Row ID + Row data + + + + + Reads a column + + The table + Row ID + Column index in + Result is put here or 0 if we return false + true if we could read the column, false otherwise + + + + Reads a column + + The table + Row ID + Column + Result is put here or 0 if we return false + true if we could read the column, false otherwise + + + + Represents the #US stream + + + + + + + + + + + Reads a unicode string + + Offset of unicode string + A string or null if is invalid + + + + Reads data just like , but returns an empty string if + offset is invalid + + Offset of unicode string + The string + + + + Finds types, fields, methods, etc in a module. If nothing has been added to the module, it's + faster to call ResolveMethodDef(), ResolveTypeRef() etc. + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + All found s + + + + + Finds all types, fields, etc + + The module to scan + Itself + + + + Methods to load properties to make sure they're initialized + + + + + Read every collection element + + Collection element type + Collection + + + + Load the object instance + + The value (ignored) + + + + A high-level representation of a row in the MemberRef table + + + + + The row id in its table + + + + + The owner module + + + + + + + + + + + + + + + + + + + + From column MemberRef.Class + + + + + + + + From column MemberRef.Name + + + + Name + + + + From column MemberRef.Signature + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + true if this is a method reference ( != null) + + + + + true if this is a field reference ( != null) + + + + + Gets/sets the method sig + + + + + Gets/sets the field sig + + + + + + + + true if the method has a hidden 'this' parameter + + + + + true if the method has an explicit 'this' parameter + + + + + Gets the calling convention + + + + + Gets/sets the method return type + + + + + + + + Gets the full name + + + + + Get the declaring type's full name + + Full name or null if there's no declaring type + + + + Resolves the method/field + + A or a instance or null + if it couldn't be resolved. + + + + Resolves the method/field + + A or a instance + If the method/field couldn't be resolved + + + + Resolves the field + + A instance or null if it couldn't be resolved. + + + + Resolves the field + + A instance + If the field couldn't be resolved + + + + Resolves the method + + A instance or null if it couldn't be resolved. + + + + Resolves the method + + A instance + If the method couldn't be resolved + + + + Gets a that can be used as signature context + + Context passed to the constructor + Field/method class owner + + + + + + + + A MemberRef row created by the user and not present in the original .NET file + + + + + Constructor + + Owner module + + + + Constructor + + Owner module + Name of ref + + + + Constructor + + Owner module + Name of field ref + Field sig + + + + Constructor + + Owner module + Name of field ref + Field sig + Owner of field + + + + Constructor + + Owner module + Name of method ref + Method sig + + + + Constructor + + Owner module + Name of method ref + Method sig + Owner of method + + + + Created from a row in the MemberRef table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this MemberRef row + Row ID + Generic parameter context + If is null + If is invalid + + + + Method attributes, see CorHdr.h/CorMethodAttr + + + + member access mask - Use this mask to retrieve accessibility information. + + + Member not referenceable. + + + Member not referenceable. + + + Accessible only by the parent type. + + + Accessible by sub-types only in this Assembly. + + + Accessibly by anyone in the Assembly. + + + Accessible only by type and sub-types. + + + Accessibly by sub-types anywhere, plus anyone in assembly. + + + Accessibly by anyone who has visibility to this scope. + + + Defined on type, else per instance. + + + Method may not be overridden. + + + Method virtual. + + + Method hides by name+sig, else just by name. + + + vtable layout mask - Use this mask to retrieve vtable attributes. + + + The default. + + + Method always gets a new slot in the vtable. + + + Overridability is the same as the visibility. + + + Method does not provide an implementation. + + + Method is special. Name describes how. + + + Implementation is forwarded through pinvoke. + + + Managed method exported via thunk to unmanaged code. + + + Runtime should check name encoding. + + + Method has security associate with it. + + + Method calls another method containing security code. + + + + A high-level representation of a row in the Method table + + + + + The row id in its table + + + + + All parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From column Method.RVA + + + + + + + + From column Method.ImplFlags + + + + Implementation attributes + + + + From column Method.Flags + + + + Attributes + + + + From column Method.Name + + + + Name + + + + From column Method.Signature + + + + + + + + From column Method.ParamList + + + + + + + Initializes + + + + + + + + + Initializes + + + + + + + + + Initializes + + + + + + + + + + + + Called to initialize + + + Reset + + + + Gets/sets the method body. See also + + + + + + + + + + + Frees the method body if it has been loaded. This does nothing if + returns false. + + + + Called to initialize + + + + true if can free the method body + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Gets the methods this method implements + + + + + + + Initializes + + + + Gets the export info or null if the method isn't exported to unmanaged code. + + + + + + + + + + + + + + true if is not empty + + + + + Gets/sets the declaring type (owner type) + + + + + + + + Called by and should normally not be called by any user + code. Use instead. Only call this if you must set the + declaring type without inserting it in the declaring type's method list. + + + + + + + + + + + Gets/sets the CIL method body. See also + + + + + Gets/sets the native method body + + + + + true if there's at least one in + + + + + true if it has a + + + + + true if there's at least one in + + + + + true if is not null + + + + + Gets the full name + + + + + Gets/sets the + + + + + Gets the parameters + + + + + + + + true if the method has a hidden 'this' parameter + + + + + true if the method has an explicit 'this' parameter + + + + + Gets the calling convention + + + + + Gets/sets the method return type + + + + + true if the method returns a value (i.e., return type is not ) + + + + + Gets/sets the method semantics attributes. If you remove/add a method to a property or + an event, you must manually update this property or eg. won't + work as expected. + + + + Set when has been initialized + + + + + + Initializes + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the method access + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the code type + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + true if this is the static type constructor + + + + + true if this is an instance constructor + + + + + true if this is a static or an instance constructor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A Method row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Method name + + + + Constructor + + Method name + Method sig + + + + Constructor + + Method name + Method sig + Flags + + + + Constructor + + Method name + Method sig + Impl flags + + + + Constructor + + Method name + Method sig + Impl flags + Flags + + + + Created from a row in the Method table + + + + The module where this instance is located + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Constructor + + The module which contains this Method row + Row ID + If is null + If is invalid + + + + + + + + + + Contains the name and ordinal of a method that gets exported to unmanaged code. + + + + + Gets the ordinal or null + + + + + Gets the name. If it's null, and is also null, the name of the method + () is used as the exported name. + + + + + Gets the options + + + + + Constructor + + + + + Constructor + + Name or null to export by ordinal + + + + Constructor + + Ordinal + + + + Constructor + + Name or null to export by ordinal + Ordinal or null to export by name + + + + Constructor + + Name or null to export by ordinal + Ordinal or null to export by name + Options + + + + Exported method options + + + + + No bit is set + + + + + Transition from unmanaged code + + + + + Also retain app domain + + + + + Call most derived method + + + + + Method impl attributes, see CorHdr.h/CorMethodImpl + + + + Flags about code type. + + + Method impl is IL. + + + Method impl is native. + + + Method impl is OPTIL + + + Method impl is provided by the runtime. + + + Flags specifying whether the code is managed or unmanaged. + + + Method impl is unmanaged, otherwise managed. + + + Method impl is managed. + + + Indicates method is defined; used primarily in merge scenarios. + + + Indicates method sig is not to be mangled to do HRESULT conversion. + + + Reserved for internal use. + + + Method is single threaded through the body. + + + Method may not be inlined. + + + Method should be inlined if possible. + + + Method may not be optimized. + + + Method may contain hot code and should be aggressively optimized. + + + The JIT compiler should look for security mitigation attributes, such as the user-defined System.Runtime.CompilerServices.SecurityMitigationsAttribute. If found, the JIT compiler applies any related security mitigations. Available starting with .NET Framework 4.8. + + + + Describes which method some method implements + + + + + The method body. Usually a but could be a + + + + + The method implements + + + + + Constructor + + Method body + The method implements + + + + Method semantics flags, see CorHdr.h/CorMethodSemanticsAttr + + + + No bit is set + + + Setter for property + + + Getter for property + + + other method for property or event + + + AddOn method for event + + + RemoveOn method for event + + + Fire method for event + + + + A high-level representation of a row in the MethodSpec table + + + + + The row id in its table + + + + + + + + + + + + + + From column MethodSpec.Method + + + + + + + + From column MethodSpec.Instantiation + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + + + + + + + Gets/sets the generic instance method sig + + + + + + + + + + + Gets the full name + + + + + + + + A MethodSpec row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + The generic method + + + + Constructor + + The generic method + The instantiated method sig + + + + Created from a row in the MethodSpec table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this MethodSpec row + Row ID + Generic parameter context + If is null + If is invalid + + + + context + + + + + Gets/sets the assembly resolver. This is never null. + + + + + Gets/sets the resolver. This is never null. + + + + + Default constructor + + + + + Constructor + + Assembly resolver or null + + + + Constructor + + Type/method/field resolver or null + + + + Constructor + + Assembly resolver or null + Type/method/field resolver or null + + + + Registers an experimental CIL opcode. It must be a 2-byte opcode + where the first byte lies within the range 0xF0..0xFB. + + + + + Clears an experimental CIL opcode. + + + + + Attempts to get an experimental CIL opcode. + + + + + creation options + + + + + Module context + + + + + PDB reader options + + + + + Set it to A) the path (string) of the PDB file, B) the data (byte[]) of the PDB file or + C) to an of the PDB data. The will + be owned by the module. You don't need to initialize + + + + + If true, will load the PDB file from disk if present, or an embedded portable PDB file + stored in the PE file. The default value is true. + You don't need to initialize . + + + + + corlib assembly reference to use or null if the default one from the opened + module should be used. + + + + + Runtime reader kind, default is . It should be + set to if it's an obfuscated Mono/Unity assembly. + + + + + Default constructor + + + + + Constructor + + Module context + + + + Constructor + + Runtime reader kind, default is . It should be + set to if it's an obfuscated Mono/Unity assembly. + + + + Constructor + + Module context + Runtime reader kind, default is . It should be + set to if it's an obfuscated Mono/Unity assembly. + + + + Runtime reader kind + + + + + Microsoft's CLRs (.NET Framework, .NET Core) + + + + + Mono's CLR (Mono, Unity) + + + + + A high-level representation of a row in the Module table + + + + Default characteristics + + + Default DLL characteristics + + + + The row id in its table + + + + + Initialize this in the ctor + + + + + PDB state + + + + + Array of last used rid in each table. I.e., next free rid is value + 1 + + + + Module context + + + + + + + + + + + + + + + + Gets/sets a user value. This is never used by dnlib. This property isn't thread safe. + + + + + + + + + + + Gets/sets Module.Generation column + + + + + + + + Gets/sets Module.Name column + + + + Name + + + + Gets/sets Module.Mvid column + + + + + + + + Gets/sets Module.EncId column + + + + + + + + Gets/sets Module.EncBaseId column + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Gets the module's assembly. To set this value, add this + to . + + + + + + + + Gets a list of all non-nested s. See also + + + + + + + Initializes + + + + Gets a list of all s + + + + + + + Initializes + + + + Gets/sets the native entry point. Only one of and + can be set. You write to one and the other one gets cleared. + + + + + Gets/sets the managed entry point. Only one of and + can be set. You write to one and the other one gets cleared. + + + + + + + + + + + + + Called to initialize + + + Called to initialize + + + + + + + Gets/sets the entry point method + + + + + true if is non-zero + + + + + true if is non-null + + + + + true if is non-null + + + + + Gets a list of all s + + + + + + + Initializes + + + + Gets/sets the . This is null if there are no + vtable fixups. + + + + + + + + + + Called to initialize + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + + + + Gets/sets the path of the module or an empty string if it wasn't loaded from disk + + + + + + + + Gets the + + + + + Gets the instance + + + + + Gets/sets the module context. This is never null. + + + + + If true, the cache is enabled. The cache is used by + and to find types. +

    + IMPORTANT: Only enable the cache if this module's types keep their exact + name, namespace, and declaring type and if no type is either added or + removed from or from any type that is reachable from the + top-level types in (i.e., any type owned by this module). + This is disabled by default. When disabled, all calls to + and will result in a slow O(n) (linear) search. +
    + +
    + + + true if this is the manifest (main) module + + + + + Gets the global (aka. <Module>) type or null if there are no types + + + + + true if it's the core library module, false if it's not the core library module, + and null if it's not known. + + + + + Gets/sets the Win32 resources + + + + + + + + + + Called to initialize + + + + Gets the . This is null if no PDB file + has been loaded or if no PDB file could be found. + + + + + Module kind + + + + + Gets/sets the characteristics (from PE file header) + + + + + Gets/sets the DLL characteristics (from PE optional header) + + + + + Gets/sets the runtime version which is stored in the metadata header. + See . + + Not thread safe + + + + Gets the WinMD status + + Not thread safe + + + + true if this is a WinMD file + + + + + true if this is a managed WinMD file + + + + + true if this is a pure (non-managed) WinMD file + + + + + Gets the CLR runtime version of the managed WinMD file or null if none. This is + similar to for normal non-WinMD files. + + Not thread safe + + + + Gets the WinMD version or null if none + + Not thread safe + + + + true if is the CLR v1.0 string (only the major + and minor version numbers are checked) + + + + + true if is the CLR v1.0 string + + + + + true if is the CLR v1.1 string (only the major + and minor version numbers are checked) + + + + + true if is the CLR v1.1 string + + + + + true if is the CLR v1.0 or v1.1 string (only the + major and minor version numbers are checked) + + + + + true if is the CLR v1.0 or v1.1 string + + + + + true if is the CLR v2.0 string (only the major + and minor version numbers are checked) + + + + + true if is the CLR v2.0 string + + + + + true if is the CLR v4.0 string (only the major + and minor version numbers are checked) + + + + + true if is the CLR v4.0 string + + + + + true if is the ECMA 2002 string + + + + + true if is the ECMA 2005 string + + + + + Gets/sets the (from PE header) + + + + + true if is , , ... + + + + + true if is + + + + + true if is , , ... + + + + + true if is , , ... + + + + + true if is , , ... + + + + + Gets/sets the (from .NET header) + + + + + + + + Gets/sets the runtime version number in the COR20 header. The major version is + in the high 16 bits. The minor version is in the low 16 bits. This is normally 2.5 + (0x00020005), but if it's .NET 1.x, it should be 2.0 (0x00020000). If this is + null, the default value will be used when saving the module (2.0 if CLR 1.x, + and 2.5 if not CLR 1.x). + + + + + Gets the tables header version. The major version is in the upper 8 bits and the + minor version is in the lower 8 bits. .NET 1.0/1.1 use version 1.0 (0x0100) and + .NET 2.x and later use version 2.0 (0x0200). 1.0 has no support for generics, + 1.1 has support for generics (GenericParam rows have an extra Kind column), + and 2.0 has support for generics (GenericParam rows have the standard 4 columns). + No other version is supported. If this is null, the default version is + used (1.0 if .NET 1.x, else 2.0). + + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + + + + Dispose method + + true if called by + + + + Gets all the types (including nested types) present in this module + + + + + Adds as a non-nested type. If it's already nested, its + will be set to null. + + The to insert + + + + Updates the rid to the next free rid available. It's only updated if + the original rid is 0. + + IMDTokenProvider + The row that should be updated + Returns the input + + + + Updates the rid to the next free rid available. + + IMDTokenProvider + The row that should be updated + Returns the input + + + + Imports a as a + + The type + The imported type or null if is invalid + + + + Imports a as a + + The type + The imported type or null if is invalid + + + + Imports a as a + + The field + The imported field or null if is invalid + or if we failed to import the field + + + + Imports a as a . This will be either + a or a . + + The method + The imported method or null if is invalid + or if we failed to import the method + + + + Imports a + + The type + The imported type or null + + + + Imports a as a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The type + The imported type or null + + + + Imports a + + The field + The imported type or null if is invalid + + + + Imports a as a + + The field + The imported type or null if is invalid + + + + Imports a + + The method + The imported method or null if is invalid + + + + Imports a as a + + The method + The imported method or null if is invalid + + + + Imports a + + The method + The imported method or null if is invalid + + + + Imports a + + The member ref + The imported member ref or null if is invalid + + + + Writes the module to a file on disk. If the file exists, it will be overwritten. + + Filename + + + + Writes the module to a file on disk. If the file exists, it will be overwritten. + + Filename + Writer options + + + + Writes the module to a stream. + + Destination stream + + + + Writes the module to a stream. + + Destination stream + Writer options + + + + Resets the cache which can be enabled by setting + to true. Use this method if the cache is + enabled but some of the types have been modified (eg. removed, added, renamed). + + + + + Finds a + + Type + Name + Language ID + The or null if none found + + + + Creates a new + + PDB file kind + + + + Sets a + + New + + + + Returns the size of a pointer. Assumes it's 32-bit if pointer size is unknown or + if it can be 32-bit or 64-bit. + + Size of a pointer (4 or 8) + + + + Returns the size of a pointer + + Default pointer size if it's not known or if it + can be 32-bit or 64-bit + Size of a pointer (4 or 8) + + + + Returns the size of a pointer + + Default pointer size + Pointer size if it's prefer-32-bit (should usually be 4) + + + + + + + + + + + + + + + + + + + + Finds a . For speed, enable + if possible (read the documentation first). + + Full name of the type (no assembly information) + true if it's a reflection name, and nested + type names are separated by a + character. If false, nested type names + are separated by a / character. + An existing or null if it wasn't found. + + + + Finds a . Its scope (i.e., module or assembly) is ignored when + looking up the type. For speed, enable if possible + (read the documentation first). + + The type ref + An existing or null if it wasn't found. + + + + Finds a + + The type + A or null if it wasn't found + + + + Creates a new instance. There should normally only be one + instance shared by all s. + + A new instance + + + + Load everything in this module. All types, fields, asm refs, etc are loaded, all their + properties are read to make sure everything is cached. + + Cancellation token or null + + + + + + + Resolves a token + + The metadata token + A or null if is invalid + + + + Resolves a token + + The metadata token + Generic parameter context + A or null if is invalid + + + + Resolves a token + + The metadata token + A or null if is invalid + + + + Resolves a token + + The metadata token + Generic parameter context + A or null if is invalid + + + + Resolves a token + + The metadata token + A or null if is invalid + + + + Resolves a token + + The metadata token + Generic parameter context + A or null if is invalid + + + + Gets all s + + + + + Gets all s + + + + + Gets all s. s with generic parameters + aren't cached and a new copy is always returned. + + + + + Gets all s. s with generic parameters + aren't cached and a new copy is always returned. + + Generic parameter context + + + + Gets all s + + + + + Finds an assembly reference by name. If there's more than one, pick the one with + the greatest version number. + + Simple name of assembly (eg. "mscorlib") + The found or null if there's no such + assembly reference. + + + + Compare asm refs' version + + First asm ref + New asm ref + + + + + A Module row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + is initialized to a random + Module nam + + + + Constructor + + Module name + Module version ID + + + + Constructor + + Module name + Module version ID + Corlib assembly ref or null + + + + Created from a row in the Module table + + + + The module where this instance is located + + + + + + + + + + + + + + + + + + + Constructor + + The module which contains this Module row + Row ID + If is null + If is invalid + + + + Initialize fields from the raw Module row + + + + + Created from a row in the Module table + + + + The file that contains all .NET metadata + + + + Gets/sets the method decrypter + + + + + Gets/sets the string decrypter + + + + + Returns the .NET metadata interface + + + + + Returns the #~ or #- tables stream + + + + + Returns the #Strings stream + + + + + Returns the #Blob stream + + + + + Returns the #GUID stream + + + + + Returns the #US stream + + + + + + + + + + + + + + + + + + + + Creates a instance from a file + + File name of an existing .NET module/assembly + Module context or null + A new instance + + + + Creates a instance from a file + + File name of an existing .NET module/assembly + Module creation options or null + A new instance + + + + Creates a instance from a byte[] + + Contents of a .NET module/assembly + Module context or null + A new instance + + + + Creates a instance from a byte[] + + Contents of a .NET module/assembly + Module creation options or null + A new instance + + + + Creates a instance from a reflection module + + An existing reflection module + A new instance + + + + Creates a instance from a reflection module + + An existing reflection module + Module context or null + A new instance + + + + Creates a instance from a reflection module + + An existing reflection module + Module creation options or null + A new instance + + + + Creates a instance from a reflection module + + An existing reflection module + Module context or null + Image layout of the module in memory + A new instance + + + + Creates a instance from a reflection module + + An existing reflection module + Module creation options or null + Image layout of the module in memory + A new instance + + + + Creates a instance from a memory location + + Address of a .NET module/assembly + A new instance + + + + Creates a instance from a memory location + + Address of a .NET module/assembly + Module context or null + A new instance + + + + Creates a instance from a memory location + + Address of a .NET module/assembly + Module creation options or null + A new instance + + + + Creates a instance + + PE image + A new instance + + + + Creates a instance + + PE image + Module context or null + A new instance + + + + Creates a instance + + PE image + Module creation options or null + A new instance + + + + Creates a instance from a memory location + + Address of a .NET module/assembly + Module context or null + Image layout of the file in memory + A new instance + + + + Creates a instance from a memory location + + Address of a .NET module/assembly + Module creation options or null + Image layout of the file in memory + A new instance + + + + Creates a instance from a stream + + This will read all bytes from the stream and call . + It's better to use one of the other Load() methods. + The stream (owned by caller) + A new instance + If is null + + + + Creates a instance from a stream + + This will read all bytes from the stream and call . + It's better to use one of the other Load() methods. + The stream (owned by caller) + Module context or null + A new instance + If is null + + + + Creates a instance from a stream + + This will read all bytes from the stream and call . + It's better to use one of the other Load() methods. + The stream (owned by caller) + Module creation options or null + A new instance + If is null + + + + Creates a instance from a + + The metadata + Module creation options or null + A new instance that now owns + + + + Constructor + + The metadata + Module creation options or null + If is null + + + + Loads symbols using + + PDB symbol reader + + + + Loads symbols from a PDB file + + PDB file name + + + + Loads symbols from a PDB file + + PDB reader options + PDB file name + + + + Loads symbols from a byte array + + PDB data + + + + Loads symbols from a byte array + + PDB reader options + PDB data + + + + Loads symbols from a stream + + PDB file stream which is now owned by us + + + + Loads symbols from a stream + + PDB reader options + PDB file stream which is now owned by us + + + + Loads symbols if a PDB file is available + + + + + Loads symbols if a PDB file is available + + PDB reader options + + + + Finds a mscorlib + + An existing instance or null if it wasn't found + + + + Called when no corlib assembly reference was found + + + + + + + + + Resolves a token + + The metadata token + Generic parameter context + A or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves an + + The row ID + A instance or null if is invalid + + + + Resolves an + + The row ID + Generic parameter context + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + Generic parameter context + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + Generic parameter context + A instance or null if is invalid + + + + Resolves an + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + Generic parameter context + A instance or null if is invalid + + + + Resolves an + + The row ID + A instance or null if is invalid + + + + Resolves an + + The row ID + A instance or null if is invalid + + + + Resolves an + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves an + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + Generic parameter context + A instance or null if is invalid + + + + Resolves a + + The row ID + A instance or null if is invalid + + + + Resolves a + + The row ID + Generic parameter context + A instance or null if is invalid + + + + Resolves a + + A TypeDefOrRef coded token + A or null if is invalid + + + + Resolves a + + A TypeDefOrRef coded token + Generic parameter context + A or null if is invalid + + + + Resolves a + + A HasConstant coded token + A or null if is invalid + + + + Resolves a + + A HasCustomAttribute coded token + A or null if is invalid + + + + Resolves a + + A HasCustomAttribute coded token + Generic parameter context + A or null if is invalid + + + + Resolves a + + A HasFieldMarshal coded token + A or null if is invalid + + + + Resolves a + + A HasDeclSecurity coded token + A or null if is invalid + + + + Resolves a + + A MemberRefParent coded token + A or null if is invalid + + + + Resolves a + + A MemberRefParent coded token + Generic parameter context + A or null if is invalid + + + + Resolves a + + A HasSemantic coded token + A or null if is invalid + + + + Resolves a + + A MethodDefOrRef coded token + A or null if is invalid + + + + Resolves a + + A MethodDefOrRef coded token + Generic parameter context + A or null if is invalid + + + + Resolves a + + A MemberForwarded coded token + A or null if is invalid + + + + Resolves an + + An Implementation coded token + A or null if is invalid + + + + Resolves a + + A CustomAttributeType coded token + A or null if is invalid + + + + Resolves a + + A CustomAttributeType coded token + Generic parameter context + A or null if is invalid + + + + Resolves a + + A ResolutionScope coded token + A or null if is invalid + + + + Resolves a + + A TypeOrMethodDef> coded token + A or null if is invalid + + + + Reads a signature from the #Blob stream + + #Blob stream offset of signature + A new instance or null if + is invalid. + + + + Reads a signature from the #Blob stream + + #Blob stream offset of signature + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + #Blob stream offset of signature + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + #Blob stream offset of signature + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + #Blob stream offset of signature + If there's any extra data after the signature, it's saved + here, else this will be null + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + #Blob stream offset of signature + If there's any extra data after the signature, it's saved + here, else this will be null + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a from the blob + + Table of owner + Row ID of owner + Generic parameter context + A new instance or null if there's no field + marshal for this owner. + + + + Reads a CIL method body + + Method parameters + RVA + A new instance. It's empty if RVA is invalid (eg. 0 or + it doesn't point to a CIL method body) + + + + Reads a CIL method body + + Method parameters + RVA + Generic parameter context + A new instance. It's empty if RVA is invalid (eg. 0 or + it doesn't point to a CIL method body) + + + + Returns the owner type of a field + + The field + The owner type or null if none + + + + Returns the owner type of a method + + The method + The owner type or null if none + + + + Returns the owner type of an event + + The event + The owner type or null if none + + + + Returns the owner type of a property + + The property + The owner type or null if none + + + + Returns the owner type/method of a generic param + + The generic param + The owner type/method or null if none + + + + Returns the owner generic param of a generic param constraint + + The generic param constraint + The owner generic param or null if none + + + + Returns the owner method of a param + + The param + The owner method or null if none + + + + Reads a module + + File rid + The assembly owning the module we should read + A new instance or null if + is invalid or if it's not a .NET module. + + + + Gets a list of all File rids that are .NET modules. Call + to read one of these modules. + + A new instance + + + + Concatenates the inputs and returns the result if it's a valid path + + Base dir + File name + Full path to the file or null if one of the inputs is invalid + + + + Gets the base directory where this .NET module is located on disk + + Base directory or null if unknown or if an error occurred + + + + Creates a instance + + ManifestResource rid + A new instance + + + + Reads a + + Custom attribute rid + A new instance or null if + is invalid + + + + Reads a + + Custom attribute rid + Generic parameter context + A new instance or null if + is invalid + + + + Reads data somewhere in the address space of the image + + RVA of data + Size of data + All the data or null if or + is invalid + + + + Gets the native entry point or 0 if none + + + + + Gets the managed entry point (a Method or a File) or null if none + + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + A new instance + + + + Reads a new instance. This one is not cached. + + Row ID + Generic parameter context + A new instance + + + + Reads a method body + + Method + Method RVA + Method impl attrs + Generic parameter context + A or null if none + + + + Updates with the PDB info (if any) + + Owner method + Method body + Returns originak value + + + + Reads a string from the #US heap + + String token + A non-null string + + + + Writes the mixed-mode module to a file on disk. If the file exists, it will be overwritten. + + Filename + + + + Writes the mixed-mode module to a file on disk. If the file exists, it will be overwritten. + + Filename + Writer options + + + + Writes the mixed-mode module to a stream. + + Destination stream + + + + Writes the mixed-mode module to a stream. + + Destination stream + Writer options + + + + Reads data from the #Blob. The following columns are returned: + Field.Signature + Method.Signature + MemberRef.Signature + Constant.Value + CustomAttribute.Value + FieldMarshal.NativeType + DeclSecurity.PermissionSet + StandAloneSig.Signature + Property.Type + TypeSpec.Signature + Assembly.PublicKey + AssemblyRef.PublicKeyOrToken + File.HashValue + MethodSpec.Instantiation + + A token + The value in the #Blob or null if is invalid + + + + Module kind + + + + + Console UI module + + + + + Windows GUI module + + + + + DLL module + + + + + Netmodule (it has no assembly manifest) + + + + + A high-level representation of a row in the ModuleRef table + + + + + The row id in its table + + + + + The owner module + + + + + + + + + + + + + + + + + + + + + + + + + + From column ModuleRef.Name + + + + Name + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + Gets the definition module, i.e., the module which it references, or null + if the module can't be found. + + + + + Gets the definition assembly, i.e., the assembly of the module it references, or + null if the assembly can't be found. + + + + + + + + + + + A ModuleRef row created by the user and not present in the original .NET file + + + + + Constructor + + Owner module + + + + Constructor + + Owner module + Module name + + + + Created from a row in the ModuleRef table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this ModuleRef row + Row ID + If is null + If is invalid + + + + Native types used by field marshals. See CorHdr.h/CorNativeType + + + + Deprecated + + + void + + + bool + + + int8 + + + unsigned int8 + + + int16 + + + unsigned int16 + + + int32 + + + unsigned int32 + + + int64 + + + unsigned int64 + + + float32 + + + float64 + + + syschar + + + variant + + + currency + + + ptr + + + decimal + + + date + + + bstr + + + lpstr + + + lpwstr + + + lptstr + + + fixed sysstring + + + objectref + + + iunknown + + + idispatch + + + struct + + + interface + + + safearray + + + fixed array + + + int + + + uint + + + nested struct + + + byvalstr + + + ansi bstr + + + tbstr + + + variant bool + + + func + + + as any + + + array + + + lpstruct + + + custom marshaler + + + error + + + iinspectable + + + hstring + + + UTF-8 encoded string + + + first invalid element type + + + Value wasn't present in the blob + + + Raw marshal blob type + + + + A resolver that always fails + + + + + The one and only instance of this type + + + + + + + + + + + + + + Parameter flags. See CorHdr.h/CorParamAttr + + + + Param is [In] + + + Param is [out] + + + Param is a locale identifier + + + Param is a return value + + + Param is optional + + + Param has default value. + + + Param has FieldMarshal. + + + + A high-level representation of a row in the Param table + + + + + The row id in its table + + + + + + + + + + + + + + + + + + + + Gets the declaring method + + + + + + + + From column Param.Flags + + + + Attributes + + + + From column Param.Sequence + + + + + + + + From column Param.Name + + + + Name + + + + + + + + + + + + Called to initialize + + + Reset + + + + + + + + + + + + Called to initialize + + + Reset + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + true if is not null + + + + + Gets the constant element type or if there's no constant + + + + + true if is not null + + + + + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + A Param row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Name + + + + Constructor + + Name + Sequence + + + + Constructor + + Name + Sequence + Flags + + + + Created from a row in the Param table + + + + The module where this instance is located + + + + + + + + + + + + + + + + + + + Constructor + + The module which contains this Param row + Row ID + If is null + If is invalid + + + + A list of all method parameters + + + + + Gets the owner method + + + + + Gets the number of parameters, including a possible hidden 'this' parameter + + + + + Gets the index of the first parameter that is present in the method signature. + If this is a static method, the value is 0, else it's an instance method so the + index is 1 since the first parameter is the hidden 'this' parameter. + + + + + Gets the N'th parameter + + The parameter index + + + + Gets the method return parameter + + + + + Constructor + + The method with all parameters + 's declaring type + + + + Should be called when the method's declaring type has changed + + Method declaring type + + + + Should be called when the method sig has changed + + + + + + + + Enumerator + + + + + Gets the current value + + + + + Moves to the next element in the collection + + + + + + Disposes the enumerator + + + + + Gets the list enumerator + + + + + + A method parameter + + + + + The hidden 'this' parameter's + + + + + The return type parameter's + + + + + Gets the parameter index. If the method has a hidden 'this' parameter, that parameter + has index 0 and the remaining parameters in the method signature start from index 1. + The method return parameter has index -1. + + + + + Gets the index of the parameter in the method signature. See also + and + + + + + true if it's a normal visible method parameter, i.e., it's not the hidden + 'this' parameter and it's not the method return type parameter. + + + + + true if it's the hidden 'this' parameter + + + + + true if it's the method return type parameter + + + + + Gets the parameter type + + + + + Gets the owner method + + + + + Gets the or null if not present + + + + + true if it has a + + + + + Gets the name from . If is null, + an empty string is returned. + + + + + Constructor + + Parameter index + + + + Constructor + + Parameter index + Parameter type + + + + Constructor + + Parameter index (0 is hidden this param if it exists) + Index in method signature + + + + Constructor + + Parameter index (0 is hidden this param if it exists) + Index in method signature + Parameter type + + + + Creates a if it doesn't already exist + + + + + + + + Custom debug info guids + + + + + Implements and uses a as the underlying + stream. + + + + + Constructor + + Source stream + + + + Constructor + + Source stream + Name of original file or null if unknown. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IMAGE_DEBUG_DIRECTORY + + + + + An address in the image + + + + + Section + + + + + Offset in + + + + + Constructor + + Section + Offset in + + + + Constructor + + Section + Offset in + + + + Returns true if is less than or equal to + + First + Second + + + + + Returns true if is less than + + First + Second + + + + + Returns true if is greater than or equal to + + First + Second + + + + + Returns true if is greater than + + First + Second + + + + + Returns true if is equal to + + First + Second + + + + + Returns true if is not equal to + + First + Second + + + + + Compares this instance with and returns less than 0 if it's + less than , 0 if it's equal to and + greater than 0 if it's greater than + + Other instance + + + + + Compares this to another instance + + The other one + true if they're equal + + + + Compares this to another instance + + The other one + true if they're equal + + + + Gets the hash code + + Hash code + + + + ToString() override + + + + + + Reads a 32-bit offset followed by a 16-bit section and creates a new + + Reader + + + + + Exception that is thrown when encounters an error. + + + + + Constructor + + + + + Constructor + + Exception message + + + + Constructor + + Inner exception + + + + Constructor + + + + + + + A managed PDB reader implementation for .NET modules. + + + + + Read the PDB in the specified stream. + + PDB file data reader + + + + Creates a instance + + + + + Creates a new instance + + PDB context + PDB file stream which is now owned by this method + A new instance or null. + + + + A constant in a method scope, eg. "const int SomeConstant = 123;" + + + + + Gets/sets the name + + + + + Gets/sets the type of the constant + + + + + Gets/sets the value of the constant + + + + + Constructor + + + + + Constructor + + Name of constant + Type of constant + Constant value + + + + + + + + + + Gets all custom debug infos + + + + + ToString() + + + + + + Custom debug info kind + + See CustomDebugInfoKind in Roslyn source code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unknown + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class of custom debug info added to the PDB file by the compiler + + + + + Gets the custom debug info kind + + + + + Gets the custom debug info guid, see + + + + + Unknown custom debug info. If you see an instance of this class, you're using an old dnlib version or + dnlib hasn't been updated to support this new custom debug info kind. + + + + + Gets the custom debug info kind + + + + + Gets the custom debug info guid, see + + + + + Gets the data + + + + + Constructor + + Custom debug info kind + Raw custom debug info data + + + + Constructor + + Custom debug info guid + Raw custom debug info data + + + + Contains sizes of using groups + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the using counts + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Contains a reference to another method that contains the import strings + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets/sets the referenced method + + + + + Constructor + + + + + Constructor + + The referenced method + + + + Contains a reference to another method that contains the per-module debug info (assembly reference aliases) + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets/sets the referenced method + + + + + Constructor + + + + + Constructor + + The referenced method + + + + State machine hosted local scope info + + + + + true if it's a syntesized local ( and are both null) + + + + + The instruction of the first operation in the scope. Can be null if it's a synthesized local + + + + + The instruction of the first operation outside of the scope or null if it ends at the last instruction in the body. + Can also be null if it's a synthesized local (in which case is also null, see ) + + + + + Constructor + + Start of the scope + First instruction after the end of the scope + + + + Contains local scopes for state machine hoisted local variables. + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the scopes + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Contains the state machine type + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets/sets the state machine type + + + + + Constructor + + + + + Constructor + + State machine type + + + + Contains dynamic flags for local variables and constants + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the dynamic locals + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Dynamic local info + + + + + Gets the dynamic flags + + + + + Gets/sets the name of the local. The name must have at most 64 characters and no char can be NUL (0x0000). + If null is written, is returned instead. + + + + + true if it's a constant and not a variable ( is null) + + + + + true if it's a variable ( is not null) + + + + + Gets/sets the local. Could be null if there's no local (it's a 'const' local). + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Contains the EnC local variable slot map + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the data. Spec: https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#EditAndContinueLocalSlotMap + + + + + Constructor + + Raw custom debug info data + + + + Contains the EnC lambda map + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the data. Spec: https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#EditAndContinueLambdaAndClosureMap + + + + + Constructor + + Raw custom debug info data + + + + Contains tuple element names for local variables and constants + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the tuple element names + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Tuple element name info + + + + + Gets/sets the name of the local. If null is written, is returned instead. + + + + + Gets/sets the local. It's null if it's a constant, and non-null if it's a variable + + + + + true if it's a constant. Constants have a scope ( and ) + + + + + true if it's a variable. Variables don't have a scope ( and ) + + + + + Gets/sets the start of the scope or null. Only constants have a scope. + + + + + Gets/sets the end of the scope or null if it has no scope or if the scope ends at the end of the body. Only constants have a scope. + + + + + Gets the tuple element names + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Contains tuple element names for local variables and constants + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the tuple element names + + + + + Constructor + + + + + Constructor + + Initial capacity of + + + + Async method stepping info + + It's internal and translated to a + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the catch handler instruction or null + + + + + Gets all async step infos + + + + + Constructor + + + + + Default namespace + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the default namespace + + + + + Constructor + + + + + Constructor + + Default namespace + + + + Dynamic flags + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets/sets the dynamic flags + + + + + Constructor + + + + + Constructor + + Dynamic flags + + + + Contains the source code + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the source code blob. + + It's not decompressed and converted to a string because the encoding isn't specified. + + https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#embedded-source-c-and-vb-compilers + + + + + Constructor + + + + + Constructor + + Source code blob + + + + Contains the source link file + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the source link file contents + + + + + Constructor + + + + + Constructor + + Source link file contents + + + + Contains the source server file + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the source server file contents + + + + + Constructor + + + + + Constructor + + Source server file contents + + + + Async method info + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets/sets the starting method that initiates the async operation + + + + + Gets/sets the instruction for the compiler generated catch handler that wraps an async method. + This can be null. + + + + + Gets all step infos used by the debugger + + + + + Constructor + + + + + Constructor + + Default capacity for + + + + Async step info used by debuggers + + + + + The yield instruction + + + + + Resume method + + + + + Resume instruction (where the debugger puts a breakpoint) + + + + + Constructor + + The yield instruction + Resume method + Resume instruction (where the debugger puts a breakpoint) + + + + Iterator method + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets the kickoff method + + + + + Constructor + + + + + Constructor + + Kickoff method + + + + Compilation metadata references + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets all references + + + + + Constructor + + + + + Compilation metadata reference flags, see https://github.com/dotnet/roslyn/blob/master/docs/features/pdb-compilation-options.md + + + + + No bit is set + + + + + Set if it's an assembly reference, clear if it's a module reference + + + + + EmbedInteropTypes was enabled + + + + + A compilation metadata reference + + + + + Name of the reference (eg. filename) + + + + + Aliases (or an empty string), separated with commas + + + + + Gets the flags + + + + + Gets the timestamp stored in the PE header + + + + + Gets SizeOfImage stored in the PE header + + + + + Gets the MVID stored in the .NET metadata + + + + + Constructor + + + + + Constructor + + Name of reference + Aliases (or an empty string), separated with commas + Reference flags + Timestamp in PE header + SizeOfImage in PE header + MVID stored in the .NET metadata + + + + Compilation options + + + + + Returns + + + + + Gets the custom debug info guid, see + + + + + Gets all compilation options, see https://github.com/dotnet/roslyn/blob/master/docs/features/pdb-compilation-options.md . + Option names (key): see roslyn/src/Compilers/Core/Portable/PEWriter/CompilationOptionNames.cs + + + + + Constructor + + + + + A PDB document + + + + + Gets/sets the document URL + + + + + Gets/sets the language GUID. See + + + + + Gets/sets the language vendor GUID. See + + + + + Gets/sets the document type GUID. See + + + + + Gets/sets the checksum algorithm ID. See + + + + + Gets/sets the checksum + + + + + + + + + + + Gets all custom debug infos + + + + + Default constructor + + + + + Constructor + + A instance + + + + Constructor + + Document URL + Language. See + Language vendor. See + Document type. See + Checksum algorithm ID. See + Checksum + + + + + + + + + + PDB document constants + + + + + PDB file kind + + + + + Windows PDB + + + + + Portable PDB + + + + + Embedded portable PDB + + + + + Import scope + + + + + Constructor + + + + + Gets/sets the parent import scope + + + + + Gets all imports + + + + + true if is not empty + + + + + + + + + + + Gets all custom debug infos + + + + + Import kind + + + + + PDB import base class + + + + + Gets the import kind + + + + + Import namespace + + + + + Returns + + + + + Gets the target namespace + + + + + Constructor + + + + + Constructor + + + + + + Import assembly, namespace + + + + + Returns + + + + + Gets the target assembly + + + + + Gets the target namespace + + + + + Constructor + + + + + Constructor + + + + + + + Import type + + + + + Returns + + + + + Gets the target type + + + + + Constructor + + + + + Constructor + + + + + + Import xml namespace + + + + + Returns + + + + + Gets the alias + + + + + Gets the target namespace + + + + + Constructor + + + + + Constructor + + + + + + + Import assembly reference alias + + + + + Returns + + + + + Gets the alias + + + + + Constructor + + + + + Constructor + + + + + + Alias assembly reference + + + + + Returns + + + + + Gets the alias + + + + + Gets the target assembly + + + + + Constructor + + + + + Constructor + + + + + + + Alias namespace + + + + + Returns + + + + + Gets the alias + + + + + Gets the target namespace + + + + + Constructor + + + + + Constructor + + + + + + + Alias assembly namespace + + + + + Returns + + + + + Gets the alias + + + + + Gets the target assembly + + + + + Gets the target namespace + + + + + Constructor + + + + + Constructor + + + + + + + + Alias type + + + + + Returns + + + + + Gets the alias + + + + + Gets the target type + + + + + Constructor + + + + + Constructor + + + + + + + A local variable + + + + + Constructor + + + + + Constructor + + + + + + + + Gets/sets the local + + + + + Gets/sets the name + + + + + Gets/sets the attributes + + + + + Gets the index of the local + + + + + true if it should be hidden in debugger variables windows. Not all compiler generated locals have this flag set. + + + + + + + + + + + Gets all custom debug infos + + + + + Local attributes + + + + + No bit is set + + + + + Local should be hidden in debugger variables windows. Not all compiler generated locals have this flag set. + + + + + A PDB method + + + + + Gets/sets the root scope. It contains all scopes of the method, using namespaces, variables and constants + + + + + Constructor + + + + + PDB reader options + + + + + No bit is set + + + + + Use the COM Windows PDB reader instead of the managed Windows PDB reader. + + This is NOT recommended since the COM reader can only be called on the same + thread it was created on. It also requires a Windows OS. + + If this is not set, the managed PDB reader will be used. + + This option is only used if it's a Windows PDB file, not if it's a Portable PDB file. + + + + + Don't use Microsoft.DiaSymReader.Native. This is a NuGet package with an updated Windows PDB reader/writer implementation, + and if it's available at runtime, dnlib will try to use it. If this option is set, dnlib won't use it. + You have to add a reference to the NuGet package if you want to use it, dnlib has no reference to the NuGet package. + + Only used if is set and if it's a Windows PDB file + + + + + Don't use diasymreader.dll's PDB reader that is shipped with .NET Framework. + + Only used if is set and if it's a Windows PDB file + + + + + A PDB scope + + + + + Constructor + + + + + Gets/sets the first instruction + + + + + Gets/sets the last instruction. It's null if it ends at the end of the method. + + + + + Gets all child scopes + + + + + true if is not empty + + + + + Gets all locals in this scope + + + + + true if is not empty + + + + + Gets all namespaces (Windows PDBs). Portable PDBs use + + + + + true if is not empty + + + + + Gets/sets the import scope (Portable PDBs). Windows PDBs use + + + + + Gets all constants + + + + + true if is not empty + + + + + + + + + + + Gets all custom debug infos + + + + + PDB state for a + + + + + Gets/sets the PDB file kind. You can change it from portable PDB to embedded portable PDB + and vice versa. Converting a Windows PDB to a portable PDB isn't supported. + + + + + Gets/sets the user entry point method. + + + + + Gets all PDB documents + + + + + true if is not empty + + + + + Constructor + + Module + PDB file kind + + + + Constructor + + A instance + Owner module + + + + Adds + + New document + if it wasn't inserted, or the already existing document + if it was already inserted. + + + + Removes + + Document + true if it was removed, false if it wasn't inserted. + + + + Returns an inserted instance or null if it's not been + inserted yet. + + A PDB document + The existing or null if it doesn't exist. + + + + Removes all documents + + + + + + Removes all documents and optionally returns them + + true if all the original s + should be returned. + All s if is true + or null if is false. + + + + Constructor + + Module that resolves assembly and type references + Portable PDB blob stream + + + + PDB sequence point + + + + + PDB document + + + + + Start line + + + + + Start column + + + + + End line + + + + + End column + + + + + Clones this instance + + A new cloned instance + + + + Async step info + + + + + Yield offset + + + + + Breakpoint offset + + + + + Breakpoint method token + + + + + Constructor + + Yield offset + Breakpoint offset + Breakpoint method token + + + + A document + + + + + Gets the URL + + + + + Gets the language + + + + + Gets the language vendor + + + + + Gets the document type + + + + + Gets the checksum algorithm id + + + + + Gets the checksum + + + + + Gets the custom debug infos + + + + + A method + + + + + Gets the method token + + + + + Gets the root scope + + + + + Gets all sequence points + + + + + Reads custom debug info + + Method + Method body + Updated with custom debug info + + + + A namespace + + + + + Gets the name + + + + + Reads symbols from a PDB file + + + + + Called by the owner module before any other methods and properties are called + + Owner module + + + + Gets the PDB file kind + + + + + Gets the user entry point token or 0 if none + + + + + Gets all documents + + + + + Gets a method or returns null if the method doesn't exist in the PDB file + + Method + Edit and continue version. The first version is 1 + + + + + Reads custom debug info + + Token of a instance + Generic parameter context + Updated with custom debug info + + + + Cleans up resources + + + + + A scope + + + + + Gets the method + + + + + Gets the parent scope + + + + + Gets the start offset of the scope in the method + + + + + Gets the end offset of the scope in the method + + + + + Gets all child scopes + + + + + Gets all locals defined in this scope + + + + + Gets all namespaces in this scope + + + + + Gets all custom debug infos + + + + + Gets the import scope or null if none + + + + + Gets all the constants + + Owner module if a signature must be read from the #Blob + Generic parameter context + + + + + Sequence point + + + + + IL offset + + + + + Document + + + + + Start line + + + + + Start column + + + + + End line + + + + + End column + + + + + A variable + + + + + Gets the name + + + + + Gets the attributes + + + + + Gets the index of the variable + + + + + Gets all custom debug infos + + + + + Reads custom debug infos produced by the C# and Visual Basic compilers. They're stored in PDB files + as PDB method custom attributes with the name "MD2". + + + + + Reads custom debug info + + Method + The method's body. Needs to be provided by the caller since we're called from + PDB-init code when the Body property hasn't been initialized yet + Place all custom debug info in this list + Custom debug info from the PDB file + + + + Writes custom debug infos produced by the C# and Visual Basic compilers. They're stored in PDB files + as PDB method custom attributes with the name "MD2". + + + + + Returns the raw custom debug info or null if there was an error + + Metadata + Writer context + Method + Custom debug infos to write + + + + + + + + P/Invoke attributes, see CorHdr.h/CorPinvokeMap + + + + Pinvoke is to use the member name as specified. + + + Use this mask to retrieve the CharSet information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Information about target function. Not relevant for fields. + + + + + + Pinvoke will use native callconv appropriate to target windows platform. + + + + + + + + + + + + In M9, pinvoke will raise exception. + + + + + + + Property attributes, see CorHdr.h/CorPropertyAttr + + + + property is special. Name describes how. + + + Runtime(metadata internal APIs) should check name encoding. + + + Property has default + + + + A high-level representation of a row in the Property table + + + + + The row id in its table + + + + + + + + + + + + + + + + + + + + From column Property.PropFlags + + + + Attributes + + + + From column Property.Name + + + + Name + + + + From column Property.Type + + + + + + + + + + + + + + + + Called to initialize + + + Reset + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Gets/sets the first getter method. Writing null will clear all get methods. + + + + + Gets/sets the first setter method. Writing null will clear all set methods. + + + + + Gets all getter methods + + + + + Gets all setter methods + + + + + Gets the other methods + + + + + Initializes , , + and . + + + + + + + + + + + + + Reset , , + + + + true if there are no methods attached to this property + + + + + + + + true if is not empty + + + + + true if is not null + + + + + Gets the constant element type or if there's no constant + + + + + Gets/sets the property sig + + + + + Gets/sets the declaring type (owner type) + + + + + + + + Called by and should normally not be called by any user + code. Use instead. Only call this if you must set the + declaring type without inserting it in the declaring type's method list. + + + + + + + + + + + Gets the full name of the property + + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + + + + A Property row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + Name + + + + Constructor + + Name + Property signature + + + + Constructor + + Name + Property signature + Flags + + + + Created from a row in the Property table + + + + The module where this instance is located + + + + + + + + + + + + + + + + Constructor + + The module which contains this Property row + Row ID + If is null + If is invalid + + + + + + + Represents a public key + + + + + Gets the + + + + + + + + Constructor + + + + + Constructor + + Public key data + + + + Constructor + + Public key data as a hex string or the string "null" + to set public key data to null + + + + + + + + + + Public key / public key token base class + + + + + The key data + + + + + Returns true if is null or empty + + + + + Returns true if is null + + + + + Gets/sets key data + + + + + Gets the + + + + + Constructor + + Key data + + + + Constructor + + Key data as a hex string or the string "null" + to set key data to null + + + + Checks whether a public key or token is null or empty + + Public key or token instance + + + + Returns a + + A or a instance + + + + Compares two s as s + + First + Second + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Checks whether two public key tokens are equal + + First + Second + true if same, false otherwise + + + + Compares two s + + First + Second + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Checks whether two public key tokens are equal + + First + Second + true if same, false otherwise + + + + Gets the public key token hash code + + Public key or token + The hash code + + + + Gets the public key token hash code + + Public key token + The hash code + + + + Creates a + + Public key data or null + A new instance or null if + was null + + + + Creates a + + Public key token data or null + A new instance or null if + was null + + + + Gets the raw public key / public key token byte array + + The instance or null + Raw public key / public key token data or null + + + + + + + Represents a public key token + + + + + Gets the + + + + + Constructor + + + + + + + + + + + + + + + + + Recursion counter + + + + + Max recursion count. If this is reached, we won't continue, and will use a default value. + + + + + Gets the recursion counter + + + + + Increments if it's not too high. ALL instance methods + that can be called recursively must call this method and + (if this method returns true) + + true if it was incremented and caller can continue, false if + it was not incremented and the caller must return to its caller. + + + + Must be called before returning to caller if + returned true. + + + + + + + + Extension methods for reflection types, methods, fields + + + + + Checks whether it's a + + The type + + + + Gets a 's + + The type + The type's element type + + + + Returns true if is a generic method, but + not a generic method definition, i.e., a MethodSpec. + + The method + + + + Checks whether a parameter/prop/event type should be treated as if it is really a + generic instance type and not a generic type definition. In the .NET metadata (method + sig), the parameter is a generic instance type, but the CLR treats it as if it's just + a generic type def. This seems to happen only if the parameter type is exactly the same + type as the declaring type, eg. a method similar to: MyType<!0> MyType::SomeMethod(). + + Declaring type of method/event/property + Parameter/property/event type + + + + Checks whether is a type definition and not a type spec + (eg. pointer or generic type instantiation) + + this + + + + Resolve exception base class + + + + + Default constructor + + + + + Constructor + + Exception message + + + + Constructor + + Exception message + Inner exception or null if none + + + + Constructor + + + + + + + Thrown if an assembly couldn't be resolved + + + + + Default constructor + + + + + Constructor + + Exception message + + + + Constructor + + Exception message + Inner exception or null if none + + + + Constructor + + + + + + + Thrown if a type couldn't be resolved + + + + + Default constructor + + + + + Constructor + + Exception message + + + + Constructor + + Exception message + Inner exception or null if none + + + + Constructor + + + + + + + Thrown if a method/field couldn't be resolved + + + + + Default constructor + + + + + Constructor + + Exception message + + + + Constructor + + Exception message + Inner exception or null if none + + + + Constructor + + + + + + + Resolves types, methods, fields + + + + + true to project WinMD types to CLR types, eg. Windows.UI.Xaml.Interop.TypeName + gets converted to System.Type before trying to resolve the type. This is enabled + by default. + + + + + Constructor + + The assembly resolver + + + + + + + + + + Type of resource + + + + + It's a + + + + + It's a + + + + + It's a + + + + + Resource base class + + + + + + + + + + + Gets/sets the offset of the resource + + + + + Gets/sets the name + + + + + Gets/sets the flags + + + + + Gets the type of resource + + + + + Gets/sets the visibility + + + + + true if is set + + + + + true if is set + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + Constructor + + Name + flags + + + + A resource that is embedded in a .NET module. This is the most common type of resource. + + + + + Gets the length of the data + + + + + + + + Constructor + + Name of resource + Resource data + Resource flags + + + + Constructor + + Name of resource + Data reader factory + Offset of resource data + Length of resource data + Resource flags + + + + Gets a data reader that can access the resource + + + + + + + + The module where this instance is located + + + + + + + + + + + + + A reference to a resource in another assembly + + + + + + + + Gets/sets the assembly reference + + + + + Constructor + + Name of resource + Assembly reference + Resource flags + + + + + + The module where this instance is located + + + + + + + + + + + + + A resource that is stored in a file on disk + + + + + + + + Gets/sets the file + + + + + Gets/sets the hash + + + + + Gets/sets the file name + + + + + Constructor + + Name of resource + The file + Resource flags + + + + + + The module where this instance is located + + + + + + + + + + + + + A collection of s + + + + + Default constructor + + + + + Constructor + + List listener + + + + Constructor + + Initial length of the list + Context passed to + Delegate instance that returns original values + + + + Finds the index of a resource + + Name of resource + The index of the or -1 if none was found + + + + Finds the index of an embedded resource + + Name of resource + The index of the or -1 if none was found + + + + Finds the index of an assembly linked resource + + Name of resource + The index of the or -1 if none was found + + + + Finds the index of a linked resource + + Name of resource + The index of the or -1 if none was found + + + + Finds a resource + + Name of resource + The or null if none was found + + + + Finds an embedded resource + + Name of resource + The or null if none was found + + + + Finds an assembly linked resource + + Name of resource + The or null if none was found + + + + Finds a linked resource + + Name of resource + The or null if none was found + + + + Built-in resource data + + + + + Gets the data + + + + + + + + + + + + + + Constructor + + Type of data + Data + + + + + + + + + + Implemented by all resource data + + + + + Gets the type of data + + + + + Start offset of the section in the file + + + + + End offset of the section in the file. This is one byte after the last + valid offset in the section. + + + + + Writes the data + + Writer + Formatter if needed by implementer + + + + Creates resource data + + + + + Gets the owner module + + + + + Constructor + + Owner module + + + + Gets number of user data types + + + + + Create null data + + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates data + + Value + + + + + Creates array data + + Value + + + + + Creates data + + Value + + + + + Creates serialized data + + Serialized data + Type of serialized data + + + + + Creates serialized data + + Serialized data + + + + + Creates a user type. If the type already exists, the existing value is returned. + + Full name of type + + + + + Creates a user type. If the type already exists, the existing value is returned. + + Full name of type + Use without converting it to a + type in an existing assembly reference + + + + + Converts an assembly simple name (eg. mscorlib) to the full name of the assembly, + which includes the version, public key token, etc. Returns null if it's + unknown. + + Simple name of assembly + + + + + Gets all types sorted by + + + + + + Resource element + + + + + Name of resource + + + + + Data of resource + + + + + + + + Resource element set + + + + + Gets the number of elements in the set + + + + + Gets all resource elements + + + + + Adds a new resource to the set, overwriting any existing resource + + + + + + Thrown by + + + + + Constructor + + + + + Constructor + + Message + + + + Constructor + + + + + + + Gets called to create a from serialized data. Returns null + if a default instance should be created. + + ResourceDataFactory + Serialized type + Serialized data + + + + + Reads .NET resources + + + + + Returns true if it's possibly resources file data + + Reader + + + + + Reads a .NET resource + + Owner module + Data of resource + + + + + Reads a .NET resource + + Owner module + Data of resource + Call back that gets called to create a instance. Can be null. + + + + + Type of resource + + + + + null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + array + + + + + + + + + + Start of user types + + + + + Writes .NET resources + + + + + Write .NET resources + + Owner module + Output stream + .NET resources + + + + Base class of all user data + + + + + Full name including assembly of type + + + + + User type code + + + + + + + + + + + Constructor + + User resource type + + + + + + + Binary data + + + + + Gets the raw data + + + + + Constructor + + User resource type + Raw serialized data + + + + + + + + + + User resource type + + + + + Full name including assembly of type + + + + + User type code + + + + + Constructor + + Full name including assembly of type + User type code + + + + + + + Security action. See CorHdr.h/CorDeclSecurity + + + + Mask allows growth of enum. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Persisted grant set at prejit time + + + Persisted grant set at prejit time + + + Persisted denied set at prejit time + + + Persisted denied set at prejit time + + + + + + + + + + + + Maximum legal value + + + + A DeclSecurity security attribute + + + + + Gets/sets the attribute type + + + + + Gets the full name of the attribute type + + + + + Gets all named arguments (field and property values) + + + + + true if is not empty + + + + + Gets all s that are field arguments + + + + + Gets all s that are property arguments + + + + + Creates a from an XML string. + + Owner module + XML + A new instance + + + + Default constructor + + + + + Constructor + + Attribute type + + + + Constructor + + Attribute type + Named arguments that will be owned by this instance + + + + + + + See CorSerializationType/CorHdr.h + + + + + + + System.Boolean + + + System.Char + + + System.SByte + + + System.Byte + + + System.Int16 + + + System.UInt16 + + + System.Int32 + + + System.UInt32 + + + System.Int64 + + + System.UInt64 + + + System.Single + + + System.Double + + + System.String + + + Single-dimension, zero lower bound array ([]) + + + System.Type + + + Boxed value type + + + A field + + + A property + + + An enum + + + + Compares types + + + + + Default instance + + + + + Case insensitive names + + + + + Constructor + + Comparison options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compares fields + + + + + Compares the declaring types + + + + + Doesn't compare the declaring types + + + + + Compares the declaring types, case insensitive names + + + + + Doesn't compare the declaring types, case insensitive names + + + + + Constructor + + Comparison options + + + + + + + + + + + + + + + + + + + + + + Compares methods + + + + + Compares the declaring types + + + + + Doesn't compare the declaring types + + + + + Compares the declaring types, case insensitive names + + + + + Doesn't compare the declaring types, case insensitive names + + + + + Constructor + + Comparison options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compares properties + + + + + Compares the declaring types + + + + + Doesn't compare the declaring types + + + + + Compares the declaring types, case insensitive names + + + + + Doesn't compare the declaring types, case insensitive names + + + + + Constructor + + Comparison options + + + + + + + + + + Compares events + + + + + Compares the declaring types + + + + + Doesn't compare the declaring types + + + + + Compares the declaring types, case insensitive names + + + + + Doesn't compare the declaring types, case insensitive names + + + + + Constructor + + Comparison options + + + + + + + + + + Compares calling convention signatures + + + + + Default instance + + + + + Case insensitive names + + + + + Constructor + + Comparison options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Decides how to compare types, sigs, etc + + + + + Don't compare a type's (assembly/module) scope + + + + + Compares a method/field's declaring type. + + + + + Compares a property's declaring type + + + + + Compares an event's declaring type + + + + + Compares method / field / property / event declaring types + + + + + Compares parameters after a sentinel in method sigs. Should not be enabled when + comparing s against s since it's + not possible to get those sentinel params from a . + + + + + Compares assembly public key token + + + + + Compares assembly version + + + + + Compares assembly locale + + + + + If set, a and an can reference the + global <Module> type. + + + + + Don't compare a method/property's return type + + + + + Type namespaces are case insensitive + + + + + Type names (not namespaces) are case insensitive + + + + + Type names and namespaces are case insensitive + + + + + Method and field names are case insensitive + + + + + Property names are case insensitive + + + + + Event names are case insensitive + + + + + Type namespaces, type names, method names, field names, property names + and event names are all case insensitive + + + + + A field that is can compare equal to + a + + + + + A method that is can compare equal to + a + + + + + A field that is and a method that is + can compare equal to a + + + + + Raw (bit by bit) comparison of signatures. This matches what the CLR does when it + compares signatures. This means that metadata tokens will be compared. + + + + + Ignore required and optional modifiers when comparing s. + They're already ignored when comparing eg. a with a + . + + + + + By default, all module and assembly compares when they're both the system library + (eg. mscorlib or System.Runtime.dll) return true, even if they're really different, + eg. mscorlib (.NET 2.0) vs mscorlib (Windows CE). If this flag is set, the system + library is compared just like any other module/assembly. + + + + + Don't project CLR compatible WinMD references back to the original CLR type/method before comparing + + + + + Don't check type equivalence when comparing types. Starting with .NET 4.0, two different + types can be considered equivalent if eg. a TypeIdentifierAttribute is used. + + + + + When comparing types, don't compare a multi-dimensional array's lower bounds and sizes + + + + + Compares types, signatures, methods, fields, properties, events + + + + + Constructor + + Comparison options + + + + Constructor + + Comparison options + The module which the comparison take place in. + + + + is mapped to , so use + the same hash code for both + + + + + Compare members + + Member #1 + Member #2 + true if same, false otherwise + + + + Gets the hash code of a member + + The member + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares resolution scopes + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares implementation + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares resolution scope and implementation + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares files + + File #1 + File #2 + true if same, false otherwise + + + + Compares a module with a file + + Module + File + true if same, false otherwise + + + + Compares modules + + Module #1 + Module #2 + true if same, false otherwise + + + + Compares modules + + Module #1 + Module #2 + true if same, false otherwise + + + + Compares assemblies + + Assembly #1 + Assembly #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Compares type lists + + Type list #1 + Type list #2 + true if same, false otherwise + + + + Gets the hash code of a type list + + The type list + The hash code + + + + Compares signatures + + Sig #1 + Sig #2 + true if same, false otherwise + + + + Gets the hash code of a sig + + The sig + The hash code + + + + Compares method/property sigs + + Method/property #1 + Method/property #2 + true if same, false otherwise + + + + Gets the hash code of a method/property sig + + The method/property sig + The hash code + + + + Compares field sigs + + Field sig #1 + Field sig #2 + true if same, false otherwise + + + + Gets the hash code of a field sig + + The field sig + The hash code + + + + Compares local sigs + + Local sig #1 + Local sig #2 + true if same, false otherwise + + + + Gets the hash code of a local sig + + The local sig + The hash code + + + + Compares generic method instance sigs + + Generic inst method #1 + Generic inst method #2 + true if same, false otherwise + + + + Gets the hash code of a generic instance method sig + + The generic inst method sig + The hash code + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Gets the hash code of a method + + The method + The hash code + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Gets the hash code of a method + + The method + The hash code + + + + Compares MemberRefs + + MemberRef #1 + MemberRef #2 + true if same, false otherwise + + + + Gets the hash code of a MemberRef + + The MemberRef + The hash code + + + + Compares MethodSpecs + + MethodSpec #1 + MethodSpec #2 + true if same, false otherwise + + + + Gets the hash code of a MethodSpec + + The MethodSpec + The hash code + + + + Compares MemberRefParents + + MemberRefParent #1 + MemberRefParent #2 + true if same, false otherwise + + + + Gets the hash code of a MemberRefParent + + The MemberRefParent + The hash code + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Gets the hash code of a field + + The field + The hash code + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Gets the hash code of a field + + The field + The hash code + + + + Compares properties + + Property #1 + Property #2 + true if same, false otherwise + + + + Gets the hash code of a property + + The property + The hash code + + + + Compares events + + Event #1 + Event #2 + true if same, false otherwise + + + + Gets the hash code of an event + + The event + The hash code + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Checks whether it's FnPtr&, FnPtr*, FnPtr[], or FnPtr[...] + + The type + + + + Compares types + + Type #1 + Type #2 + true if we should treat + as a generic instance type + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Compares types + + Type #1 + Type #2 + true if same, false otherwise + + + + Gets the hash code of a type + + The type + The hash code + + + + Gets the hash code of a type + + The type + true if we should treat + as a generic instance type + The hash code + + + + Gets the hash code of a type list + + The type list + The hash code + + + + Gets the hash code of a list with only generic method parameters () + + Number of generic method parameters + Hash code + + + + Gets the hash code of a TypeDef type + + The type + The hash code + + + + Compares type lists + + Type list #1 + Type list #2 + true if same, false otherwise + + + + Compares modules + + Module #1 + Module #2 + true if same, false otherwise + + + + Compares a file and a module + + File + Module + true if same, false otherwise + + + + Compares modules + + Module #1 + Module #2 + true if same, false otherwise + + + + Compares assemblies + + Assembly #1 + Assembly #2 + true if same, false otherwise + + + + Compares method declaring types + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares method sigs + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares method sigs + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares generic method args, making sure only + contains s. + + Number of generic method args in method #1 + Generic method args in method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Compares methods + + Method #1 + Method #2 + true if same, false otherwise + + + + Gets the hash code of a MethodBase + + The MethodBase + The hash code + + + + Gets the hash code of a parameter list + + The type list + Declaring type of method that owns parameter + The hash code + + + + Compares calling conventions + + Calling convention + Method + + + + + Compares return types + + Return type #1 + MethodBase + true if same, false otherwise + + + + Compares parameter lists + + Type list #1 + Type list #2 + Declaring type of method that owns parameter + true if same, false otherwise + + + + Compares parameter types + + Parameter type #1 + Parameter #2 + Declaring type of method that owns parameter + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Compares fields + + Field #1 + Field #2 + true if same, false otherwise + + + + Gets the hash code of a field + + The field + The hash code + + + + Compares properties + + Property #1 + Property #2 + true if same, false otherwise + + + + Gets the hash code of a property + + The property + The hash code + + + + Compares events + + Event #1 + Event #2 + true if same, false otherwise + + + + Gets the hash code of an event + + The event + The hash code + + + + + + + Helps resolve types + + + + + Resolves a + + A TypeDefOrRef coded token + Generic parameter context + A or null if + is invalid + + + + Converts the address of a to a + + + Address of . This is also known as the + method table and has the same value as + A or null if not supported + + + + Reads signatures from the #Blob stream + + + + + Reads a signature from the #Blob stream + + Reader module + #Blob stream offset of signature + A new instance or null if + is invalid. + + + + Reads a signature from the #Blob stream + + Reader module + #Blob stream offset of signature + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature data + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature data + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature reader + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature reader + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature data + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature data + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature reader + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature reader + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + Reader module + #Blob stream offset of signature + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + Reader module + #Blob stream offset of signature + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + Reader module + #Blob stream offset of signature + If there's any extra data after the signature, it's saved + here, else this will be null + A new instance or null if + is invalid. + + + + Reads a type signature from the #Blob stream + + Reader module + #Blob stream offset of signature + Generic parameter context + If there's any extra data after the signature, it's saved + here, else this will be null + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature data + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature data + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature reader + A new instance or null if + is invalid. + + + + Reads a signature + + The module where the signature is located in + The signature reader + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature data + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature data + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature reader + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature reader + Generic parameter context + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature data + Generic parameter context + If there's any extra data after the signature, it's saved + here, else this will be null + A new instance or null if + is invalid. + + + + Reads a signature + + Token resolver + A instance + The signature reader + Generic parameter context + If there's any extra data after the signature, it's saved + here, else this will be null + A new instance or null if + is invalid. + + + + Constructor + + Reader module + #Blob stream offset of signature + Generic parameter context + + + + Constructor + + Token resolver + A instance + The signature data + Generic parameter context + + + + Reads the signature + + A new instance or null if invalid signature + + + + Reads a + + First byte of signature + A new instance + + + + Reads a + + First byte of signature + A new instance + + + + Reads a + + First byte of signature + A new instance + + + + Reads a + + First byte of signature + A new instance + + + + Reads a + + First byte of signature + A new instance + + + + Reads the next type + + A new instance or null if invalid element type + + + + A high-level representation of a row in the StandAloneSig table + + + + + The row id in its table + + + + + + + + + + + + + + From column StandAloneSig.Signature + + + + + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + Gets/sets the method sig + + + + + Gets/sets the locals sig + + + + + + + + A StandAloneSig row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + A locals sig + + + + Constructor + + A method sig + + + + Created from a row in the StandAloneSig table + + + + The module where this instance is located + + + + + + + + + + + + + Constructor + + The module which contains this StandAloneSig row + Row ID + Generic parameter context + If is null + If is invalid + + + + Thrown if the strong name key or public key is invalid + + + + + Default constructor + + + + + Constructor + + Error message + + + + Constructor + + Error message + Other exception + + + + Constructor + + + + + + + Type of signature algorithm. See WinCrypt.h in the Windows SDK + + + + + RSA signature algorithm + + + + + A public key + + + + + Gets/sets the signature algorithm + + + + + Gets/sets the hash algorithm + + + + + Gets/sets the modulus + + + + + Gets/sets the public exponent + + + + + Default constructor + + + + + Constructor + + Modulus + Public exponent + + + + Constructor + + Modulus + Public exponent + Hash algorithm + + + + Constructor + + Modulus + Public exponent + Hash algorithm + Signature algorithm + + + + Constructor + + Public key + + + + Constructor + + Public key data + Strong name key is invalid + + + + Constructor + + Public key file + Strong name key is invalid + + + + Constructor + + Public key stream + Strong name key is invalid + + + + Constructor + + Public key reader + Strong name key is invalid + + + + Creates a public key blob + + + + + + + + Stores a strong name key pair + + + + + Gets the public key + + + + + Gets the strong name signature size in bytes + + + + + Gets the public key hash algorithm. It's usually + + + + + Gets the public exponent + + + + + Gets the modulus + + + + + Gets prime1 + + + + + Gets prime2 + + + + + Gets exponent1 + + + + + Gets exponent2 + + + + + Gets the coefficient + + + + + Gets the private exponent + + + + + Constructor + + Strong name key data + Strong name key is invalid + + + + Constructor + + Strong name key file + Strong name key is invalid + + + + Constructor + + Strong name key stream + Strong name key is invalid + + + + Constructor + + Strong name key reader + Strong name key is invalid + + + + Creates a strong name key with a new hash algorithm + + Algorithm + + + + + Creates an instance + + + + + Creates a strong name blob + + + + + Creates a counter signature, just like + sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk can do. + The public key sn prints is 's value. + + Identity public key + Identity strong name key pair + Signature public key + The counter signature as a hex string + + + + Creates a counter signature, just like + sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk can do. + The public key sn prints is 's value. + + Identity public key + Identity strong name key pair + Signature public key + The counter signature + + + + Strong name signs an assembly. It supports normal strong name signing and the new + (.NET 4.5) enhanced strong name signing. + + + + + Constructor + + .NET PE file stream + + + + Constructor + + .NET PE file stream + Offset in of the first byte of + the PE file. + + + + Calculates the strong name signature and writes it to the stream. The signature + is also returned. + + Strong name key used for signing + Offset (relative to the start of the PE file) of the strong + name signature. + The strong name signature + + + + Calculates and returns the strong name signature + + Strong name key used for signing + Offset (relative to start of PE file) of the strong + name signature. + The strong name signature + + + + Strong name hashes the .NET file + + Hash algorithm + Strong name sig offset (relative to start of .NET PE file) + Size of strong name signature + The strong name hash of the .NET file + + + + Returns the strong name signature + + Strong name key + Hash algorithm + Strong name hash of the .NET PE file + Strong name signature + + + + System.Runtime.InteropServices.TypeIdentifierAttribute helper code used by + + + + + TypeDef and ExportedType flags. See CorHdr.h/CorTypeAttr + + + + Use this mask to retrieve the type visibility information. + + + Class is not public scope. + + + Class is public scope. + + + Class is nested with public visibility. + + + Class is nested with private visibility. + + + Class is nested with family visibility. + + + Class is nested with assembly visibility. + + + Class is nested with family and assembly visibility. + + + Class is nested with family or assembly visibility. + + + Use this mask to retrieve class layout information + + + Class fields are auto-laid out + + + Class fields are laid out sequentially + + + Layout is supplied explicitly + + + Use this mask to retrieve class semantics information. + + + Use this mask to retrieve class semantics information. + + + Type is a class. + + + Type is an interface. + + + Class is abstract + + + Class is concrete and may not be extended + + + Class name is special. Name describes how. + + + Class / interface is imported + + + The class is Serializable. + + + The type is a Windows Runtime type + + + Use StringFormatMask to retrieve string information for native interop + + + LPTSTR is interpreted as ANSI in this class + + + LPTSTR is interpreted as UNICODE + + + LPTSTR is interpreted automatically + + + A non-standard encoding specified by CustomFormatMask + + + Use this mask to retrieve non-standard encoding information for native interop. The meaning of the values of these 2 bits is unspecified. + + + Initialize the class any time before first static field access. + + + This ExportedType is a type forwarder. + + + Flags reserved for runtime use. + + + Runtime should check name encoding. + + + Class has security associate with it. + + + + A high-level representation of a row in the TypeDef table + + + + + The row id in its table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always returns false since a does not contain any + or . + + + + + + + + Gets/sets the owner module + + + + + + + + + + Called to initialize + + + + From column TypeDef.Flags + + + + Attributes + + + + From column TypeDef.Name + + + + Name + + + + From column TypeDef.Namespace + + + + Name + + + + From column TypeDef.Extends + + + + + + + + + + Called to initialize + + + Reset + + + + From column TypeDef.FieldList + + + + + + + Initializes + + + + From column TypeDef.MethodList + + + + + + + Initializes + + + + + + + + + Initializes + + + + Gets the interfaces + + + + + + + Initializes + + + + + + + + + Initializes + + + + Gets/sets the class layout + + + + + + + + + + Called to initialize + + + + + + + Gets/sets the enclosing type. It's null if this isn't a nested class. + + + + + + + + Called by and should normally not be called by any user + code. Use instead. Only call this if you must set the + declaring type without inserting it in the declaring type's method list. + + + + + + + + + + Called to initialize + + + + Gets all the nested types + + + + + + + Initializes + + + + Gets all events + + + + + + + Initializes + + + + Gets all properties + + + + + + + Initializes + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if there's at least one in + + + + + true if is not null + + + + + Gets/sets the packing size. If you write to this property but + is null, it will be created. The value is returned + if is null. + + + + + Gets/sets the class size. If you write to this property but + is null, it will be created. The value is returned + if is null. + + + + + + + + true if it's an enum + + + + + true if it's a delegate (it derives from ) + + + + + true if this is a nested type (it has a declaring type) + + + + + + + + Checks whether this type has opted into equivalence + + + + + Modify property: = + ( & ) | . + + Value to AND + Value to OR + + + + Set or clear flags in + + true if flags should be set, false if flags should + be cleared + Flags to set or clear + + + + Gets/sets the visibility + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the layout + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the string format + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + true if is set + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + true if this is the global (aka. <Module>) type + + + + + Gets a list of all nested types and all their nested types + + + + + Gets an enum's underlying type or null if none. Should only be called + if this is an enum. + + + + + Resolves a method or a field. (owner type) is ignored when + resolving the method/field. Private scope methods/fields are not returned. + + A method/field reference + A or a instance or null + if it couldn't be resolved. + + + + Resolves a method or a field. (owner type) is ignored when + resolving the method/field. + + A method/field reference + Method/field signature comparison options + A or a instance or null + if it couldn't be resolved. + + + + Finds a method. Private scope methods are not returned. + + Method name + Method signature + The first method that matches or null if none found + + + + Finds a method + + Method name + Method signature + Method signature comparison options + The first method that matches or null if none found + + + + Finds a method + + Method name + Method signature + Method signature comparison options + The module that needs to find the method or null + The first method that matches or null if none found + + + + Finds a method by name + + Name of method + The or null if not found + + + + Finds all methods by name + + Name of method + All methods with that name + + + + Finds the class constructor (aka type initializer). It's the method named .cctor + + The class constructor or null if none found + + + + Finds the class constructor (aka type initializer). It's the method named .cctor. + If it doesn't exist, it is created, inserted into and returned. + The created .cctor will have just one RET instruction. + + The class constructor + + + + Finds all instance constructors (not class constructors) + + All instance constructors + + + + Finds all static and instance constructors + + All static and instance constructors + + + + Finds the default instance constructor (the one with no arguments) + + The default instance constructor or null if none + + + + Finds a field. Private scope fields are not returned. + + Field name + Field signature + The first field that matches or null if none found + + + + Finds a field + + Field name + Field signature + Field signature comparison options + The first field that matches or null if none found + + + + Finds a field + + Field name + Field signature + Field signature comparison options + The module that needs to find the field or null + The first field that matches or null if none found + + + + Finds a field by name + + Name of field + The or null if not found + + + + Finds all fields by name + + Name of field + All fields with that name + + + + Finds an event + + Name of event + Type of event + A or null if not found + + + + Finds an event + + Name of event + Type of event + Event type comparison options + A or null if not found + + + + Finds an event + + Name of event + Type of event + Event type comparison options + The module that needs to find the event or null + A or null if not found + + + + Finds an event by name + + Name of event + The or null if not found + + + + Finds all events by name + + Name of event + All events with that name + + + + Finds a property + + Name of property + Property signature + A or null if not found + + + + Finds a property + + Name of property + Property signature + Property signature comparison options + A or null if not found + + + + Finds a property + + Name of property + Property signature + Property signature comparison options + The module that needs to find the property or null + A or null if not found + + + + Finds a prop by name + + Name of prop + The or null if not found + + + + Finds all props by name + + Name of prop + All props with that name + + + + Finds a method by checking this type or any of its base types + + Method name + Method signature + The method or null if it wasn't found + + + + Finds a method by checking this type or any of its base types + + Method name + Method signature + Method signature comparison options + The method or null if it wasn't found + + + + Finds a method by checking this type or any of its base types + + Method name + Method signature + Method signature comparison options + The module that needs to find the method or null + The method or null if it wasn't found + + + + Finds a method by checking this type or any of its base types + + Method name + The method or null if it wasn't found + + + + Finds a field by checking this type or any of its base types + + Field name + Field signature + The field or null if it wasn't found + + + + Finds a field by checking this type or any of its base types + + Field name + Field signature + Field signature comparison options + The field or null if it wasn't found + + + + Finds a field by checking this type or any of its base types + + Field name + Field signature + Field signature comparison options + The module that needs to find the field or null + The field or null if it wasn't found + + + + Finds a field by checking this type or any of its base types + + Field name + The field or null if it wasn't found + + + + Finds an event by checking this type or any of its base types + + Event name + Event type + The event or null if it wasn't found + + + + Finds an event by checking this type or any of its base types + + Event name + The event or null if it wasn't found + + + + Finds a property by checking this type or any of its base types + + Property name + Property signature + The property or null if it wasn't found + + + + Finds a property by checking this type or any of its base types + + Property name + Property signature + Property signature comparison options + The property or null if it wasn't found + + + + Finds a property by checking this type or any of its base types + + Property name + Property signature + Property signature comparison options + The module that needs to find the property or null + The property or null if it wasn't found + + + + Finds a property by checking this type or any of its base types + + Property name + The property or null if it wasn't found + + + + Removes a method from this type. It also removes it from any properties and events. + + The method to remove + + + + Removes a method from this type. It also removes it from any properties and events. + + The method to remove + true if we should remove all + empty properties and events. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets all fields named + + Field name + A list of 0 or more fields with name + + + + Gets the first field named + + Field name + The field or null if none found + + + + FInd a method implementation method + + Method + + + + + + + + A TypeDef row created by the user and not present in the original .NET file + + + + + Constructor + + Name + + + + Constructor + + Namespace + Name + + + + Constructor + + Name + Base class or null if it's an interface + + + + Constructor + + Namespace + Name + Base class or null if it's an interface + + + + Created from a row in the TypeDef table + + + + The module where this instance is located + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Constructor + + The module which contains this TypeDef row + Row ID + If is null + If is invalid + + + + Gets all methods overrides + + The method + Generic parameter context + A list (possibly empty) of all methods overrides + + + + Initializes all . Only those s + that are property or event handlers get updated. + + + + + Initializes a property's special methods + + The property + Updated with a list of all get methods + Updated with a list of all set methods + Updated with a list of all other methods + + + + Initializes an event's special methods + + The event + Updated with the addOn method or null if none + Updated with the fire method or null if none + Updated with the removeOn method or null if none + Updated with a list of all other methods + + + + + + + + + + + + + + + + + + + Finds s + + + + + true if the cache is enabled. false if the cache + is disabled and a slower O(n) lookup is performed. + + + + + Constructor + + All root types. All their nested types are also included. + If is null + + + + Constructor + + All root types + true if all nested types that are reachable + from should also be included. + If is null + + + + Resets the cache (clears all cached elements). Use this method if the cache is + enabled but some of the types have been modified (eg. removed, added, renamed). + + + + + + + + + + + Gets the next or null if there are no more left + + The next or null if none + + + + Gets the next or null if there are no more left. + The cache is updated with the returned before the method + returns. + + The next or null if none + + + + + + + Various helper methods for classes to prevent infinite recursion + + + + + Checks whether contains a or a + . + + Calling convention signature + true if contains a + or a . + + + + Checks whether contains a or a + . + + Field signature + true if contains a + or a . + + + + Checks whether contains a or a + . + + Method or property signature + true if contains a + or a . + + + + Checks whether contains a or a + . + + Local signature + true if contains a + or a . + + + + Checks whether contains a or a + . + + Generic method signature + true if contains a + or a . + + + + Checks whether contains a or a + . + + Type + true if contains a or a + . + + + + Checks whether contains a or a + . + + Type + true if contains a or a + . + + + + Checks whether contains a or a + . + + Type + true if contains a or a + . + + + + Checks whether contains a or a + . + + Type + true if contains a or a + . + + + + Checks whether contains a or a + . + + Type + true if contains a or a + . + + + + Checks whether contains a or a + . + + Type + true if contains a or a + . + + + + Thrown by when it fails to parse a type name + + + + + Default constructor + + + + + Constructor + + Exception message + + + + Constructor + + Exception message + Inner exception or null if none + + + + Constructor + + + + + + + Helps create types + + + + + Finds a 's when the original assembly + info is missing from the full type name. + + A non-nested + 's or null + + + + Parses a type name and creates an + + + + Owner module + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + A new instance + If parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + Generic parameter context + A new instance + If parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + A new instance or null if parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + Generic parameter context + A new instance or null if parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + A new instance + If parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + Generic parameter context + A new instance + If parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + A new instance or null if parsing failed + + + + Parses a Reflection type name and creates a + + Module that will own the returned or null + Full name of type + Helper class + Generic parameter context + A new instance or null if parsing failed + + + + Constructor + + Module that will own the returned or null + Full name of type + Helper class + + + + Constructor + + Module that will own the returned or null + Full name of type + Helper class + Generic parameter context + + + + Parses a type name and creates a + + A new instance + If parsing failed + + + + Parses a type name and creates a + + A new instance + If parsing failed + + + + Increment recursion counter + + If this method has been called too many times + + + + Decrement recursion counter + + + + + + + + Dispose method + + true if called by + + + + Reads a including any possible nested s. + + Character separating nested types + A new instance, which could be nested. + + + + Reads a namespace and name and creates a TypeRef. Does not read any nested types. + + A new instance + + + + Peeks the next char. -1 if no more chars. + + + + + Gets the next char or -1 if no more chars + + + + + Gets the next ID char or -1 if no more ID chars + + true if white space should be ignored + true if equal sign '=' should be ignored + + + + Parses reflection type names. Grammar http://msdn.microsoft.com/en-us/library/yfsftwz6.aspx + + + + + Constructor + + Module that will own the returned or null + Full name of type + Helper class + + + + Constructor + + Module that will own the returned or null + Full name of type + Helper class + Generic parameter context + + + + Parses an assembly name + + Full assembly name + A new instance or null if parsing failed + + + + Parses an assembly name + + Full assembly name + Generic parameter context + A new instance or null if parsing failed + + + + + + + A high-level representation of a row in the TypeRef table + + + + + The row id in its table + + + + + The owner module + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always returns false since a does not contain any + or . + + + + + + + + From column TypeRef.ResolutionScope + + + + + + + + + + Called to initialize + + + + From column TypeRef.Name + + + + Name + + + + From column TypeRef.Namespace + + + + Name + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + true if it's nested within another + + + + + + + + + + + Gets the declaring type, if any + + + + + + + + Resolves the type + + A instance or null if it couldn't be resolved + + + + Resolves the type + + The module that needs to resolve the type or null + A instance or null if it couldn't be resolved + + + + Resolves the type + + A instance + If the type couldn't be resolved + + + + Resolves the type + + The module that needs to resolve the type or null + A instance + If the type couldn't be resolved + + + + Gets the top-most (non-nested) + + Input + The non-nested or null + + + + + + + A TypeRef row created by the user and not present in the original .NET file + + + + + Constructor + + Owner module + Type name + + + + Constructor + + Owner module + Type namespace + Type name + + + + Constructor + + Owner module + Type namespace + Type name + Resolution scope (a , + , or ) + + + + Created from a row in the TypeRef table + + + + The module where this instance is located + + + + + + + + + + + + + + + + Constructor + + The module which contains this TypeRef row + Row ID + If is null + If is invalid + + + + Type sig base class + + + + + Returns the wrapped element type. Can only be null if it was an invalid sig or + if it's a + + + + + Gets the element type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a or a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if it's a + + + + + true if this contains a or a + . + + + + + + + + Base class for element types that are last in a type sig, ie., + , , , + , + + + + + + + + Wraps a + + + + + Gets the the TypeDefOrRef + + + + + Returns true if != null + + + + + Returns true if != null + + + + + Returns true if != null + + + + + Gets the or null if it's not a + + + + + Gets the or null if it's not a + + + + + Gets the or null if it's not a + + + + + Constructor + + A , or + a + + + + A core library type + + + + + Gets the element type + + + + + Constructor + + The type which must be a or a + . and null are not allowed. + The type's element type + + + + Base class for class/valuetype element types + + + + + Constructor + + A + + + + Represents a + + + + + + + + Constructor + + A + + + + Represents a + + + + + + + + Constructor + + A + + + + Generic method/type var base class + + + + + true if it has an owner or + + + + + true if it has an owner ( is + not null) + + + + + true if it has an owner ( is + not null) + + + + + Gets the owner type or null if the owner is a or if it + has no owner. + + + + + Gets the owner method or null if the owner is a or if it + has no owner. + + + + + Gets the generic param number + + + + + Gets the corresponding or null if none exists. + + + + + Constructor + + true if it's a Var, false if it's a MVar + Generic param number + + + + Constructor + + true if it's a Var, false if it's a MVar + Generic param number + Owner method/type or null + + + + Returns true if it's a MVar element type + + + + + Returns true if it's a Var element type + + + + + Represents a + + + + + + + + + + + + + + Constructor + + Generic parameter number + Owner type or null + + + + Constructor + + Generic parameter number + Owner type or null + + + + Represents a + + + + + + + + + + + + + + Constructor + + Generic parameter number + Owner method or null + + + + Constructor + + Generic parameter number + Owner method or null + + + + Represents a + + + + + + + + Represents a + + + + + + + + Gets the signature + + + + + Gets the + + + + + Constructor + + The method signature + + + + Represents a + + + + + + + + Gets the generic type + + + + + Gets the generic arguments (it's never null) + + + + + Default constructor + + + + + Constructor + + The generic type + + + + Constructor + + The generic type + Number of generic arguments + + + + Constructor + + The generic type + Number of generic arguments + + + + Constructor + + The generic type + Generic argument #1 + + + + Constructor + + The generic type + Generic argument #1 + Generic argument #2 + + + + Constructor + + The generic type + Generic argument #1 + Generic argument #2 + Generic argument #3 + + + + Constructor + + The generic type + Generic arguments + + + + Constructor + + The generic type + Generic arguments + + + + Base class of non-leaf element types + + + + + + + + Constructor + + Next sig + + + + Represents a + + + + + + + + Constructor + + The next element type + + + + Represents a + + + + + + + + Constructor + + The next element type + + + + Array base class + + + + + Constructor + + Array type + + + + true if it's a multi-dimensional array (i.e., ), + and false if it's a single-dimensional array (i.e., ) + + + + + + true if it's a single-dimensional array (i.e., ), + and false if it's a multi-dimensional array (i.e., ) + + + + + + Gets/sets the rank (number of dimensions). This can only be set if + is true + + + + + Gets all sizes. If it's a , then it will be an empty temporary + list that is re-created every time this method is called. + + A list of sizes + + + + Gets all lower bounds. If it's a , then it will be an empty + temporary list that is re-created every time this method is called. + + A list of lower bounds + + + + Represents a + + + + + + + + + Gets/sets the rank (max value is 0x1FFFFFFF) + + + + + Gets all sizes (max elements is 0x1FFFFFFF) + + + + + Gets all lower bounds (max elements is 0x1FFFFFFF) + + + + + Constructor + + Array type + + + + Constructor + + Array type + Array rank + + + + Constructor + + Array type + Array rank + + + + Constructor + + Array type + Array rank + Sizes list. This instance will be the owner of this list. + Lower bounds list. This instance will be the owner of this list. + + + + Constructor + + Array type + Array rank + Sizes list. This instance will be the owner of this list. + Lower bounds list. This instance will be the owner of this list. + + + + Constructor + + Array type + Array rank + Sizes list. This instance will be the owner of this list. + Lower bounds list. This instance will be the owner of this list. + + + + + + + + + + Represents a (single dimension, zero lower bound array) + + + + + + + + + + + + Constructor + + The next element type + + + + + + + + + + Base class for modifier type sigs + + + + + Returns the modifier type + + + + + Constructor + + Modifier type + The next element type + + + + Represents a + + + + + + + + + + + Represents a + + + + + + + + + + + Represents a + + + + + + + + Constructor + + The next element type + + + + Represents a + + + + + + + + Gets/sets the size + + + + + Constructor + + The next element type + Size of the array + + + + Represents a + + + + + + + + Gets/sets the index + + + + + Constructor + + Index + The next element type + + + + A high-level representation of a row in the TypeSpec table + + + + + The row id in its table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From column TypeSpec.Signature + + + + + Gets/sets the extra data that was found after the signature + + + + + + + + + + + + + Called to initialize + + + + Gets all custom attributes + + + + + + + Initializes + + + + + + + + + + + + + Gets all custom debug infos + + + + + + + Initializes + + + + + + + A TypeSpec row created by the user and not present in the original .NET file + + + + + Default constructor + + + + + Constructor + + A type sig + + + + Created from a row in the TypeSpec table + + + + The module where this instance is located + + + + + + + + + + + + + + + + Constructor + + The module which contains this TypeSpec row + Row ID + Generic parameter context + If is null + If is invalid + + + + Compares s + + + + + The default instance + + + + + + + + + + + A UTF-8 encoded string where the original data is kept in memory to avoid conversions + when the data is not really valid UTF-8 encoded data + + When comparing strings, a byte compare is performed. The reason is that this + is what the CLR does when comparing strings in the #Strings stream. + + + + An empty + + + + + Gets the value as a UTF8 decoded string. Only use it for display purposes, + not for serialization. + + + + + Gets the original encoded data. Don't modify this data. + + + + + Gets the length of the this as a . I.e., it's the same as + String.Length. + + + + + + Gets the length of the raw data. It's the same as Data.Length + + + + + + Checks whether is null or if its data is null. + + The instance to check + true if null or empty, false otherwise + + + + Checks whether is null or if its data is null or the + data is zero length. + + The instance to check + true if null or empty, false otherwise + + + Implicit conversion from to + + + Implicit conversion from to + + + + Converts it to a + + The UTF-8 string instace or null + A or null if is null + + + + Converts it to a or an empty string if is null + + The UTF-8 string instace or null + A (never null) + + + + Gets the hash code of a + + Input + + + + + + + Compares two instances (case sensitive) + + Instance #1 or null + Instance #2 or null + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Compares two instances (case insensitive) + + Instance #1 or null + Instance #2 or null + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Compares two instances (case insensitive) + + Instance #1 or null + Instance #2 or null + true if equals, false otherwise + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + + Constructor + + UTF-8 data that this instance now owns + + + + Constructor + + The string + + + + Compares two instances + + First + Second + true if equals, false otherwise + + + + + + + + + + Checks whether exists in this string + + Value to find + true if exists in string or is the + empty string, else false + + + + Checks whether matches the end of this string + + Value + + + + + Checks whether matches the end of this string + + Value + true to ignore case + Culture info + + + + + Checks whether matches the end of this string + + Value + Comparison type + + + + + Checks whether matches the beginning of this string + + Value + + + + + Checks whether matches the beginning of this string + + Value + true to ignore case + Culture info + + + + + Checks whether matches the beginning of this string + + Value + Comparison type + + + + + Compares this instance with + + Other string + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Returns the index of the first character in this string + + Character + The index of or -1 if not found + + + + Returns the index of the first character in this string + starting from index + + Character + Start index + The index of or -1 if not found + + + + Returns the index of the first character in this string + starting from index for max + characters. + + Character + Start index + Max number of chars to scan + The index of or -1 if not found + + + + Returns the index of the first sub string in this string + + String + The index of or -1 if not found + + + + Returns the index of the first sub string in this string + starting from index + + String + Start index + The index of or -1 if not found + + + + Returns the index of the first sub string in this string + starting from index for max + characters. + + String + Start index + Max number of chars to scan + The index of or -1 if not found + + + + Returns the index of the first sub string in this string + starting from index for max + characters. + + String + Start index + Max number of chars to scan + Comparison type + The index of or -1 if not found + + + + Returns the index of the first sub string in this string + starting from index + + String + Start index + Comparison type + The index of or -1 if not found + + + + Returns the index of the first sub string in this string + + String + Comparison type + The index of or -1 if not found + + + + Returns the index of the last character in this string + + Character + The index of or -1 if not found + + + + Returns the index of the last character in this string + starting from index + + Character + Start index + The index of or -1 if not found + + + + Returns the index of the last character in this string + starting from index for max + characters. + + Character + Start index + Max number of chars to scan + The index of or -1 if not found + + + + Returns the index of the last sub string in this string + + String + The index of or -1 if not found + + + + Returns the index of the last sub string in this string + starting from index + + String + Start index + The index of or -1 if not found + + + + Returns the index of the last sub string in this string + starting from index for max + characters. + + String + Start index + Max number of chars to scan + The index of or -1 if not found + + + + Returns the index of the last sub string in this string + starting from index for max + characters. + + String + Start index + Max number of chars to scan + Comparison type + The index of or -1 if not found + + + + Returns the index of the last sub string in this string + starting from index + + String + Start index + Comparison type + The index of or -1 if not found + + + + Returns the index of the last sub string in this string + + String + Comparison type + The index of or -1 if not found + + + + Inserts string at a index + + Start index + Value to insert + A new instance with the inserted at position + + + + + Removes all characters starting from position + + Start index + A new instance + + + + Removes characters starting from position + + + Start index + Number of characters to remove + A new instance + + + + Replaces all characters with + + Character to find + Character to replace all + A new instance + + + + Replaces all sub strings with + + Sub string to find + Sub string to replace all + A new instance + + + + Returns a sub string of this string starting at offset + + Start index + A new instance + + + + Returns a sub string of this string starting at offset . + Length of sub string is . + + Start index + Length of sub string + A new instance + + + + Returns the lower case version of this string + + A new instance + + + + Returns the lower case version of this string + + Culture info + A new instance + + + + Returns the lower case version of this string using the invariant culture + + A new instance + + + + Returns the upper case version of this string + + A new instance + + + + Returns the upper case version of this string + + Culture info + A new instance + + + + Returns the upper case version of this string using the invariant culture + + A new instance + + + + Removes all leading and trailing whitespace characters + + A new instance + + + + + + + + + + Compares byte arrays + + + + + Default instance + + + + + + + + + + + Returns an assembly name string + + Simple assembly name + Version or null + Culture or null + Public key / public key token or null + Assembly attributes + An assembly name string + + + + Convert a byte[] to a + + All bytes + true if output should be in upper case hex + as a hex string + + + + Converts a hex string to a byte[] + + A string with an even number of hex characters + converted to a byte[] or null + if is invalid + + + + Converts a character to a hex digit + + Hex character + 0x00-0x0F if successful, -1 if is not + a valid hex digit + + + + Compares two byte arrays + + Byte array #1 + Byte array #2 + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Checks whether two byte arrays are equal + + First + Second + true if same, false otherwise + + + + Gets the hash code of a byte array + + Byte array + The hash code + + + + Compares two versions + + This differs from if the build + and/or revision numbers haven't been initialized or if one of the args is null. + + Version #1 or null to be treated as v0.0.0.0 + Version #2 or null to be treated as v0.0.0.0 + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Checks whether two versions are the same + + This differs from if the build + and/or revision numbers haven't been initialized or if one of the args is null. + + Version #1 or null to be treated as v0.0.0.0 + Version #2 or null to be treated as v0.0.0.0 + true if same, false otherwise + + + + Creates a new instance with no undefined version values (eg. + the build and revision values won't be -1). + + A instance + A new instance + + + + Parses a version string + + Version string + A new or null if + is an invalid version + + + + Compares two locales (cultures) + + First + Second + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Compares two locales (cultures) + + First + Second + true if same, false otherwise + + + + Compares two locales (cultures) + + First + Second + < 0 if a < b, 0 if a == b, > 0 if a > b + + + + Compares two locales (cultures) + + First + Second + true if same, false otherwise + + + + Gets the hash code of a locale + + Value + The hash code + + + + Align up + + Value + Alignment + + + + Align up + + Value + Alignment + + + + Variant type (VT_XXX in the Windows SDK) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This wasn't present in the blob + + + + All native vtables + + + + + Gets/sets the RVA of the vtable fixups + + + + + Gets all s + + + + + Default constructor + + + + + Constructor + + Module + + + + + + + + + + See COR_VTABLE_XXX in CorHdr.h + + + + + 32-bit vtable slots + + + + + 64-bit vtable slots + + + + + Transition from unmanaged code + + + + + Also retain app domain + + + + + Call most derived method + + + + + One VTable accessed by native code + + + + + Gets/sets the of this vtable + + + + + Gets/sets the flags + + + + + true if each vtable slot is 32 bits in size + + + + + true if each vtable slot is 64 bits in size + + + + + Gets the vtable methods + + + + + Default constructor + + + + + Constructor + + Flags + + + + Constructor + + RVA of this vtable + Flgas + Number of methods in vtable + + + + Constructor + + RVA of this vtable + Flgas + Vtable methods + + + + + + + + + + + + + Converts WinMD type to a CLR type. Returns null + if it's not a CLR compatible WinMD type. + + Owner module or null + Type + + + + + Converts WinMD type to a CLR type. Returns null + if it's not a CLR compatible WinMD type. + + Owner module or null + Type + true if the returned type is a value type + + + + + Converts WinMD type to a CLR type. Returns null + if it's not a CLR compatible WinMD type. + + Owner module or null + Type + + + + + Converts WinMD type to a CLR type. Returns null + if it's not a CLR compatible WinMD type. + + Owner module or null + Type + true if the returned type is a value type + + + + + Converts WinMD type to a CLR type. Returns null + if it's not a CLR compatible WinMD type. + + Owner module or null + Type + + + + + Converts WinMD type to a CLR type. Returns null + if it's not a CLR compatible WinMD type. + + Owner module or null + Type + + + + + Converts WinMD member reference to a CLR member reference. Returns + null if it's not a CLR compatible WinMD member reference. + + Owner module or null + Member reference + + + + + Converts WinMD method to a CLR member reference. Returns + null if it's not a CLR compatible WinMD method + + Owner module or null + Method + + + + + WinMD status + + + + + This is not a WinMD file + + + + + This is a pure WinMD file (not managed) + + + + + This is a managed WinMD file (created by eg. winmdexp.exe) + + + + + Writes data + + + + + Gets the current position + + + + + Constructor + + Destination array + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes bytes + + Bytes + + + + Writes bytes + + Bytes + Source index + Number of bytes to write + + + + #Blob heap + + + + + + + + Populates blobs from an existing (eg. to preserve + blob offsets) + + The #Blob stream with the original content + + + + Adds data to the #Blob heap + + The data + The offset of the data in the #Blob heap + + + + Adds data to the #Blob heap, but does not re-use an existing position + + The data + The offset of the data in the #Blob heap + + + + + + + + + + + + + + + + + + + Stores a byte array + + + + + + + + + + + Gets the data + + + + + Constructor + + The data. It will be owned by this instance and can't be modified by + other code if this instance is inserted as a key in a dictionary (because + return value will be different if you modify the array). If + it's never inserted as a key in a dictionary, then the contents can be modified, + but shouldn't be resized after has been called. + + + + + + + + + + + + + + + + + + + + + + Checksum algorithm + + + + + SHA-1 + + + + + SHA-256 + + + + + SHA-384 + + + + + SHA-512 + + + + + Contains a list of s + + + + + Default constructor + + + + + Add a + + The chunk to add or null if none + Chunk alignment + + + + Remove a + + The chunk to remove or null if none + Alignment of the chunk, or null if the chunk cannot be removed. + + + + Base class of chunk list types + + Chunk type + + + All chunks + + + true if has been called + + + + Helper struct + + + + Data + + + Alignment + + + + Constructor + + Chunk + Alignment + + + + Equality comparer for + + + + + Constructor + + Compares the chunk type + + + + + + + + + + + + + + + + + + + + + + + + + + + + Helps write custom attributes + + + + + Writes s + + + + + Writes a custom attribute + + Helper class + The custom attribute + Custom attribute blob + + + + Writes custom attribute named arguments + + Helper class + Named arguments + The named args blob + + + + Write a value + + The ctor arg type, field type, or property type + The value to write + + + + Gets the enum's underlying type + + An enum type + The underlying type or null if we couldn't resolve the type ref + + + + Converts to a , possibly resolving + a + + The type + A or null if we couldn't resolve the + or if is a type spec + + + + + + + A chunk + + + + + + + + + + + Constructor + + The data + + + + Constructor + + The data + Virtual size of + + + + Constructor + + The data + + + + Constructor + + The data + Virtual size of + + + + Gets the data reader + + + + + Replaces the old data with new data. The new data must be the same size as the old data if + has been called. That method gets called after + event + + + + + + + + + + + + + + + + + + Copies existing data to a new metadata heap + + + + + Gets the name of the heap + + + + + Constructor + + The stream whose data will be copied to the new metadata file + + + + Constructor + + Heap name + Heap content + + + + + + + + + + Writes data + + + + + Gets/sets the position + + + + + Constructor + + Destination stream + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes a + + Value + + + + Writes bytes + + Bytes to write + + + + Writes bytes + + Bytes to write + Index to start copying from + Number of bytes to copy + + + + Writes a compressed + + Value + + + + Writes a compressed + + + + + + Gets the size of a compressed , see + + Value + + + + + Debug directory entry + + + + + Gets the header + + + + + Gets the data + + + + + Constructor + + Data + + + + Debug directory chunk + + + + Default debug directory alignment + + + + + + + + + + Constructor + + + + + Adds data + + Data + + + + + Adds data + + Data + + + + + Adds data + + Data + Debug type + Major version + Minor version + Timestamp + + + + + Adds data + + Data + Debug type + Major version + Minor version + Timestamp + + + + + + + + + + + + + + + + + Writes DeclSecurity blobs + + + + + Creates a DeclSecurity blob from + + Owner module + List of s + Helps this class + A DeclSecurity blob + + + + Creates a DeclSecurity blob from + + Owner module + List of s + Helps this class + Optimize serialized type strings in custom attributes. + For more info, see + A DeclSecurity blob + + + + Extension methods + + + + + Write zeros + + this + Number of zeros + + + + Writes all data to and verifies that all bytes were written + + this + Destination + Not all bytes were written + + + + Writes a data directory + + Writer + The data + + + + #GUID heap + + + + + + + + Adds a guid to the #GUID heap + + The guid + The index of the guid in the #GUID heap + + + + + + + + + + + + + + + + + + + Base class of most heaps + + + + + true if has been called + + + + + + + + + + + + + + + + + true if offsets require 4 bytes instead of 2 bytes. + + + + + + + + + + + + + + + + + Gets the raw length of the heap + + Raw length of the heap + + + + + + + Writes all data to at its current location. + + Destination + + + + + + + Data that gets written to the file + + + + + Gets the file offset. This is valid only after has been called. + + + + + Gets the RVA. This is valid only after has been called. + + + + + Called when the file offset and RVA are known + + File offset of this chunk + RVA of this chunk + + + + Gets the raw file length of this chunk. Must only be called after + has been called. + + Length of this chunk + + + + Gets the virtual size of this chunk. Must only be called after + has been called. + + Virtual size of this chunk + + + + Writes all data to at its current location. It's only + called after and have been called. + You cannot assume that 's file position is the same as this + chunk's file position. + + Destination + + + + Implemented by s that can reuse the old data location in the original PE file + + + + + Returns true if this chunk fits in the old location + + Original RVA of data + Size of the original location + + + + + .NET Heap interface + + + + + Gets the name of the heap + + + + + Checks whether the heap is empty + + + + + Called when the heap should be set to read-only mode + + + + + Options to + + + + + Default major runtime version + + + + + Default minor runtime version + + + + + Major runtime version + + + + + Minor runtime version + + + + + Flags + + + + + Entry point or null. Either a Method/File token or an RVA. + + + + + Default constructor + + + + + Constructor + + Flags + + + + Constructor + + Major runtime version (default is ) + Minor runtime version (default is ) + Flags + + + + .NET header + + + + + Gets/sets the + + + + + Gets/sets the .NET resources + + + + + Gets/sets the strong name signature + + + + + + + + + + + Constructor + + Options + + + + + + + + + + + + + + + + Import address table chunk + + + + + Gets/sets the + + + + + + + + + + + Constructor + + true if it's a 64-bit PE file, false if it's a 32-bit PE file + + + + + + + + + + + + + + + + Import directory chunk + + + + + Gets/sets the + + + + + Gets the RVA of _CorDllMain/_CorExeMain in the import lookup table + + + + + Gets RVA of _CorExeMain/_CorDllMain in the IAT + + + + + Gets/sets a value indicating whether this is a EXE or a DLL file + + + + + + + + + + + Gets/sets the name of the dll which should be imported. + + + + + Gets/sets the name of the entry point of the imported dll. + + + + + Constructor + + true if it's a 64-bit PE file, false if it's a 32-bit PE file + + + + + + + + + + + + + + + + Interface to get and set raw heap data. Implemented by the offset heaps: #Strings, + #GUID, #Blob, and #US. + + Type of cooked data + + + + Gets the size of the data as raw data when written to the heap + + The data + Size of the data as raw data when written to the heap + + + + Overrides what value should be written to the heap. + + Offset of value. Must match an offset returned by + + The new raw data. The size must match the raw size exactly. + + + + Gets all inserted raw data and their offsets. The returned array + is owned by the caller. + + An enumerable of all raw data and their offsets + + + + Gets notified of errors. The default handler should normally throw since the written data + will probably be invalid. Any error can be ignored. + + + + + Called when an error is detected (eg. a null pointer or other invalid value). The error + can be ignored but the written data won't be valid. + + Error message + + + + Writes the .sdata blob. We could write the data in any order, but we write the data in the same order as ILASM + + PE timestamp + + + + Writes field marshal blobs + + + + + Creates a field marshal blob from + + Owner module + Marshal type + Helps this class + A field marshal blob or null if is + null + + + + Creates a field marshal blob from + + Owner module + Marshal type + Helps this class + Optimize serialized type strings in custom attributes. + For more info, see + A field marshal blob or null if is + null + + + + + + + Calculates max stack usage by using a simple pass over all instructions. This value + can be placed in the fat method header's MaxStack field. + + + + + Gets max stack value + + All instructions + All exception handlers + Max stack value + + + + Gets max stack value + + All instructions + All exception handlers + Updated with max stack value + true if no errors were detected, false otherwise + + + + MD table interface + + + + + Gets the table type + + + + + true if the table is empty + + + + + Gets the number of rows in this table + + + + + Gets/sets a value indicating whether it's sorted + + + + + true if has been called + + + + + Gets/sets the + + + + + Called when the table can't be modified any more + + + + + Creates rows in a table. Rows can optionally be shared to create a compact table. + + The raw row type + + + + + + + + + + + + + + + + + + + + + + Gets the value with rid + + The row ID + + + + Constructor + + The table type + Equality comparer + + + + + + + Adds a row. If the row already exists, returns a rid to the existing one, else + it's created and a new rid is returned. + + The row. It's now owned by us and must NOT be modified by the caller. + The RID (row ID) of the row + + + + Creates a new row even if this row already exists. + + The row. It's now owned by us and must NOT be modified by the caller. + The RID (row ID) of the row + + + + Re-adds all added rows. Should be called if rows have been modified after being + inserted. + + + + + Reset the table. + + + + + Writes s + + + + + Writes a Module table + + Writer + Metadata + Table + + + + Writes a TypeRef table + + Writer + Metadata + Table + + + + Writes a TypeDef table + + Writer + Metadata + Table + + + + Writes a FieldPtr table + + Writer + Metadata + Table + + + + Writes a Field table + + Writer + Metadata + Table + + + + Writes a MethodPtr table + + Writer + Metadata + Table + + + + Writes a Method table + + Writer + Metadata + Table + + + + Writes a ParamPtr table + + Writer + Metadata + Table + + + + Writes a Param table + + Writer + Metadata + Table + + + + Writes a InterfaceImpl table + + Writer + Metadata + Table + + + + Writes a MemberRef table + + Writer + Metadata + Table + + + + Writes a Constant table + + Writer + Metadata + Table + + + + Writes a CustomAttribute table + + Writer + Metadata + Table + + + + Writes a FieldMarshal table + + Writer + Metadata + Table + + + + Writes a DeclSecurity table + + Writer + Metadata + Table + + + + Writes a ClassLayout table + + Writer + Metadata + Table + + + + Writes a FieldLayout table + + Writer + Metadata + Table + + + + Writes a StandAloneSig table + + Writer + Metadata + Table + + + + Writes a EventMap table + + Writer + Metadata + Table + + + + Writes a EventPtr table + + Writer + Metadata + Table + + + + Writes a Event table + + Writer + Metadata + Table + + + + Writes a PropertyMap table + + Writer + Metadata + Table + + + + Writes a PropertyPtr table + + Writer + Metadata + Table + + + + Writes a Property table + + Writer + Metadata + Table + + + + Writes a MethodSemantics table + + Writer + Metadata + Table + + + + Writes a MethodImpl table + + Writer + Metadata + Table + + + + Writes a ModuleRef table + + Writer + Metadata + Table + + + + Writes a TypeSpec table + + Writer + Metadata + Table + + + + Writes a ImplMap table + + Writer + Metadata + Table + + + + Writes a FieldRVA table + + Writer + Metadata + Table + + + + Writes a ENCLog table + + Writer + Metadata + Table + + + + Writes a ENCMap table + + Writer + Metadata + Table + + + + Writes a Assembly table + + Writer + Metadata + Table + + + + Writes a AssemblyProcessor table + + Writer + Metadata + Table + + + + Writes a AssemblyOS table + + Writer + Metadata + Table + + + + Writes a AssemblyRef table + + Writer + Metadata + Table + + + + Writes a AssemblyRefProcessor table + + Writer + Metadata + Table + + + + Writes a AssemblyRefOS table + + Writer + Metadata + Table + + + + Writes a File table + + Writer + Metadata + Table + + + + Writes a ExportedType table + + Writer + Metadata + Table + + + + Writes a ManifestResource table + + Writer + Metadata + Table + + + + Writes a NestedClass table + + Writer + Metadata + Table + + + + Writes a GenericParam table + + Writer + Metadata + Table + + + + Writes a MethodSpec table + + Writer + Metadata + Table + + + + Writes a GenericParamConstraint table + + Writer + Metadata + Table + + + + Writes a Document table + + Writer + Metadata + Table + + + + Writes a MethodDebugInformation table + + Writer + Metadata + Table + + + + Writes a LocalScope table + + Writer + Metadata + Table + + + + Writes a LocalVariable table + + Writer + Metadata + Table + + + + Writes a LocalConstant table + + Writer + Metadata + Table + + + + Writes a ImportScope table + + Writer + Metadata + Table + + + + Writes a StateMachineMethod table + + Writer + Metadata + Table + + + + Writes a CustomDebugInformation table + + Writer + Metadata + Table + + + + flags + + + + + Preserves all rids in the TypeRef table + + + + + Preserves all rids in the TypeDef table + + + + + Preserves all rids in the Field table + + + + + Preserves all rids in the Method table + + + + + Preserves all rids in the Param table + + + + + Preserves all rids in the MemberRef table + + + + + Preserves all rids in the StandAloneSig table + + + + + Preserves all rids in the Event table + + + + + Preserves all rids in the Property table + + + + + Preserves all rids in the TypeSpec table + + + + + Preserves all rids in the MethodSpec table + + + + + Preserves all method rids, i.e., Method, MemberRef and + MethodSpec rids. + + + + + Preserves all rids in the following tables: TypeRef, TypeDef, + Field, Method, Param, MemberRef, StandAloneSig, + Event, Property, TypeSpec, MethodSpec + + + + + Preserves all offsets in the #Strings heap (the original #Strings heap will be saved + in the new file). Type names, field names, and other non-user strings are stored + in the #Strings heap. + + + + + Preserves all offsets in the #US heap (the original #US heap will be saved + in the new file). User strings (referenced by the ldstr instruction) are stored in + the #US heap. + + + + + Preserves all offsets in the #Blob heap (the original #Blob heap will be saved + in the new file). Custom attributes, signatures and other blobs are stored in the + #Blob heap. + + + + + Preserves the extra data that is present after the original signature in the #Blob + heap. This extra data shouldn't be present but might be present if an obfuscator + has added this extra data and is eg. using it to decrypt stuff. + + + + + Preserves as much as possible + + + + + The original method body's max stack field should be used and a new one should not + be calculated. + + + + + Always create the #GUID heap even if it's empty + + + + + Always create the #Strings heap even if it's empty + + + + + Always create the #US heap even if it's empty + + + + + Always create the #Blob heap even if it's empty + + + + + Sort the InterfaceImpl table the same way Roslyn sorts it. Roslyn doesn't sort it + according to the ECMA spec, see https://github.com/dotnet/roslyn/issues/3905 + + + + + Don't write method bodies + + + + + Don't write .NET resources + + + + + Don't write field data + + + + + Serialized type names stored in custom attributes are optimized if the types + exist in the core library (eg. mscorlib/System.Private.CoreLib). + Instead of storing type-name + assembly-name, only type-name is stored. This results in + slightly smaller assemblies. +
    +
    + If it's a type in the current module, the type name is optimized and no assembly name is stored in the custom attribute. +
    +
    + This is disabled by default. It's safe to enable if the reference core assembly + is the same as the runtime core assembly (eg. it's mscorlib.dll and .NET Framework, + but not .NET Core / .NET Standard). +
    +
    + + + Metadata heaps event args + + + + + Gets the metadata writer + + + + + Gets all heaps + + + + + Constructor + + Metadata writer + All heaps + + + + options + + + + + Gets/sets the options. This is never null. + + + + + Gets/sets the debug (portable PDB) options. This is never null. + + + + + Gets/sets the options. This is never null. + + + + + Gets/sets the debug (portable PDB) options. This is never null. + + + + + Various options + + + + + Extra heaps to add to the metadata. Also see and + + + + + Raised after all heaps have been added. The caller can sort the list if needed + + + + + Preserves the original order of heaps, and optionally adds all custom heaps to . + + Original module with the heaps + If true, all custom streams are added to + + + + Default constructor + + + + + Constructor + + Flags + + + + Constructor + + Meta data header options + + + + Constructor + + Meta data header options + Flags + + + + Portable PDB metadata kind + + + + + No debugging metadata + + + + + Standalone / embedded portable PDB metadata + + + + + Metadata writer event args + + + + + Gets the metadata writer + + + + + Gets the event + + + + + Constructor + + Writer + Event + + + + Metadata writer progress event args + + + + + Gets the metadata writer + + + + + Gets the progress, 0.0 - 1.0 + + + + + Constructor + + Writer + Progress, 0.0 - 1.0 + + + + .NET meta data + + + + + Raised at various times when writing the metadata + + + + + Raised when the progress is updated + + + + + Gets/sets the logger + + + + + Gets the module + + + + + Gets the constants + + + + + Gets the method body chunks + + + + + Gets the .NET resources + + + + + Gets the MD header + + + + + Gets the tables heap. Access to this heap is not recommended, but is useful if you + want to add random table entries. + + + + + Gets the #Strings heap. Access to this heap is not recommended, but is useful if you + want to add random strings. + + + + + Gets the #US heap. Access to this heap is not recommended, but is useful if + you want to add random user strings. + + + + + Gets the #GUID heap. Access to this heap is not recommended, but is useful if you + want to add random GUIDs. + + + + + Gets the #Blob heap. Access to this heap is not recommended, but is useful if you + want to add random blobs. + + + + + Gets the #Pdb heap. It's only used if it's portable PDB metadata + + + + + Gets all exported methods + + + + + The public key that should be used instead of the one in . + + + + + Creates a instance + + Module + Constants list + Method bodies list + .NET resources list + Options + Debug metadata kind + A new instance + + + + + + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + Gets/sets the bit + + + + + If true, use the original Field RVAs. If it has no RVA, assume it's a new + field value and create a new Field RVA. + + + + + Gets the number of methods that will be written. + + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the new rid + + Value + Its new rid or 0 + + + + Gets the + + Method + The or null if is + null or not a method defined in this module. + + + + Gets a method's local variable signature token + + Method + Locals sig token or 0 + + + + Gets the where the resource data will be stored + + Embedded resource + A instance or null if + is invalid + + + + Gets the where the initial value is stored + + Field + A instance or null if + is invalid + + + + Called when an error is detected + + Error message + Optional message arguments + + + + Called to warn of something + + Warning message + Optional message arguments + + + + Raises + + Event + + + + Raises the progress event + + Base event + Sub progress + + + + Creates the .NET metadata tables + + + + + Updates each Method row's RVA column if it has any code + + + + + Updates the FieldRVA rows + + + + + Initializes all TypeDef, Field, Method, Event, + Property and Param rows. Other tables that are related to these six + tables are also updated. No custom attributes are written yet, though. Method bodies + aren't written either. + + + + + Writes TypeDef, Field, Method, Event, + Property and Param custom attributes and custom debug infos. + + + + + Adds the tokens of all methods in all vtables, if any + + + + + Adds the entry point. It's only needed if it's a since if it's + a , it will have already been added. + + + + + Sorts all unsorted tables except GenericParamConstraint and CustomAttribute + + + + + Initializes the GenericParamConstraint table + + + + + Inserts all custom attribute / custom debug info rows in the tables and sort them + + + + + Writes all method bodies + + + + + Checks whether a list is empty or whether it contains only nulls + + Any type + The list + true if the list is empty or if it contains only nulls, false otherwise + + + + + + + + + + Adds a + + Method signature + Original StandAloneSig token or 0 if none + Its new rid + + + + Adds a + + FIeld signature + Original StandAloneSig token or 0 if none + Its new rid + + + + Adds a + + Value + Its encoded token + + + + Adds a + + Value + Its encoded token + + + + Adds a + + Value + Its encoded token + + + + Adds a + + Value + Its encoded token + + + + Adds a + + Value + Its encoded token + + + + Adds a + + Value + Its encoded token + + + + Adds a NestedType row + + Nested type + Declaring type + + + + Adds a Module row + + Module + Its new rid + + + + Adds a ModuleRef row + + Module ref + Its new rid + + + + Adds an AssemblyRef row + + Assembly ref + Its new rid + + + + Adds an Assembly row + + Assembly + The public key that should be used + Its new rid + + + + Adds generic parameters + + New token of owner + All generic params + + + + Adds a generic param + + New token of owner + Generic paramater + + + + Adds generic parameter constraints + + New rid of owner generic param + Its constraints + + + + Adds a generic parameter constraint + + New rid of owner generic param + Generic parameter constraint + + + + Adds a InterfaceImpl row + + New rid of owner + All interfaces + + + + Adds a FieldLayout row + + Owner field + + + + Adds a FieldMarshal row + + New owner token + Owner + + + + Adds a FieldRVA row + + The field + + + + Adds a ImplMap row + + New owner token + Owner + + + + Adds a Constant row + + New owner token + Owner + + + + Adds a DeclSecurity row + + New owner token + All DeclSecurity rows + + + + Adds MethodSemantics rows + + Event + + + + Adds MethodSemantics rows + + Property + + + + Adds a ClassLayout row + + Type + + + + Adds a File row + + File + Its new rid + + + + Adds a ExportedType row + + Exported type + Its new rid + + + + Gets a #Blob offset of a type signature + + Type sig + Extra data to append the signature if + is true. + #Blob offset + + + + Gets a #Blob offset of a calling convention signature + + Signature + #Blob offset + + + + Adds a CustomAttribute row + + Owner table + New owner rid + Onwer + + + + Adds a CustomDebugInformation row + + Owner table + New owner rid + Onwer + + + + Writes the portable PDB to . + + Output stream + Entry point token + Updated with the offset of the 20-byte PDB ID. The caller is responsible for initializing it with the PDB ID + + + + + + + + + + + + + Called before any other methods + + + + + Gets all s that should be saved in the meta data + + + + + Initializes TypeDef rids and creates raw rows, but does not initialize + any columns. + + + + + Allocates Field, Method, Property, Event, Param: + rid and raw row, but doesn't initialize the raw row. + Initializes TypeDef columns: FieldList, MethodList. + Initializes Method column: ParamList. + Initializes and . + + + + + Adds a . Its custom attributes are also added. + + Type reference + Its new rid + + + + Adds a . Its custom attributes are also added. + + Type spec + Its new rid + + + + Adds a . Its custom attributes are also added. + + Member ref + Its new rid + + + + Adds a . Its custom attributes are also added. + + Stand alone sig + Its new rid + + + + Adds a . Its custom attributes are also added. + + Method spec + Its new rid + + + + Called before sorting the CustomAttribute table. This is the last time anything + can be inserted into this table. + + + + + Called after everything has been initialized. The sub class can initialize more + rows if necessary or do nothing. After this method has been called, nothing else + can be added. + + + + + Should be called before all chunks get an RVA + + + + + + + + + + + + + + + + + Sorts the s + + All s + A sorted list + + + + All events + + + + + Creating the tables has just begun + + + + + Before allocating all TypeDef RIDs + + + + + Before allocating all MemberDef RIDs + + + + + The rids of types, fields, methods, events, properties and parameters are + now known. + + + + + The tables and rows of all types, fields, methods, events, properties and parameters + have been initialized. Method body RVAs are still not known, and no method has been + written yet. + + + + + Before sorting most tables + + + + + Most of the tables that should be sorted have been sorted. The CustomAttribute + table is still unsorted since it hasn't been created yet. + + + + + Custom attributes of all types, fields, methods, events, properties and parameters + have now been written. + + + + + All resources are about to be added to the .NET resources table + + + + + All resources have been added to the .NET resources table + + + + + All method bodies are about to be written + + + + + All method bodies have been written. Their RVAs are still not known. + + + + + All tables are now sorted, including the CustomAttribute table. + + + + + All tables have been created and all rows populated. The only columns that haven't + been initialized yet are the ones that are RVAs. + + + + + options + + + + + Default version string + + + + + Default header signature + + + + + MD header signature. Default value is + + + + + Major version. Default is 1. MS' CLR supports v0.x (x >= 19) and v1.1, nothing else. + + + + + Minor version. Default is 1. + + + + + Reserved and should be 0. + + + + + Version string. Default is . It's stored as a + zero-terminated UTF-8 string. Length should be <= 255 bytes. + + + + + Storage flags should be 0 + + + + + Reserved and should be 0 + + + + + Creates portable PDB v1.0 options + + + + + + Meta data header. IMAGE_COR20_HEADER.Metadata points to this header. + + + + + + + + + + + Gets/sets the heaps + + + + + Default constructor + + + + + Constructor + + Options + + + + + + + + + + + + + + + + Method body chunk + + + + + + + + + + + Gets the code + + + + + Gets the extra sections (exception handlers) or null + + + + + Gets the token of the locals + + + + + true if it's a fat body + + + + + true if it's a tiny body + + + + + true if there's an extra section + + + + + Constructor + + Code + + + + Constructor + + Code + Extra sections or null + + + + Constructor + + Code + Extra sections or null + Token of locals + + + + Gets the approximate size of the method body (code + exception handlers) + + + + + + + + + + + + + + + + + + + + + + + Stores all method body chunks + + + + + + + + + + + Gets the number of bytes saved by re-using method bodies + + + + + Constructor + + true if bodies can be shared + + + + Adds a and returns the one that has been cached + + The method body + The cached method body + + + Removes the specified method body from this chunk + The method body + if the method body is removed + + + + + + + + + + + + + + + + Returns tokens of token types, strings and signatures + + + + + Gets the token of + + A token type or a string or a signature + The token + + + + Gets a StandAloneSig token + + All locals + The original token or 0 if none + A StandAloneSig token or 0 if is + empty. + + + + Writes CIL method bodies + + + + + Gets the code as a byte array. This is valid only after calling . + The size of this array is not necessarily a multiple of 4, even if there are exception + handlers present. See also + + + + + Gets the extra sections (exception handlers) as a byte array or null if there + are no exception handlers. This is valid only after calling + + + + + Gets the token of the locals + + + + + Constructor + + Helps this instance + The CIL method body + + + + Constructor + + Helps this instance + The CIL method body + Keep the original max stack value that has been initialized + in + + + + Writes the method body + + + + + Gets the code and (possible) exception handlers in one array. The exception handlers + are 4-byte aligned. + + The code and any exception handlers + + + + + + + + + + + + + + + + + + + + + + + + + Base class of all CIL method body writers + + + + + + + + + + + true if there was at least one error + + + + + Constructor + + All instructions + All exception handlers + + + + Called when an error is detected (eg. a null pointer). The error can be + ignored but the method won't be valid. + + Error message + + + + Called when an error is detected (eg. a null pointer). The error can be + ignored but the method won't be valid. + + Error message + + + + Gets max stack value + + + + + Gets the offset of an instruction + + The instruction + The offset or 0 if is null or not + present in the list of all instructions. + + + + Initializes instruction offsets and returns the total code size + + Size of code + + + + Gets the size of an instruction + + The instruction + Size of the instruction in bytes + + + + Writes all instructions to at its current offset + + The instruction writer + Number of bytes written + + + + Gets the current offset in the instruction stream. This offset is relative to + the first written instruction. + + The instruction writer + Current offset, relative to the first written instruction + + + + Writes an instruction + + The instruction writer + The instruction + + + + Writes an instruction's opcode + + The instruction writer + The instruction + + + + Writes an instruction's operand + + The instruction writer + The instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes an operand + + Instruction writer + Instruction + + + + Writes a operand + + Instruction writer + Instruction + + + + Writes a operand + + Instruction writer + Instruction + + + + Writes a operand + + Instruction writer + Instruction + + + + Writes a operand + + Instruction writer + Instruction + + + + options + + + + + Constructor + + The module + + + + Writes a .NET PE file. See also + + + + + + + + + + + Gets/sets the writer options. This is never null + + + + + Gets all s. The reloc section must be the last section, so use if you need to append a section + + + + + Adds to the sections list, but before the reloc section which must be last + + New section to add to the list + + + + Gets the .text section + + + + + Gets the .sdata section + + + + + Gets the .rsrc section or null if none + + + + + Gets the .reloc section + + + + + Gets the PE headers + + + + + Gets the IAT or null if there's none + + + + + Gets the .NET header + + + + + Gets the import directory or null if there's none + + + + + Gets the startup stub or null if there's none + + + + + Gets the reloc directory or null if there's none + + + + + Constructor + + The module + + + + Constructor + + The module + Options or null + + + + + + + + + + Module writer event args + + + + + Gets the writer ( or ) + + + + + Gets the event + + + + + Constructor + + Writer + Event + + + + Module writer progress event args + + + + + Gets the writer ( or ) + + + + + Gets the progress, 0.0 - 1.0 + + + + + Constructor + + Writer + Progress, 0.0 - 1.0 + + + + Content ID + + + + + Gets the GUID + + + + + Gets the timestamp + + + + + Constructor + + Guid + Timestamp + + + + Event handler + + Event args type + Sender + Event args + + + + PDB writer options + + + + + No bit is set + + + + + Don't use Microsoft.DiaSymReader.Native. This is a NuGet package with an updated Windows PDB reader/writer implementation, + and if it's available at runtime, dnlib will try to use it. If this option is set, dnlib won't use it. + You have to add a reference to the NuGet package if you want to use it, dnlib has no reference to the NuGet package. + + This is only used if it's a Windows PDB file. + + + + + Don't use diasymreader.dll's PDB writer that is shipped with .NET Framework. + + This is only used if it's a Windows PDB file. + + + + + Create a deterministic PDB file and add a debug directory entry to the PE file. + + It's ignored if the PDB writer doesn't support it. + + + + + Hash the PDB file and add a PDB checksum debug directory entry to the PE file. + + It's ignored if the PDB writer doesn't support it. + + + + + Common module writer options base class + + + + + Raised at various times when writing the file. The listener has a chance to modify + the file, eg. add extra metadata, encrypt methods, etc. + + + + + Raised when the progress is updated + + + + + Gets/sets the logger. If this is null, any errors result in a + being thrown. To disable this behavior, either + create your own logger or use . + + + + + Gets/sets the writer logger. If this is null, use + . + + + + + Gets/sets the options. This is never null. + + + + + Gets/sets the options. This is never null. + + + + + Gets/sets the options. This is never null. + + + + + If true, Win32 resources aren't written to the output + + + + + Gets/sets the Win32 resources. If this is null, use the module's + Win32 resources if any. + + + + + true to delay sign the assembly. Initialize to the + public key to use, and don't initialize . To generate the + public key from your strong name key file, execute sn -p mykey.snk mypublickey.snk + + + + + Gets/sets the strong name key. When you enhance strong name sign an assembly, + this instance's HashAlgorithm must be initialized to its public key's HashAlgorithm. + You should call + to initialize this property if you use normal strong name signing. + You should call + or + to initialize this property if you use enhanced strong name signing. + + + + + Gets/sets the new public key that should be used. If this is null, use + the public key generated from . If it is also null, + use the module's Assembly's public key. + You should call + or + to initialize this property if you use enhanced strong name signing. + + + + + true if method bodies can be shared (two or more method bodies can share the + same RVA), false if method bodies can't be shared. Don't enable it if there + must be a 1:1 relationship with method bodies and their RVAs. + This is enabled by default and results in smaller files. + + + + + true if the PE header CheckSum field should be updated, false if the + CheckSum field isn't updated. + + + + + true if it's a 64-bit module, false if it's a 32-bit or AnyCPU module. + + + + + Gets/sets the module kind + + + + + true if it should be written as an EXE file, false if it should be + written as a DLL file. + + + + + Set it to true to enable writing a PDB file. Default is false (a PDB file + won't be written to disk). + + + + + PDB writer options. This property is ignored if is false. + + + + + PDB file name. If it's null a PDB file with the same name as the output assembly + will be created but with a PDB extension. must be true or + this property is ignored. + + + + + PDB file name stored in the debug directory, or null to use + + + + + PDB stream. If this is initialized, then you should also set + to the name of the PDB file since the file name must be written to the PE debug directory. + must be true or this property is ignored. + + + + + Gets the PDB content id (portable PDBs). The argument is the PDB stream with the PDB ID zeroed out, + and the 2nd argument is the default timestamp. + This property is ignored if a deterministic PDB file is created or if the PDB checksum is calculated. + + + + + PDB checksum algorithm + + + + + true if an .mvid section should be added to the assembly. Not used by native module writer. + + + + + Constructor + + The module + + + + Initializes and + for normal strong name signing. + + Module + Signature strong name key pair + + + + Initializes and + for enhanced strong name signing (without key migration). See + http://msdn.microsoft.com/en-us/library/hh415055.aspx + + Module + Signature strong name key pair + Signature public key + + + + Initializes and + for enhanced strong name signing (with key migration). See + http://msdn.microsoft.com/en-us/library/hh415055.aspx + + Module + Signature strong name key pair + Signature public key + Identity strong name key pair + Identity public key + + + + Module writer base class + + + + Default alignment of all constants + + + Default alignment of all method bodies + + + Default alignment of all .NET resources + + + Default alignment of the .NET metadata + + + Default Win32 resources alignment + + + Default strong name signature alignment + + + Default COR20 header alignment + + + See + + + See + + + See + + + See + + + See + + + See + + + Offset where the module is written. Usually 0. + + + Debug directory + + + + Strong name signature + + + + + Returns the module writer options + + + + + Gets the destination stream + + + + + Gets the constants + + + + + Gets the method bodies + + + + + Gets the .NET resources + + + + + Gets the .NET metadata + + + + + Gets the Win32 resources or null if there's none + + + + + Gets the strong name signature or null if there's none + + + + + Gets all s. The reloc section must be the last section, so use if you need to append a section + + + + + Adds to the sections list, but before the reloc section which must be last + + New section to add to the list + + + + Gets the .text section + + + + + Gets the .rsrc section or null if there's none + + + + + Gets the debug directory or null if there's none + + + + + true if this is a , false if + this is a . + + + + + null if we're not writing a PDB + + + + + Writes the module to a file + + File name. The file will be truncated if it exists. + + + + Writes the module to a + + Destination stream + + + + Returns the module that is written + + + + + Writes the module to . Event listeners and + have been initialized when this method is called. + + Number of bytes written + + + + Creates the strong name signature if the module has one of the strong name flags + set or wants to sign the assembly. + + + + + Creates the .NET metadata chunks (constants, method bodies, .NET resources, + the metadata, and Win32 resources) + + + + + + Gets the Win32 resources that should be written to the new image or null if none + + + + + Calculates and of all s + + All chunks + Starting file offset + Starting RVA + File alignment + Section alignment + + + + Writes all chunks to + + The writer + All chunks + File offset of first chunk + File alignment + + + + Strong name sign the assembly + + Strong name signature offset + + + + Creates the debug directory if a PDB file should be written + + + + + Write the PDB file. The caller should send the PDB events before and after calling this + method. + + + + + Gets the timestamp stored in the PE header + + + + + + Raises a writer event + + Event + + + + + + + + + + Logs an error message + + Format + Format args + + + + Logs a warning message + + Format + Format args + + + + All / events + + + + + Writing has just begun + + + + + All PE sections have been created + + + + + All chunks have been created + + + + + All chunks have been added to their sections + + + + + Original event: . + Creating the metadata tables has just begun + + + + + Original event: . + Before allocating all TypeDef RIDs + + + + + Original event: . + Before allocating all MemberDef RIDs + + + + + Original event: . + The rids of types, fields, methods, events, properties and parameters are + now known. + + + + + Original event: . + The tables and rows of all types, fields, methods, events, properties and parameters + have been initialized. Method body RVAs are still not known, and no method has been + written yet. + + + + + Original event: . + Before sorting most tables + + + + + Original event: . + Most of the tables that should be sorted have been sorted. The CustomAttribute + table is still unsorted since it hasn't been created yet. + + + + + Original event: . + Custom attributes of all types, fields, methods, events, properties and parameters + have now been written. + + + + + Original event: . + All resources are about to be added to the .NET resources table + + + + + Original event: . + All resources have been added to the .NET resources table + + + + + Original event: . + All method bodies are about to be written + + + + + Original event: . + All method bodies have been written. Their RVAs are still not known. + + + + + Original event: . + All tables are now sorted, including the CustomAttribute table. + + + + + Original event: . + All tables have been created and all rows populated. The only columns that haven't + been initialized yet are the ones that are RVAs. + + + + + This event occurs before the PDB file is written. This event occurs even if no PDB file + will be written. + + + + + The PDB file has been written. This event occurs even if no PDB file has been written. + + + + + This event occurs just before all RVAs and file offsets of the chunks are calculated. + + + + + File offsets and RVAs of all chunks are now known. This includes method body and + field RVAs. Nothing has been written to the destination stream yet. + + + + + This event occurs before all chunks are written to the destination stream, and after + all RVAs and file offsets are known. + + + + + All chunks have been written to the destination stream. + + + + + This event occurs before the strong name signature is calculated. This event + occurs even if the assembly isn't strong name signed. + + + + + This event occurs after the strong name signature has been calculated. This event + occurs even if the assembly isn't strong name signed. + + + + + This event occurs before the checksum in the PE header is updated. This event + occurs even if the checksum isn't updated. + + + + + This event occurs after the checksum in the PE header has been updated. This event + occurs even if the checksum isn't updated. + + + + + Writing has ended + + + + + Thrown when the module writer encounters an unrecoverable error + + + + + Default constructor + + + + + Constructor + + Error message + + + + Constructor + + Error message + Other exception + + + + Constructor + + + + + + + options + + + + + If true, any extra data after the PE data in the original file is also saved + at the end of the new file. Enable this option if some protector has written data to + the end of the file and uses it at runtime. + + + + + If true, keep the original Win32 resources + + + + + Constructor + + Module + true to optimize the image size so it's as small as possible. + Since the file can contain native methods and other native data, we re-use the + original file when writing the new file. If is true, + we'll try to re-use the old method body locations in the original file and + also try to fit the new metadata in the old metadata location. + + + + A module writer that supports saving mixed-mode modules (modules with native code). + The original image will be re-used. See also + + + + The original .NET module + + + All options + + + + Any extra data found at the end of the original file. This is null if there's + no extra data or if is + false. + + + + The original PE sections and their data + + + Original PE image + + + New sections we've added and their data + + + New .text section where we put some stuff, eg. .NET metadata + + + The new COR20 header + + + + New .rsrc section where we put the new Win32 resources. This is null if there + are no Win32 resources or if + is true + + + + + Offset in of the PE checksum field. + + + + + Original PE section + + + + PE section + + + PE section data + + + + Constructor + + PE section + + + + + + + + + + Gets the module + + + + + + + + + + + Gets/sets the writer options. This is never null + + + + + Gets all s + + + + + Gets the original PE sections and their data + + + + + Gets the .text section + + + + + Gets the .rsrc section or null if there's none + + + + + Constructor + + The module + Options or null + + + + + + + + + + Gets the raw section data of the image. The sections are saved in + . + + + + + Creates the PE header "section" + + + + + Saves any data that is appended to the original PE file + + + + + true if image is 64-bit + + + + + Updates the PE header and COR20 header fields that need updating. All sections are + also updated, and the new ones are added. + + + + + Converts to a file offset in the destination stream + + RVA + + + + Gets the entry point + + Updated with entry point (either a token or RVA of native method) + true if it's a managed entry point or there's no entry point, + false if it's a native entry point + + + + .NET resources + + + + + + + + + + + Gets offset of next resource. This offset is relative to the start of + the .NET resources and is always aligned. + + + + + Constructor + + Alignment of all resources + + + + Adds a resource + + The resource data + The resource data + + + + + + + + + + + + + + + + Does not preserve metadata tokens + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Pdb heap + + + + + + + + Gets the PDB ID. This is always 20 bytes in size. + + + + + Gets/sets the entry point token + + + + + Gets the offset of the 20-byte PDB ID + + + + + Gets/sets the referenced type system tables + + + + + Gets the type system table rows. This table has 64 elements. + + + + + Constructor + + + + + + + + + + + options + + + + + Default DLL characteristics + + + + + Default subsystem value + + + + + Default major linker version. Roslyn C# defaults to 0x30, and Roslyn VB defaults to 0x50. + + + + + Default minor linker version + + + + + IMAGE_FILE_HEADER.Machine value + + + + + IMAGE_FILE_HEADER.TimeDateStamp value + + + + + IMAGE_FILE_HEADER.PointerToSymbolTable value + + + + + IMAGE_FILE_HEADER.NumberOfSymbols value + + + + + IMAGE_FILE_HEADER.Characteristics value. bit + is ignored and set/cleared depending on whether it's a EXE or a DLL file. + + + + + IMAGE_OPTIONAL_HEADER.MajorLinkerVersion value + + + + + IMAGE_OPTIONAL_HEADER.MinorLinkerVersion value + + + + + IMAGE_OPTIONAL_HEADER.ImageBase value + + + + + IMAGE_OPTIONAL_HEADER.SectionAlignment value + + + + + IMAGE_OPTIONAL_HEADER.FileAlignment value + + + + + IMAGE_OPTIONAL_HEADER.MajorOperatingSystemVersion value + + + + + IMAGE_OPTIONAL_HEADER.MinorOperatingSystemVersion value + + + + + IMAGE_OPTIONAL_HEADER.MajorImageVersion value + + + + + IMAGE_OPTIONAL_HEADER.MinorImageVersion value + + + + + IMAGE_OPTIONAL_HEADER.MajorSubsystemVersion value + + + + + IMAGE_OPTIONAL_HEADER.MinorSubsystemVersion value + + + + + IMAGE_OPTIONAL_HEADER.Win32VersionValue value + + + + + IMAGE_OPTIONAL_HEADER.Subsystem value + + + + + IMAGE_OPTIONAL_HEADER.DllCharacteristics value + + + + + IMAGE_OPTIONAL_HEADER.SizeOfStackReserve value + + + + + IMAGE_OPTIONAL_HEADER.SizeOfStackCommit value + + + + + IMAGE_OPTIONAL_HEADER.SizeOfHeapReserve value + + + + + IMAGE_OPTIONAL_HEADER.SizeOfHeapCommit value + + + + + IMAGE_OPTIONAL_HEADER.LoaderFlags value + + + + + IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes value + + + + + Creates a new time date stamp using current time + + A new time date stamp + + + + DOS and PE headers + + + + + Gets/sets the native entry point + + + + + Gets/sets the COR20 header + + + + + Gets/sets the IAT + + + + + Gets/sets the + + + + + Gets/sets the Win32 resources + + + + + Gets/sets the relocation directory + + + + + Gets/sets the debug directory + + + + + Gets the image base + + + + + Gets/sets a value indicating whether this is a EXE or a DLL file + + + + + + + + + + + Gets the section alignment + + + + + Gets the file alignment + + + + + Gets/sets the s + + + + + Default constructor + + + + + Constructor + + Options + + + + + + + + + + + + + + + + Calculates the PE checksum and writes it to the checksum field + + Writer + Length of PE file + + + + A PE section + + + + + Gets the name + + + + + Gets the Characteristics + + + + + true if this is a code section + + + + + true if this is an initialized data section + + + + + true if this is an uninitialized data section + + + + + Constructor + + Section name + Section characteristics + + + + Writes the section header to at its current position. + Returns aligned virtual size (aligned to ) + + Writer + File alignment + Section alignment + Current + + + + Preserves metadata tokens + + + + + Its real rid + + + + + Its logical rid or real rid. If the ptr table exists (eg. MethodPtr), then it's + an index into it, else it's the real rid. + + + + + Gets total number of defs in the list. It does not necessarily return + the table size. Use for that. + + + + + Gets the number of rows that need to be created in the table + + + + + Returns true if the ptr table (eg. MethodPtr) is needed + + + + + Sorts the table + + Comparer + + + + Adds a def. must be called after adding the last def. + + The def + Collection position + + + + Must be called after 'ing the last def + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reserves rows in TypeRef, MemberRef, StandAloneSig, + TypeSpec and MethodSpec where we will store the original rows + to make sure they get the same rid. Any user created rows will be stored at + the end of each table. + + + + + Adds any non-referenced rows that haven't been added yet but are present in + the original file. If there are any non-referenced rows, it's usually a sign + that an obfuscator has encrypted one or more methods or that it has added + some rows it uses to decrypt something. + + + + + + + + Re-uses all Field rows which aren't owned by any type due to the fields + having been deleted by the user. The reason we must do this is that the + FieldPtr and Field tables must be the same size. + + + + + Re-uses all Method rows which aren't owned by any type due to the methods + having been deleted by the user. The reason we must do this is that the + MethodPtr and Method tables must be the same size. + + + + + Re-uses all Param rows which aren't owned by any type due to the params + having been deleted by the user. The reason we must do this is that the + ParamPtr and Param tables must be the same size. + This method must be called after since + this method will create more methods at the end of the Method table. + + + + + Re-uses all Event rows which aren't owned by any type due to the events + having been deleted by the user. The reason we must do this is that the + EventPtr and Event tables must be the same size. + + + + + Re-uses all Property rows which aren't owned by any type due to the properties + having been deleted by the user. The reason we must do this is that the + PropertyPtr and Property tables must be the same size. + + + + + Creates a dummy TypeDef at the end of the TypeDef table that will own + dummy methods and fields. These dummy methods and fields are only created if the size + of the ptr table is less than the size of the non-ptr table (eg. size MethodPtr table + is less than size Method table). The only reason the ptr table would be smaller than + the non-ptr table is when some field/method has been deleted and we must preserve + all method/field rids. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Relocations directory + + + + + + + + + + + Constructor + + Machine + + + + + + + + + + + + + + + + Adds a relocation + + RVA of location + + + + Adds a relocation + + Chunk or null. If it's null, is the RVA + Offset relative to the start of , or if is null, this is the RVA + + + + Length of section + + + + + Section characteristics + + + + + Constructor + + Length of section + Section characteristics + + + + Calculates the optional header section sizes + + + + + Helps map s to tokens + + + + + Returns a TypeDefOrRef encoded token + + A TypeDefOrRef type + + + + Writes signatures + + + + + Write a signature + + Helper + The type + The signature as a byte array + + + + Write a signature + + Helper + The signature + The signature as a byte array + + + + + + + Stores the instruction that jumps to _CorExeMain/_CorDllMain + + + + + Gets/sets the + + + + + Gets/sets the + + + + + + + + + + + Gets the address of the JMP instruction + + + + + Constructor + + Reloc directory + Machine + Error logger + + + + + + + + + + + + + + + + #Strings heap + + + + + + + + Populates strings from an existing (eg. to preserve + string offsets) + + The #Strings stream with the original content + + + + Adds a string to the #Strings heap. The returned value is not necessarily an offset in + the #Strings heap. Call to get the offset. + + The string + The offset id. This is not a #Strings offset. Call to get the #Strings offset + + + + Gets the offset of a string in the #Strings heap. This method can only be called after + all strings have been added. + + Offset id returned by + + + + + Adds a string to the #Strings heap, but does not re-use an existing position + + The string + The offset of the string in the #Strings heap + + + + + + + + + + + + + + + + + + + Strong name signature chunk + + + + + + + + + + + Constructor + + Size of strong name signature + + + + + + + + + + + + + + + + options + + + + + Should be 0 + + + + + Major version number. Default is 2. Valid versions are v1.0 (no generics), + v1.1 (generics are supported), or v2.0 (recommended). + + + + + Minor version number. Default is 0. + + + + + Force #- or #~ stream. Default value is null and recommended because the correct + tables stream will be used. true will force #- (Edit N' Continue) + stream, and false will force #~ (normal compressed) stream. + + + + + Extra data to write + + + + + Log2Rid to write + + + + + true if there are deleted s, s, + s, s, s and/or + s. + + + + + Creates portable PDB v1.0 options + + + + + + Contains all .NET tables + + + + + + + + + + + All tables + + + + + + + + + + + true if the Edit 'N Continue name will be used (#-) + + + + + true if any rows have been deleted (eg. a deleted TypeDef, Method, Field, etc. + Its name has been renamed to _Deleted). + + + + + true if #Strings heap size > 0xFFFF + + + + + true if #GUID heap size > 0xFFFF + + + + + true if #Blob heap size > 0xFFFF + + + + + Constructor + + Metadata owner + Options + + + + + + + + + + + + + + + + Calculates the length. This will set all MD tables to read-only. + + + + + + + + + + + Re-uses existing chunks to save space + + Chunk type + + + + Default constructor + + + + + Constructor + + Compares the chunk type + + + + + + + Adds a if not already present + + The chunk to add or null if none + Chunk alignment + The original input if it wasn't present, or the cached one + + + + #US heap + + + + + + + + Populates strings from an existing (eg. to preserve + string tokens) + + The #US stream with the original content + + + + Adds a string to the #US heap + + The string + The offset of the string in the #US heap + + + + Adds a string to the #US heap + + The string + The offset of the string in the #US heap + + + + + + + + + + + + + + + + + + + Writes Win32 resources + + + + + + + + + + + Constructor + + Win32 resources + + + + Returns the and of a + . must have been called. + + A + Updated with the file offset + Updated with the RVA + true if is valid and + and have been updated. false + if is not part of the Win32 resources. + + + + Returns the of a . + must have been called. + + A + The file offset or 0 if is invalid + + + + Returns the of a . + must have been called. + + A + The RVA or 0 if is invalid + + + + Returns the and of a + . must have been called. + + A + Updated with the file offset + Updated with the RVA + true if is valid and + and have been updated. false + if is not part of the Win32 resources. + + + + Returns the of a . + must have been called. + + A + The file offset or 0 if is invalid + + + + Returns the of a . + must have been called. + + A + The RVA or 0 if is invalid + + + + Returns the and of a + . must have been called. + + A + Updated with the file offset + Updated with the RVA + true if is valid and + and have been updated. false + if is not part of the Win32 resources. + + + + Returns the of a . + must have been called. + + A + The file offset or 0 if is invalid + + + + Returns the of a . + must have been called. + + A + The RVA or 0 if is invalid + + + + Returns the and of a + 's name. must have been + called. + + The name of a + Updated with the file offset + Updated with the RVA + true if is valid and + and have been updated. false + if is not part of the Win32 resources. + + + + Returns the of a 's name. + must have been called. + + The name of a + The file offset or 0 if is invalid + + + + Returns the of a 's name. + must have been called. + + The name of a + The RVA or 0 if is invalid + + + + + + + + + + + + + + + + A that reads from a byte array + + + + + The filename or null if the data is not from a file + + + + + Gets the total length of the data + + + + + Creates a instance + + Data + The filename or null if the data is not from a file + + + + + Creates a data reader + + Data + + + + + Creates a data reader + + Offset of data + Length of data + + + + + This method doesn't need to be called since a has nothing that must be cleaned up + + + + + Thrown by a when it can't read data or if the caller tries to set an invalid offset + + + + + Reads data + + + + + Gets the start offset of the data + + + + + Gets the end offset of the data, not inclusive + + + + + Gets the total length of the data + + + + + Gets the current offset. This is between and (inclusive) + + + + + Gets/sets the position relative to + + + + + Gets the number of bytes that can be read without throwing an exception + + + + + Constructor + + Stream + Start offset of data + Length of data + + + + Resets the reader so it points to the start of the data + + + + + Creates a new reader that can access a smaller part of this reader + + Start position relative to + Length of data + + + + + Creates a new reader that can access everything from to the end of the data + + Start position relative to + + + + + Creates a new reader that can access a smaller part of this reader + + Start position relative to + Length of data + + + + + Creates a new reader that can access everything from to the end of the data + + Start position relative to + + + + + Checks if it's possible to read bytes + + Length of data + + + + + Checks if it's possible to read bytes + + Length of data + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a + + + + + + Reads a UTF-16 encoded + + Number of characters to read + + + + + Reads bytes + + Destination pointer + Number of bytes to read + + + + Reads bytes + + Destination array + Destination index + Number of bytes to read + + + + Reads bytes + + Number of bytes to read + + + + + Reads a compressed + + Uncompressed + + + + + Reads a compressed + + + + + + Reads a compressed + + Uncompressed + + + + + Reads a compressed + + + + + + Reads a 7-bit encoded integer + + + + + + Reads a 7-bit encoded integer + + + + + + Reads a serialized UTF-8 string + + + + + + Reads a serialized string + + Encoding + + + + + Returns all data without updating the current position + + + + + + Returns the remaining data + + + + + + Reads all bytes until a terminating byte or returns null if wasn't found. + If found, the current offset is incremented by the length of the returned data + + Terminating byte value + + + + + Reads a zero-terminated UTF-8 string or returns null if the string couldn't be read. + If successful, the current offset is incremented past the terminating zero. + + + + + + Reads a zero-terminated string or returns null if the string couldn't be read. + If successful, the current offset is incremented past the terminating zero. + + Encoding + + + + + Reads a UTF-8 encoded string + + Number of bytes to read (not characters) + + + + + Reads a string + + Number of bytes to read (not characters) + Encoding + + + + + Creates a that can access this content. The caller doesn't have to dispose of the returned stream. + + + + + + Copies the data, starting from , to + + Destination + Number of bytes written + + + + Copies the data, starting from , to + + Destination + Temp buffer during writing + Number of bytes written + + + + Copies the data, starting from , to + + Destination + Number of bytes written + + + + Copies the data, starting from , to + + Destination + Temp buffer during writing + Number of bytes written + + + + Copies the data, starting from , to + + Destination + Number of bytes written + + + + Copies the data, starting from , to + + Destination + Temp buffer during writing + Number of bytes written + + + + Creates s that can read its data. + + This factory class is thread safe and its data can be read by on any thread. + + + + + The filename or null if the data is not from a file + + + + + Gets the total length of the data + + + + + Creates a data reader that can read all data + + + + + + Creates a data reader + + Offset of data + Length of data + + + + + Creates a data reader + + Offset of data + Length of data + + + + + Creates a data reader + + Offset of data + Length of data + + + + + Creates a data reader + + Offset of data + Length of data + + + + + Creates a data reader + + Stream + Offset of data + Length of data + + + + + Raised when all cached s created by this instance must be recreated + + + + + Disposes of this instance + + + + + This class is used by a . The instance + verifies that all input are valid before calling any methods in this class. + This class is thread safe. + + + + + Reads bytes + + Offset of data + Destination pointer + Number of bytes to read + + + + Reads bytes + + Offset of data + Destination array + Destination index + Number of bytes to read + + + + Reads a + + Offset of data + + + + + Reads a + + Offset of data + + + + + Reads a + + Offset of data + + + + + Reads a + + Offset of data + + + + + Reads a + + Offset of data + + + + + Reads a + + Offset of data + + + + + Reads a + + Offset of data + + + + + Reads a UTF-16 encoded + + Offset of data + Number of characters to read + + + + + Reads a string + + Offset of data + Length of string in bytes + Encoding + + + + + Gets the data offset of a byte or returns false if the byte wasn't found + + Offset of data + End offset of data (not inclusive) + Byte value to search for + Offset of the byte if found + + + + + Creates s + + + + + Creates a that reads from native memory + + Pointer to data + + + + + Creates a that reads from a byte array + + Data + + + + + Represents a file offset + + + + + Extension methods + + + + + Align up + + this + Alignment + + + + Align up + + this + Alignment + + + + Base class for classes needing to implement IFileSection + + + + + The start file offset of this section + + + + + Size of the section + + + + + + + + + + + Set to 's current position + + The reader + + + + Set according to 's current position + + The reader + + + + Represents a section in a file + + + + + Start offset of the section in the file + + + + + End offset of the section in the file. This is one byte after the last + valid offset in the section. + + + + + Creates s that read memory mapped data + + + + + The filename or null if the data is not from a file + + + + + Gets the total length of the data + + + + + Raised when all cached s created by this instance must be recreated + + + + + Creates a data reader + + Offset of data + Length of data + + + + + Cleans up and frees all allocated memory + + + + + true if memory mapped I/O is enabled + + + + + Call this to disable memory mapped I/O. This must only be called if no other code is + trying to access the memory since that could lead to an exception. + + + + + Creates s that read native memory + + + + + The filename or null if the data is not from a file + + + + + Gets the total length of the data + + + + + Creates a instance + + Pointer to data + Length of data + The filename or null if the data is not from a file + + + + + Creates a data reader + + Offset of data + Length of data + + + + + This method doesn't need to be called since this instance doesn't own the native memory + + + + + IMAGE_FILE_HEADER.Characteristics flags + + + + Relocation info stripped from file. + + + File is executable (i.e. no unresolved externel references). + + + Line nunbers stripped from file. + + + Local symbols stripped from file. + + + Agressively trim working set + + + App can handle >2gb addresses + + + + + + Bytes of machine word are reversed. + + + 32 bit word machine. + + + Debugging info stripped from file in .DBG file + + + If Image is on removable media, copy and run from the swap file. + + + If Image is on Net, copy and run from the swap file. + + + System File. + + + File is a DLL. + + + File should only be run on a UP machine + + + Bytes of machine word are reversed. + + + + IMAGE_OPTIONAL_HEADER.DllCharacteristics + + + + + + + + + + + + + + + + + + + Image can handle a high entropy 64-bit virtual address space. + + + DLL can move. + + + Code Integrity Image + + + Image is NX compatible + + + Image understands isolation and doesn't want it + + + Image does not use SEH. No SE handler may reside in this image + + + Do not bind this image. + + + Image should execute in an AppContainer + + + Driver uses WDM model + + + Image supports Control Flow Guard. + + + + + + + Interface for PE optional header classes + + + + + Returns the Magic field + + + + + Returns the MajorLinkerVersion field + + + + + Returns the MinorLinkerVersion field + + + + + Returns the SizeOfCode field + + + + + Returns the SizeOfInitializedData field + + + + + Returns the SizeOfUninitializedData field + + + + + Returns the AddressOfEntryPoint field + + + + + Returns the BaseOfCode field + + + + + Returns the BaseOfData field + + + + + Returns the ImageBase field + + + + + Returns the SectionAlignment field + + + + + Returns the FileAlignment field + + + + + Returns the MajorOperatingSystemVersion field + + + + + Returns the MinorOperatingSystemVersion field + + + + + Returns the MajorImageVersion field + + + + + Returns the MinorImageVersion field + + + + + Returns the MajorSubsystemVersion field + + + + + Returns the MinorSubsystemVersion field + + + + + Returns the Win32VersionValue field + + + + + Returns the SizeOfImage field + + + + + Returns the SizeOfHeaders field + + + + + Returns the CheckSum field + + + + + Returns the Subsystem field + + + + + Returns the DllCharacteristics field + + + + + Returns the SizeOfStackReserve field + + + + + Returns the SizeOfStackCommit field + + + + + Returns the SizeOfHeapReserve field + + + + + Returns the SizeOfHeapCommit field + + + + + Returns the LoaderFlags field + + + + + Returns the NumberOfRvaAndSizes field + + + + + Returns the DataDirectories field. This array contains exactly 16 elements. + + + + + Represents the IMAGE_DATA_DIRECTORY PE section + + + + + Returns the IMAGE_DATA_DIRECTORY.VirtualAddress field + + + + + Returns the IMAGE_DATA_DIRECTORY.Size field + + + + + Default constructor + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + A IMAGE_DEBUG_DIRECTORY + + + + + Gets the characteristics (reserved) + + + + + Gets the timestamp + + + + + Gets the major version + + + + + Gets the minor version + + + + + Gets the type + + + + + Gets the size of data + + + + + RVA of the data + + + + + File offset of the data + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Image debug type, see IMAGE_DEBUG_TYPE_* in winnt.n + + + + + Contains PDB info + + + + + It's a deterministic (reproducible) PE file + + + + + Embedded portable PDB data + + + + + Checksum of the PDB file. 0 or more entries allowed. + + + + + Represents the IMAGE_DOS_HEADER PE section + + + + + File offset of the NT headers + + + + + Constructor + + PE file reader + Verify section + Thrown if verification fails + + + + Represents the IMAGE_FILE_HEADER PE section + + + + + Returns the IMAGE_FILE_HEADER.Machine field + + + + + Returns the IMAGE_FILE_HEADER.NumberOfSections field + + + + + Returns the IMAGE_FILE_HEADER.TimeDateStamp field + + + + + Returns the IMAGE_FILE_HEADER.PointerToSymbolTable field + + + + + Returns the IMAGE_FILE_HEADER.NumberOfSymbols field + + + + + Returns the IMAGE_FILE_HEADER.SizeOfOptionalHeader field + + + + + Returns the IMAGE_FILE_HEADER.Characteristics field + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Represents the IMAGE_NT_HEADERS PE section + + + + + Returns the IMAGE_NT_HEADERS.Signature field + + + + + Returns the IMAGE_NT_HEADERS.FileHeader field + + + + + Returns the IMAGE_NT_HEADERS.OptionalHeader field + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Creates an IImageOptionalHeader + + PE file reader pointing to the start of the optional header + Verify section + The created IImageOptionalHeader + Thrown if verification fails + + + + Represents the IMAGE_OPTIONAL_HEADER (32-bit) PE section + + + + + Returns the IMAGE_OPTIONAL_HEADER.Magic field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MajorLinkerVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MinorLinkerVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfCode field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfInitializedData field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfUninitializedData field + + + + + Returns the IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint field + + + + + Returns the IMAGE_OPTIONAL_HEADER.BaseOfCode field + + + + + Returns the IMAGE_OPTIONAL_HEADER.BaseOfData field + + + + + Returns the IMAGE_OPTIONAL_HEADER.ImageBase field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SectionAlignment field + + + + + Returns the IMAGE_OPTIONAL_HEADER.FileAlignment field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MajorOperatingSystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MinorOperatingSystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MajorImageVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MinorImageVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MajorSubsystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.MinorSubsystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER.Win32VersionValue field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfImage field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfHeaders field + + + + + Returns the IMAGE_OPTIONAL_HEADER.CheckSum field + + + + + Returns the IMAGE_OPTIONAL_HEADER.Subsystem field + + + + + Returns the IMAGE_OPTIONAL_HEADER.DllCharacteristics field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfStackReserve field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfStackCommit field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfHeapReserve field + + + + + Returns the IMAGE_OPTIONAL_HEADER.SizeOfHeapCommit field + + + + + Returns the IMAGE_OPTIONAL_HEADER.LoaderFlags field + + + + + Returns the IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes field + + + + + Returns the IMAGE_OPTIONAL_HEADER.DataDirectories field + + + + + Constructor + + PE file reader pointing to the start of this section + Total size of this optional header (from the file header) + Verify section + Thrown if verification fails + + + + Represents the IMAGE_OPTIONAL_HEADER64 PE section + + + + + Returns the IMAGE_OPTIONAL_HEADER64.Magic field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MajorLinkerVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MinorLinkerVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfCode field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfInitializedData field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfUninitializedData field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.AddressOfEntryPoint field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.BaseOfCode field + + + + + Returns 0 since BaseOfData is not present in IMAGE_OPTIONAL_HEADER64 + + + + + Returns the IMAGE_OPTIONAL_HEADER64.ImageBase field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SectionAlignment field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.FileAlignment field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MajorOperatingSystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MinorOperatingSystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MajorImageVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MinorImageVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MajorSubsystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.MinorSubsystemVersion field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.Win32VersionValue field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfImage field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfHeaders field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.CheckSum field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.Subsystem field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.DllCharacteristics field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfStackReserve field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfStackCommit field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfHeapReserve field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.SizeOfHeapCommit field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.LoaderFlags field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.NumberOfRvaAndSizes field + + + + + Returns the IMAGE_OPTIONAL_HEADER64.DataDirectories field + + + + + Constructor + + PE file reader pointing to the start of this section + Total size of this optional header (from the file header) + Verify section + Thrown if verification fails + + + + Represents the IMAGE_SECTION_HEADER PE section + + + + + Returns the human readable section name, ignoring everything after + the first nul byte + + + + + Returns the IMAGE_SECTION_HEADER.Name field + + + + + Returns the IMAGE_SECTION_HEADER.VirtualSize field + + + + + Returns the IMAGE_SECTION_HEADER.VirtualAddress field + + + + + Returns the IMAGE_SECTION_HEADER.SizeOfRawData field + + + + + Returns the IMAGE_SECTION_HEADER.PointerToRawData field + + + + + Returns the IMAGE_SECTION_HEADER.PointerToRelocations field + + + + + Returns the IMAGE_SECTION_HEADER.PointerToLinenumbers field + + + + + Returns the IMAGE_SECTION_HEADER.NumberOfRelocations field + + + + + Returns the IMAGE_SECTION_HEADER.NumberOfLinenumbers field + + + + + Returns the IMAGE_SECTION_HEADER.Characteristics field + + + + + Constructor + + PE file reader pointing to the start of this section + Verify section + Thrown if verification fails + + + + Converts s to/from s + + + + + Converts a to an + + The file offset to convert + The RVA + + + + Converts an to a + + The RVA to convert + The file offset + + + + Interface to access a PE image + + + + + true if image layout is the same as the raw PE image layout, false + if it's the same layout as a PE image loaded by the OS PE loader. + + + + + true if some of the memory where the image is located could be unavailable. + This could happen if it's been loaded by the OS loader. + + + + + The filename or null if the data is not from a file + + + + + Returns the DOS header + + + + + Returns the NT headers + + + + + Returns the section headers + + + + + Returns the debug directories + + + + + Gets/sets the Win32 resources. This is null if there are no Win32 resources. + + + + + Gets the factory + + + + + Creates a from to the end of the image + + Offset of data + + + + + Creates a + + Offset of data + Length of data + + + + + Creates a from to the end of the image + + RVA of data + + + + + Creates a + + RVA of data + Length of data + + + + + Creates a that can read the whole image + + + + + + Interface to access a PE image + + + + + Call this to disable memory mapped I/O if it was used to open the file. This must only + be called if no other code is trying to access the memory since that could lead to an + exception. + + + + + true if memory mapped I/O is enabled + + + + + Extension methods + + + + + Finds a + + this + Type + Name + Language ID + The or null if none found + + + + Calculates a PE checksum + + PE image stream positioned at the MZ bytes + Length of image + Offset of checksum + PE checksum + + + + Align up + + this + Alignment + + + + Align up + + this + Alignment + + + + Converts a to/from an + + + + + Converts a to an + + The PEInfo context + The file offset to convert + The RVA + + + + Converts an to a + + The PEInfo context + The RVA to convert + The file offset + + + + IMAGE_FILE_HEADER.Machine enum + + + + Unknown machine + + + x86 + + + MIPS little-endian, 0x160 big-endian + + + MIPS little-endian + + + MIPS little-endian + + + MIPS little-endian WCE v2 + + + Alpha_AXP + + + SH3 little-endian + + + + + + SH3E little-endian + + + SH4 little-endian + + + SH5 + + + ARM Little-Endian + + + ARM Thumb/Thumb-2 Little-Endian + + + ARM Thumb-2 Little-Endian + + + + + + IBM PowerPC Little-Endian + + + + + + IA-64 + + + + + + + + + + + + + + + Infineon + + + + + + EFI Byte Code + + + x64 + + + M32R little-endian + + + + + + + + + + Extensions + + + + + Checks if is a 64-bit machine + + Machine + + + + + Checks if is , , etc... + + Machine + + + + + Checks if is , , etc... + + Machine + + + + + Checks if is , , etc... + + Machine + + + + + Checks if is , , etc... + + Machine + + + + + Image layout + + + + + Use this if the PE file has a normal structure (eg. it's been read from a file on disk) + + + + + Use this if the PE file has been loaded into memory by the OS PE file loader + + + + + Accesses a PE file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Constructor + + Data reader factory + Image layout + Verify PE file data + + + + Constructor + + Name of the file + true if we should map it as an executable + Verify PE file data + + + + Constructor + + Name of the file + Verify PE file data + + + + Constructor + + Name of the file + + + + Constructor + + The PE file data + Filename or null + Image layout + Verify PE file data + + + + Constructor + + The PE file data + Image layout + Verify PE file data + + + + Constructor + + The PE file data + Verify PE file data + + + + Constructor + + The PE file data + Filename or null + Verify PE file data + + + + Constructor + + The PE file data + + + + Constructor + + The PE file data + Filename or null + + + + Constructor + + Address of PE image + Length of PE image + Image layout + Verify PE file data + + + + Constructor + + Address of PE image + Length of PE image + Verify PE file data + + + + Constructor + + Address of PE image + Length of PE image + + + + Constructor + + Address of PE image + Image layout + Verify PE file data + + + + Constructor + + Address of PE image + Verify PE file data + + + + Constructor + + Address of PE image + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reads all PE sections from a PE stream + + + + + Returns the DOS header + + + + + Returns the NT headers + + + + + Returns the section headers + + + + + Constructor + + PE file reader pointing to the start of this section + Verify sections + Thrown if verification fails + + + + Returns the first that has data at file offset + + + The file offset + + + + + Returns the first that has data at RVA + + + The RVA + + + + + Converts a to an + + The file offset to convert + The RVA + + + + Converts an to a + + The RVA to convert + The file offset + + + + Returns size of image rounded up to + + It calculates the size itself, and does not return + Size of image in bytes + + + + Represents an RVA (relative virtual address) + + + + + IMAGE_OPTIONAL_HEADER.Subsystem + + + + Unknown subsystem. + + + Image doesn't require a subsystem. + + + Image runs in the Windows GUI subsystem. + + + Image runs in the Windows character subsystem. + + + image runs in the OS/2 character subsystem. + + + image runs in the Posix character subsystem. + + + image is a native Win9x driver. + + + Image runs in the Windows CE subsystem. + + + + + + + + + + + + + + + + + + + + + + dnlib settings + + + + + true if dnlib is thread safe. (THREAD_SAFE was defined during compilation) + + + + + Cancellation token interface + + + + + Throws a if the operation should be canceled + + + + + Simple class using Monitor.Enter() and Monitor.Exit() + and just like ReaderWriterLockSlim it prevents recursive locks. It doesn't support + multiple readers. A reader lock is the same as a writer lock. + + + + + Creates a new instance of this class + + + + + + Constructor + + + + + Enter read mode + + + + + Exit read mode + + + + + Enter write mode + + + + + Exit write mode + + + + + Interface to access a lazily initialized list + + Type to store in list + + + + Gets notified of list events + + List value + + + + Called before a new value is lazily added to the list. + + If you must access this list, you can only call _NoLock() methods + since a write lock is now held by this thread. + Index where the value will be added + Value that will be added to the list. It can be modified by + the callee. + + + + Called before a new value is added to the list. + + If you must access this list, you can only call _NoLock() methods + since a write lock is now held by this thread. + Index where the value will be added + Value that will be added to the list + + + + Called before a value is removed from the list. If all elements are removed, + is called, and this method is not called. + + If you must access this list, you can only call _NoLock() methods + since a write lock is now held by this thread. + Index of value + The value that will be removed + + + + Called after the list has been resized (eg. an element has been added/removed). It's not + called when an element is replaced. + + If you must access this list, you can only call _NoLock() methods + since a write lock is now held by this thread. + Index where the change occurred. + + + + Called before the whole list is cleared. + + If you must access this list, you can only call _NoLock() methods + since a write lock is now held by this thread. + + + + Implements a that is lazily initialized + + Type to store in list + + + + Stores a simple value + + + + + true if it has been initialized, false otherwise + + + + + Default constructor + + + + + Constructor that should be used when new elements are inserted into + + User data + + + + Gets the value + + Index in the list + + + + Sets the value + + Index in the list + New value + + + + + + + + + + + + + + + + + + + Default constructor + + + + + Constructor + + List listener + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enumerator + + + + + Gets the current value + + + + + Moves to the next element in the collection + + + + + + Disposes the enumerator + + + + + Gets the list enumerator + + + + + + + + + Implements a that is lazily initialized + + Type to store in list + Type of the context passed to the read-value delegate + + + + Stores data and keeps track of the original index and whether the data has been + initialized or not. + + + + + + + + + + + + + + Constructor that should only be called when is initialized. + + Original index of this element + LazyList instance + + + + + + + Default constructor + + + + + Constructor + + List listener + + + + Constructor + + Initial length of the list + Context passed to + Delegate instance that returns original values + + + + Constructor + + Initial length of the list + List listener + Context passed to + Delegate instance that returns original values + + + + A readonly list that gets initialized lazily + + Any class type + + + + Gets the length of this list + + + + + Access the list + + Index + The element or null if is invalid + + + + Constructor + + Length of the list + Delegate instance that lazily reads an element. It might + be called more than once for each rid in rare cases. It must never return + null. + + + + A readonly list that gets initialized lazily + + Any class type + + + + Gets the length of this list + + + + + Access the list + + Index + Generic parameter context + The element or null if is invalid + + + + Constructor + + Length of the list + Delegate instance that lazily reads an element. It might + be called more than once for each rid. It must never return null. + + + + Lazily returns the original value if the user hasn't overwritten the value + + Value type + + + + Sets the lock that protects the data + + + + + Set a delegate instance that will return the original value + + + + + Gets/sets the value + + The getter returns the original value if the value hasn't been initialized. + + + + Returns true if the value has been initialized + + + + + Returns true if the value was set by the user + + + + + A resource blob + + + + + Gets the data reader + + + + + + Gets/sets the code page + + + + + Gets/sets the reserved field + + + + + Constructor + + Name + + + + Constructor + + Data reader factory + Offset of resource data + Length of resource data + Name + + + + Constructor + + Data reader factory + Offset of resource data + Length of resource data + Name + Code page + Reserved value + + + + A Win32 resource directory (see IMAGE_RESOURCE_DIRECTORY in the Windows SDK) + + + + See + + + See + + + See + + + See + + + See + + + See + + + + Gets/sets the characteristics + + + + + Gets/sets the time date stamp + + + + + Gets/sets the major version number + + + + + Gets/sets the minor version number + + + + + Gets all directory entries + + + + + Gets all resource data + + + + + Constructor + + Name + + + + Finds a by name + + Name + A or null if it wasn't found + + + + Finds a by name + + Name + A or null if it wasn't found + + + + A Win32 resource directory created by the user + + + + + Constructor + + Name + + + + A Win32 resource directory created from a PE file + + + + + To make sure we don't get stuck in an infinite loop, don't allow more than this + many sub directories. + + + + Owner + + + Directory depth. When creating more 's, + the instances get this value + 1 + + + + Info about all 's we haven't created yet + + + + + Info about all 's we haven't created yet + + + + Offset of resource directory / data + + + + Constructor + + Starts from 0. If it's big enough, we'll stop reading more data. + Name + Resources + Reader positioned at the start of this resource directory + + + + Reads the directory header and initializes and + . + + + + + + Reads a string + + Reader + Offset of string + The string or null if we could not read it + + + + Base class of and + + + + + Gets/sets the name + + + + + Constructor + + Name + + + + + + + A Win32 resource name. It can be either an integer or a string. + + + + + true if is valid + + + + + true if is valid + + + + + The ID. It's only valid if is true + + + + + The name. It's only valid if is true + + + + + Constructor + + ID + + + + Constructor + + Name + + + Converts input to a + + + Converts input to a + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + Overloaded operator + + + + + + + + + + + + + + + + + + + Win32 resources base class + + + + + Gets/sets the root directory + + + + + Finds a + + Type + The or null if none found + + + + Finds a + + Type + Name + The or null if none found + + + + Finds a + + Type + Name + Language ID + The or null if none found + + + + + + + Dispose method + + true if called by + + + + Win32 resources class created by the user + + + + + + + + Win32 resources class created from a PE file + + + + + Converts data RVAs to file offsets in + + + + + This reader only reads the raw data. The data RVA is found in the data header and + it's first converted to a file offset using . This file + offset is where we'll read from using this reader. + + + + + This reader only reads the directory entries and data headers. The data is read + by + + + + + + + + Gets the resource reader + + + + + Constructor + + / converter + Reader for the whole Win32 resources section (usually + the .rsrc section). It's used to read 's and + 's but not the actual data blob. + Offset of resource section + Length of resource section + true if this instance can dispose of + Data reader (it's used after converting an + to a ) + Offset of resource section + Length of resource section + true if this instance can dispose of + + + + Constructor + + The PE image + + + + Constructor + + The PE image + Reader for the whole Win32 resources section (usually + the .rsrc section) or null if we should create one from the resource data + directory in the optional header + Offset of resource section + Length of resource section + true if this instance can dispose of + + + + Creates a new data reader + + RVA of data + Size of data + + + + + + + diff --git a/AstroNet/bin/Debug/dnlibOld.dll b/AstroNet/bin/Debug/dnlibOld.dll new file mode 100644 index 0000000000000000000000000000000000000000..644472e5937a5f266c6b0c265b01a36d79aa3cff GIT binary patch literal 1264640 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�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
    u+H!}w-kLJ1v*ln6PkVR_ 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

    rL{RDBD(pWzrS{|27##z%4u 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

    6*CwFqlic%B9ztw+_8hN2 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%0DFbgZeQ4zr?Rs>?5 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 XiT>=*aA(p@ + + + AutoMapper + + + +

    + Add Action called against the IConfigurationProvider before it gets sealed + + + + + Add an action to be called when validating the configuration. + + the validation callback + + + + Allow the same map to exist in different profiles. + The default is to throw an exception, true means the maps are merged. + + + + + How many levels deep should AutoMapper try to inline the execution plan for child classes. + See the docs for details. + + + + + How many levels deep should recursive queries be expanded. + Must be zero for EF6. Can be greater than zero for EF Core. + + + + + Auto map to this destination type from the specified source type. + Discovered during scanning assembly scanning for configuration when calling + + + + + If set to true, construct the destination object using the service locator. + + + + + For self-referential types, limit recurse depth. + + + + + If set to true, preserve object identity. Useful for circular references. + + + + + If set to true, disable constructor validation. + + + + + If set to true, include this configuration in all derived types' maps. + + + + + Skip normal member mapping and convert using a instantiated during mapping. + + + + + Wraps mapping exceptions. Check exception.ToString() for the full error message. + + + + + Ignore this member for configuration validation and skip during mapping. + + + Must be used in combination with + + + + + Do not precompute the execution plan for this member, just map it at runtime. + Simplifies the execution plan by not inlining. + + + Must be used in combination with + + + + + Supply a custom mapping order instead of what the .NET runtime returns + + + Must be used in combination with + + + + + Substitute a custom value when the source member resolves as null + + + Must be used in combination with + + + + + Value to use if source value is null + + + + + Specify the source member to map from. Can only reference a member on the type + + + Must be used in combination with + + + + + Use the destination value instead of mapping from the source value or creating a new instance + + + Must be used in combination with + + + + + Specify a value converter type to convert from the matching source member to the destination member + Use with to specify a separate source member to supply to the value converter + + + Must be used in combination with + + + + + type + + + + + Map destination member using a custom value resolver. + Use with to specify an type. + + + Must be used in combination with + + + + + or type + + + + + Contains profile-specific configuration + + + + + Source extension methods included for search + + + + + Specify which properties should be mapped. + By default only public properties are mapped. + + + + + Specify which fields should be mapped. + By default only public fields are mapped. + + + + + Specify which methods, of those that are eligible (public, parameterless, and non-static or extension methods), should be mapped. + By default all eligible methods are mapped. + + + + + Specify which constructors should be considered for the destination objects. + By default all constructors are considered. + + + + + Contains member configuration relating to source members + + + + + if targetType is oldType, method will return newType + if targetType is not oldType, method will return targetType + if targetType is generic type with oldType arguments, method will replace all oldType arguments on newType + + + + + + + + + Member maps with default values. Used in dynamic/dictionary scenarios when source/destination members do not exist. + + + + + Gets the feature of type . + + The type of the feature. + The feature or null if feature not exists. + + + + Add or update the feature. Existing feature of the same type will be replaced. + + The feature. + + + + Get all configured type maps created + + All configured type maps + + + + Find the for the configured source and destination type + + Configured source type + Configured destination type + Type map configuration + + + + Find the for the configured type pair + + Type pair + Type map configuration + + + + Find the for the configured source and destination type + + Source type + Destination type + Type map configuration + + + + Resolve the for the configured source and destination type, checking parent types + + Configured source type + Configured destination type + Type map configuration + + + + Resolve the for the configured type pair, checking parent types + + Type pair + Type map configuration + + + + Dry run all configured type maps and throw for each problem + + + + + Dry run single type map + + Type map to check + + + + Dry run all type maps in given profile + + Profile name of type maps to test + + + + Dry run all type maps in given profile + + Profile type + + + + Get all configured mappers + + List of mappers + + + + Gets the features collection. + + The feature colection. + + + + Find a matching object mapper. + + the types to match + the matching mapper or null + + + + Factory method to create formatters, resolvers and type converters + + + + + Allows to enable null-value propagation for query mapping. + Some providers (such as EntityFrameworkQueryVisitor) do not work with this feature enabled! + + + + + Create a mapper instance based on this configuration. Mapper instances are lightweight and can be created as needed. + + The mapper instance + + + + Create a mapper instance with the specified service constructor to be used for resolvers and type converters. + + Service factory to create services + The mapper instance + + + + Compile all underlying mapping expressions to cached delegates. + Use if you want AutoMapper to compile all mappings up front instead of deferring expression compilation for each first map. + + + + + Builds the execution plan used to map the source to destination. + Useful to understand what exactly is happening during mapping. + See the wiki for details. + + the runtime type of the source object + the runtime type of the destination object + the execution plan + + + + Builds the execution plan used to map the source to destination. + Useful to understand what exactly is happening during mapping. + See the wiki for details. + + The source/destination map request + the execution plan + + + + Specify the source member(s) to map from. + + Property name referencing the source member to map against. Or a dot separated member path. + + + + Map constructor parameter from member expression + + Member type + Member expression + + + + Map constructor parameter from custom func that has access to + + Not used for LINQ projection (ProjectTo) + Custom func + + + + Ignore this member for validation and skip during mapping + + + + + Execute a mapping from the source object to a new destination object. + The source type is inferred from the source object. + + Destination type to create + Source object to map from + Mapped destination object + + + + Execute a mapping from the source object to a new destination object. + + Source type to use, regardless of the runtime type + Destination type to create + Source object to map from + Mapped destination object + + + + Execute a mapping from the source object to the existing destination object. + + Source type to use + Destination type + Source object to map from + Destination object to map into + The mapped destination object, same instance as the object + + + + Execute a mapping from the source object to a new destination object with explicit objects + + Source object to map from + Source type to use + Destination type to create + Mapped destination object + + + + Execute a mapping from the source object to existing destination object with explicit objects + + Source object to map from + Destination object to map into + Source type to use + Destination type to use + Mapped destination object, same instance as the object + + + + Execute a mapping from the source object to a new destination object with supplied mapping options. + + Destination type to create + Source object to map from + Mapping options + Mapped destination object + + + + Execute a mapping from the source object to a new destination object with supplied mapping options. + + Source type to use + Destination type to create + Source object to map from + Mapping options + Mapped destination object + + + + Execute a mapping from the source object to the existing destination object with supplied mapping options. + + Source type to use + Destination type + Source object to map from + Destination object to map into + Mapping options + The mapped destination object, same instance as the object + + + + Execute a mapping from the source object to a new destination object with explicit objects and supplied mapping options. + + Source object to map from + Source type to use + Destination type to create + Mapping options + Mapped destination object + + + + Execute a mapping from the source object to existing destination object with supplied mapping options and explicit objects + + Source object to map from + Destination object to map into + Source type to use + Destination type to use + Mapping options + Mapped destination object, same instance as the object + + + + Configuration provider for performing maps + + + + + Factory method for creating runtime instances of converters, resolvers etc. + + + + + Project the input queryable. + + Projections are only calculated once and cached + Destination type + Queryable source + Optional parameter object for parameterized mapping expressions + Explicit members to expand + Queryable result, use queryable extension methods to project and execute result + + + + Project the input queryable. + + Destination type to map to + Queryable source + Optional parameter object for parameterized mapping expressions + Explicit members to expand + Queryable result, use queryable extension methods to project and execute result + + + + Project the input queryable. + + Queryable source + Destination type to map to + Optional parameter object for parameterized mapping expressions + Explicit members to expand + Queryable result, use queryable extension methods to project and execute result + + + + Add an existing profile + + Profile to add + + + + Add an existing profile type. Profile will be instantiated and added to the configuration. + + Profile type + + + + Add an existing profile type. Profile will be instantiated and added to the configuration. + + Profile type + + + + Add profiles contained in an IEnumerable + + IEnumerable of Profile + + + + Add mapping definitions contained in assemblies. + Looks for definitions and classes decorated with + + Assemblies containing mapping definitions + + + + Add mapping definitions contained in assemblies. + Looks for definitions and classes decorated with + + Assemblies containing mapping definitions + + + + Add mapping definitions contained in assemblies. + Looks for definitions and classes decorated with + + Assembly names to load and scan containing mapping definitions + + + + Add mapping definitions contained in assemblies. + Looks for definitions and classes decorated with + + Assembly names to load and scan containing mapping definitions + + + + Add mapping definitions contained in assemblies. + Looks for definitions and classes decorated with + + Types from assemblies containing mapping definitions + + + + Add mapping definitions contained in assemblies. + Looks for definitions and classes decorated with + + Types from assemblies containing mapping definitions + + + + Supply a factory method callback for creating resolvers and type converters + + Factory method + + + + Create a named profile with the supplied configuration + + Profile name, must be unique + Profile configuration + + + + Get the features collection. + + + + + Object mappers + + + + + Advance Configuration + + + + + Custom mapping action + + Source type + Destination type + + + + Implementors can modify both the source and destination objects + + Source object + Destination object + Resolution context + + + + Mapping configuration options for non-generic maps + + + + + Add extra configuration to the current map by also mapping the specified child objects to the destination object. + The maps from the child types to the destination need to be created explicitly. + + the names of child object properties to map to the destination + + + + + Create a type mapping from the destination to the source type, with validation disabled. + This allows for two-way mapping. + + Itself + + + + Customize configuration for all members + + Callback for member options + + + + Customize configuration for members not previously configured + + Callback for member options + + + + Customize individual members + + Name of the member + Callback for configuring member + Itself + + + + Mapping configuration options + + Source type + Destination type + + + + Add extra configuration to the current map by also mapping the specified child objects to the destination object. + The maps from the child types to the destination need to be created explicitly. + + the child objects to map to the destination + + + + + Customize configuration for a path inside the destination object. + + Expression to the destination sub object + Callback for member options + Itself + + + + Customize configuration for members not previously configured + + Callback for member options + + + + Customize configuration for individual member + + Expression to the top-level destination member. This must be a member on the TDestination type + Callback for member options + Itself + + + + Customize configuration for individual member. Used when the name isn't known at compile-time + + Destination member name + Callback for member options + Itself + + + + Customize configuration for all members + + Callback for member options + + + + Include this configuration in derived types' maps + + Derived source type + Derived destination type + Itself + + + + Include the base type map's configuration in this map + + Base source type + Base destination type + Itself + + + + Override the destination type mapping for looking up configuration and instantiation + + Destination type to use + + + + Customize configuration for an individual source member + + Expression to source member. Must be a member of the type + Callback for member configuration options + Itself + + + + Apply a transformation function after any resolved destination member value with the given type + + Value type to match and transform + Transformation expression + Itself + + + + Create a type mapping from the destination to the source type, with validation disabled. + This allows for two-way mapping. + + Itself + + + + Common mapping configuration options between generic and non-generic mapping configuration + + Source type + Destination type + Concrete return type for fluent interface + + + + Construct the destination object using the service locator + + Itself + + + + For self-referential types, limit recurse depth. + Enables PreserveReferences. + + Number of levels to limit to + Itself + + + + Preserve object identity. Useful for circular references. + + Itself + + + + Disable constructor validation. During mapping this map is used against an existing destination object and never constructed itself. + + Itself + + + + Value transformers, typically configured through explicit or extenstion methods. + + + + + Execute a custom function to the source and/or destination types before member mapping + + Not used for LINQ projection (ProjectTo) + Callback for the source/destination types + Itself + + + + Execute a custom function to the source and/or destination types before member mapping + + Not used for LINQ projection (ProjectTo) + Callback for the source/destination types + Itself + + + + Execute a custom mapping action before member mapping + + Not used for LINQ projection (ProjectTo) + Mapping action type instantiated during mapping + Itself + + + + Execute a custom function to the source and/or destination types after member mapping + + Not used for LINQ projection (ProjectTo) + Callback for the source/destination types + Itself + + + + Execute a custom function to the source and/or destination types after member mapping + + Not used for LINQ projection (ProjectTo) + Callback for the source/destination types + Itself + + + + Execute a custom mapping action after member mapping + + Not used for LINQ projection (ProjectTo) + Mapping action type instantiated during mapping + Itself + + + + Specify which member list to validate + + Member list to validate + Itself + + + + Include this configuration in all derived types' maps. Works by scanning all type maps for matches during configuration. + + Itself + + + + Include this configuration in derived types' maps + + Derived source type + Derived destination type + Itself + + + + Include the base type map's configuration in this map + + Base source type + Base destination type + + + + + Customize configuration for an individual source member. Member name not known until runtime + + Expression to source member. Must be a member of the type + Callback for member configuration options + Itself + + + + Ignores all properties that have either a private or protected setter, forcing the mapper to respect encapsulation (note: order matters, so place this before explicit configuration of any properties with an inaccessible setter) + + Itself + + + + When using ReverseMap, ignores all properties that have either a private or protected setter, keeping the reverse mapping consistent with the forward mapping (note: properties with an inaccessible setter may still be mapped unless IgnoreAllPropertiesWithAnInaccessibleSetter is also used) + + Itself + + + + Supply a custom instantiation expression for the destination type + + Expression to create the destination type given the source object + Itself + + + + Supply a custom instantiation function for the destination type, based on the entire resolution context + + Not used for LINQ projection (ProjectTo) + Callback to create the destination type given the current resolution context + Itself + + + + Customize configuration for individual constructor parameter + + Constructor parameter name + Options + Itself + + + + Override the destination type mapping for looking up configuration and instantiation + + + + + + Skip normal member mapping and convert using a instantiated during mapping + Use this method if you need to specify the converter type at runtime + + Type converter type + + + + Skip member mapping and use a custom expression to convert to the destination type + + Callback to convert from source type to destination type + + + + Skip member mapping and use a custom function to convert to the destination type + + Not used for LINQ projection (ProjectTo) + Callback to convert from source type to destination type, including destination object + + + + Skip member mapping and use a custom function to convert to the destination type + + Not used for LINQ projection (ProjectTo) + Callback to convert from source type to destination type, with source, destination and context + + + + Skip member mapping and use a custom type converter instance to convert to the destination type + + Not used for LINQ projection (ProjectTo) + Type converter instance + + + + Skip member mapping and use a custom type converter instance to convert to the destination type + + Not used for LINQ projection (ProjectTo) + Type converter type + + + + Options for a single map operation + + + + + Construct services using this callback. Use this for child/nested containers + + + + + + Add context items to be accessed at map time inside an or + + + + + Execute a custom function to the source and/or destination types before member mapping + + Callback for the source/destination types + + + + Execute a custom function to the source and/or destination types after member mapping + + Callback for the source/destination types + + + + Execute a custom function to the source and/or destination types before member mapping + + Callback for the source/destination types + + + + Execute a custom function to the source and/or destination types after member mapping + + Callback for the source/destination types + + + + Member configuration options + + Source type for this member + Type for this member + Destination type for this map + + + + Do not precompute the execution plan for this member, just map it at runtime. + Simplifies the execution plan by not inlining. + + + + + Substitute a custom value when the source member resolves as null + + Value to use + + + + Map destination member using a custom value resolver + + Not used for LINQ projection (ProjectTo) + Value resolver type + + + + Map destination member using a custom member value resolver supplied with a source member + + Not used for LINQ projection (ProjectTo) + Value resolver type + Source member to supply + + + + Map destination member using a custom member value resolver supplied from a source member name + + Not used for LINQ projection (ProjectTo) + Value resolver type + Source member to supply + Source member name + + + + Map destination member using a custom value resolver instance + + Not used for LINQ projection (ProjectTo) + Value resolver instance to use + + + + Map destination member using a custom value resolver instance + + Not used for LINQ projection (ProjectTo) + Value resolver instance to use + Source member to supply to value resolver + + + + Map destination member using a custom function. Access both the source and destination object. + + Not used for LINQ projection (ProjectTo) + Function to map to destination member + + + + Map destination member using a custom function. Access the source, destination object, and destination member. + + Not used for LINQ projection (ProjectTo) + Function to map to destination member + + + + Map destination member using a custom function. Access the source, destination object, destination member, and context. + + Not used for LINQ projection (ProjectTo) + Function to map to destination member + + + + Map destination member using a custom expression. Used in LINQ projection (ProjectTo). + + Member type of the source member to use + Map expression + + + + Specify the source member(s) to map from. + + Property name referencing the source member to map against. Or a dot separated member path. + + + + Ignore this member for configuration validation and skip during mapping + + + + + Allow this member to be null. Overrides AllowNullDestinationValues/AllowNullCollection. + + + + + Don't allow this member to be null. Overrides AllowNullDestinationValues/AllowNullCollection. + + + + + Supply a custom mapping order instead of what the .NET runtime returns + + Mapping order value + + + + Reset UseDestinationValue. + + + + + Use the destination value instead of mapping from the source value or creating a new instance + + + + + Conditionally map this member against the source, destination, source and destination members + + Condition to evaluate using the source object + + + + Conditionally map this member + + Condition to evaluate using the source object + + + + Conditionally map this member + + Condition to evaluate using the source object + + + + Conditionally map this member + + Condition to evaluate using the source object + + + + Conditionally map this member + + Condition to evaluate using the source object + + + + Conditionally map this member, evaluated before accessing the source value + + Condition to evaluate using the source object + + + + Conditionally map this member, evaluated before accessing the source value + + Condition to evaluate using the current resolution context + + + + Conditionally map this member, evaluated before accessing the source value + + Condition to evaluate using the source object and the current resolution context + + + + Conditionally map this member, evaluated before accessing the source value + + Condition to evaluate using the source object, the destination object, and the current resolution context + + + + Ignore this member for LINQ projections unless explicitly expanded during projection + + + + + The destination member being configured. + + + + + Apply a transformation function after any resolved destination member value with the given type + + Transformation expression + + + + Specify a value converter to convert from the matching source member to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Value converter type + Source member type + + + + Specify a value converter to convert from the specified source member to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Value converter type + Source member type + Source member to supply to the value converter + + + + Specify a value converter to convert from the specified source member name to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Value converter type + Source member type + Source member name to supply to the value converter + + + + Specify a value converter instance to convert from the matching source member to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Source member type + Value converter instance + + + + Specify a value converter instance from the specified source member to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Source member type + Value converter instance + Source member to supply to the value converter + + + + Specify a value converter instance to convert from the specified source member name to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Source member type + Value converter instance + Source member name to supply to the value converter + + + + Configuration options for an individual member + + + + + Map destination member using a custom value resolver. Used when the value resolver is not known at compile-time + + Not used for LINQ projection (ProjectTo) + Value resolver type + + + + Map destination member using a custom value resolver. Used when the value resolver is not known at compile-time + + Not used for LINQ projection (ProjectTo) + Value resolver type + Member to supply to value resolver + + + + Map destination member using a custom value resolver instance + + Not used for LINQ projection (ProjectTo) + Value resolver instance to use + Source member to supply to value resolver + + + + Specify a value converter type to convert from the matching source member to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Value converter type + + + + Specify a value converter type to convert from the specified source member name to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Value converter type + Source member name to supply to the value converter + + + + Specify a value converter instance to convert from the specified source member name to the destination member + + + Value converters are similar to type converters, but scoped to a single member. Value resolvers receive the enclosed source/destination objects as parameters. + Value converters do not. This makes it possible to reuse value converters across multiple members and multiple maps. + + Source member type + Destination member type + Value converter instance + Source member name to supply to the value converter + + + + Defines a naming convention strategy + + + + + Regular expression on how to tokenize a member + + + + + Mapping execution strategy, as a chain of responsibility + + + + + When true, the mapping engine will use this mapper as the strategy + + Resolution context + Is match + + + + Builds a mapping expression equivalent to the base Map method + + + + + Source parameter + Destination parameter + ResolutionContext parameter + Map expression + + + + Base class for simple object mappers that don't want to use expressions. + + type of the source + type of the destination + + + + When true, the mapping engine will use this mapper as the strategy + + Resolution context + Is match + + + + Performs conversion from source to destination type + + Source object + Destination object + The compile time type of the source object + The compile time type of the destination object + Resolution context + Destination object + + + + Member configuration options + + Source type for this member + Destination type for this map + Type for this member + + + + Specify the source member to map from. Can only reference a member on the type + Any null reference exceptions in this expression will be ignored (similar to flattening behavior) + + Member type of the source member to use + Expression referencing the source member to map against + + + + Ignore this member for configuration validation and skip during mapping + + + + + Configuration for profile-specific maps + + + + + Disable constructor mapping. Use this if you don't intend to have AutoMapper try to map to constructors + + + + + Creates a mapping configuration from the type to the type + + Source type + Destination type + Mapping expression for more configuration options + + + + Creates a mapping configuration from the type to the type. + Specify the member list to validate against during configuration validation. + + Source type + Destination type + Member list to validate + Mapping expression for more configuration options + + + + Create a mapping configuration from the source type to the destination type. + Use this method when the source and destination type are known at runtime and not compile time. + + Source type + Destination type + Mapping expression for more configuration options + + + + Creates a mapping configuration from the source type to the destination type. + Specify the member list to validate against during configuration validation. + + Source type + Destination type + Member list to validate + Mapping expression for more configuration options + + + + Clear the list of recognized prefixes. + + + + + Recognize a list of prefixes to be removed from source member names when matching + + List of prefixes + + + + Recognize a list of postfixes to be removed from source member names when matching + + List of postfixes + + + + Provide an alias for a member name when matching source member names + + Original member name + Alias to match against + + + + Provide a new value for a part of a members name + + Original member value + New member value + + + + Recognize a list of prefixes to be removed from destination member names when matching + + List of prefixes + + + + Recognize a list of postfixes to be removed from destination member names when matching + + List of postfixes + + + + Add a property name to globally ignore. Matches against the beginning of the property names. + + Property name to match against + + + + Allow null destination values. If false, destination objects will be created for deep object graphs. Default true. + + + + + Allow null destination collections. If true, null source collections result in null destination collections. Default false. + + + + + Allows to enable null-value propagation for query mapping. + Some providers (such as EntityFrameworkQueryVisitor) do not work with this feature enabled! + + + + + Naming convention for source members + + + + + Naming convention for destination members + + + + + Specify common configuration for all type maps. + + configuration callback + + + + Customize configuration for all members across all maps + + Condition + Callback for member options. Use the property map for conditional maps. + + + + Include extension methods against source members for matching destination members to. Default source extension methods from + + Static type that contains extension methods + + + + Value transformers. Modify the list directly or use + + + + + Source member configuration options + + + + + Ignore this member when validating source members, MemberList.Source. + Does not affect validation for the default case, MemberList.Destination. + + + + + Converts source type to destination type instead of normal member mapping + + Source type + Destination type + + + + Performs conversion from source to destination type + + Source object + Destination object + Resolution context + Destination object + + + + Converts a source member value to a destination member value + + Source member type + Destination member type + + + + Perform conversion from source member value to destination member value + + Source member object + Resolution context + Destination member value + + + + Extension point to provide custom resolution for a destination value + + + + + Implementors use source object to provide a destination object. + + Source object + Destination object, if exists + Destination member + The context of the mapping + Result, typically build from the source resolution result + + + + Extension point to provide custom resolution for a destination value + + + + + Implementors use source object to provide a destination object. + + Source object + Destination object, if exists + Source member + Destination member + The context of the mapping + Result, typically build from the source resolution result + + + + Used to ensure we capture the concrete parent type. For virtual members, AutoMapper's GetMemberInfo methods will return a + MemberInfo whose ReflectedType is the base class - not source or destination being mapped. + + + + + Member list to check for configuration validation + + + + + Check that all destination members are mapped + + + + + Check that all source members are mapped + + + + + Check neither source nor destination members, skipping validation + + + + + Provides a named configuration for maps. Naming conventions become scoped per profile. + + + + + Queryable extensions for AutoMapper + + + + + Maps a queryable expression of a source type to a queryable expression of a destination type + + Source type + Destination type + Source queryable + Destination queryable + + Mapped destination queryable + + + + Extension method to project from a queryable using the provided mapping engine + + Projections are only calculated once and cached + Destination type + Queryable source + Mapper configuration + Optional parameter object for parameterized mapping expressions + Explicit members to expand + Expression to project into + + + + Extension method to project from a queryable using the provided mapping engine + + Projections are only calculated once and cached + Destination type + Queryable source + Mapper configuration + Explicit members to expand + Expression to project into + + + + Projects the source type to the destination type given the mapping configuration + + Destination type to map to + Queryable source + Mapper configuration + Optional parameter object for parameterized mapping expressions + Explicit members to expand + Queryable result, use queryable extension methods to project and execute result + + + + Extension method to project from a queryable using the provided mapping engine + + Projections are only calculated once and cached + Queryable source + Destination type + Mapper configuration + Expression to project into + + + + Projects the source type to the destination type given the mapping configuration + + Queryable source + Destination type to map to + Mapper configuration + Optional parameter object for parameterized mapping expressions + Explicit members to expand + Queryable result, use queryable extension methods to project and execute result + + + + Expression visitor for making member access null-safe. + + + NullSafeQueryRewriter is copied from the NeinLinq project, licensed under the MIT license. + Copyright (c) 2014-2018 Axel Heer. + See https://github.com/axelheer/nein-linq/blob/master/src/NeinLinq/NullsafeQueryRewriter.cs + + + + + + + + + + + Context information regarding resolution of a destination value + + + + + Mapping operation options + + + + + Context items from + + + + + Current mapper + + + + + Instance cache for resolving circular references + + + + + Instance cache for resolving keeping track of depth + + + + + Contains cached reflection information for easy retrieval + + + + + Main configuration object holding all mapping configuration for a source and destination type + + + + + Apply a transformation function after any resolved destination member value with the given type + + Value type to match and transform + Value transformer list + Transformation expression + + + diff --git a/AstroNet/bin/Release/dnlib.dll b/AstroNet/bin/Release/dnlib.dll new file mode 100644 index 0000000000000000000000000000000000000000..c5f3208834b03bbdeb474dbbe37d77d4e28b20ec GIT binary patch literal 1158144 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
  2. Yz14z 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

    @|~8FF=!W% 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

    GWa!v=?+2Ic-U&c4~<7eS3_zX_fPZg>4}B6f3v�SNE4> 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 drst24T37?j_XXBR5jmKH+x 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%0A*|U&jHO#K@Femy$C;ewcW+| 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 Sid8e_x1RYka{T{Df&T@06fuhc literal 0 HcmV?d00001 diff --git a/Bin/Runtime.pdb b/Bin/Runtime.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1e8ed1585ea5889bbc1a3d572a5e99af427be89d GIT binary patch literal 296448 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
    p|FIhXKMzWJcGEZ8cf2_9>zAwD{^`Qg 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�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

    u+H!}w-kLJ1v*ln6PkVR_ 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

    rL{RDBD(pWzrS{|27##z%4u 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

    + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); + this.addProtection = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.AllowDrop = true; + this.textBox1.Location = new System.Drawing.Point(7, 48); + this.textBox1.Margin = new System.Windows.Forms.Padding(4); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(605, 20); + this.textBox1.TabIndex = 0; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + this.textBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.textBox1DragDrop); + this.textBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.textBox1DragEnter); + // + // button1 + // + this.button1.Enabled = false; + this.button1.Location = new System.Drawing.Point(453, 234); + this.button1.Margin = new System.Windows.Forms.Padding(4); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(159, 27); + this.button1.TabIndex = 1; + this.button1.Text = "Protect"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(4, 31); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(51, 13); + this.label1.TabIndex = 2; + this.label1.Text = "File Path:"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.addProtection); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.checkedListBox1); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(619, 278); + this.groupBox1.TabIndex = 3; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "VM Panel"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(453, 113); + this.button2.Margin = new System.Windows.Forms.Padding(4); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(159, 27); + this.button2.TabIndex = 8; + this.button2.Text = "Select All"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(453, 78); + this.button3.Margin = new System.Windows.Forms.Padding(4); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(159, 27); + this.button3.TabIndex = 7; + this.button3.Text = "Load"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // checkedListBox1 + // + this.checkedListBox1.FormattingEnabled = true; + this.checkedListBox1.Location = new System.Drawing.Point(6, 77); + this.checkedListBox1.Name = "checkedListBox1"; + this.checkedListBox1.Size = new System.Drawing.Size(440, 184); + this.checkedListBox1.TabIndex = 6; + // + // addProtection + // + this.addProtection.AutoSize = true; + this.addProtection.Location = new System.Drawing.Point(453, 210); + this.addProtection.Name = "addProtection"; + this.addProtection.Size = new System.Drawing.Size(121, 17); + this.addProtection.TabIndex = 9; + this.addProtection.Text = "Activate Protections"; + this.addProtection.UseVisualStyleBackColor = true; + // + // Form1 + // + this.AllowDrop = true; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(643, 299); + this.Controls.Add(this.groupBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AstroNet GUI"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckedListBox checkedListBox1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.CheckBox addProtection; + } +} + diff --git a/KoiVM.GUI/Form1.cs b/KoiVM.GUI/Form1.cs new file mode 100644 index 0000000..85e2f82 --- /dev/null +++ b/KoiVM.GUI/Form1.cs @@ -0,0 +1,145 @@ +using dnlib.DotNet; +using KVM; +using System; +using System.Collections.Generic; +using System.IO; +using System.Windows.Forms; + +namespace AstroNet +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + internal static string filepath; + + private void button1_Click(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(filepath) || String.IsNullOrWhiteSpace(filepath)) + { + MessageBox.Show("Enter valid path!", "Error!"); + } + else + { + if (File.Exists(filepath)) + { + try + { + List methodList = new List(); + + foreach (var item in checkedListBox1.CheckedItems) + { + methodList.Add(item.ToString()); + } + + new KVMTask().Exceute(ModuleDefMD.Load(filepath), filepath + "_VM.exe", "", null, methodList); + MessageBox.Show("Done!"); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "Error!"); + } + } + else + { + MessageBox.Show("File doesn't exist!", "Error!"); + } + } + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + filepath = textBox1.Text; + if (!String.IsNullOrEmpty(filepath) && !String.IsNullOrWhiteSpace(filepath) && File.Exists(filepath)) + { + //button3.Invoke(null); + } + } + private void textBox1DragEnter(object sender, DragEventArgs e) + { + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + e.Effect = DragDropEffects.Copy; + else + e.Effect = DragDropEffects.None; + } + + } + private void textBox1DragDrop(object sender, DragEventArgs e) + { + { + try + { + Array a = (Array)e.Data.GetData(DataFormats.FileDrop); + if (a != null) + { + string s = a.GetValue(0).ToString(); + int lastoffsetpoint = s.LastIndexOf("."); + if (lastoffsetpoint != -1) + { + string Extension = s.Substring(lastoffsetpoint); + Extension = Extension.ToLower(); + if (Extension == ".exe" || Extension == ".dll") + { + this.Activate(); + textBox1.Text = s; + int lastslash = s.LastIndexOf("\\"); + } + } + } + } + catch + { + + } + } + } + + private void button3_Click(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(filepath) || String.IsNullOrWhiteSpace(filepath)) + { + MessageBox.Show("Enter valid path!", "Error!"); + } + else + { + if (File.Exists(filepath)) + { + try + { + ModuleDefMD moduleDef = ModuleDefMD.Load(textBox1.Text); + foreach (TypeDef type in moduleDef.Types) + { + foreach (MethodDef method in type.Methods) + { + checkedListBox1.Items.Add(method.Name); + } + } + textBox1.Enabled = false; + button3.Enabled = false; + button1.Enabled = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "Error!"); + } + } + else + { + MessageBox.Show("File doesn't exist!", "Error!"); + } + } + } + + private void button2_Click(object sender, EventArgs e) + { + for (int i = 0; i < checkedListBox1.Items.Count; i++) + { + checkedListBox1.SetItemChecked(i, true); + } + } + } +} diff --git a/KoiVM.GUI/Form1.resx b/KoiVM.GUI/Form1.resx new file mode 100644 index 0000000..d3ee53a --- /dev/null +++ b/KoiVM.GUI/Form1.resx @@ -0,0 +1,572 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + lAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/KoiVM.GUI/KoiVM.GUI.csproj b/KoiVM.GUI/KoiVM.GUI.csproj new file mode 100644 index 0000000..b802047 --- /dev/null +++ b/KoiVM.GUI/KoiVM.GUI.csproj @@ -0,0 +1,110 @@ + + + + + Debug + AnyCPU + {F4542E19-6BCA-4FA5-A263-B4419ACACF9A} + WinExe + AstroNet + AstroNet + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + ..\bin\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + AstroNet.Program + + + solar-system.ico + + + + ..\References\dnlibOld.dll + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {171cb9d1-c535-4aea-bf3c-6f4ba1f2d0db} + AstroNet + + + {1a1da722-fe8a-4b49-86ed-dc582f0b0b47} + Runtime + + + {9e333771-bc67-4120-9c67-d15311c0f67c} + KoiVM + + + + + + + \ No newline at end of file diff --git a/KoiVM.GUI/Program.cs b/KoiVM.GUI/Program.cs new file mode 100644 index 0000000..f16b871 --- /dev/null +++ b/KoiVM.GUI/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AstroNet +{ + static class Program + { + + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/KoiVM.GUI/Properties/AssemblyInfo.cs b/KoiVM.GUI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bd4e267 --- /dev/null +++ b/KoiVM.GUI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AstroNet")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AstroNet")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f4542e19-6bca-4fa5-a263-b4419acacf9a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/KoiVM.GUI/Properties/Resources.Designer.cs b/KoiVM.GUI/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1729690 --- /dev/null +++ b/KoiVM.GUI/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AstroNet.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AstroNet.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/KoiVM.GUI/Properties/Resources.resx b/KoiVM.GUI/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/KoiVM.GUI/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/KoiVM.GUI/Properties/Settings.Designer.cs b/KoiVM.GUI/Properties/Settings.Designer.cs new file mode 100644 index 0000000..e1efd9f --- /dev/null +++ b/KoiVM.GUI/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AstroNet.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/KoiVM.GUI/Properties/Settings.settings b/KoiVM.GUI/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/KoiVM.GUI/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/KoiVM.GUI/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/KoiVM.GUI/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/KoiVM.GUI/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.AssemblyReference.cache b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..f5e894aea93a73e58fa9d4feab241bc197ee1a40 GIT binary patch literal 11 QcmeZu3JP{+WMlvW01Ze1dH?_b literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CopyComplete b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CoreCompileInputs.cache b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..2c49f1b --- /dev/null +++ b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +5def72ded633e8034d4772b6da1883429ac4ee23 diff --git a/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.FileListAbsolute.txt b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b13c9e3 --- /dev/null +++ b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AndyLarkinsProtector.csproj.AssemblyReference.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AndyLarkinsProtector.csproj.GenerateResource.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AndyLarkinsProtector.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AndyLarkinsProtector.csproj.CopyComplete +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\AstroNet.exe.config +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\AstroNet.exe +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\AstroNet.pdb +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AstroNet.Properties.Resources.resources +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AstroNet.exe +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AstroNet.pdb +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AndyLarkinsProtector\obj\Debug\AstroNet.Form1.resources diff --git a/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.GenerateResource.cache b/KoiVM.GUI/obj/Debug/AndyLarkinsProtector.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..0a6d2058b793c996eecd82443d3bdaea43ea5757 GIT binary patch literal 1012 zcma)4-)j>=5WZ{f(%dE0%Y&4n4?%no5{_I;P>>)rC0b0Onotz{wRby*OE$M*cTXB0 zed>$gN{$4)FpX5ox z2Yt53d}{W1eUCR_UO;gGODH%LnE>MQ)ck5m;)!o zfzXgyrB|J)Wfmy3kAUtc16nXCz5zdH;CZg|aQzfl`_n>h3ELoSP$NfEhrUneTU@4v zwD=X$wFlFcv9Q3MONo4N;U<2`%$JIL)yBs=F14xp)$!m_=)V^?5fDxk<6}lU+C1Mx zW26>Kra?#4Vx%}6YxPxd&xTMB1C)$fS(IMfX5(27ZH>eQE#FP$4W1f7-e!=r*b<;UT)dIKh5Zpl*QBksp3X}PiOV(@Srb4?Is?OdR!9V|zOWlK*q&{}-{C*~~c1xXf5sOgNYg*$lr~rKf#z18{uu#H0YY04xBO z0A~OrKpJ2Sum{-vR|XLNABjFb!+(OGkMVzQ_J4Z*A3M1JhCs~F z#qfU;s+OLnuuu^H*UJB8|5y3H2oL#rfqwlI`~RsHw40@giv^5@sinDv%O?l8|H%GV zK>3e6$>M+70{+hk{P$!?0DhlYUp|Y%l@uhA5bzK_lStB1Vk-aZ*}=hl=IA&Tn|*gKYrNc*_$n4Y%GP<@@3;f@IVSXr}aVb z;oSKGE8~s-L`3RuX5GSaS=)&&a%lUhDU;XIsNQ{T%Kux^8lpm&j#Q1TxKBkoKVF71 zQ07aLjc)Dj#+JSGvoZPY0nBpBwBG%7Czcqc#P>}+x;Hfq<>p@_zI2ksZ3=q=bXm$z z&U71j*P?Vnh1Y-8d<#bv?>>n)7KmR`-&Ysz7M80z@9Ey!t?nLvO$$Z-Ckx^~iZ?OF z!Wl_Z`XtzrHu1fcmg{%wqz#oP3@oFXS82bhkGbfftfQMXkM#1LLGh2GdBF82PmM@lzZoOrykrgz^`t^pR6Z5+>bqE3proqa<|iS3EpMQKU7 zWJzkht0tB2z=cAK}?$_lJv(%u_%4nliU#`0nkK67!@7_B25VFksjK$ zK*uAH?fJGX?Jh-@M1f9}*5`|iC~e@^YkaB64?Ed!{WyiQx%?J3g5mia)!LrP>!~a< zMr{2~O|a;i-kwHkGvA=JnuUUnKagS|F>WmXOMDiK@Q8C22}dx#wCYkre*3n@jBb0( z?LPtGXFMV*Hhf}gNO{G0t?|$j0@A>7$)(B9zcrm(Eba`Mfd`yPx`TRU{BF2jwr#NM zh!^1x1Ll|UEL|J|l6x?3+AEY2UQgbnkpl8DCw_KI(nP33iC;OL5Qe2}$oiLVq;;=2 zXS7^lkL=xp#w-OS_T9YyFdTbEGMp1p$$Ba%dw4}<;F0$lo1AVi`3macU-&=tcx|^| z;T|8E(@y9KvlcscnfICZn>SA3WXoK$C+UUiYS*WrXtWV!`38>om91}z_~+aPjpvW7 zk14GGD`{OC=Kp&pUJADVrL6SKrasocM%_*)%gD-Jv}oRIewr5o%)-qg+yHJsZwy0- zUJ9wL7u06R1hjuWGrjxvWXG0tqvl&QlN5uXNUb$&o8Mv}a8$W8sIVA}P1E`l!t2NM z_~<2c7Vc*Q1x5Qr&ug4h7mE`;u>CoZ=ly>P@X%StqhENnxQC=NU8QrZ`L3YVq# zn2KMO`wNkfBTQ;sEGLX+ls))T*RC0yt9(34y?TFix%IjAyA8Mva&$E~6bI6NP$ucB z%|Jh3z9Al(H^q%ezj+8v@3pFh5aLDDtaHMoTzoTM<@9lOkE%n-BoJ5GE|WHW*Jf=$ z2ja3sCaRwBcBihtm@`x!AdG!gU>%VqHCF&8dW*9BNEWj-wEXawh z10Il(RLkzX5FDmq===@_tVxHxl6ud*+w!q>+IN+oX}{?n%=R(_M^Go~AKvP)bFcIi%*Q1}#-5sJ!bJ8K9mCuF)EMB& z_Z{r_f=^6dz!SMBa3z*QEssDJw-qjTS=ZRW<6)r87iO7d+Iodf^3!Z6`-{A4A$weh`?24Oj7QFAef*-XZlmf3!>{Oq&Z0ov9;sK-c=V!mw z`3Lw5?C0h{(vm7&kzcg0hv$}AjpY}B1F>3`nf6xh?1)}O3tuUy;6?Ll%lCc^(S7md zc7q-P7JwT0w_#-2w0b)r0M9miGaj;4A)}YVdMx)mLGDn(k>QMoQ2L|2g~F?wiC|~$ z_fB4m*kzOI3UI&WJJ)`>*=bCxWspWqPn zm+9=tT>F1Wd7P_!t^)~iQTYQ4v3xjmT=H)!gyI;baXrQyu6Yagn$lf9R+Q z`quSC;>iR+(!s>rVZJ(J74f85=xIA-N8ybFWu!w(RuuI;*$WUZ6uaAC==P@VCVHa=3Y3L-Xr z=;CUF>n;DYNQU4H_D{1-;=FkNXkFX`QSjipnwT9#o4jpfYc>8HJa!v`dA=E|T)VZu zQ@O(P9O`zwu-60UfWnHrPLQjE)SYw+*rQx?;fDA>^#D!1oE8U24u{ZU7WeV8Ody?r z0UknzNjOXYWxQph_Gs3-VkD!Lm^*~(YnAP5#_8G})>7+D*)%KC8*XQ-<1CLE+@+>r zAy-MiVjI|St=%ud6+;87oSIhcC@_$WG5t#aa8FUToZPiPeJK{5T&|kaoO!I0haVW( z0|d{SEggT=E1v$ysCvCJ8Qv6a>G8WDiyffRKJhwbk%dKxlk!IckWzaN`QS!=+i&cY zS}t7gTlI=MY|%+v-)l#fCsUm%szd07b4}|H0VIJW=*YG#No%Z(hTtW#Cu`I*I{)!- zLlHQ`9+2(mL;nS zr4h+-0p&*&UrW;Z#7t|VI!!88k>E+D(NgohN3cxHW_OYs_3`y^g%!a_y_bL;@Mj06 zt;W*x8yyl-pP-o`0vk*9+n8l9FxLBfk76G6G@c}DR`hGU0T&G{f9>p69A%B=MX$`~ zg!+WpOV_;JdA4%kDJTu;Xj56!>(y+jA#GuYws9vD=AGB6@b~@XIKMte+30y^+GxG@ zhuN4p>8W(!+^pW1?DW{rEWC%6r}@M)r1?hO{#}<%qia+$o>h$BmN|TgQrAlpb63g` zh`Hqw+=eC!sfj(TVLndCFS*s`6j>sj#OGeqctXSuVSfdGKNf8ymKL0a0Sm%T?j^y+ zy>^S~G^J<&epV~TF4B+S<>FH+C`Su`Y55iIkK>c_t4xWtmOs$7xGsE353}^M^V6~a z73+R%Su}rQQktD|B`&31Y88p8cbG3Y)|!)%tT!%ExRNAAASEOPw|trWX*jx>vkK4c+SCHSK8A z+ku&mXVY?jGvpjnXE4K&(1gN;5~j`iQ^|r;6-2(5|r-oUo!f7Abfu0OC9?b5WQI8p=ZnBZjK^ z=q$f=%dFPuA3lTcLZUAjEx*1*bT`*z}>>t?N<;^ip# z4zy)1j*D7%G;Of+Ug8%ZU)a4V6Phm1Hhfi(U*U;O--%m!T~K*j*&D>PIC+VXM&B48 zwD|2WJ$x5xw&e(q^~G0ma9_5G>*j-+oudVRO3GQ!+?vp}4qwKu2Ee}*k@GNC^@a-< zuH$-@9w&FIzEuWGh$AP!Wnn|?-x!a8id`!|)<)8Ihs@8{Ji=w_5+E@{C<-tkZUfd+ zdd=c@ZGq8qC=>v7)G4|XFeDqKBmiI|@ueP{l7X@iVE-Y9)BdNi#aTWqZb=9q4Zn>U z&HHkWy+y;L_<>D02S5) z7?fh0va@4DeGeHNVuv)PbUS4Keyu?WS3NLOwuZ-tg`Xs@UG|gN;a9~Y6_P&@UPYR~ z*tfvLA1M4drd{@R6>`bXP0zyJytA&NrOC%X z|Bwl2=BK9BT|;lfvzuQBrKRt^(M@Wxh1j{%{0&hTtST!i9y2|l4u)smQ-U5|2{mgX2mF&^f93P&kLiq zQUshVYdZ?__Bfx!CMIM?zu4}OccY(^MfqaNJOs%$WLXmN-O~ASYk|Gz$=q7uwoir_ z;EEyRJ!-#l*|8(#8uDN$V7*9MK|7t+9xyIW!hA<0vH3IEJNeNjOGUapWA&r;>vvzz zx)u6+DGD(A`D@E|g$+WrOF1$6Xv@~Wai5K!4?dV*HkY~7Z8+!MgIF0YW;ytWs`q&O z(|XEG;&LDOu??r9pLSV_JOTup9*J=*h?6+U;UyGT zlB7$(KOQ6?e2uk#%Z8anc=Gby&fuwhLE7+Vr;8Loqp)_BQck2|KNK)5_06Sb?4YM> zg3JVh|161J&x=0Q8zy5{rs~tHUWWU$0x4JcuBQs{ z5N=hTP?S|F=={E_8YSA|$^49KyY-F7{> zI$VFUPR`7QoZzpo%WXTjK-iXBWLY-2#cg)#*7{e}`SXwvrdo@~J)r#e9TmoF)FO$Xet<*{C>i@fzLWDh;|O1iIH>xhsaYj&Lv_Qa*KF`k z$VkwI^=V)jR|-H0S=SvYr0pgz82L86)l&O;%L%5=-W6wMJ|8fWz>9n*#l&s%eXDqg z{dfE)zw{8{81I243c{if-3U?2Mve2NOVnNvN@&OJ5uYgG&+=HNs(M=#2jfGy(W}Xr>C-cBQqeR84lsvDPvc42;f6dRvSWG;(CNKkr+68zv|{;V{)E98Kqr0dnJwla4rlx`PQJC? z;rIklR_0TZmQTt5ZYaH?3`OnpY5n~%1w{bMh@o#@z&Uf_o|4IZ+d(?T4Wkf$%HEs- zfYa}WGM#^iYUfcZLuQFy3<+O6bSd~qQZlq zj9|tUCeN%}P{tXb%pP0TRfXKjTGZffSVOre-5 zi}8-ff*F6wSKXbv)kv5xo*D9z$)EX!$TB1yebivjTz2K|xP0E4sB(I3VZ}TA;dB8MR&kERhaKF| z5`J+(6$~PS1vp+cAL(>@ru2m zHVl5A)vwU0ayxywi~O}|bgRbWTy+@lQ3*YM`AS=RQ9WB|F%U#O~xh8ty>hZW+1w5bVtbv0Qxd8b8N-h!Y&m(tDY! zdt(X0mgly(V6)h{j)Q#C66|1FHCo;oyrDCWA4}4H65m^5+RHD$p@@9w*t-x@{ME3h zvZZyU=#e*0$y6J^CQqX_c3to+jkV&sC~sM-?Q?bf$DgXx#pq}E$TJvI5I;ON zFqo(>++_NRxy1GTR)POsr*?7hFahs8p2jqs20a-!6egxBgGxvsZf52hFDlO!?^Yya zcO-33Q!O*OxwbxN5#|7SG-_c^8fn>!ohjFXZ%6k1>+778Cd)lU3mIBSnBezsa`4s? zs)PtQ`~m1b5XEp5FL^-C<0(xAUEjy})8H=wbjebeFnz34#P+cso3|}?Ybm?`&XxfQ z-I)Ru%u4+1Wc)Nyrt4cOe!|9QbrG1eN!vSj8##=xf98J-B?aFsO_u5rSG~R8QV-<} z;7i+kBFbu}^&`(EmQ$SUYbmyd2(T2Lpq2D7Xb)E`5B6`*+z}U--*D}rVCTFGPc3a+ z7C+DGhdxIPeVOtGA`97PJpV|}B-d}f=2K9O>X5WsdZsL?(j2pt{v&oAPdC)=`aR*H zcqZd2etSc=F1nsVJs#C6gXG29jgE`=k?}&A$xMHZQ6)ihqNB`ZHjW&OX*Ov9AUbJp zbk1*fO0QOiB_Ap;HezAQ-a<>J#?VQLamlaPC?}%(7=M`xPIYFmDu3h^wFx)uIK%TV z>ObH8M?aCUhW}x-`V_oS{t;$Uq(6q8C9$@4W=cPFSudKL`IyE^^bfOBTlIB{MNeAM z3Q|>rejR_~%w&?Zw!sBg8lDXs-L!x`mfozxs0M9HyS&K6C8FCH{w|rL8p~|rOZ!I^ z0p8z2eFiyRfm776y>vadDfGxCrCL#`bARnBi8b3Z_*&Z~52xAvP6vS=?}P9EVK-7P zCL?gXRrD2c1h(zEil-7}-jc z>KU{1Nb8f>N6_^HomICqw%IOW@9vNL(Q*vC|GdzPM^BY$Ox9shnYfW?B)V|6KSM?* z183SXX&pl=?!vvC|By{dcvSMxzQ}JfsS%vZcaoEF8dR+$?_X_mpU=(nsX*R>45MwcDBMe63Hy*C}~l#V7jfCov8W zTDw;53ygZpKMG%ICv7Y8Cxhn%y>9d_e1K;SMP*kaTJ=8+?!kLd@pRuJxL~9ga3~|W zXG@_3YVYV@7$FwjW3yZOTB&kyfq(BgOu^0_0&*2Fv;60`g5~|!ubjVe-}ri>+!&;F z5Sb>RaF1V9xkt4fk>@<*Fe$3Xrf>{p_#n(Ib4P z;ky3dzk0<4ABrNt-_$|T^j z2o7V9WQpum^(QL}tamayD{1omL-*65{h-cobipb~Zwb?J+tW&s*wmnNvwK74>3IAq z6mUjFRpqv(SWB*B-n>P~PtOd{?wvN26(j~ISx6>ZGJhKaPmDw(3NS;-q1k zjMe5V0;=enV1#m5`>|mR!Y4GgS)W2JX{;)?X=fH3q!!tMO;sW?me4&_Wxfw^rB%#- z18qJX0W#jkNPxtT0&#n7gbj|eAcux5>()RD2csXcK?L@lUiq$%<*KqQdXUT;T*YV} zWiPH9=-*Ie3uq5^D24Qo$E8&TYWN0#G2d zbc4Di;7X_}##YI@e(|gHD@B;9-(<`P1$E2kit87L7ZCcXm3Yxrnka2`k0GmMDGl(4 zJuL~8b1cfl>>Za_=acju5(1jTu=I%URovdjdwz*@xmVy&kxlPhmx>y1-Y<{jTpO>4 z_QXQZ7k!lP7g@;l!CHXn{m!Pi5(k4$DSrDzaYqck5UGXoML57-%YQcHs38{`ln9+ z5mt@KI(3_P?IYwmA~Wsw!IK2h>G&}nUxxP-x=>1|Nqu?~TF|(C3#%MVLr#EBAZ=E! zD~qh}7?FM%m`iNAE}Ba%84s}0IaX#E%9O~o>JSe@>T7cWZZCkqQYFY>QK74!8%_pHd*~VdK{#{OwLw2G3 z_stmFu(u>rG@sUy?gKOLoKxpr(PAt{#efdB4h8aOzG=*n70?qY))t=8>l#t z?jR=D^OSF(LW;x_g1`d?f4Cc~n}kDwE=;+V%)| zOb#0tSmG3U#eS?WXg&r#(XljS?7wQxBNW(r-wuF|njd0fcsz3sZ$l@fU)FW%!v@~G zxo|kVGd8jDVv34YgvJun)8(@;rR;JfdU#g!QK}qR;O5tv$dKPE{tAn@Mbv)Ktx#|*UXb_9 z=(}Da?791`I+!H)Lg6D5+OEi?$dVrDG=J>a<%g*yZwB)DCT6CElRC+>t(Dx#dHlhG zl_32VD{n7TPGYaf$KG=sm?4IK(3+Qb+5K!?fCSKcs5lSIXW)#%*C63}W+}=;LlVnn z{8o*`bSPle?eFmGjKfj-(l9tQ8wM%47>3{y=4w#VyD?E*Pw_o?M%Dhko;?yaU|W!V}KlAte3-R4h{=Cs8Q-#VA^Fi3>)mXfIWuAPaRJQ z7rp$E7tIwP|C@I8po>Ic<7ZKL(7Iu5jRomn6d*|@{>VZTI~@aN?m~4W20}F0xwdH5 z%U$Cs2hfX7N0MElLIi`tCh@h~O+sHGF$pGH%wE)mM+~Sdcf3s;eF=#qPF9O@$MuZJ zTIbs7U;!KAfb;gsnrctciTaU7+N+ttW}Lt7tAEC*g8ApGH*y?jS+oj4kE~2vyz&}FWJ?MTJD!*ictob=54FtX0U`c%1z~hPIut#946xO%n~Kx59KJ%QrMv@w#kDG zH3k|&SS7KxCrhH5se4%azuD^0AITYV4-8ZQrZb+3J~)e4?8)kPJpE)y6sOj@_?0B& zS1_=6=m#x{>5xe{Zqm7s0tj@BIeuIw&tQ)EeSfP7FG~p18N)T)m_pOJsEDH`fnZWn z0pR)pP~gOK(RXj#as{lPu=nAD~?a| zk5KyDKuR@~Q8qlp)VxQXyfZ%7LJbNl1RHSf*C4$;DP_4HTP;aS#vWXwQ9#Yf>cRkU zQZjJ^0bR=I{QeyB`r4@zWyg+e+;rHujSHHFqZn%=#NZ=wEOaFM$gKHgV17EEf&#@^ zh!wFssJ3;RhC~9!I7h$|#uM`euW~N>o}*z#M8+^(cdlayiiQHv);FPjy^=?+OB!u1 z6x9Bc$WUaLfIqYi>^hG2IB+A;0O8cTLS{C@GyqAENPgWivC=WL!Q|cFb!*RDwtHv0 zWA=Z7Hk|Ct`)~-?Dj#wMa|n>kQhR>7gCDqKYg)O?N6J6yr5A5Hoi2k^x?r_^Zt6UP zMfr&AmMdI-!))(L`13`It$W!>4JqUKF&zkg0q3CHaqEcQQaY^oIX*`!1zeF%?>=A8 zmuGbyO1yd=__8v!N@^PI8WEArGC~NZ!WS{S3A1}c&24|0j$%AiB)nv66&Ij1@7M?{ zcYnhp{;rIF=BbsAdibbsPZ~JjwKk?8v_V9y0OD9#RDZt+XLDN9*J&AkMMTT&XSS82 zl81b!QpUbf{uCZI{#4pk>NmxN6}qbJ5I|Vb^q4WlmOG_D+ktxU&2XaB0zM+ktE*|5 z#6bL(J~K!$di=qHhNcI_yeokZ0tKp9jbJs0+0kVB);wu1qDu(OgCRl`C5MuM`K>o# zzED_ns^+$jYTA0kO#J0SwvDS_Nx}5IGpGPk1d_Gp2PUo&!d2Md07gQD zcpcoy$Uj;Zz#-yc>B?6Iv{5{uJH(70V7`X+3b4AM{s7%~3>C!KdI_HYo&+!vgPV7A z(o*gf#Tbfz-x*=xwWHIP#xQ!)ylI@{{oGXNVjO2E9Ukm1||qRnx{ zNhE%8{i}KX>wv@+*W^e5>1e8xvg`$BQ|*L28+Vc^>d$pd8bQrqVS$kRJ+GD-z6UD6 zj7?X7p^{Pq0AZS(e9G;2IjXyo<8-rjSv7tpIY@YCPQK?ND^5k^%k2gAiUyJ@PyZ*J zDK?p4I{l4|Su_J~b&mszq-jd6 z{#ZS=y3#0s@A`ylo4Bn(;ZPd->aQp$*`>dQ%*yFqG_#=-qjOb|Bf>*k~=K@laU0+p6DDMf+|`Wp{JUmYE=4K0XbNS1^re6?@!7}7UcT07tr^EaHE zzepLvV{=A*zSS(!H*N|I^gH9p<}O(e{ku2Dq97Ofb_~xw^xHcTBdOb# zG;7^EbXXt=brYW`1n^J_55!SA$Fc4_&>7WNDp6I3c&)HTs8;#&D2xQ*@VRBo?U+f1 zInulsAL%Q`N8Z(eC`#=!8DmFHdD}`viVpa%WCei_gcW z48*r=XNU-9(}FH_wf9~0tjxLGC`e&)Ky#KHGQvT!$ln#+v+k zxg>Em_mTZ0dTQYr&1d|)RC81&^wM+v#775yNM;mLXVi(I5+$C%Gd6?OHMR*F3gJ5v z6dqE_%`B`~l~*7FWOddCRJ|N23}7#Me3eN(kxdmB7#4Ek8xrJTw1DXe8RHh#{H|+1 zkSFIs4Gq-<-PvD_N`Y*O-zjZ4o-a(l9QZBRw-NJP}IiqIkJH>0bKk?`fSgI_9dnE9>BH~Iak2h&?W^A zG`E0Yk2MV&`WVKO5*gZ}o^!VOti zi@h$fH$)dFyr*brhvt=z^Q2LEa!EkV#V1}@ChN8kpfF<&b8C!OLM5aA__jN4vi{{U zWY06Yy3^&Qe-uVko54qacwhC^Z376JyUgul*x~X z`>W|sf%B$KPn@6vnBG_`$S#Z75e)>K0vP^pu|05I7!K3~;FXw!4G`s`CL~}j5N)e% zl7}uX6W#x{+4}s(fwM(Z9^FB+$~M_ynDF4IP)^h;8YEFI52bKaR!bn;3v#D9|Hru3 z(0zP?iMACaZN!A(lBY={Fv=f413PJ0+lb{4>=U5ABXd5dlN*gCEKfKf(vKh5gVIH) z>go#(-`!bo0pCYrZw4U&_Kz5AB657b8#>TINy4=DD*MZ-Su?6);7MP0<|RWBnDGhv zu+9S&r9{S)$6VK<@A?1~%1<3`VZzK1uiW90PV&0JHgDfd+w8Pa0CZdiQKU`jl+QD;-Hd73g*`bXtiZF6^@_{*!3i#j*WhU-pmlD z9bFXM2R-)C>1=q!t)@fE@FW>2(`w=^B(QUJg&FjEN0(9Y-IDjaKkDNd@C`YrMoe@x%(#j15680^$j0~u8l-Z$hfRDG9B9!MFH?a zvSdTPL55{@&yC(NPR)l75b5KBV^Gw*R>cpGJvW~PC97Z^-YnuhTlP5r$*iWS^;dd1 zt3coM2=1%tXIi!f_Br8Xs^`f78CDvuf9xKsZxn`XP7ZODx#kGz%bUK`I?n-$=~GeI z1!&XK-i&oa*Yvd1-jgNGxXYg4(sfF$?s0i@buxzxhd=kiSzCd?Vs77!EC^i3FFJ+* z-sPcyVoQ2HAT>1WzOKthjx}loQ_p)|0k*DBGQf}G8gNJ^7m;cMUn$Z`#DcAZV$O`! zR@G_|bwMZ8tC@V%F1wqkZJb++gRVBO18)w=oN1%~Q!fXIQ`qA6`-tR#H#d@Nc2;9E z>xwn?^Q24?F1R~6kK*%Wz^q;Bx8zAr(NtiUL1^)%njIlN?%S1)yiHr{5zH+G=u&NJ zGUlh==TK!$J-}pvt2%@x5e?YT`0nE##oPf1s zknkfE3m^o0s(cEOnLf3H6EOMm5770ve%6E7L;wPuWFSe`&H>zcpxo1tRChx^5qS_$ zK`IFFqC=HFa08+A9?%-$;pL#e^$%8>J+O(~;MyPmoF4MhCma=ED3=ku014yH&(wts z{QX){+4~dSVO500jtaTSsnqr@a779up-)gcqb}R7-Fp1Hw`f`^iJ} zpaxKZ;N^7?DY&ybH$BBX&!MMIeg$nU%0$bdGq1-}WXAzs528bGJ!s@}#9V(ut^IU|I?T&~$}*s2Ol%QT1&K{~*Y?VLPk`?TI1HQB;C=|ksC@EOvo14W*4OZ1(?5Z2&Av~* z2+;dIDVC>5k9EM?=1b2p;{|fRj1%BQpJhoj=%-Kq-oH41a>kr44l){t^g*RfWynkD zmGs5D%A*?@m*+M^@l!37u4GBsic-X7ciJ>)6SZ4gtM|4&S5jF4ZWrzcsU^G5K`eh%pS-f zc;hNqyoeAlBBPu@Ir^G^p!$&>v+T$pqp-`!4oiM27*VBIAy-e z7k-uCUn47X4Ule;G~Lt4-evlKA-y=+cY7MOY+UN+A~w4$#_#_AG{6<1XV=c1#*3bU zllhfwS+9UEMoLZ?NVO7nMKJxFIq8P7hPsB!F!52#nas7*u_Gt0v(BH{OcaOnZH9lWWb#f$E|{X*T*1YHIml=V=0SO7FFU0Q$j^(%y;T%4uj243v=mF!tbi$wmtlyotFh>OMu!*ppI5BIC- z76~gs#|QLG5Nk;xJc~-JD7oC{44^<#iJI}Q|7JlgX-W5*Rsxei%VWj{2o{|(FVToF z2DVq+SL;x6UCn+>4pf)?k9t6R20kZ!GWiXX;nY#EA&wb z&%l-!$uCm@A4>6G2$no)n2N_lEPZX4=p-EN?!B@bFW|9Se}Ca$VE@XkSWP{fV9g`( zHTKN5;Wc$V2U>re7&KGr!aU@nvFzYOHz2X6R3N~S0~5%t_@?`vxi7>(^XOY$Hwml{ z8xGW+H;AR18H3#4O@IR;hpPF8S+0KrCh+pdsA5g~u=!+*{t-wXw72Cgd3cJ41!F*E z&#tK=$CJ8oRoXIb5b&!@=~%<)chP71fKoD0;E3hBfI&}=-Z7C_hA$I7(m!5a#Hpax zs%RK%(<(!%ec1cXPhW=z0A_<&DHi7y%@X1eQZ#@dTqqg_1L-%?-mXn`QO(~Jn(Jha zF}YL=_C+}?nCxUO0(M^hgfUAW1!Wun^AtS=Y2l*vFn;q^cB&l`Y&#%%*@bP?&P!07 zT87s?8wobrh{Fru23}9VMUEKU=ApT3PCpwIRt0f#L;*lFo&dmpTq;qNf9bg#91$)u z-Y_vTZ{Cwafft-td?>Ihb6{Psyx3U-A31F+X)Bwj?N?WDS&}^ktZq;_@mmMoKEREBSLcvvPjSK|h z3II#OUpwA8f^SwKptg9p1) z+h0*%%hQ&v^P}+66+70O{et>tHy^x;9+dy#hJ|E%Sv4lSoK%`!u7BsdFkbX^6J>0> zFMZ{CrEQa*H|cFdNpb`lF+~gnmoNf|;&Zy#4*8~)2Yz|oWuVCSU|4M%z zJkv?x=jn(lPk-sC#iwB-Yh&%``^pa>iqQfNS>5QkWq5A3wYFPfG`F}w3s9zff}&ik z`26Ur}~y9w__xST|`0}F{22J$TLxpT~7aN;H*nYp7E0D-NF5VhVg z0;{&Tj;s@yRAD@)v14~(OStfMoBaPe%`^E4nW`saW5-U&m<1s!}|BulK}3g@^uoZg{NPoNXOgnL5x1!^x%0Ap8 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 literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.Properties.Resources.resources b/KoiVM.GUI/obj/Debug/AstroNet.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.csproj.AssemblyReference.cache b/KoiVM.GUI/obj/Debug/AstroNet.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..f5e894aea93a73e58fa9d4feab241bc197ee1a40 GIT binary patch literal 11 QcmeZu3JP{+WMlvW01Ze1dH?_b literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.csproj.CopyComplete b/KoiVM.GUI/obj/Debug/AstroNet.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache b/KoiVM.GUI/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..4f0b4f4 --- /dev/null +++ b/KoiVM.GUI/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +ed0671a60ae8d01d128902104403d54454197983 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.csproj.FileListAbsolute.txt b/KoiVM.GUI/obj/Debug/AstroNet.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b8b61eb --- /dev/null +++ b/KoiVM.GUI/obj/Debug/AstroNet.csproj.FileListAbsolute.txt @@ -0,0 +1,44 @@ +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\AstroNet.exe.config +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\AstroNet.exe +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\AstroNet.pdb +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.csproj.AssemblyReference.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.Form1.resources +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.Properties.Resources.resources +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.csproj.GenerateResource.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.csproj.CopyComplete +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.exe +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\AstroNet\obj\Debug\AstroNet.pdb +D:\Reverse Engineering\reverse try\AstroNet\bin\AstroNet.exe.config +D:\Reverse Engineering\reverse try\AstroNet\bin\AstroNet.exe +D:\Reverse Engineering\reverse try\AstroNet\bin\AstroNet.pdb +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.AssemblyReference.cache +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.Form1.resources +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.Properties.Resources.resources +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.GenerateResource.cache +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.CopyComplete +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.exe +D:\Reverse Engineering\reverse try\AstroNet\AstroNet\obj\Debug\AstroNet.pdb +C:\Users\akibu\Desktop\hahaxdjsd\bin\AstroNet.exe.config +C:\Users\akibu\Desktop\hahaxdjsd\bin\AstroNet.exe +C:\Users\akibu\Desktop\hahaxdjsd\bin\AstroNet.pdb +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.csproj.AssemblyReference.cache +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.Form1.resources +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.Properties.Resources.resources +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.csproj.GenerateResource.cache +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.csproj.CopyComplete +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.exe +C:\Users\akibu\Desktop\hahaxdjsd\AstroNet\obj\Debug\AstroNet.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\AstroNet.exe.config +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\AstroNet.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\AstroNet.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.Form1.resources +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.Properties.Resources.resources +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.GenerateResource.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.AssemblyReference.cache diff --git a/KoiVM.GUI/obj/Debug/AstroNet.csproj.GenerateResource.cache b/KoiVM.GUI/obj/Debug/AstroNet.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..7a92f248dde80e168f6d1f9645314be05d723857 GIT binary patch literal 1012 zcma)4O>5gg5S3y{v1F&U4<&^5U`h`K8(|Sl3&8~J;5O8Ov<{(%eyzMCx_GS>yQ>oS z)T1x`f9-$he`se!5<+51<}ljbc{^|4=sB+AIDawdOVQlI^yx&*wK6KR@u(D%$7jqe zOgvT^dYyC7MyPz44B{m2$NgSsTuNJN80Jt~&1A20TBcIW-@xijEg&DJ{rzl^y~vV; z5BhAM`9$`7GsinHuOL5y0&))dT!8Tq9BMG{Cqja07fM@}N|=gNGmZ7#lo{OR3*dw} z5*p@K=~ZWDnFTr;A)x!&fEG-O@4zn=c%JJ#-TaE1{4|hz!nOz-)+o`dBj2a>JucHg zn*4_7+LPJJSXkoBr9?eAa1*~~=4++BqVe&LOEeW>h)}cg5x{=|Ga&9 zNOGd6l0gp)>zG^;M0yB-pDRF!%P_*!A}HMq8knMq(#s@9n_L7<-0z`)0<=Ycd_YU7 zQqRFu2xCov4%u<5XFo)ekTj1D)<25;_u6$yM5U%pHPY|wO}~8n P`D^XA2~N?b8b#wDd*T&; literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.exe b/KoiVM.GUI/obj/Debug/AstroNet.exe new file mode 100644 index 0000000000000000000000000000000000000000..6733020e0d61929290ae3bea24dedce64e328007 GIT binary patch literal 67072 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 literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/AstroNet.pdb b/KoiVM.GUI/obj/Debug/AstroNet.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3cf6fac10375fb9da05e828d0dfe925fa6ac14e1 GIT binary patch literal 36352 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 literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/KoiVM.GUI/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..161744310df73f0f23489d787d0647770afcb975 GIT binary patch literal 946 zcmcK3J!->15CvdumEa46Knj(1vnX+JYbKlbL4EfifhXd zaJgx=9C+|P9!$2(cPqvoq9|h3YA!yVtzDtx6ctcBJWnShkwXOzjD&bW1iDlRBr=rF zlC2t%_IYTnI|;tseBH0_cmBcO#IBG|^V^ZR(~9rVeBkCXB1 zEEHlPB@khW3Y*T4&>@%DqdD4^cxs&{zoiaoS-YY|Q~MPrq+$;x-<%sTgx36Hk|GF3 TleA7@=^x_|r2p?xd>?WJ)sZZu literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/KoiVM.GUI/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..248922d21aaa8e1dffa0380f9418b5a15bbcf1dd GIT binary patch literal 7785 zcmeHMTXPdP6t;5_akvzxlsj~3X$#cs*tr5TJOn!i7YG^KByHJDkauNAuq(NeHi?_b zbALvEL8m{lJ!gFjNuYh$o#Daj@$p)h^XVKN?Ve9crBkWYKXBnMUT4NYcrUrDq?S!% zuX7zzzh**@OS>q8K#EFfC1WS!i99qRCrj?z4+76(0AfVf~g^s;@Oe-!Cf~uwAL%_p9o( z0d*HXs4Gj~1AA{`VV$ZLGlOomu%Ve*1tt16ZwaYbi8U#>q9U|`@eN1URebN$jk@Z( zO)v42RopmMez=$AgPqzO8D@zq<{GIu)92fsp{mBHa<|v0+1BS@aD}Yn!t)!r+&!RC|7T1 z2Tf~6anZ_Ifp(?xd1JW7=KuE+TUw$E?!sc>;oLmSKX|yA`_wo-)1fBehs}81`kAXs zr$-^0L=+8HQxeKQ^O%Zx0gVDQi5MCMXk0JO%{1o0nQ;))nF+j|L;>kQDsu`1{7j+9 zpqNH+8pJd?12RR^k=9N_~(+=62@oC3`m4PeFU>=E~jy zIR~2lNEaVDrAqC&HS1K_4kV(?S`jTS7-Srx<#^J7HY>_$ouc%htoLWF`s$~ZV!h@p zYop{UGtP6#*I(LCUsoL2c;}Q@BW!`xkd)RTajG&c{hdLUJj{}8m%7_5^934r9>nzz z$KNLdT{}n?T3o;u*1$w7vXIQ6f?lgH;eH~}+$R^{ZW>DS_FR6h@G$cg{7+41(fRl# z7g5-|Tm&Au1osoR=lkSxbjS8s7Uu`G5hMk_#^)?>237ZUH`(K^Bv(OyGd}&0cLJv| zkdr$#W(>@mwt-AUH{=>%)#JljZnteWVnpORXx@rX^Aj$*@wHWj92n@B4RbC;!s@MB zoWH($6Mr0gdPDQbRfr8igU!zCcf1P)Z9&LkjsLj*=0vNF%>i_@% literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.AssemblyReference.cache b/KoiVM.GUI/obj/Debug/KoiVM.GUI.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..bd8560adc66b8f511ce9929631d6c0fe25207d70 GIT binary patch literal 9473 zcmeHMTWB0r7@pHyo775-R09DQDzv6yHkUTrU7ChuH?f*4yD@2CA)TE)*^HSzvz?jE zt(Epw&FGOg%igOhL@*VW2JrK>ydS1o71m|^CklO*7&h>EmU^O|_a`@XL9Q*B~J({a`_qDFHbKB}nL^JF!{iZnH9+TbD9W)CsfWUQ`X@i6$P zyQ8}^3@qb;wL_|q#Y>91V4$mmQPgx>a3BuNMkC4C3yI-Cmyf)^%B_?2+|GHQv3Vbj z1WmC2HToMt`R zt(-T_mIy}5F3@1_m--JD4gQ7QTXGec$vxF_zxB<{dW#8En(ZNqnw8Q-;E9}Tq!(mPEcu+KpN&Ce zZozn9Ul>nH1J7IrBPmf>xt6qxUU3=U{S}G5ev69ee`b#nU(^*2{VcJMu_Dr-1L+#P zoO{;P?ib)=EzO&79Z&Rkau7n`cJ9!wLnEo1ZB55QSE@E{FO9smc|W|lZ*~8vflGh1 z^j-TxKak2FKcRj6+0)N_a^U8f_RoL$RMx-Fj?JuHUl`t+`Sb3JDG(jx7(ZLFmas_d@2R zOkNdqX!I&-V=nj2o@?4{h!_aK-=$XGIWjt%Gri3Fk|m3j;725Kx|n4O$&y(MOKHr; zIBZmWtF?ApCnjL4Ly)D_$|Xqy=#{u7*Bf{mcA$vSk-*ld3>8L8Jv%tH@j1BmHq}!m)f7 zQnu)AGWG&sp9RmZD^Wq5hyC)3mh2=bv&4i@iv@0w=vd9El7^w|ElMJ;%!*EY5gg5S3y{v1F&U4<&^5U`h`K8(|Sl3&8~J;5O8Ov<{(%eyzMCx_GS>yQ>oS z)T1x`f9-$he`se!5<+51<}ljbc{^|4=sB+AIDawdOVQlI^yx&*wK6KR@u(D%$7jqe zOgvT^dYyC7MyPz44B{m2$NgSsTuNJN80Jt~&1A20TBcIW-@xijEg&DJ{rzl^y~vV; z5BhAM`9$`7GsinHuOL5y0&))dT!8Tq9BMG{Cqja07fM@}N|=gNGmZ7#lo{OR3*dw} z5*p@K=~ZWDnFTr;A)x!&fEG-O@4zn=c%JJ#-TaE1{4|hz!nOz-)+o`dBj2a>JucHg zn*4_7+LPJJSXkoBr9?eAa1*~~=4++BqVe&LOEeW>h)}cg5x{=|Ga&9 zNOGd6l0gp)>zG^;M0yB-pDRF!%P_*!A}HMq8knMq(#s@9n_L7<-0z`)0<=Ycd_YU7 zQqRFu2xCov4%u<5XFo)ekTj1D)<25;_u6$yM5U%pHPY|wO}~8n P`D^XA2~N?b8b#wDd*T&; literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/KoiVM.GUI/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..1bf188c2a2712635438f6ae7bf58cc108ba5206c GIT binary patch literal 3584 zcmeHJU2IfE6h3pi-7ZUkcF_hR(OXJQf8?f3@rQt>+iq=(wA5}3mSEuS-Rbt4yLXm5 zcT00=L7ZWjr7!zYm(CC8?zW79lfZxpCWeYUK@MxHJ z&Ybg|GiT16Gc$L`_P<4SL=;26d6VcoM%DT?y*F8cdhKHu*3u`dF1DU$yDzp*&AHMn z1)>nxMboi;Uxa3kn?cz(UEj>?$(lux=hm7v$t{uVi6Nrh%%G7Sy>@lAE40~M&3cHE zK#U6deFsJpy&s*ZN%PRDxK*o;bO=H;r;hqhDpU1e8zWIcXvg4pPla8X_7gR(thqO8 z5+#;dBp{D0ldX_1gphwwM$j$aDf(#^aECVyCWdL13>SqeT@C9reZUw zp8he3mKund0`H?eZggNrC|noO`W}O}!v}md({a$)LpNA5{={YqAe1g)D@MmESPR%E z!0|wK*8q!ls!}??&FZoGdir`*(8z@cI)@e7j-yT(uPQzp2CiR_%Hq3v zqJE5R(^+c766%<>4Ns3|Fm8gJ$5z?~JduN}8m6;-55Lc_Wuj}Wk6J2uZia}EbVurS zLx)~PcNms%!zohcq0qb{~+#A%nN*J;*RM;~BHlD?%h@GC&#^bskWAC1c_ zPQAt%@U6x*mZUS}gElioU!y;uog!t^qv>D9IwMJM09Pwj)~jT!iQY3lH(G%KWleMu z(vyg?9wqpRy$E`kra?`bp$SvXKCxj2t1>#ErFRlrjh7*vjiedMLHZ(+I29m$qosEf zzZgaA`DZPi(q0VuT}y9oIA{bqAB^UZ*BOIhO|{NO&?I$&Hc_uewrgsGwoqF0hjDGT zAkIIHZW;yBL$1b8(|TBR(hhowSvYwo$pZ2w=p%HF2C0oc1?{G*pnagD+S1Xy1MPL% zL{HOB#Kn*iRl#0k9(0jj1^v}ng2n)@dOd7npz7{5P;3bXx3zOf@2$5Dnh|{}?!+!v zN~31(925Dn$DgC3bVT5}Im#~j&RigT_bAU(p3mB4FC6t{X!{PQ$+921MLxAy;v=@7 z_c#snP)W}Rq8K4cqyi5Q4q|3G;3Svv0hgj2IJ~M$mr9=N*r6-@EDu9m)2yI9cg8_bPL#}>!)Ohv=6THaYs>nxZlR3CA=y=M81IekxkqmU zC;6<$9c>oXY1E$;x~A0#;nzl9t8P?cGorFJRUxt*ln+!7(Y`aTUGRkrT}M{uMOo7+ zQS-7qn0Fms(^nHhl}h4#sH90s%PoJ-Js9zK%CjIl!7vOUa8lZ&985 z9chvjQb2;niG#CfLQ5q`0c01W1UjilL1mzh=GF8YfB*JX%bA7o6JKBWP@Xz=jbbKa zi8_;5J(%X^dedNQ*J^%iLqnaBYEQM}HA`)8el})ODjiq)R65qcQk{z6d%#jdsiDMY zM-S}Xxb4d6x_GJ`y%W6=7dq9hNGGnpngF&D?*xk_lmetvk;VjzenUK}p4lm*WnW;I zaPo&199~k@oWi|6A{p!&^b3$?)ECvJT32aJ3E@c#-!0)6yhU}H^Ht?Q+4b@~Nc291 zFCYH!t|&kI8ND#(I)RX4HnjG-vTS?Vu$*^=Rk==Z7v1e!$GQq+QBjXSkJ?8!SOlx! zzBlrZP}S#5x3kf24<&r5cvEqAx9V?{iss;;2r`~GX1jjnjpJNjCZ)aE4j=m0-rZgv WAS-6Tto)q3^vsId2jKra1OEa(C>Lq~ literal 0 HcmV?d00001 diff --git a/KoiVM.GUI/solar-system.ico b/KoiVM.GUI/solar-system.ico new file mode 100644 index 0000000000000000000000000000000000000000..88321c7e2fd2712f5959927b8d0acfe78d4028be GIT binary patch literal 26773 zcmaG{1ydc(61^9fi$idC3GPmCcLD@=cY?#kJvamj?rtHtySux)yFR`@@OEo!dupm@ zceZAy`<(6u0Dzz8e+Lji0`Ri{0KR<6;YtdUNC0C^OCx&swJHBkw1%h54?e~K9N z88W0vB6M8J9^u0&YVYC0_O02QnFvumLMM8?BWiYqtm!gwL>h~q)5goYPkQ94KiWPoi51WnZ6+NNtH<EPf`Cqjk^pF;B8&oLC6e* z86&oSrzTi*O>a*lwV7{FTFpX1#~(=1pBOiq|0O<)MR?e`ii9H=Us`qPZ+_dh#^yw+G~2?1%~nB>yLXS1ebi^ZKGGw^^jNq0c6jNc8{%eEDE z9q}Ukq2K&6o~4sRKynY}O?!n>!t2SKG*Uo5=ETo#Nty_CF!3v=6T*;`4O!pPjkN9+ z=d_k9?2)~D(5R(=#J-#NABJPkNQQGFDp^kjWe=~Y3_S84W0TVjCSO54{0skwZm;dO zE8OEFbJ}q|Vb)^DPV-*#KJ$i2oNSqE_9VSfUG4f56pdD*EZ@Lkzq0jB5&xXqpt1bn z^-+cO`I45UA^v}7;-z5wU&>0)Z0e(ZYt(IYvW%?kMT_P==BIffz%1M>!VTaC^u`c` z=%tX_dO>Z5OhDV$Gt;|oPj+lcH)_5`(@8N1iqu*|w)xEl0!Nig0}6}5*fcFaA-sM} zjg4GFXW@PhP*Ai_^t{G7d9gU&4cnIkdEWPr01usIEc%64i|aVGnc}dcE~Ra;yKq^0 zkE!@oxvvljIl`pI#d6$eTG@jyb?utLxyr|*)T`%5r(3UEpIg7%07vIvhvGom56UE6 zwQ1-F%s0eC^TxPg={FCdsl67p5JJ3&nsrW?l#6fXtDHX0?oo9pnFQi0+hx+G@7kAFi=BVtVq1Iq)W$`NbN_n_8i3kud(VZ`8*YTV_t>~BX6Ib}cbB9{y zOmuJ?V*=LRWb=Ca-cdL)CQiRXQ$(w}OCB)=BCkH7bp6-%s6;&i)(oQsm<6~6gatW~ zb-)8Ml4{wV7lOkS44vOWzcuNQS5nWpcWXYjPMfbl%`WE`;=eb=)h;T(dD30fH^lc{ zTTkowtr4AjSY?cO(io@QVvl}(VZJd9#CHLo5Aj=gdXN=@|VDGKN5L* zw>8KE?X&LZy`UTC8}}RU!E7&sa0GRt{^2bSJNHUY!F*goWbCPlCQM{+(J{PDPYnT{ zeBZ%-FZjgd1w4_90#{-=)ba>qaa-YXmvz0)?_-r9xz*tIo0U;JboS9tJ(J%a2RL(I z^zj1>e=0iIZziR-RpHWNnTUM&*4oZ7W4va>v8wMkwb-hsE!KQUI^*dw04Hs@TZ5CXhlgOE_&C51aH{>;29$ge`MwH%dFD73tf!r)7|1&fZ+Z5GNg&#%ScLfix5AV ztj^$}F=O;aYxN0|)hzxQ#U_;I8M1A66kRM#|BtazIV;CoE`EqT`gd_PkbMfU?Vs84Rhw1*ybvsO2xC#Y!PhmAP{(ca!8(yhU(S+6^%EST z{xY2%nQPw293{ZVi~9(Hj=cT*+C_0ayPJGf~j7Cd# z)lUkwv5_bdX#70!Vj%_by^AXG3Cr?|i&*)t$IORyZqxwAxH@^o73WI>agx8Rfthi(t zNwy18u8PoEOkMH9x%H865r{|uF|B~(zm0*YiKw@6i7TZxzB#@hv8j=S=ma9UWC_yj zNwEgbm@3>rR9Hngm8f6erS*G6^BXMKT)X%<-dj6k;kh=Aos@9cG*qWOrHzjitb&M5 zA3C{O;d;vdERrEOgZLcNuTlpgofHt{BN^CFTyH`dVfCnsK^zhqcslQ#Qql^oHBf;yA-&26w4x zSjbhXWV@$u&KipH4Ehl&FOJ9mbCzq?{G-n>IunjE;F8 zZYTnW7su-u*a;U~xOT;?x^#gQx4_ct1&=iV&IMQ56YbCCya9vh{2@Kp4#=YyXz1YS z1g?mtZ8XDh3RZ?xyfIAq!-*}!@Kbv!W-^oMZ}b;q&>#@VEcSFcS00pNAV*(&oSDrF zMknoN1P6n0plomgvaVVpTIWo(&wR?4jmZ1}xCi zS{EeDiC2X$Xy4(#TqK(?85FS5k2vR$)=)6=rkGGH#N}qB<~O@TTUIPf7jmpiz${-- zJGW$!AQlP9Cf~M6RsMc*t@YmIsP&%5Pn*oD`u&9PveLb7KB)9yY+|7sW6$zeX3N1C?dl<{aY-T69K_6caS6C5@)N={g0e?uTROdGA& zzAzgzCq0#RoSW4flbvq+>4o>O@-&}#hBV)(+kfk_X><)r#xsiX+cJj_QR;eWV(v;A z0x`E-g4@tUAvLjwHO$8e`6aj7oFYr46ZqU~8c&GWA?&Z<@5iDI#L|K@FknI0iM=Ga zxYsT*oyHUmz|U&s*hTtbyj*-r1?6Y~FfG5r{c(I!ew8V)*766s7T1MO>0y?Bc78hc zALEWXh4HBe9xfvt0~$^hcUZa3J&NIrSU|DG^Bgz{oHQa#9Nimi9IxvV`ASW0` z5CUh*XNAs=B|+>}$g^)mPhpcdrCNXXN%@!!Ih~y5*k<7Q10WKNSx9(<+8@PosjU;6S{yrrsS98J!$X%7J3-w zLOBzFCZWDtWwc47Pl|Na{wK++$+q8kx2jlexm3ssp!3ZyFBRx+-i-su3)xVr4P5z2 z=QgcK#uAr0TaneH@RSs2ul(U5EHMT#u4PA?; z$#6VV6hM2BeD{VoOLeGjP9G82?o^Q-2ii5(f)iFW$07x91wfpqWiAR+K|^^cVZ=~1 z9i8R3Y?;*>&EqrpE+qPr(emp{M0arw)uvX(k1yj(X;@*Dal3C*no@BjtS`TKcW*Eo zLG20vLHP3Z31H*_Ts!n?>whoOo#Sf(3FI+C*@mtP@+&;C={s;MuL~+~D|>>N7AGzd(&!uF zgBHL2qlfQA&9)rovA+094(`o1aov1SvvaiIPf0oJo?R2V*5S+8)d2XHB61$as@`zn z!nI$o(&OY#*0;!D3322ExGZdl&5!a3sMxjeV{IgTcgXx)<`FKFmjH=rLQ#MTaVxN% z(rX64a|?`~L!khuqfXHshauS@B>?~%h%fcnlnj)G0Q(O)oc2GBEza^`aZ5t@X!vc+ zXx^7|>@EI2iXYe%xLLxnR{)c25qL3T(}O1DGy@7EfHaMk_OWovkRSolfe+GRhP9e!0jQX%;h;Z>vw zjD8C|90c8v+#=eVHoR{uMJlue6W{A~YX(v~q@`Ass*W{%umo{(Br{Q*S%dvj;A_mw)z|9|_mmRB+{j zVEHt1#OY4;$qzZQWfXwd6@-(T9y5^L5OeVRTX8UTU4Oc(^9KHq&5BVl>0?0opBF}J zr3g4#);1L8?J+)yO-#s)KC#_F?*>07i}J;kIS7(%$g(8jyQTBvmI8avli9VxZJ!J= zz!gKrd(?jAvSWM7HRQoyz3LAuKmvUnCk>;)WF`tc}4?dV*HkY~7Z8+!LgIF0YW;plP z)4Iz{;&LDO1R%;JkFvYc*uSTupSUbV9sz>bVF)8UU-_w&XH< zgjXUJD z2NCflt6Pv6;2HEf#0bj;3`doJKR_Y}l#Ko$-^qEMc7(4*98i7I)U1-Xp}OJIYchBz zWF+Xs`UDupl>$&g)^$e;X}ie_M!t=2wbXvza)PNdcg0zm&j*Yo@FL$yF>zac-zpwr z=a2v7mmVS<<2|rML0I&n8zD;BsBxZjirNc83GKK&;u9tOSsu+)Rd0>rVBGqvbOa#8 zS?}=+mzHP)UgA;p?#g;Wz`>S}!Gr3KW^yh26ll8gWrqMdBi4Xv8TKKF^7lpM`EyXH zdnDzniSc`VuZ)E2p5kzf>f$D1r{!32Bc8qSFal*L86-=QlLX0Rvb%g|`W2Bole?I^ zy*JFk#IB-*!BrIYp+I^3IJ|*FSkfHOR`V#Zwp^J@mu@&_$x;Zb$?%gO`nq-O{3Y?( zr0#9;a0Ev025~Rcx+R#BP{{b47st!7wunkY^IJb{q<^PZ;0Fo}Fbkfj8!jiD*d3Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public override void Enter(Node node) { + switch (node.Id) { + case (int) IRConstants.STR: + EnterStr((Token) node); + break; + case (int) IRConstants.NUM: + EnterNum((Token) node); + break; + case (int) IRConstants.REG: + EnterReg((Token) node); + break; + case (int) IRConstants.ASTTYPE: + EnterAsttype((Token) node); + break; + case (int) IRConstants.ID: + EnterId((Token) node); + break; + case (int) IRConstants.NEWLINE: + EnterNewline((Token) node); + break; + case (int) IRConstants.COMMENT: + EnterComment((Token) node); + break; + case (int) IRConstants.DATA_DECL: + EnterDataDecl((Token) node); + break; + case (int) IRConstants.TYPE_DECL: + EnterTypeDecl((Token) node); + break; + case (int) IRConstants.METHOD_DECL: + EnterMethodDecl((Token) node); + break; + case (int) IRConstants.INSTANCE: + EnterInstance((Token) node); + break; + case (int) IRConstants.CODE_HEADER: + EnterCodeHeader((Token) node); + break; + case (int) IRConstants.CODE_FOOTER: + EnterCodeFooter((Token) node); + break; + case (int) IRConstants.LEFT_ANG: + EnterLeftAng((Token) node); + break; + case (int) IRConstants.RIGHT_ANG: + EnterRightAng((Token) node); + break; + case (int) IRConstants.LEFT_PAREN: + EnterLeftParen((Token) node); + break; + case (int) IRConstants.RIGHT_PAREN: + EnterRightParen((Token) node); + break; + case (int) IRConstants.LEFT_BRACE: + EnterLeftBrace((Token) node); + break; + case (int) IRConstants.RIGHT_BRACE: + EnterRightBrace((Token) node); + break; + case (int) IRConstants.LEFT_BRACKET: + EnterLeftBracket((Token) node); + break; + case (int) IRConstants.RIGHT_BRACKET: + EnterRightBracket((Token) node); + break; + case (int) IRConstants.EQUALS: + EnterEquals((Token) node); + break; + case (int) IRConstants.COMMA: + EnterComma((Token) node); + break; + case (int) IRConstants.COLON: + EnterColon((Token) node); + break; + case (int) IRConstants.PLUS: + EnterPlus((Token) node); + break; + case (int) IRConstants.MINUS: + EnterMinus((Token) node); + break; + case (int) IRConstants.DOT: + EnterDot((Token) node); + break; + case (int) IRConstants.DELIM: + EnterDelim((Token) node); + break; + case (int) IRConstants.PROGRAM: + EnterProgram((Production) node); + break; + case (int) IRConstants.BLOCK: + EnterBlock((Production) node); + break; + case (int) IRConstants.DATA: + EnterData((Production) node); + break; + case (int) IRConstants.DATA_SIZE: + EnterDataSize((Production) node); + break; + case (int) IRConstants.DATA_CONTENT: + EnterDataContent((Production) node); + break; + case (int) IRConstants.DATA_STRING: + EnterDataString((Production) node); + break; + case (int) IRConstants.DATA_BUFFER: + EnterDataBuffer((Production) node); + break; + case (int) IRConstants.CODE: + EnterCode((Production) node); + break; + case (int) IRConstants.INSTR: + EnterInstr((Production) node); + break; + case (int) IRConstants.OP_CODE: + EnterOpCode((Production) node); + break; + case (int) IRConstants.OPERAND: + EnterOperand((Production) node); + break; + case (int) IRConstants.NUMBER: + EnterNumber((Production) node); + break; + case (int) IRConstants.REGISTER: + EnterRegister((Production) node); + break; + case (int) IRConstants.POINTER: + EnterPointer((Production) node); + break; + case (int) IRConstants.POINTER_OFFSET: + EnterPointerOffset((Production) node); + break; + case (int) IRConstants.REFERENCE: + EnterReference((Production) node); + break; + case (int) IRConstants.TYPE: + EnterType((Production) node); + break; + case (int) IRConstants.RAW_TYPE: + EnterRawType((Production) node); + break; + case (int) IRConstants.TYPE_REF_DECL: + EnterTypeRefDecl((Production) node); + break; + case (int) IRConstants.METHOD_REF_DECL: + EnterMethodRefDecl((Production) node); + break; + case (int) IRConstants.TYPE_REF: + EnterTypeRef((Production) node); + break; + case (int) IRConstants.METHOD_REF: + EnterMethodRef((Production) node); + break; + case (int) IRConstants.METHOD_RET_TYPE: + EnterMethodRetType((Production) node); + break; + case (int) IRConstants.METHOD_PARAMS: + EnterMethodParams((Production) node); + break; + } + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public override Node Exit(Node node) { + switch (node.Id) { + case (int) IRConstants.STR: + return ExitStr((Token) node); + case (int) IRConstants.NUM: + return ExitNum((Token) node); + case (int) IRConstants.REG: + return ExitReg((Token) node); + case (int) IRConstants.ASTTYPE: + return ExitAsttype((Token) node); + case (int) IRConstants.ID: + return ExitId((Token) node); + case (int) IRConstants.NEWLINE: + return ExitNewline((Token) node); + case (int) IRConstants.COMMENT: + return ExitComment((Token) node); + case (int) IRConstants.DATA_DECL: + return ExitDataDecl((Token) node); + case (int) IRConstants.TYPE_DECL: + return ExitTypeDecl((Token) node); + case (int) IRConstants.METHOD_DECL: + return ExitMethodDecl((Token) node); + case (int) IRConstants.INSTANCE: + return ExitInstance((Token) node); + case (int) IRConstants.CODE_HEADER: + return ExitCodeHeader((Token) node); + case (int) IRConstants.CODE_FOOTER: + return ExitCodeFooter((Token) node); + case (int) IRConstants.LEFT_ANG: + return ExitLeftAng((Token) node); + case (int) IRConstants.RIGHT_ANG: + return ExitRightAng((Token) node); + case (int) IRConstants.LEFT_PAREN: + return ExitLeftParen((Token) node); + case (int) IRConstants.RIGHT_PAREN: + return ExitRightParen((Token) node); + case (int) IRConstants.LEFT_BRACE: + return ExitLeftBrace((Token) node); + case (int) IRConstants.RIGHT_BRACE: + return ExitRightBrace((Token) node); + case (int) IRConstants.LEFT_BRACKET: + return ExitLeftBracket((Token) node); + case (int) IRConstants.RIGHT_BRACKET: + return ExitRightBracket((Token) node); + case (int) IRConstants.EQUALS: + return ExitEquals((Token) node); + case (int) IRConstants.COMMA: + return ExitComma((Token) node); + case (int) IRConstants.COLON: + return ExitColon((Token) node); + case (int) IRConstants.PLUS: + return ExitPlus((Token) node); + case (int) IRConstants.MINUS: + return ExitMinus((Token) node); + case (int) IRConstants.DOT: + return ExitDot((Token) node); + case (int) IRConstants.DELIM: + return ExitDelim((Token) node); + case (int) IRConstants.PROGRAM: + return ExitProgram((Production) node); + case (int) IRConstants.BLOCK: + return ExitBlock((Production) node); + case (int) IRConstants.DATA: + return ExitData((Production) node); + case (int) IRConstants.DATA_SIZE: + return ExitDataSize((Production) node); + case (int) IRConstants.DATA_CONTENT: + return ExitDataContent((Production) node); + case (int) IRConstants.DATA_STRING: + return ExitDataString((Production) node); + case (int) IRConstants.DATA_BUFFER: + return ExitDataBuffer((Production) node); + case (int) IRConstants.CODE: + return ExitCode((Production) node); + case (int) IRConstants.INSTR: + return ExitInstr((Production) node); + case (int) IRConstants.OP_CODE: + return ExitOpCode((Production) node); + case (int) IRConstants.OPERAND: + return ExitOperand((Production) node); + case (int) IRConstants.NUMBER: + return ExitNumber((Production) node); + case (int) IRConstants.REGISTER: + return ExitRegister((Production) node); + case (int) IRConstants.POINTER: + return ExitPointer((Production) node); + case (int) IRConstants.POINTER_OFFSET: + return ExitPointerOffset((Production) node); + case (int) IRConstants.REFERENCE: + return ExitReference((Production) node); + case (int) IRConstants.TYPE: + return ExitType((Production) node); + case (int) IRConstants.RAW_TYPE: + return ExitRawType((Production) node); + case (int) IRConstants.TYPE_REF_DECL: + return ExitTypeRefDecl((Production) node); + case (int) IRConstants.METHOD_REF_DECL: + return ExitMethodRefDecl((Production) node); + case (int) IRConstants.TYPE_REF: + return ExitTypeRef((Production) node); + case (int) IRConstants.METHOD_REF: + return ExitMethodRef((Production) node); + case (int) IRConstants.METHOD_RET_TYPE: + return ExitMethodRetType((Production) node); + case (int) IRConstants.METHOD_PARAMS: + return ExitMethodParams((Production) node); + } + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public override void Child(Production node, Node child) { + switch (node.Id) { + case (int) IRConstants.PROGRAM: + ChildProgram(node, child); + break; + case (int) IRConstants.BLOCK: + ChildBlock(node, child); + break; + case (int) IRConstants.DATA: + ChildData(node, child); + break; + case (int) IRConstants.DATA_SIZE: + ChildDataSize(node, child); + break; + case (int) IRConstants.DATA_CONTENT: + ChildDataContent(node, child); + break; + case (int) IRConstants.DATA_STRING: + ChildDataString(node, child); + break; + case (int) IRConstants.DATA_BUFFER: + ChildDataBuffer(node, child); + break; + case (int) IRConstants.CODE: + ChildCode(node, child); + break; + case (int) IRConstants.INSTR: + ChildInstr(node, child); + break; + case (int) IRConstants.OP_CODE: + ChildOpCode(node, child); + break; + case (int) IRConstants.OPERAND: + ChildOperand(node, child); + break; + case (int) IRConstants.NUMBER: + ChildNumber(node, child); + break; + case (int) IRConstants.REGISTER: + ChildRegister(node, child); + break; + case (int) IRConstants.POINTER: + ChildPointer(node, child); + break; + case (int) IRConstants.POINTER_OFFSET: + ChildPointerOffset(node, child); + break; + case (int) IRConstants.REFERENCE: + ChildReference(node, child); + break; + case (int) IRConstants.TYPE: + ChildType(node, child); + break; + case (int) IRConstants.RAW_TYPE: + ChildRawType(node, child); + break; + case (int) IRConstants.TYPE_REF_DECL: + ChildTypeRefDecl(node, child); + break; + case (int) IRConstants.METHOD_REF_DECL: + ChildMethodRefDecl(node, child); + break; + case (int) IRConstants.TYPE_REF: + ChildTypeRef(node, child); + break; + case (int) IRConstants.METHOD_REF: + ChildMethodRef(node, child); + break; + case (int) IRConstants.METHOD_RET_TYPE: + ChildMethodRetType(node, child); + break; + case (int) IRConstants.METHOD_PARAMS: + ChildMethodParams(node, child); + break; + } + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterStr(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitStr(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterNum(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitNum(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterReg(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitReg(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterAsttype(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitAsttype(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterId(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitId(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterNewline(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitNewline(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterComment(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitComment(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDataDecl(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDataDecl(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterTypeDecl(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitTypeDecl(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterMethodDecl(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitMethodDecl(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterInstance(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitInstance(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterCodeHeader(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitCodeHeader(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterCodeFooter(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitCodeFooter(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterLeftAng(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitLeftAng(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterRightAng(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitRightAng(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterLeftParen(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitLeftParen(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterRightParen(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitRightParen(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterLeftBrace(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitLeftBrace(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterRightBrace(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitRightBrace(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterLeftBracket(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitLeftBracket(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterRightBracket(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitRightBracket(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterEquals(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitEquals(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterComma(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitComma(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterColon(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitColon(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterPlus(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitPlus(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterMinus(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitMinus(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDot(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDot(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDelim(Token node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDelim(Token node) { + return node; + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterProgram(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitProgram(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildProgram(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterBlock(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitBlock(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildBlock(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterData(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitData(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildData(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDataSize(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDataSize(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildDataSize(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDataContent(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDataContent(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildDataContent(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDataString(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDataString(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildDataString(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterDataBuffer(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitDataBuffer(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildDataBuffer(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterCode(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitCode(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildCode(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterInstr(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitInstr(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildInstr(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterOpCode(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitOpCode(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildOpCode(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterOperand(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitOperand(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildOperand(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterNumber(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitNumber(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildNumber(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterRegister(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitRegister(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildRegister(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterPointer(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitPointer(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildPointer(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterPointerOffset(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitPointerOffset(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildPointerOffset(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterReference(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitReference(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildReference(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterType(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitType(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildType(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterRawType(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitRawType(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildRawType(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterTypeRefDecl(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitTypeRefDecl(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildTypeRefDecl(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterMethodRefDecl(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitMethodRefDecl(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildMethodRefDecl(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterTypeRef(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitTypeRef(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildTypeRef(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterMethodRef(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitMethodRef(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildMethodRef(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterMethodRetType(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitMethodRetType(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildMethodRetType(Production node, Node child) { + node.AddChild(child); + } + + /** + * Called when entering a parse tree node. + * + * the node being entered + * + * if the node analysis + * discovered errors + */ + public virtual void EnterMethodParams(Production node) { + } + + /** + * Called when exiting a parse tree node. + * + * the node being exited + * + * the node to add to the parse tree, or + * null if no parse tree should be created + * + * if the node analysis + * discovered errors + */ + public virtual Node ExitMethodParams(Production node) { + return node; + } + + /** + * Called when adding a child to a parse tree + * node. + * + * the parent node + * the child node, or null + * + * if the node analysis + * discovered errors + */ + public virtual void ChildMethodParams(Production node, Node child) { + node.AddChild(child); + } + } +} diff --git a/KoiVM/VMIR/Compiler/IRCompiler.cs b/KoiVM/VMIR/Compiler/IRCompiler.cs new file mode 100644 index 0000000..39adb24 --- /dev/null +++ b/KoiVM/VMIR/Compiler/IRCompiler.cs @@ -0,0 +1,396 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Text; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.RT.Mutation; +using KoiVM.VM; +using PerCederberg.Grammatica.Runtime; + +namespace KoiVM.VMIR.Compiler { + public class IRCompiler { + VMRuntime runtime; + ModuleDef module; + RTConstants constants; + Dictionary chunks = new Dictionary(); + Dictionary> codes = new Dictionary>(); + Dictionary memberRefs = new Dictionary(); + IRCompilerAssemblyFinder assemblyFinder; + + Dictionary pseudoVars = new Dictionary(); + List references = new List(); + + public IRCompiler(VMRuntime runtime, ModuleDef rtModule, RTConstants constants) { + this.runtime = runtime; + module = rtModule; + this.constants = constants; + assemblyFinder = new IRCompilerAssemblyFinder(rtModule); + } + + public BinaryChunk GetDataChunk(string name) { + return chunks[name]; + } + + public BasicBlock GetCodeBlock(string name) { + return codes[name]; + } + + public IEnumerable> GetCodeBlocks() { + return codes.Values; + } + + public void Compile(TextReader reader) { + var parser = new IRParser(reader); + var rootNode = parser.Parse(); + for (int i = 0; i < rootNode.Count; i++) { + var block = rootNode[i][0]; + if (block.Id == (int)IRConstants.DATA) + CompileData(block); + else if (block.Id == (int)IRConstants.CODE) + CompileCode(block); + else if (block.Id == (int)IRConstants.TYPE_REF_DECL) + CompileTypeDecl(block); + else if (block.Id == (int)IRConstants.METHOD_REF_DECL) + CompileMethodDecl(block); + } + ResolveReferences(); + } + + IIROperand ResolveReference(string name) { + var constant = constants.GetConstant(name); + if (constant != null) + return IRConstant.FromI4(constant.Value); + + BinaryChunk chunk; + if (chunks.TryGetValue(name, out chunk)) + return new IRDataTarget(chunk) { Name = name }; + + BasicBlock block; + if (codes.TryGetValue(name, out block)) + return new IRJumpTarget(block); + + IMemberRef memberRef; + if (memberRefs.TryGetValue(name, out memberRef)) + return new IRMetaTarget(memberRef); + + throw new InvalidOperationException("Unresolved reference: " + name); + } + + void ResolveReferences() { + foreach (var instr in references) { + if (instr.Operand1 is UnresolvedReference) + instr.Operand1 = ResolveReference(((UnresolvedReference)instr.Operand1).Name); + if (instr.Operand2 is UnresolvedReference) + instr.Operand2 = ResolveReference(((UnresolvedReference)instr.Operand2).Name); + } + } + + static readonly ByteConverter byteConverter = new ByteConverter(); + static readonly UInt32Converter uint32Converter = new UInt32Converter(); + static readonly UInt64Converter uint64Converter = new UInt64Converter(); + + static byte ParseByte(Token token) { + return (byte)byteConverter.ConvertFromString(token.Image); + } + + static uint ParseUInt32(Token token) { + return (uint)uint32Converter.ConvertFromString(token.Image); + } + + static ulong ParseUInt64(Token token) { + return (ulong)uint64Converter.ConvertFromString(token.Image); + } + + static float ParseR4(Token token) { + return float.Parse(token.Image); + } + + static double ParseR8(Token token) { + return double.Parse(token.Image); + } + + void CompileData(Node node) { + string name = ((Token)node[1]).Image; + byte[] chunk = null; + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.DATA_SIZE) { + chunk = new byte[ParseUInt32((Token)child[0])]; + break; + } + if (child.Id == (int)IRConstants.DATA_CONTENT) { + chunk = ReadDataContent(child); + break; + } + } + Debug.Assert(chunk != null); + var bin = new BinaryChunk(chunk); + ; + chunks[name] = bin; + runtime.AddChunk(bin); + } + + byte[] ReadDataContent(Node node) { + var content = node[1]; + if (content.Id == (int)IRConstants.DATA_STRING) { + var str = ((Token)content[0]).Image; + return Encoding.UTF8.GetBytes(str.Substring(1, str.Length - 2)); + } + if (content.Id == (int)IRConstants.DATA_BUFFER) { + var bytes = new List(); + for (int i = 0; i < content.Count; i++) { + if (content[i].Id == (int)IRConstants.NUM) + bytes.Add(ParseByte((Token)content[i])); + } + return bytes.ToArray(); + } + Debug.Assert(false); + return null; + } + + void CompileCode(Node node) { + string name = ((Token)node[1]).Image; + var instrs = new IRInstrList(); + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.INSTR) { + instrs.Add(ReadInstr(child)); + } + } + codes[name] = new BasicBlock(0, instrs); + } + + IRInstruction ReadInstr(Node node) { + var instr = new IRInstruction(IROpCode.NOP); + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.OP_CODE) { + instr.OpCode = (IROpCode)Enum.Parse(typeof(IROpCode), ((Token)child[0]).Image); + } + else if (child.Id == (int)IRConstants.OPERAND) { + if (instr.Operand1 == null) + instr.Operand1 = ReadOperand(child); + else + instr.Operand2 = ReadOperand(child); + } + } + if (instr.Operand1 is UnresolvedReference || instr.Operand2 is UnresolvedReference) + references.Add(instr); + return instr; + } + + IIROperand ReadOperand(Node node) { + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.NUMBER) { + return ReadNumber(child); + } + if (child.Id == (int)IRConstants.REGISTER) { + return ReadRegister(child); + } + if (child.Id == (int)IRConstants.POINTER) { + return ReadPointer(child); + } + if (child.Id == (int)IRConstants.REFERENCE) { + return ReadReference(child); + } + } + Debug.Assert(false); + return null; + } + + IRVariable GetTypedVariable(ASTType type, TypeSig rawType) { + Debug.Assert(rawType != null); + IRVariable ret; + if (!pseudoVars.TryGetValue(rawType, out ret)) { + ret = new IRVariable { + Name = "pesudo_" + rawType.ReflectionName, + Id = -1, + Type = type, + RawType = rawType, + VariableType = IRVariableType.VirtualRegister + }; + pseudoVars[rawType] = ret; + } + return ret; + } + + void ReadType(Node node, ref ASTType type, ref TypeSig rawType) { + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.ASTTYPE) { + type = (ASTType)Enum.Parse(typeof(ASTType), ((Token)child).Image); + } + else if (child.Id == (int)IRConstants.RAW_TYPE) { + var propertyName = ((Token)child[0]).Image; + var property = typeof(ICorLibTypes).GetProperty(propertyName); + rawType = (TypeSig)property.GetValue(module.CorLibTypes, null); + } + } + } + + IRConstant ReadNumber(Node node) { + var type = ASTType.I4; + TypeSig rawType = null; + object value = null; + + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.TYPE) { + ReadType(child, ref type, ref rawType); + } + else if (child.Id == (int)IRConstants.NUM) { + var token = (Token)child; + switch (type) { + case ASTType.I4: + value = (int)ParseUInt32(token); + break; + case ASTType.I8: + value = (long)ParseUInt64(token); + break; + case ASTType.R4: + value = ParseR4(token); + break; + case ASTType.R8: + value = ParseR8(token); + break; + } + } + } + return new IRConstant { + Type = type, + Value = value + }; + } + + IRRegister ReadRegister(Node node) { + var type = ASTType.I4; + TypeSig rawType = null; + VMRegisters? reg = null; + + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.TYPE) { + ReadType(child, ref type, ref rawType); + } + else if (child.Id == (int)IRConstants.REG) { + var token = (Token)child; + reg = (VMRegisters)Enum.Parse(typeof(VMRegisters), token.Image); + } + } + Debug.Assert(reg != null); + return new IRRegister(reg.Value, type) { + SourceVariable = rawType == null ? null : GetTypedVariable(type, rawType) + }; + } + + IRPointer ReadPointer(Node node) { + var type = ASTType.I4; + TypeSig rawType = null; + IRRegister reg = null; + int offset = 0; + + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.TYPE) { + ReadType(child, ref type, ref rawType); + } + else if (child.Id == (int)IRConstants.REGISTER) { + reg = ReadRegister(child); + } + else if (child.Id == (int)IRConstants.POINTER_OFFSET) { + offset = (int)ParseUInt32((Token)child[1]); + if (child[0].Id == (int)IRConstants.MINUS) + offset = -offset; + } + } + return new IRPointer { + Register = reg, + Type = type, + Offset = offset, + SourceVariable = rawType == null ? null : GetTypedVariable(type, rawType) + }; + } + + UnresolvedReference ReadReference(Node node) { + return new UnresolvedReference(((Token)node[0]).Image); + } + + class UnresolvedReference : IIROperand { + public UnresolvedReference(string name) { + Name = name; + } + + public string Name { get; private set; } + + public ASTType Type { + get { return ASTType.Ptr; } + } + + public override string ToString() { + return Name; + } + } + + TypeSig ReadTypeRef(Node node) { + var sig = ((Token)node[0]).Image; + sig = sig.Substring(1, sig.Length - 2); + return TypeNameParser.ParseAsTypeSigReflectionThrow(module, sig, assemblyFinder); + } + + MemberRef ReadMethodRef(Node node) { + string name = ""; + TypeSig declType = null; + TypeSig retType = null; + var paramSigs = new List(); + bool instance = false; + + for (int i = 0; i < node.Count; i++) { + var child = node[i]; + if (child.Id == (int)IRConstants.STR) { + name = ((Token)child).Image; + name = name.Substring(1, name.Length - 2); + } + else if (child.Id == (int)IRConstants.INSTANCE) { + instance = true; + } + else if (child.Id == (int)IRConstants.METHOD_RET_TYPE) { + retType = ReadTypeRef(child[0]); + } + else if (child.Id == (int)IRConstants.TYPE_REF) { + declType = ReadTypeRef(child); + } + else if (child.Id == (int)IRConstants.METHOD_PARAMS) { + for (int j = 0; j < child.Count; j++) { + if (child[j].Id == (int)IRConstants.TYPE_REF) + paramSigs.Add(ReadTypeRef(child[j])); + } + } + } + + if (instance) + return new MemberRefUser(module, name, MethodSig.CreateInstance(retType, paramSigs.ToArray()), + declType.ToTypeDefOrRef()); + return new MemberRefUser(module, name, MethodSig.CreateStatic(retType, paramSigs.ToArray()), + declType.ToTypeDefOrRef()); + } + + void CompileTypeDecl(Node node) { + string name = ((Token)node[1]).Image; + var typeRef = ReadTypeRef(node[2]); + memberRefs[name] = typeRef.ToTypeDefOrRef(); + } + + void CompileMethodDecl(Node node) { + string name = ((Token)node[1]).Image; + var methodRef = ReadMethodRef(node[2]); + memberRefs[name] = methodRef; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Compiler/IRCompilerAssemblyFinder.cs b/KoiVM/VMIR/Compiler/IRCompilerAssemblyFinder.cs new file mode 100644 index 0000000..dec6806 --- /dev/null +++ b/KoiVM/VMIR/Compiler/IRCompilerAssemblyFinder.cs @@ -0,0 +1,21 @@ +using System; +using dnlib.DotNet; + +namespace KoiVM.VMIR.Compiler { + public class IRCompilerAssemblyFinder : IAssemblyRefFinder { + readonly ModuleDef module; + readonly AssemblyDef corlib; + + public IRCompilerAssemblyFinder(ModuleDef module) { + this.module = module; + corlib = module.Context.AssemblyResolver.Resolve(module.CorLibTypes.AssemblyRef, module); + } + + public AssemblyRef FindAssemblyRef(TypeRef nonNestedTypeRef) { + if (corlib.Find(nonNestedTypeRef) != null) { + return module.CorLibTypes.AssemblyRef; + } + return AssemblyRef.CurrentAssembly; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Compiler/IRConstants.cs b/KoiVM/VMIR/Compiler/IRConstants.cs new file mode 100644 index 0000000..837ab13 --- /dev/null +++ b/KoiVM/VMIR/Compiler/IRConstants.cs @@ -0,0 +1,68 @@ +/* + * IRConstants.cs + * + * THIS FILE HAS BEEN GENERATED AUTOMATICALLY. DO NOT EDIT! + */ + +namespace KoiVM.VMIR.Compiler { + + /** + * An enumeration with token and production node + * constants. + */ + internal enum IRConstants { + STR = 1001, + NUM = 1002, + REG = 1003, + ASTTYPE = 1004, + ID = 1005, + WHITESPACE = 1006, + NEWLINE = 1007, + COMMENT = 1008, + DATA_DECL = 1009, + TYPE_DECL = 1010, + METHOD_DECL = 1011, + INSTANCE = 1012, + CODE_HEADER = 1013, + CODE_FOOTER = 1014, + LEFT_ANG = 1015, + RIGHT_ANG = 1016, + LEFT_PAREN = 1017, + RIGHT_PAREN = 1018, + LEFT_BRACE = 1019, + RIGHT_BRACE = 1020, + LEFT_BRACKET = 1021, + RIGHT_BRACKET = 1022, + EQUALS = 1023, + COMMA = 1024, + COLON = 1025, + PLUS = 1026, + MINUS = 1027, + DOT = 1028, + DELIM = 1029, + PROGRAM = 2001, + BLOCK = 2002, + DATA = 2003, + DATA_SIZE = 2004, + DATA_CONTENT = 2005, + DATA_STRING = 2006, + DATA_BUFFER = 2007, + CODE = 2008, + INSTR = 2009, + OP_CODE = 2010, + OPERAND = 2011, + NUMBER = 2012, + REGISTER = 2013, + POINTER = 2014, + POINTER_OFFSET = 2015, + REFERENCE = 2016, + TYPE = 2017, + RAW_TYPE = 2018, + TYPE_REF_DECL = 2019, + METHOD_REF_DECL = 2020, + TYPE_REF = 2021, + METHOD_REF = 2022, + METHOD_RET_TYPE = 2023, + METHOD_PARAMS = 2024 + } +} diff --git a/KoiVM/VMIR/Compiler/IRParser.cs b/KoiVM/VMIR/Compiler/IRParser.cs new file mode 100644 index 0000000..d1df393 --- /dev/null +++ b/KoiVM/VMIR/Compiler/IRParser.cs @@ -0,0 +1,455 @@ +/* + * IRParser.cs + * + * THIS FILE HAS BEEN GENERATED AUTOMATICALLY. DO NOT EDIT! + */ + +using System.IO; + +using PerCederberg.Grammatica.Runtime; + +namespace KoiVM.VMIR.Compiler { + + /** + * A token stream parser. + */ + internal class IRParser : RecursiveDescentParser { + + /** + * An enumeration with the generated production node + * identity constants. + */ + private enum SynteticPatterns { + SUBPRODUCTION_1 = 3001, + SUBPRODUCTION_2 = 3002, + SUBPRODUCTION_3 = 3003, + SUBPRODUCTION_4 = 3004, + SUBPRODUCTION_5 = 3005, + SUBPRODUCTION_6 = 3006, + SUBPRODUCTION_7 = 3007, + SUBPRODUCTION_8 = 3008, + SUBPRODUCTION_9 = 3009, + SUBPRODUCTION_10 = 3010, + SUBPRODUCTION_11 = 3011, + SUBPRODUCTION_12 = 3012 + } + + /** + * Creates a new parser with a default analyzer. + * + * the input stream to read from + * + * if the parser + * couldn't be initialized correctly + */ + public IRParser(TextReader input) + : base(input) { + + CreatePatterns(); + } + + /** + * Creates a new parser. + * + * the input stream to read from + * + * the analyzer to parse with + * + * if the parser + * couldn't be initialized correctly + */ + public IRParser(TextReader input, IRAnalyzer analyzer) + : base(input, analyzer) { + + CreatePatterns(); + } + + /** + * Creates a new tokenizer for this parser. Can be overridden + * by a subclass to provide a custom implementation. + * + * the input stream to read from + * + * the tokenizer created + * + * if the tokenizer + * couldn't be initialized correctly + */ + protected override Tokenizer NewTokenizer(TextReader input) { + return new IRTokenizer(input); + } + + /** + * Initializes the parser by creating all the production + * patterns. + * + * if the parser + * couldn't be initialized correctly + */ + private void CreatePatterns() { + ProductionPattern pattern; + ProductionPatternAlternative alt; + + pattern = new ProductionPattern((int) IRConstants.PROGRAM, + "Program"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.BLOCK, 1, -1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.BLOCK, + "Block"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_1, 1, 1); + alt.AddToken((int) IRConstants.NEWLINE, 0, -1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.DATA, + "Data"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.DATA_DECL, 1, 1); + alt.AddToken((int) IRConstants.ID, 1, 1); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_2, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.DATA_SIZE, + "DataSize"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.NUM, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.DATA_CONTENT, + "DataContent"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.EQUALS, 1, 1); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_3, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.DATA_STRING, + "DataString"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.STR, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.DATA_BUFFER, + "DataBuffer"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_BRACKET, 1, 1); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_4, 0, -1); + alt.AddToken((int) IRConstants.NUM, 1, 1); + alt.AddToken((int) IRConstants.RIGHT_BRACKET, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_BRACKET, 1, 1); + alt.AddToken((int) IRConstants.RIGHT_BRACKET, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.CODE, + "Code"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.CODE_HEADER, 1, 1); + alt.AddToken((int) IRConstants.ID, 1, 1); + alt.AddToken((int) IRConstants.NEWLINE, 1, 1); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_6, 0, -1); + alt.AddToken((int) IRConstants.CODE_FOOTER, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.INSTR, + "Instr"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.OP_CODE, 1, 1); + alt.AddToken((int) IRConstants.NEWLINE, 1, -1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.OP_CODE, 1, 1); + alt.AddProduction((int) IRConstants.OPERAND, 1, 1); + alt.AddToken((int) IRConstants.NEWLINE, 1, -1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.OP_CODE, 1, 1); + alt.AddProduction((int) IRConstants.OPERAND, 1, 1); + alt.AddToken((int) IRConstants.COMMA, 1, 1); + alt.AddProduction((int) IRConstants.OPERAND, 1, 1); + alt.AddToken((int) IRConstants.NEWLINE, 1, -1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.OP_CODE, + "OpCode"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.ID, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.OPERAND, + "Operand"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.NUMBER, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.REGISTER, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.POINTER, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_BRACE, 1, 1); + alt.AddProduction((int) IRConstants.REFERENCE, 1, 1); + alt.AddToken((int) IRConstants.RIGHT_BRACE, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.NUMBER, + "Number"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_7, 0, 1); + alt.AddToken((int) IRConstants.NUM, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.REGISTER, + "Register"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_8, 0, 1); + alt.AddToken((int) IRConstants.REG, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.POINTER, + "Pointer"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_9, 0, 1); + alt.AddToken((int) IRConstants.LEFT_BRACKET, 1, 1); + alt.AddProduction((int) IRConstants.REGISTER, 1, 1); + alt.AddProduction((int) IRConstants.POINTER_OFFSET, 0, 1); + alt.AddToken((int) IRConstants.RIGHT_BRACKET, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.POINTER_OFFSET, + "PointerOffset"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_10, 1, 1); + alt.AddToken((int) IRConstants.NUM, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.REFERENCE, + "Reference"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.ID, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.TYPE, + "Type"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.ASTTYPE, 1, 1); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_11, 0, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.RAW_TYPE, + "RawType"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.ID, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.TYPE_REF_DECL, + "TypeRefDecl"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.TYPE_DECL, 1, 1); + alt.AddToken((int) IRConstants.ID, 1, 1); + alt.AddProduction((int) IRConstants.TYPE_REF, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.METHOD_REF_DECL, + "MethodRefDecl"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.METHOD_DECL, 1, 1); + alt.AddToken((int) IRConstants.ID, 1, 1); + alt.AddProduction((int) IRConstants.METHOD_REF, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.TYPE_REF, + "TypeRef"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.STR, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.METHOD_REF, + "MethodRef"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.INSTANCE, 0, 1); + alt.AddProduction((int) IRConstants.METHOD_RET_TYPE, 1, 1); + alt.AddProduction((int) IRConstants.TYPE_REF, 1, 1); + alt.AddToken((int) IRConstants.DELIM, 1, 1); + alt.AddToken((int) IRConstants.STR, 1, 1); + alt.AddProduction((int) IRConstants.METHOD_PARAMS, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.METHOD_RET_TYPE, + "MethodRetType"); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.TYPE_REF, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) IRConstants.METHOD_PARAMS, + "MethodParams"); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_PAREN, 1, 1); + alt.AddProduction((int) IRConstants.TYPE_REF, 1, 1); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_12, 0, -1); + alt.AddToken((int) IRConstants.RIGHT_PAREN, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_PAREN, 1, 1); + alt.AddToken((int) IRConstants.RIGHT_PAREN, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_1, + "Subproduction1"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.COMMENT, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.DATA, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.CODE, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.TYPE_REF_DECL, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.METHOD_REF_DECL, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_2, + "Subproduction2"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_PAREN, 1, 1); + alt.AddProduction((int) IRConstants.DATA_SIZE, 1, 1); + alt.AddToken((int) IRConstants.RIGHT_PAREN, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.DATA_CONTENT, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_3, + "Subproduction3"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.DATA_BUFFER, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.DATA_STRING, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_4, + "Subproduction4"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.NUM, 1, 1); + alt.AddToken((int) IRConstants.COMMA, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_5, + "Subproduction5"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.COMMENT, 1, 1); + alt.AddToken((int) IRConstants.NEWLINE, 1, -1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_6, + "Subproduction6"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) SynteticPatterns.SUBPRODUCTION_5, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.INSTR, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_7, + "Subproduction7"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.TYPE, 1, 1); + alt.AddToken((int) IRConstants.COLON, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_8, + "Subproduction8"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.TYPE, 1, 1); + alt.AddToken((int) IRConstants.COLON, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_9, + "Subproduction9"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddProduction((int) IRConstants.TYPE, 1, 1); + alt.AddToken((int) IRConstants.COLON, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_10, + "Subproduction10"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.PLUS, 1, 1); + pattern.AddAlternative(alt); + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.MINUS, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_11, + "Subproduction11"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.LEFT_PAREN, 1, 1); + alt.AddProduction((int) IRConstants.RAW_TYPE, 1, 1); + alt.AddToken((int) IRConstants.RIGHT_PAREN, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + + pattern = new ProductionPattern((int) SynteticPatterns.SUBPRODUCTION_12, + "Subproduction12"); + pattern.Synthetic = true; + alt = new ProductionPatternAlternative(); + alt.AddToken((int) IRConstants.COMMA, 1, 1); + alt.AddProduction((int) IRConstants.TYPE_REF, 1, 1); + pattern.AddAlternative(alt); + AddPattern(pattern); + } + } +} diff --git a/KoiVM/VMIR/Compiler/IRTokenizer.cs b/KoiVM/VMIR/Compiler/IRTokenizer.cs new file mode 100644 index 0000000..bd8b21f --- /dev/null +++ b/KoiVM/VMIR/Compiler/IRTokenizer.cs @@ -0,0 +1,219 @@ +/* + * IRTokenizer.cs + * + * THIS FILE HAS BEEN GENERATED AUTOMATICALLY. DO NOT EDIT! + */ + +using System.IO; + +using PerCederberg.Grammatica.Runtime; + +namespace KoiVM.VMIR.Compiler { + + /** + * A character stream tokenizer. + */ + internal class IRTokenizer : Tokenizer { + + /** + * Creates a new tokenizer for the specified input + * stream. + * + * the input stream to read + * + * if the tokenizer + * couldn't be initialized correctly + */ + public IRTokenizer(TextReader input) + : base(input, false) { + + CreatePatterns(); + } + + /** + * Initializes the tokenizer by creating all the token + * patterns. + * + * if the tokenizer + * couldn't be initialized correctly + */ + private void CreatePatterns() { + TokenPattern pattern; + + pattern = new TokenPattern((int) IRConstants.STR, + "STR", + TokenPattern.PatternType.REGEXP, + "(\"[^\"]*\"|'[^']*')"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.NUM, + "NUM", + TokenPattern.PatternType.REGEXP, + "(0x[0-9a-fA-F]+|-?[0-9]+(.[0-9]+)?)"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.REG, + "REG", + TokenPattern.PatternType.REGEXP, + "(R0|R1|R2|R3|R4|R5|R6|R7|BP|SP|IP|FL|K1|K2|M1|M2)"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.ASTTYPE, + "ASTTYPE", + TokenPattern.PatternType.REGEXP, + "(I4|I8|R4|R8|O|Ptr|ByRef)"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.ID, + "ID", + TokenPattern.PatternType.REGEXP, + "[a-zA-Z_][a-zA-Z0-9_]*"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.WHITESPACE, + "WHITESPACE", + TokenPattern.PatternType.REGEXP, + "[ \\t]+"); + pattern.Ignore = true; + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.NEWLINE, + "NEWLINE", + TokenPattern.PatternType.REGEXP, + "[\\r\\n]+"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.COMMENT, + "COMMENT", + TokenPattern.PatternType.REGEXP, + "//[^\\r\\n]*"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.DATA_DECL, + "DATA_DECL", + TokenPattern.PatternType.STRING, + ".data"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.TYPE_DECL, + "TYPE_DECL", + TokenPattern.PatternType.STRING, + ".type"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.METHOD_DECL, + "METHOD_DECL", + TokenPattern.PatternType.STRING, + ".method"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.INSTANCE, + "INSTANCE", + TokenPattern.PatternType.STRING, + ".instance"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.CODE_HEADER, + "CODE_HEADER", + TokenPattern.PatternType.STRING, + ".code"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.CODE_FOOTER, + "CODE_FOOTER", + TokenPattern.PatternType.STRING, + ".end"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.LEFT_ANG, + "LEFT_ANG", + TokenPattern.PatternType.STRING, + "<"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.RIGHT_ANG, + "RIGHT_ANG", + TokenPattern.PatternType.STRING, + ">"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.LEFT_PAREN, + "LEFT_PAREN", + TokenPattern.PatternType.STRING, + "("); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.RIGHT_PAREN, + "RIGHT_PAREN", + TokenPattern.PatternType.STRING, + ")"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.LEFT_BRACE, + "LEFT_BRACE", + TokenPattern.PatternType.STRING, + "{"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.RIGHT_BRACE, + "RIGHT_BRACE", + TokenPattern.PatternType.STRING, + "}"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.LEFT_BRACKET, + "LEFT_BRACKET", + TokenPattern.PatternType.STRING, + "["); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.RIGHT_BRACKET, + "RIGHT_BRACKET", + TokenPattern.PatternType.STRING, + "]"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.EQUALS, + "EQUALS", + TokenPattern.PatternType.STRING, + "="); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.COMMA, + "COMMA", + TokenPattern.PatternType.STRING, + ","); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.COLON, + "COLON", + TokenPattern.PatternType.STRING, + ":"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.PLUS, + "PLUS", + TokenPattern.PatternType.STRING, + "+"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.MINUS, + "MINUS", + TokenPattern.PatternType.STRING, + "-"); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.DOT, + "DOT", + TokenPattern.PatternType.STRING, + "."); + AddPattern(pattern); + + pattern = new TokenPattern((int) IRConstants.DELIM, + "DELIM", + TokenPattern.PatternType.STRING, + "::"); + AddPattern(pattern); + } + } +} diff --git a/KoiVM/VMIR/IRContext.cs b/KoiVM/VMIR/IRContext.cs new file mode 100644 index 0000000..fd331ea --- /dev/null +++ b/KoiVM/VMIR/IRContext.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR { + public class IRContext { + List vRegs = new List(); + Dictionary varMap = new Dictionary(); + IRVariable[] locals; + IRVariable[] args; + Dictionary ehVars; + + public MethodDef Method { get; private set; } + + public bool IsRuntime { get; set; } + + public IRContext(MethodDef method, CilBody body) { + Method = method; + IsRuntime = false; + + locals = new IRVariable[body.Variables.Count]; + for (int i = 0; i < locals.Length; i++) { + if (body.Variables[i].Type.IsPinned) + throw new NotSupportedException("Pinned variables are not supported."); + + locals[i] = new IRVariable { + Id = i, + Name = "local_" + i, + Type = TypeInference.ToASTType(body.Variables[i].Type), + RawType = body.Variables[i].Type, + VariableType = IRVariableType.Local + }; + } + + args = new IRVariable[method.Parameters.Count]; + for (int i = 0; i < args.Length; i++) + args[i] = new IRVariable { + Id = i, + Name = "arg_" + i, + Type = TypeInference.ToASTType(method.Parameters[i].Type), + RawType = method.Parameters[i].Type, + VariableType = IRVariableType.Argument + }; + + ehVars = new Dictionary(); + int id = -1; + foreach (var eh in body.ExceptionHandlers) { + id++; + if (eh.HandlerType == ExceptionHandlerType.Fault || + eh.HandlerType == ExceptionHandlerType.Finally) + continue; + var type = eh.CatchType.ToTypeSig(); + ehVars.Add(eh, new IRVariable { + Id = id, + Name = "ex_" + id, + Type = TypeInference.ToASTType(type), + RawType = type, + VariableType = IRVariableType.VirtualRegister + }); + } + } + + public IRVariable AllocateVRegister(ASTType type) { + var vReg = new IRVariable { + Id = vRegs.Count, + Name = "vreg_" + vRegs.Count, + Type = type, + VariableType = IRVariableType.VirtualRegister + }; + vRegs.Add(vReg); + return vReg; + } + + public IRVariable ResolveVRegister(ILASTVariable variable) { + if (variable.VariableType == ILASTVariableType.ExceptionVar) + return ResolveExceptionVar((ExceptionHandler)variable.Annotation); + + IRVariable vReg; + if (varMap.TryGetValue(variable, out vReg)) + return vReg; + vReg = AllocateVRegister(variable.Type); + varMap[variable] = vReg; + return vReg; + } + + public IRVariable ResolveParameter(Parameter param) { + return args[param.Index]; + } + + public IRVariable ResolveLocal(Local local) { + return locals[local.Index]; + } + + public IRVariable[] GetParameters() { + return args; + } + + public IRVariable ResolveExceptionVar(ExceptionHandler eh) { + return ehVars[eh]; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/IROpCode.cs b/KoiVM/VMIR/IROpCode.cs new file mode 100644 index 0000000..524eda2 --- /dev/null +++ b/KoiVM/VMIR/IROpCode.cs @@ -0,0 +1,71 @@ +using System; +using System.Reflection; + +namespace KoiVM.VMIR { + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + public enum IROpCode { + NOP, + + MOV, + POP, + PUSH, + CALL, + RET, + + NOR, + + CMP, + JZ, + JNZ, + JMP, + SWT, + + ADD, + SUB, // Only for floats + MUL, + DIV, + REM, + SHR, + SHL, + + FCONV, + ICONV, + SX, + + VCALL, + + TRY, + LEAVE, + + Max, + + // Pseudo-Opcodes, will be eliminate by transforms + __NOT, + __AND, + __OR, + __XOR, + + __GETF, + __SETF, + + __CALL, + __CALLVIRT, + __NEWOBJ, + __BEGINCALL, + __ENDCALL, + + __ENTRY, + __EXIT, + + __LEAVE, + __EHRET, + + __LDOBJ, + __STOBJ, + + __GEN, + __KILL, + + __LEA + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/IRTransformer.cs b/KoiVM/VMIR/IRTransformer.cs new file mode 100644 index 0000000..a364f35 --- /dev/null +++ b/KoiVM/VMIR/IRTransformer.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.VM; +using KoiVM.VMIR.Transforms; + +namespace KoiVM.VMIR { + public class IRTransformer { + ITransform[] pipeline; + + public IRTransformer(ScopeBlock rootScope, IRContext ctx, VMRuntime runtime) { + RootScope = rootScope; + Context = ctx; + Runtime = runtime; + + Annotations = new Dictionary(); + InitPipeline(); + } + + void InitPipeline() { + pipeline = new ITransform[] { + // new SMCIRTransform(), + Context.IsRuntime ? null : new GuardBlockTransform(), + Context.IsRuntime ? null : new EHTransform(), + new InitLocalTransform(), + new ConstantTypePromotionTransform(), + new GetSetFlagTransform(), + new LogicTransform(), + new InvokeTransform(), + new MetadataTransform(), + Context.IsRuntime ? null : new RegisterAllocationTransform(), + Context.IsRuntime ? null : new StackFrameTransform(), + new LeaTransform(), + Context.IsRuntime ? null : new MarkReturnRegTransform() + }; + } + + public IRContext Context { get; private set; } + public VMRuntime Runtime { get; private set; } + + public VMDescriptor VM { + get { return Runtime.Descriptor; } + } + + public ScopeBlock RootScope { get; private set; } + + internal Dictionary Annotations { get; private set; } + internal BasicBlock Block { get; private set; } + + internal IRInstrList Instructions { + get { return Block.Content; } + } + + public void Transform() { + if (pipeline == null) + throw new InvalidOperationException("Transformer already used."); + + foreach (var handler in pipeline) { + if (handler == null) + continue; + handler.Initialize(this); + + RootScope.ProcessBasicBlocks(block => { + Block = block; + handler.Transform(this); + }); + } + + pipeline = null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/IRTranslator.cs b/KoiVM/VMIR/IRTranslator.cs new file mode 100644 index 0000000..bb4ba06 --- /dev/null +++ b/KoiVM/VMIR/IRTranslator.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.VM; + +namespace KoiVM.VMIR { + public class IRTranslator { + static IRTranslator() { + handlers = new Dictionary(); + foreach (var type in typeof(IRTranslator).Assembly.GetExportedTypes()) { + if (typeof(ITranslationHandler).IsAssignableFrom(type) && !type.IsAbstract) { + var handler = (ITranslationHandler)Activator.CreateInstance(type); + handlers.Add(handler.ILCode, handler); + } + } + } + + static readonly Dictionary handlers; + + public IRTranslator(IRContext ctx, VMRuntime runtime) { + Context = ctx; + Runtime = runtime; + } + + public ScopeBlock RootScope { get; private set; } + public IRContext Context { get; private set; } + public VMRuntime Runtime { get; private set; } + + public VMDescriptor VM { + get { return Runtime.Descriptor; } + } + + public ArchDescriptor Arch { + get { return VM.Architecture; } + } + + internal BasicBlock Block { get; private set; } + internal IRInstrList Instructions { get; private set; } + + internal IIROperand Translate(IILASTNode node) { + if (node is ILASTExpression) { + var expr = (ILASTExpression)node; + try { + ITranslationHandler handler; + if (!handlers.TryGetValue(expr.ILCode, out handler)) + throw new NotSupportedException(expr.ILCode.ToString()); + + int i = Instructions.Count; + var operand = handler.Translate(expr, this); + while (i < Instructions.Count) { + Instructions[i].ILAST = expr; + i++; + } + return operand; + } + catch (Exception ex) { + throw new Exception(string.Format("Failed to translate expr {0} @ {1:x4}.", + expr.CILInstr, expr.CILInstr.GetOffset()), ex); + } + } + if (node is ILASTVariable) { + return Context.ResolveVRegister((ILASTVariable)node); + } + throw new NotSupportedException(); + } + + IRInstrList Translate(BasicBlock block) { + Block = block; + Instructions = new IRInstrList(); + + bool seenJump = false; + foreach (var st in block.Content) { + if (st is ILASTPhi) { + var variable = ((ILASTPhi)st).Variable; + Instructions.Add(new IRInstruction(IROpCode.POP) { + Operand1 = Context.ResolveVRegister(variable), + ILAST = st + }); + } + else if (st is ILASTAssignment) { + var assignment = (ILASTAssignment)st; + var valueVar = Translate(assignment.Value); + Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = Context.ResolveVRegister(assignment.Variable), + Operand2 = valueVar, + ILAST = st + }); + } + else if (st is ILASTExpression) { + var expr = (ILASTExpression)st; + var opCode = expr.ILCode.ToOpCode(); + if (!seenJump && (opCode.FlowControl == FlowControl.Cond_Branch || + opCode.FlowControl == FlowControl.Branch || + opCode.FlowControl == FlowControl.Return || + opCode.FlowControl == FlowControl.Throw)) { + // Add stack remain before jumps + foreach (var remain in block.Content.StackRemains) { + Instructions.Add(new IRInstruction(IROpCode.PUSH) { + Operand1 = Context.ResolveVRegister(remain), + ILAST = st + }); + } + seenJump = true; + } + Translate((ILASTExpression)st); + } + else + throw new NotSupportedException(); + } + Debug.Assert(seenJump); + + var ret = Instructions; + Instructions = null; + return ret; + } + + public void Translate(ScopeBlock rootScope) { + RootScope = rootScope; + var blockMap = rootScope.UpdateBasicBlocks(block => { return Translate(block); }); + rootScope.ProcessBasicBlocks(block => { + foreach (var instr in block.Content) { + if (instr.Operand1 is IRBlockTarget) { + var op = (IRBlockTarget)instr.Operand1; + op.Target = blockMap[(BasicBlock)op.Target]; + } + else if (instr.Operand1 is IRJumpTable) { + var op = (IRJumpTable)instr.Operand1; + for (int i = 0; i < op.Targets.Length; i++) + op.Targets[i] = blockMap[(BasicBlock)op.Targets[i]]; + } + + if (instr.Operand2 is IRBlockTarget) { + var op = (IRBlockTarget)instr.Operand2; + op.Target = blockMap[(BasicBlock)op.Target]; + } + else if (instr.Operand2 is IRJumpTable) { + var op = (IRJumpTable)instr.Operand2; + for (int i = 0; i < op.Targets.Length; i++) + op.Targets[i] = blockMap[(BasicBlock)op.Targets[i]]; + } + } + }); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/ITransform.cs b/KoiVM/VMIR/ITransform.cs new file mode 100644 index 0000000..2bade85 --- /dev/null +++ b/KoiVM/VMIR/ITransform.cs @@ -0,0 +1,8 @@ +using System; + +namespace KoiVM.VMIR { + public interface ITransform { + void Initialize(IRTransformer tr); + void Transform(IRTransformer tr); + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/ITranslationHandler.cs b/KoiVM/VMIR/ITranslationHandler.cs new file mode 100644 index 0000000..6abfd31 --- /dev/null +++ b/KoiVM/VMIR/ITranslationHandler.cs @@ -0,0 +1,11 @@ +using System; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR { + public interface ITranslationHandler { + Code ILCode { get; } + IIROperand Translate(ILASTExpression expr, IRTranslator tr); + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/RegAlloc/BlockLiveness.cs b/KoiVM/VMIR/RegAlloc/BlockLiveness.cs new file mode 100644 index 0000000..226385a --- /dev/null +++ b/KoiVM/VMIR/RegAlloc/BlockLiveness.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.RegAlloc { + public class BlockLiveness { + BlockLiveness(HashSet inLive, HashSet outLive) { + InLive = inLive; + OutLive = outLive; + } + + public HashSet InLive { get; private set; } + public HashSet OutLive { get; private set; } + + internal static BlockLiveness Empty() { + return new BlockLiveness(new HashSet(), new HashSet()); + } + + internal BlockLiveness Clone() { + return new BlockLiveness(new HashSet(InLive), new HashSet(OutLive)); + } + + public override string ToString() { + return string.Format("In=[{0}], Out=[{1}]", string.Join(", ", InLive), string.Join(", ", OutLive)); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/RegAlloc/LivenessAnalysis.cs b/KoiVM/VMIR/RegAlloc/LivenessAnalysis.cs new file mode 100644 index 0000000..a9f67e8 --- /dev/null +++ b/KoiVM/VMIR/RegAlloc/LivenessAnalysis.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using KoiVM.AST.IR; +using KoiVM.CFG; + +namespace KoiVM.VMIR.RegAlloc { + public class LivenessAnalysis { + #region OpCode Liveness Info + + enum LiveFlags { + GEN1 = 1, + GEN2 = 2, + KILL1 = 4, + KILL2 = 8 + } + + static readonly Dictionary opCodeLiveness = new Dictionary { + { IROpCode.MOV, LiveFlags.KILL1 | LiveFlags.GEN2 }, + { IROpCode.POP, LiveFlags.KILL1 }, + { IROpCode.PUSH, LiveFlags.GEN1 }, + { IROpCode.CALL, LiveFlags.GEN1 | LiveFlags.KILL2 }, + { IROpCode.NOR, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.CMP, LiveFlags.GEN1 | LiveFlags.GEN2 }, + { IROpCode.JZ, LiveFlags.GEN2 }, + { IROpCode.JNZ, LiveFlags.GEN2 }, + { IROpCode.SWT, LiveFlags.GEN2 }, + { IROpCode.ADD, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.SUB, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.MUL, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.DIV, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.REM, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.SHR, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.SHL, LiveFlags.GEN1 | LiveFlags.GEN2 | LiveFlags.KILL1 }, + { IROpCode.FCONV, LiveFlags.KILL1 | LiveFlags.GEN2 }, + { IROpCode.ICONV, LiveFlags.KILL1 | LiveFlags.GEN2 }, + { IROpCode.SX, LiveFlags.KILL1 | LiveFlags.GEN2 }, + { IROpCode.VCALL, LiveFlags.GEN1 | LiveFlags.GEN1 }, + { IROpCode.TRY, LiveFlags.GEN1 | LiveFlags.GEN2 }, + { IROpCode.LEAVE, LiveFlags.GEN1 }, + { IROpCode.__EHRET, LiveFlags.GEN1 }, + { IROpCode.__LEA, LiveFlags.KILL1 | LiveFlags.GEN2 }, + { IROpCode.__LDOBJ, LiveFlags.GEN1 | LiveFlags.KILL2 }, + { IROpCode.__STOBJ, LiveFlags.GEN1 | LiveFlags.GEN2 }, + { IROpCode.__GEN, LiveFlags.GEN1 }, + { IROpCode.__KILL, LiveFlags.KILL1 } + }; + + #endregion + + public static Dictionary, BlockLiveness> ComputeLiveness( + IList> blocks) { + var liveness = new Dictionary, BlockLiveness>(); + var entryBlocks = blocks.Where(block => block.Sources.Count == 0).ToList(); + var order = new List>(); + var visited = new HashSet>(); + foreach (var entry in entryBlocks) + PostorderTraversal(entry, visited, block => order.Add(block)); + + bool worked = false; + do { + foreach (var currentBlock in order) { + var blockLiveness = BlockLiveness.Empty(); + + foreach (var successor in currentBlock.Targets) { + BlockLiveness successorLiveness; + if (!liveness.TryGetValue(successor, out successorLiveness)) { + continue; + } + blockLiveness.OutLive.UnionWith(successorLiveness.InLive); + } + + var live = new HashSet(blockLiveness.OutLive); + for (int i = currentBlock.Content.Count - 1; i >= 0; i--) { + var instr = currentBlock.Content[i]; + ComputeInstrLiveness(instr, live); + } + blockLiveness.InLive.UnionWith(live); + + BlockLiveness prevLiveness; + if (!worked && liveness.TryGetValue(currentBlock, out prevLiveness)) { + worked = !prevLiveness.InLive.SetEquals(blockLiveness.InLive) || + !prevLiveness.OutLive.SetEquals(blockLiveness.OutLive); + } + liveness[currentBlock] = blockLiveness; + } + } while (worked); + + return liveness; + } + + public static Dictionary> ComputeLiveness( + BasicBlock block, BlockLiveness liveness) { + var ret = new Dictionary>(); + var live = new HashSet(liveness.OutLive); + for (int i = block.Content.Count - 1; i >= 0; i--) { + var instr = block.Content[i]; + ComputeInstrLiveness(instr, live); + ret[instr] = new HashSet(live); + } + Debug.Assert(live.SetEquals(liveness.InLive)); + return ret; + } + + static void PostorderTraversal( + BasicBlock block, + HashSet> visited, + Action> visitFunc) { + visited.Add(block); + foreach (var successor in block.Targets) { + if (!visited.Contains(successor)) + PostorderTraversal(successor, visited, visitFunc); + } + visitFunc(block); + } + + static void ComputeInstrLiveness(IRInstruction instr, HashSet live) { + LiveFlags flags; + if (!opCodeLiveness.TryGetValue(instr.OpCode, out flags)) + flags = 0; + + var op1 = instr.Operand1 as IRVariable; + var op2 = instr.Operand2 as IRVariable; + if ((flags & LiveFlags.KILL1) != 0 && op1 != null) + live.Remove(op1); + if ((flags & LiveFlags.KILL2) != 0 && op2 != null) + live.Remove(op2); + if ((flags & LiveFlags.GEN1) != 0 && op1 != null) + live.Add(op1); + if ((flags & LiveFlags.GEN2) != 0 && op2 != null) + live.Add(op2); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/RegAlloc/RegisterAllocator.cs b/KoiVM/VMIR/RegAlloc/RegisterAllocator.cs new file mode 100644 index 0000000..6ec326f --- /dev/null +++ b/KoiVM/VMIR/RegAlloc/RegisterAllocator.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.VM; + +namespace KoiVM.VMIR.RegAlloc { + public class RegisterAllocator { + // TODO: Cross basic block allocation + IRTransformer transformer; + Dictionary, BlockLiveness> liveness; + Dictionary globalVars; + Dictionary allocation; + int baseOffset; + + public int LocalSize { get; set; } + + struct StackSlot { + public readonly int Offset; + public readonly IRVariable Variable; + + public StackSlot(int offset, IRVariable var) { + Offset = offset; + Variable = var; + } + } + + class RegisterPool { + const int NumRegisters = 8; + + static VMRegisters ToRegister(int regId) { + return (VMRegisters)regId; + } + + static int FromRegister(VMRegisters reg) { + return (int)reg; + } + + IRVariable[] regAlloc; + Dictionary spillVars; + + public int SpillOffset { get; set; } + + public static RegisterPool Create(int baseOffset, Dictionary globalVars) { + var pool = new RegisterPool(); + pool.regAlloc = new IRVariable[NumRegisters]; + pool.spillVars = new Dictionary(globalVars); + pool.SpillOffset = baseOffset; + return pool; + } + + public VMRegisters? Allocate(IRVariable var) { + for (int i = 0; i < regAlloc.Length; i++) { + if (regAlloc[i] == null) { + regAlloc[i] = var; + return ToRegister(i); + } + } + return null; + } + + public void Deallocate(IRVariable var, VMRegisters reg) { + Debug.Assert(regAlloc[FromRegister(reg)] == var); + regAlloc[FromRegister(reg)] = null; + } + + public void CheckLiveness(HashSet live) { + for (int i = 0; i < regAlloc.Length; i++) { + if (regAlloc[i] != null && !live.Contains(regAlloc[i])) { + regAlloc[i].Annotation = null; + regAlloc[i] = null; + } + } + } + + public StackSlot SpillVariable(IRVariable var) { + var slot = new StackSlot(SpillOffset++, var); + spillVars[var] = slot; + return slot; + } + + public StackSlot? CheckSpill(IRVariable var) { + StackSlot ret; + if (!spillVars.TryGetValue(var, out ret)) + return null; + return ret; + } + } + + public RegisterAllocator(IRTransformer transformer) { + this.transformer = transformer; + } + + public void Initialize() { + var blocks = transformer.RootScope.GetBasicBlocks().Cast>().ToList(); + liveness = LivenessAnalysis.ComputeLiveness(blocks); + + var stackVars = new HashSet(); + foreach (var blockLiveness in liveness) { + foreach (var instr in blockLiveness.Key.Content) { + if (instr.OpCode != IROpCode.__LEA) + continue; + + var variable = (IRVariable)instr.Operand2; + if (variable.VariableType != IRVariableType.Argument) + stackVars.Add(variable); + } + stackVars.UnionWith(blockLiveness.Value.OutLive); + } + + // [BP - 2] = last argument + // [BP - 1] = return address + // [BP ] = old BP + // [BP + 1] = first local + + int offset = 1; + globalVars = stackVars.ToDictionary(var => var, var => new StackSlot(offset++, var)); + baseOffset = offset; + LocalSize = baseOffset - 1; + + offset = -2; + var parameters = transformer.Context.GetParameters(); + for (int i = parameters.Length - 1; i >= 0; i--) { + var paramVar = parameters[i]; + globalVars[paramVar] = new StackSlot(offset--, paramVar); + } + + allocation = globalVars.ToDictionary(pair => pair.Key, pair => (object)pair.Value); + } + + public void Allocate(BasicBlock block) { + var blockLiveness = liveness[block]; + var instrLiveness = LivenessAnalysis.ComputeLiveness(block, blockLiveness); + var pool = RegisterPool.Create(baseOffset, globalVars); + + for (int i = 0; i < block.Content.Count; i++) { + var instr = block.Content[i]; + pool.CheckLiveness(instrLiveness[instr]); + + // Allocates + if (instr.Operand1 != null) + instr.Operand1 = AllocateOperand(instr.Operand1, pool); + if (instr.Operand2 != null) + instr.Operand2 = AllocateOperand(instr.Operand2, pool); + } + if (pool.SpillOffset - 1 > LocalSize) + LocalSize = pool.SpillOffset - 1; + baseOffset = pool.SpillOffset; + } + + IIROperand AllocateOperand(IIROperand operand, RegisterPool pool) { + if (operand is IRVariable) { + var variable = (IRVariable)operand; + + StackSlot? slot; + var reg = AllocateVariable(pool, variable, out slot); + if (reg != null) + return new IRRegister(reg.Value) { + SourceVariable = variable, + Type = variable.Type + }; + variable.Annotation = slot.Value; + return new IRPointer { + Register = IRRegister.BP, + Offset = slot.Value.Offset, + SourceVariable = variable, + Type = variable.Type + }; + } + return operand; + } + + VMRegisters? AllocateVariable(RegisterPool pool, IRVariable var, out StackSlot? stackSlot) { + stackSlot = pool.CheckSpill(var); + if (stackSlot == null) { + var allocReg = var.Annotation == null ? (VMRegisters?)null : (VMRegisters)var.Annotation; + if (allocReg == null) + allocReg = pool.Allocate(var); + if (allocReg != null) { + if (var.Annotation == null) + var.Annotation = allocReg.Value; + return allocReg; + } + // Spill variable + stackSlot = pool.SpillVariable(var); + } + return null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/ConstantTypePromotionTransform.cs b/KoiVM/VMIR/Transforms/ConstantTypePromotionTransform.cs new file mode 100644 index 0000000..43f09d9 --- /dev/null +++ b/KoiVM/VMIR/Transforms/ConstantTypePromotionTransform.cs @@ -0,0 +1,92 @@ +using System; +using System.Diagnostics; +using KoiVM.AST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class ConstantTypePromotionTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + switch (instr.OpCode) { + case IROpCode.MOV: + case IROpCode.NOR: + case IROpCode.CMP: + case IROpCode.ADD: + case IROpCode.MUL: + case IROpCode.DIV: + case IROpCode.REM: + case IROpCode.__OR: + case IROpCode.__AND: + case IROpCode.__XOR: + case IROpCode.__GETF: + break; + default: + return; + } + Debug.Assert(instr.Operand1 != null && instr.Operand2 != null); + if (instr.Operand1 is IRConstant) { + instr.Operand1 = PromoteConstant((IRConstant)instr.Operand1, instr.Operand2.Type); + } + if (instr.Operand2 is IRConstant) { + instr.Operand2 = PromoteConstant((IRConstant)instr.Operand2, instr.Operand1.Type); + } + } + + static IIROperand PromoteConstant(IRConstant value, ASTType type) { + switch (type) { + case ASTType.I8: + return PromoteConstantI8(value); + case ASTType.R4: + return PromoteConstantR4(value); + case ASTType.R8: + return PromoteConstantR8(value); + default: + return value; + } + } + + static IIROperand PromoteConstantI8(IRConstant value) { + if (value.Type.Value == ASTType.I4) { + value.Type = ASTType.I8; + value.Value = (long)(int)value.Value; + } + else if (value.Type.Value != ASTType.I8) + throw new InvalidProgramException(); + return value; + } + + static IIROperand PromoteConstantR4(IRConstant value) { + if (value.Type.Value == ASTType.I4) { + value.Type = ASTType.R4; + value.Value = (float)(int)value.Value; + } + else if (value.Type.Value != ASTType.R4) + throw new InvalidProgramException(); + return value; + } + + static IIROperand PromoteConstantR8(IRConstant value) { + if (value.Type.Value == ASTType.I4) { + value.Type = ASTType.R8; + value.Value = (double)(int)value.Value; + } + else if (value.Type.Value == ASTType.I8) { + value.Type = ASTType.R8; + value.Value = (double)(long)value.Value; + } + else if (value.Type.Value == ASTType.R4) { + value.Type = ASTType.R8; + value.Value = (double)(float)value.Value; + } + else if (value.Type.Value != ASTType.R8) + throw new InvalidProgramException(); + return value; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/EHTransform.cs b/KoiVM/VMIR/Transforms/EHTransform.cs new file mode 100644 index 0000000..9e93abd --- /dev/null +++ b/KoiVM/VMIR/Transforms/EHTransform.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.IR; +using KoiVM.CFG; + +namespace KoiVM.VMIR.Transforms { + public class EHTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + ScopeBlock[] thisScopes; + + public void Transform(IRTransformer tr) { + thisScopes = tr.RootScope.SearchBlock(tr.Block); + AddTryStart(tr); + if (thisScopes[thisScopes.Length - 1].Type == ScopeType.Handler) { + var tryScope = SearchForTry(tr.RootScope, thisScopes[thisScopes.Length - 1].ExceptionHandler); + var scopes = tr.RootScope.SearchBlock(tryScope.GetBasicBlocks().First()); + thisScopes = scopes.TakeWhile(s => s != tryScope).ToArray(); + } + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void SearchForHandlers(ScopeBlock scope, ExceptionHandler eh, ref IBasicBlock handler, ref IBasicBlock filter) { + if (scope.ExceptionHandler == eh) { + if (scope.Type == ScopeType.Handler) + handler = scope.GetBasicBlocks().First(); + else if (scope.Type == ScopeType.Filter) + filter = scope.GetBasicBlocks().First(); + } + foreach (var child in scope.Children) + SearchForHandlers(child, eh, ref handler, ref filter); + } + + void AddTryStart(IRTransformer tr) { + var tryStartInstrs = new List(); + for (int i = 0; i < thisScopes.Length; i++) { + var scope = thisScopes[i]; + if (scope.Type != ScopeType.Try) + continue; + if (scope.GetBasicBlocks().First() != tr.Block) + continue; + + // Search for handler/filter + IBasicBlock handler = null, filter = null; + SearchForHandlers(tr.RootScope, scope.ExceptionHandler, ref handler, ref filter); + Debug.Assert(handler != null && + (scope.ExceptionHandler.HandlerType != ExceptionHandlerType.Filter || filter != null)); + + // Add instructions + tryStartInstrs.Add(new IRInstruction(IROpCode.PUSH, new IRBlockTarget(handler))); + + IIROperand tryOperand = null; + int ehType; + if (scope.ExceptionHandler.HandlerType == ExceptionHandlerType.Catch) { + tryOperand = IRConstant.FromI4((int)tr.VM.Data.GetId(scope.ExceptionHandler.CatchType)); + ehType = tr.VM.Runtime.RTFlags.EH_CATCH; + } + else if (scope.ExceptionHandler.HandlerType == ExceptionHandlerType.Filter) { + tryOperand = new IRBlockTarget(filter); + ehType = tr.VM.Runtime.RTFlags.EH_FILTER; + } + else if (scope.ExceptionHandler.HandlerType == ExceptionHandlerType.Fault) { + ehType = tr.VM.Runtime.RTFlags.EH_FAULT; + } + else if (scope.ExceptionHandler.HandlerType == ExceptionHandlerType.Finally) { + ehType = tr.VM.Runtime.RTFlags.EH_FINALLY; + } + else { + throw new InvalidProgramException(); + } + + tryStartInstrs.Add(new IRInstruction(IROpCode.TRY, IRConstant.FromI4(ehType), tryOperand) { + Annotation = new EHInfo(scope.ExceptionHandler) + }); + } + tr.Instructions.InsertRange(0, tryStartInstrs); + } + + ScopeBlock SearchForTry(ScopeBlock scope, ExceptionHandler eh) { + if (scope.ExceptionHandler == eh && scope.Type == ScopeType.Try) + return scope; + foreach (var child in scope.Children) { + var s = SearchForTry(child, eh); + if (s != null) + return s; + } + return null; + } + + + static ScopeBlock FindCommonAncestor(ScopeBlock[] a, ScopeBlock[] b) { + ScopeBlock ret = null; + for (int i = 0; i < a.Length && i < b.Length; i++) { + if (a[i] == b[i]) + ret = a[i]; + else + break; + } + return ret; + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode != IROpCode.__LEAVE) + return; + + var targetScopes = tr.RootScope.SearchBlock(((IRBlockTarget)instr.Operand1).Target); + + var escapeTarget = FindCommonAncestor(thisScopes, targetScopes); + var leaveInstrs = new List(); + for (int i = thisScopes.Length - 1; i >= 0; i--) { + if (thisScopes[i] == escapeTarget) + break; + if (thisScopes[i].Type != ScopeType.Try) + continue; + + IBasicBlock handler = null, filter = null; + SearchForHandlers(tr.RootScope, thisScopes[i].ExceptionHandler, ref handler, ref filter); + if (handler == null) + throw new InvalidProgramException(); + + leaveInstrs.Add(new IRInstruction(IROpCode.LEAVE, new IRBlockTarget(handler)) { + Annotation = new EHInfo(thisScopes[i].ExceptionHandler) + }); + } + instr.OpCode = IROpCode.JMP; + leaveInstrs.Add(instr); + instrs.Replace(index, leaveInstrs); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/GetSetFlagTransform.cs b/KoiVM/VMIR/Transforms/GetSetFlagTransform.cs new file mode 100644 index 0000000..cda67e4 --- /dev/null +++ b/KoiVM/VMIR/Transforms/GetSetFlagTransform.cs @@ -0,0 +1,27 @@ +using System; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class GetSetFlagTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode == IROpCode.__GETF) { + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.MOV, instr.Operand1, IRRegister.FL, instr), + new IRInstruction(IROpCode.__AND, instr.Operand1, instr.Operand2, instr) + }); + } + else if (instr.OpCode == IROpCode.__SETF) { + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.__OR, IRRegister.FL, instr.Operand1, instr) + }); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/GuardBlockTransform.cs b/KoiVM/VMIR/Transforms/GuardBlockTransform.cs new file mode 100644 index 0000000..cb927a4 --- /dev/null +++ b/KoiVM/VMIR/Transforms/GuardBlockTransform.cs @@ -0,0 +1,81 @@ +using System; +using KoiVM.AST.IR; +using KoiVM.CFG; + +namespace KoiVM.VMIR.Transforms { + public class GuardBlockTransform : ITransform { + BasicBlock prolog; + BasicBlock epilog; + + public void Initialize(IRTransformer tr) { + int maxId = 0; + BasicBlock entry = null; + tr.RootScope.ProcessBasicBlocks(block => { + block.Id++; + if (block.Id > maxId) + maxId = block.Id; + if (entry == null) + entry = block; + }); + + prolog = new BasicBlock(0, new IRInstrList { + new IRInstruction(IROpCode.__ENTRY), + new IRInstruction(IROpCode.JMP, new IRBlockTarget(entry)) + }); + prolog.Targets.Add(entry); + entry.Sources.Add(prolog); + + epilog = new BasicBlock(maxId + 1, new IRInstrList { + new IRInstruction(IROpCode.__EXIT) + }); + InsertProlog(tr.RootScope); + InsertEpilog(tr.RootScope); + } + + void InsertProlog(ScopeBlock block) { + if (block.Children.Count > 0) { + if (block.Children[0].Type == ScopeType.None) + InsertProlog(block.Children[0]); + else { + var prologScope = new ScopeBlock(); + prologScope.Content.Add(prolog); + block.Children.Insert(0, prologScope); + } + } + else { + block.Content.Insert(0, prolog); + } + } + + void InsertEpilog(ScopeBlock block) { + if (block.Children.Count > 0) { + if (block.Children[block.Children.Count - 1].Type == ScopeType.None) + InsertEpilog(block.Children[block.Children.Count - 1]); + else { + var epilogScope = new ScopeBlock(); + epilogScope.Content.Add(epilog); + block.Children.Insert(block.Children.Count, epilogScope); + } + } + else { + block.Content.Insert(block.Content.Count, epilog); + } + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode == IROpCode.RET) { + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.JMP, new IRBlockTarget(epilog)) + }); + if (!tr.Block.Targets.Contains(epilog)) { + tr.Block.Targets.Add(epilog); + epilog.Sources.Add(tr.Block); + } + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/InitLocalTransform.cs b/KoiVM/VMIR/Transforms/InitLocalTransform.cs new file mode 100644 index 0000000..d4e8584 --- /dev/null +++ b/KoiVM/VMIR/Transforms/InitLocalTransform.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class InitLocalTransform : ITransform { + bool done; + + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + if (!tr.Context.Method.Body.InitLocals) + return; + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode == IROpCode.__ENTRY && !done) { + var init = new List(); + init.Add(instr); + foreach (var local in tr.Context.Method.Body.Variables) { + if (local.Type.IsValueType && !local.Type.IsPrimitive) { + var adr = tr.Context.AllocateVRegister(ASTType.ByRef); + init.Add(new IRInstruction(IROpCode.__LEA, adr, tr.Context.ResolveLocal(local))); + + var typeId = (int)tr.VM.Data.GetId(local.Type.RemovePinnedAndModifiers().ToTypeDefOrRef()); + var ecallId = tr.VM.Runtime.VMCall.INITOBJ; + init.Add(new IRInstruction(IROpCode.PUSH, adr)); + init.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + } + } + instrs.Replace(index, init); + done = true; + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/InvokeTransform.cs b/KoiVM/VMIR/Transforms/InvokeTransform.cs new file mode 100644 index 0000000..6328d38 --- /dev/null +++ b/KoiVM/VMIR/Transforms/InvokeTransform.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IR; +using KoiVM.VM; + +namespace KoiVM.VMIR.Transforms { + public class InvokeTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode != IROpCode.__CALL && instr.OpCode != IROpCode.__CALLVIRT && + instr.OpCode != IROpCode.__NEWOBJ) + return; + + var method = ((IMethod)((IRMetaTarget)instr.Operand1).MetadataItem).ResolveMethodDef(); + var callInfo = (InstrCallInfo)instr.Annotation; + + if (method == null || + method.Module != tr.Context.Method.Module || // TODO: cross-module direct call + !tr.VM.Settings.IsVirtualized(method) || + instr.OpCode != IROpCode.__CALL) { + callInfo.IsECall = true; + ProcessECall(instrs, instr, index, tr); + } + else { + callInfo.IsECall = false; + ProcessDCall(instrs, instr, index, tr, method); + } + } + + // External call + void ProcessECall(IRInstrList instrs, IRInstruction instr, int index, IRTransformer tr) { + var method = (IMethod)((IRMetaTarget)instr.Operand1).MetadataItem; + var retVar = (IRVariable)instr.Operand2; + + uint opCode = 0; + ITypeDefOrRef constrainType = ((InstrCallInfo)instr.Annotation).ConstrainType; + if (instr.OpCode == IROpCode.__CALL) { + opCode = tr.VM.Runtime.VCallOps.ECALL_CALL; + } + else if (instr.OpCode == IROpCode.__CALLVIRT) { + if (constrainType != null) + opCode = tr.VM.Runtime.VCallOps.ECALL_CALLVIRT_CONSTRAINED; + else + opCode = tr.VM.Runtime.VCallOps.ECALL_CALLVIRT; + } + else if (instr.OpCode == IROpCode.__NEWOBJ) { + opCode = tr.VM.Runtime.VCallOps.ECALL_NEWOBJ; + } + + var methodId = (int)(tr.VM.Data.GetId(method) | opCode << 30); + var ecallId = tr.VM.Runtime.VMCall.ECALL; + var callInstrs = new List(); + + if (constrainType != null) { + callInstrs.Add(new IRInstruction(IROpCode.PUSH) { + Operand1 = IRConstant.FromI4((int)tr.VM.Data.GetId(constrainType)), + Annotation = instr.Annotation, + ILAST = instr.ILAST + }); + } + callInstrs.Add(new IRInstruction(IROpCode.VCALL) { + Operand1 = IRConstant.FromI4(ecallId), + Operand2 = IRConstant.FromI4(methodId), + Annotation = instr.Annotation, + ILAST = instr.ILAST + }); + if (retVar != null) { + callInstrs.Add(new IRInstruction(IROpCode.POP, retVar) { + Annotation = instr.Annotation, + ILAST = instr.ILAST + }); + } + instrs.Replace(index, callInstrs); + } + + // Direct call + void ProcessDCall(IRInstrList instrs, IRInstruction instr, int index, IRTransformer tr, MethodDef method) { + var retVar = (IRVariable)instr.Operand2; + var callinfo = (InstrCallInfo)instr.Annotation; + callinfo.Method = method; // Ensure it's resolved + + var callInstrs = new List(); + callInstrs.Add(new IRInstruction(IROpCode.CALL, new IRMetaTarget(method) { LateResolve = true }) { + Annotation = instr.Annotation, + ILAST = instr.ILAST + }); + if (retVar != null) { + callInstrs.Add(new IRInstruction(IROpCode.MOV, retVar, new IRRegister(VMRegisters.R0, retVar.Type)) { + Annotation = instr.Annotation, + ILAST = instr.ILAST + }); + } + var stackAdjust = -callinfo.Arguments.Length; + callInstrs.Add(new IRInstruction(IROpCode.ADD, IRRegister.SP, IRConstant.FromI4(stackAdjust)) { + Annotation = instr.Annotation, + ILAST = instr.ILAST + }); + + instrs.Replace(index, callInstrs); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/LeaTransform.cs b/KoiVM/VMIR/Transforms/LeaTransform.cs new file mode 100644 index 0000000..7f8eab8 --- /dev/null +++ b/KoiVM/VMIR/Transforms/LeaTransform.cs @@ -0,0 +1,26 @@ +using System; +using System.Diagnostics; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class LeaTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode == IROpCode.__LEA) { + var source = (IRPointer)instr.Operand2; + var target = instr.Operand1; + Debug.Assert(source.Register == IRRegister.BP); + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.MOV, target, IRRegister.BP, instr), + new IRInstruction(IROpCode.ADD, target, IRConstant.FromI4(source.Offset), instr) + }); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/LogicTransform.cs b/KoiVM/VMIR/Transforms/LogicTransform.cs new file mode 100644 index 0000000..6bc6c1a --- /dev/null +++ b/KoiVM/VMIR/Transforms/LogicTransform.cs @@ -0,0 +1,49 @@ +using System; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class LogicTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode == IROpCode.__NOT) { + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.NOR, instr.Operand1, instr.Operand1, instr) + }); + } + else if (instr.OpCode == IROpCode.__AND) { + var tmp = tr.Context.AllocateVRegister(instr.Operand2.Type); + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.MOV, tmp, instr.Operand2, instr), + new IRInstruction(IROpCode.NOR, instr.Operand1, instr.Operand1, instr), + new IRInstruction(IROpCode.NOR, tmp, tmp, instr), + new IRInstruction(IROpCode.NOR, instr.Operand1, tmp, instr) + }); + } + else if (instr.OpCode == IROpCode.__OR) { + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.NOR, instr.Operand1, instr.Operand2, instr), + new IRInstruction(IROpCode.NOR, instr.Operand1, instr.Operand1, instr) + }); + } + else if (instr.OpCode == IROpCode.__XOR) { + var tmp1 = tr.Context.AllocateVRegister(instr.Operand2.Type); + var tmp2 = tr.Context.AllocateVRegister(instr.Operand2.Type); + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.MOV, tmp1, instr.Operand1, instr), + new IRInstruction(IROpCode.NOR, tmp1, instr.Operand2, instr), + new IRInstruction(IROpCode.MOV, tmp2, instr.Operand2, instr), + new IRInstruction(IROpCode.NOR, instr.Operand1, instr.Operand1, instr), + new IRInstruction(IROpCode.NOR, tmp2, tmp2, instr), + new IRInstruction(IROpCode.NOR, instr.Operand1, tmp2, instr), + new IRInstruction(IROpCode.NOR, instr.Operand1, tmp1, instr) + }); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/MarkReturnRegTransform.cs b/KoiVM/VMIR/Transforms/MarkReturnRegTransform.cs new file mode 100644 index 0000000..b11e44e --- /dev/null +++ b/KoiVM/VMIR/Transforms/MarkReturnRegTransform.cs @@ -0,0 +1,27 @@ +using System; +using KoiVM.AST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class MarkReturnRegTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + var callInfo = instr.Annotation as InstrCallInfo; + if (callInfo == null || callInfo.ReturnValue == null) + return; + + if (instr.Operand1 is IRRegister && ((IRRegister)instr.Operand1).SourceVariable == callInfo.ReturnValue) { + callInfo.ReturnRegister = (IRRegister)instr.Operand1; + } + else if (instr.Operand1 is IRPointer && ((IRPointer)instr.Operand1).SourceVariable == callInfo.ReturnValue) { + callInfo.ReturnSlot = (IRPointer)instr.Operand1; + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/MetadataTransform.cs b/KoiVM/VMIR/Transforms/MetadataTransform.cs new file mode 100644 index 0000000..c781a6c --- /dev/null +++ b/KoiVM/VMIR/Transforms/MetadataTransform.cs @@ -0,0 +1,31 @@ +using System; +using dnlib.DotNet; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Transforms { + public class MetadataTransform : ITransform { + public void Initialize(IRTransformer tr) { + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + instr.Operand1 = TransformMD(instr.Operand1, tr); + instr.Operand2 = TransformMD(instr.Operand2, tr); + } + + IIROperand TransformMD(IIROperand operand, IRTransformer tr) { + if (operand is IRMetaTarget) { + var target = (IRMetaTarget)operand; + if (!target.LateResolve) { + if (!(target.MetadataItem is IMemberRef)) + throw new NotSupportedException(); + return IRConstant.FromI4((int)tr.VM.Data.GetId((IMemberRef)target.MetadataItem)); + } + } + return operand; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/RegisterAllocationTransform.cs b/KoiVM/VMIR/Transforms/RegisterAllocationTransform.cs new file mode 100644 index 0000000..57aac93 --- /dev/null +++ b/KoiVM/VMIR/Transforms/RegisterAllocationTransform.cs @@ -0,0 +1,20 @@ +using System; +using KoiVM.VMIR.RegAlloc; + +namespace KoiVM.VMIR.Transforms { + public class RegisterAllocationTransform : ITransform { + RegisterAllocator allocator; + + public static readonly object RegAllocatorKey = new object(); + + public void Initialize(IRTransformer tr) { + allocator = new RegisterAllocator(tr); + allocator.Initialize(); + tr.Annotations[RegAllocatorKey] = allocator; + } + + public void Transform(IRTransformer tr) { + allocator.Allocate(tr.Block); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Transforms/StackFrameTransform.cs b/KoiVM/VMIR/Transforms/StackFrameTransform.cs new file mode 100644 index 0000000..87a4edb --- /dev/null +++ b/KoiVM/VMIR/Transforms/StackFrameTransform.cs @@ -0,0 +1,38 @@ +using System; +using KoiVM.AST.IR; +using KoiVM.VMIR.RegAlloc; + +namespace KoiVM.VMIR.Transforms { + public class StackFrameTransform : ITransform { + RegisterAllocator allocator; + bool doneEntry, doneExit; + + public void Initialize(IRTransformer tr) { + allocator = (RegisterAllocator)tr.Annotations[RegisterAllocationTransform.RegAllocatorKey]; + } + + public void Transform(IRTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(IRInstrList instrs, IRInstruction instr, ref int index, IRTransformer tr) { + if (instr.OpCode == IROpCode.__ENTRY && !doneEntry) { + instrs.Replace(index, new[] { + instr, + new IRInstruction(IROpCode.PUSH, IRRegister.BP), + new IRInstruction(IROpCode.MOV, IRRegister.BP, IRRegister.SP), + new IRInstruction(IROpCode.ADD, IRRegister.SP, IRConstant.FromI4(allocator.LocalSize)) + }); + doneEntry = true; + } + else if (instr.OpCode == IROpCode.__EXIT && !doneExit) { + instrs.Replace(index, new[] { + new IRInstruction(IROpCode.MOV, IRRegister.SP, IRRegister.BP), + new IRInstruction(IROpCode.POP, IRRegister.BP), + instr + }); + doneExit = true; + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/BoxHandlers.cs b/KoiVM/VMIR/Translation/BoxHandlers.cs new file mode 100644 index 0000000..ed12823 --- /dev/null +++ b/KoiVM/VMIR/Translation/BoxHandlers.cs @@ -0,0 +1,86 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class BoxHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Box; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var targetType = ((ITypeDefOrRef)expr.Operand).ToTypeSig(); + var boxType = ((ITypeDefOrRef)expr.Operand).ResolveTypeDef(); + if (!targetType.GetElementType().IsPrimitive() && (boxType == null || !boxType.IsEnum)) { + // Non-primitive types => already boxed in VM + if (targetType.ElementType != ElementType.String) // Box is used to resolve string ID + return value; + } + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var typeId = (int)tr.VM.Data.GetId((ITypeDefOrRef)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.BOX; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } + + public class UnboxAnyHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Unbox_Any; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var targetType = ((ITypeDefOrRef)expr.Operand).ToTypeSig(); + if (!targetType.GetElementType().IsPrimitive() && + targetType.ElementType != ElementType.Object && + !targetType.ToTypeDefOrRef().ResolveTypeDefThrow().IsEnum) { + // Non-primitive types => already boxed in VM + return value; + } + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var typeId = (int)tr.VM.Data.GetId((ITypeDefOrRef)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.UNBOX; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } + + public class UnboxHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Unbox; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var targetType = ((ITypeDefOrRef)expr.Operand).ToTypeSig(); + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var typeId = (int)(tr.VM.Data.GetId((ITypeDefOrRef)expr.Operand) | 0x80000000); + var ecallId = tr.VM.Runtime.VMCall.UNBOX; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/BranchHandlers.cs b/KoiVM/VMIR/Translation/BranchHandlers.cs new file mode 100644 index 0000000..e100e38 --- /dev/null +++ b/KoiVM/VMIR/Translation/BranchHandlers.cs @@ -0,0 +1,85 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; +using KoiVM.CFG; + +namespace KoiVM.VMIR.Translation { + public class BrHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Br; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + tr.Instructions.Add(new IRInstruction(IROpCode.JMP) { + Operand1 = new IRBlockTarget((IBasicBlock)expr.Operand) + }); + return null; + } + } + + public class BrtrueHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Brtrue; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + + var val = tr.Translate(expr.Arguments[0]); + TranslationHelpers.EmitCompareEq(tr, expr.Arguments[0].Type.Value, val, IRConstant.FromI4(0)); + var tmp = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = tmp, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.JZ) { + Operand1 = new IRBlockTarget((IBasicBlock)expr.Operand), + Operand2 = tmp + }); + return null; + } + } + + public class BrfalseHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Brfalse; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + + var val = tr.Translate(expr.Arguments[0]); + TranslationHelpers.EmitCompareEq(tr, expr.Arguments[0].Type.Value, val, IRConstant.FromI4(0)); + var tmp = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = tmp, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.JNZ) { + Operand1 = new IRBlockTarget((IBasicBlock)expr.Operand), + Operand2 = tmp + }); + return null; + } + } + + public class SwitchHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Switch; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + + var val = tr.Translate(expr.Arguments[0]); + tr.Instructions.Add(new IRInstruction(IROpCode.SWT) { + Operand1 = new IRJumpTable((IBasicBlock[])expr.Operand), + Operand2 = val + }); + return null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/CastHandlers.cs b/KoiVM/VMIR/Translation/CastHandlers.cs new file mode 100644 index 0000000..878584e --- /dev/null +++ b/KoiVM/VMIR/Translation/CastHandlers.cs @@ -0,0 +1,48 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class IsinstHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Isinst; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var typeId = (int)tr.VM.Data.GetId((ITypeDefOrRef)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.CAST; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } + + public class CastclassHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Castclass; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var typeId = (int)(tr.VM.Data.GetId((ITypeDefOrRef)expr.Operand) | 0x80000000); + var ecallId = tr.VM.Runtime.VMCall.CAST; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/CompareHandlers.cs b/KoiVM/VMIR/Translation/CompareHandlers.cs new file mode 100644 index 0000000..99fc257 --- /dev/null +++ b/KoiVM/VMIR/Translation/CompareHandlers.cs @@ -0,0 +1,175 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class CeqHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ceq; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(ASTType.I4); + + TranslationHelpers.EmitCompareEq(tr, expr.Arguments[0].Type.Value, + tr.Translate(expr.Arguments[0]), tr.Translate(expr.Arguments[1])); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + return ret; + } + } + + public class CgtHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Cgt; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + + tr.Instructions.Add(new IRInstruction(IROpCode.CMP) { + Operand1 = tr.Translate(expr.Arguments[0]), + Operand2 = tr.Translate(expr.Arguments[1]) + }); + // SF=OF & ZF=0 + // (FL=S|O) or (FL=0), FL=S|O|Z + var ret = tr.Context.AllocateVRegister(ASTType.I4); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW | 1 << tr.Arch.Flags.SIGN | 1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = fl + }); + TranslationHelpers.EmitCompareEq(tr, ASTType.I4, + ret, IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW | 1 << tr.Arch.Flags.SIGN)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__AND) { + Operand1 = fl, + Operand2 = fl + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__OR) { + Operand1 = ret, + Operand2 = fl + }); + return ret; + } + } + + public class CgtUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Cgt_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + + tr.Instructions.Add(new IRInstruction(IROpCode.CMP) { + Operand1 = tr.Translate(expr.Arguments[0]), + Operand2 = tr.Translate(expr.Arguments[1]) + }); + // CF=0 & ZF=0 + var ret = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.CARRY | 1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__OR) { + Operand1 = ret, + Operand2 = ret + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + return ret; + } + } + + public class CltHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Clt; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + + tr.Instructions.Add(new IRInstruction(IROpCode.CMP) { + Operand1 = tr.Translate(expr.Arguments[0]), + Operand2 = tr.Translate(expr.Arguments[1]) + }); + // SF<>OF + // !((FL=S|O) or (FL=0)), FL=S|O + var ret = tr.Context.AllocateVRegister(ASTType.I4); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW | 1 << tr.Arch.Flags.SIGN) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = fl + }); + TranslationHelpers.EmitCompareEq(tr, ASTType.I4, + ret, IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW | 1 << tr.Arch.Flags.SIGN)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__AND) { + Operand1 = fl, + Operand2 = fl + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__OR) { + Operand1 = ret, + Operand2 = fl + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.ZERO) + }); + return ret; + } + } + + public class CltUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Clt_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + + tr.Instructions.Add(new IRInstruction(IROpCode.CMP) { + Operand1 = tr.Translate(expr.Arguments[0]), + Operand2 = tr.Translate(expr.Arguments[1]) + }); + // CF=1 + var ret = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.CARRY) + }); + return ret; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/ConstantHandlers.cs b/KoiVM/VMIR/Translation/ConstantHandlers.cs new file mode 100644 index 0000000..a689ebc --- /dev/null +++ b/KoiVM/VMIR/Translation/ConstantHandlers.cs @@ -0,0 +1,83 @@ +using System; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class LdcI4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldc_I4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + return IRConstant.FromI4((int)expr.Operand); + } + } + + public class LdcI8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldc_I8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + return IRConstant.FromI8((long)expr.Operand); + } + } + + public class LdcR4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldc_R4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + return IRConstant.FromR4((float)expr.Operand); + } + } + + public class LdcR8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldc_R8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + return IRConstant.FromR8((double)expr.Operand); + } + } + + public class LdnullHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldnull; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + return IRConstant.Null(); + } + } + + public class LdstrHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldstr; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + return IRConstant.FromString((string)expr.Operand); + } + } + + public class LdtokenHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldtoken; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var refId = (int)tr.VM.Data.GetId((IMemberRef)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.TOKEN; + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(refId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/ConvHandlers.cs b/KoiVM/VMIR/Translation/ConvHandlers.cs new file mode 100644 index 0000000..0cb82cc --- /dev/null +++ b/KoiVM/VMIR/Translation/ConvHandlers.cs @@ -0,0 +1,432 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class ConvI4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_I4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + switch (valueType) { + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmpVar)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvI8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_I8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.I8) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.I8); + switch (valueType) { + case ASTType.I4: + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, value)); + break; + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, retVar, value)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvU1Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_U1; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + retVar.RawType = tr.Context.Method.Module.CorLibTypes.Byte; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvI1Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_I1; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var t = tr.Context.AllocateVRegister(ASTType.I4); + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + t.RawType = tr.Context.Method.Module.CorLibTypes.SByte; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, tmp)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvU2Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_U2; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + retVar.RawType = tr.Context.Method.Module.CorLibTypes.UInt16; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvI2Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_I2; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var t = tr.Context.AllocateVRegister(ASTType.I4); + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + t.RawType = tr.Context.Method.Module.CorLibTypes.Int16; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, tmp)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvU4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_U4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + switch (valueType) { + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvU8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_U8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.I8) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.I8); + switch (valueType) { + case ASTType.I4: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvUHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_U; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.Ptr || valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.Ptr); + switch (valueType) { + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvIHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_I; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.Ptr || valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.Ptr); + switch (valueType) { + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvR4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_R4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.R4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.R4); + switch (valueType) { + case ASTType.I4: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, tmpVar)); + break; + + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, value)); + break; + + case ASTType.R8: + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, value)); + break; + + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvR8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_R8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.R8) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.R8); + switch (valueType) { + case ASTType.I4: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, tmpVar)); + break; + + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, value)); + break; + + case ASTType.R4: + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, value)); + break; + + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvRUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_R_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.R8); + switch (valueType) { + case ASTType.I4: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, tmpVar)); + break; + + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.FCONV, retVar, value)); + break; + + default: + throw new NotSupportedException(); + } + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/ConvOvfHandlers.cs b/KoiVM/VMIR/Translation/ConvOvfHandlers.cs new file mode 100644 index 0000000..2469c2d --- /dev/null +++ b/KoiVM/VMIR/Translation/ConvOvfHandlers.cs @@ -0,0 +1,439 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class ConvOvfI4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(int.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(int.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfI8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.I8) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.I8); + + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, value)); + break; + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, retVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU1Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U1; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + retVar.RawType = tr.Context.Method.Module.CorLibTypes.Byte; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(byte.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(byte.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfI1Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I1; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var t = tr.Context.AllocateVRegister(ASTType.I4); + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + t.RawType = tr.Context.Method.Module.CorLibTypes.SByte; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(sbyte.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(sbyte.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU2Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U2; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + retVar.RawType = tr.Context.Method.Module.CorLibTypes.UInt16; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(ushort.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(ushort.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfI2Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I2; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var t = tr.Context.AllocateVRegister(ASTType.I4); + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + t.RawType = tr.Context.Method.Module.CorLibTypes.Int16; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(short.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(short.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU4Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U4; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(uint.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(int.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU8Handler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U8; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I8); + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8((long)ulong.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(long.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfUHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + // TODO: overflow? + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.Ptr || valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.Ptr); + switch (valueType) { + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfIHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + // TODO: overflow? + + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.Ptr || valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.Ptr); + switch (valueType) { + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/ConvOvfUnHandlers.cs b/KoiVM/VMIR/Translation/ConvOvfUnHandlers.cs new file mode 100644 index 0000000..774bee1 --- /dev/null +++ b/KoiVM/VMIR/Translation/ConvOvfUnHandlers.cs @@ -0,0 +1,432 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class ConvOvfI4UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I4_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(uint.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(int.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfI8UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I8_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I8); + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8((long)ulong.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(long.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU1UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U1_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + retVar.RawType = tr.Context.Method.Module.CorLibTypes.Byte; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(byte.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(byte.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfI1UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I1_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var t = tr.Context.AllocateVRegister(ASTType.I4); + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + t.RawType = tr.Context.Method.Module.CorLibTypes.SByte; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(byte.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(sbyte.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU2UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U2_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + retVar.RawType = tr.Context.Method.Module.CorLibTypes.UInt16; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(ushort.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(ushort.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfI2UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I2_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var t = tr.Context.AllocateVRegister(ASTType.I4); + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + t.RawType = tr.Context.Method.Module.CorLibTypes.Int16; + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(ushort.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(short.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, t, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, retVar, t)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU4UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U4_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + var retVar = tr.Context.AllocateVRegister(ASTType.I4); + + var rangechk = tr.VM.Runtime.VMCall.RANGECHK; + var ckovf = tr.VM.Runtime.VMCall.CKOVERFLOW; + switch (valueType) { + case ASTType.I4: + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(uint.MinValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI8(uint.MaxValue))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rangechk), value)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf))); + + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + + case ASTType.R4: + case ASTType.R8: + var tmpVar = tr.Context.AllocateVRegister(ASTType.I8); + var fl = tr.Context.AllocateVRegister(ASTType.I4); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmpVar, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ckovf), fl)); + value = tmpVar; + goto case ASTType.I8; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfU8UnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U8_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + // TODO: no exception possible? + return value; + } + } + + public class ConvOvfUUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_U_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + // TODO: overflow? + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.Ptr || valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.Ptr); + switch (valueType) { + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } + + public class ConvOvfIUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Conv_Ovf_I_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + // TODO: overflow? + + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + + var valueType = value.Type; + if (valueType == ASTType.Ptr || valueType == ASTType.I4) // no conversion needed. + return value; + var retVar = tr.Context.AllocateVRegister(ASTType.Ptr); + switch (valueType) { + case ASTType.R4: + case ASTType.R8: + var tmp = tr.Context.AllocateVRegister(ASTType.I8); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ICONV, tmp, value)); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, tmp)); + break; + case ASTType.I8: + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, retVar, value)); + break; + default: + throw new NotSupportedException(); + } + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/EHHandlers.cs b/KoiVM/VMIR/Translation/EHHandlers.cs new file mode 100644 index 0000000..b9b9a56 --- /dev/null +++ b/KoiVM/VMIR/Translation/EHHandlers.cs @@ -0,0 +1,92 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; +using KoiVM.CFG; + +namespace KoiVM.VMIR.Translation { + public class LeaveHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Leave; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + tr.Instructions.Add(new IRInstruction(IROpCode.__LEAVE) { + Operand1 = new IRBlockTarget((IBasicBlock)expr.Operand) + }); + tr.Block.Flags |= BlockFlags.ExitEHLeave; + return null; + } + } + + public class EndfilterHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Endfilter; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + tr.Instructions.Add(new IRInstruction(IROpCode.__EHRET, tr.Translate(expr.Arguments[0]))); + tr.Block.Flags |= BlockFlags.ExitEHReturn; + return null; + } + } + + public class EndfinallyHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Endfinally; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + tr.Instructions.Add(new IRInstruction(IROpCode.__EHRET)); + tr.Block.Flags |= BlockFlags.ExitEHReturn; + return null; + } + } + + public class ThrowHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Throw; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + + var ecallId = tr.VM.Runtime.VMCall.THROW; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, tr.Translate(expr.Arguments[0]))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL) { + Operand1 = IRConstant.FromI4(ecallId), + Operand2 = IRConstant.FromI4(0) + }); + return null; + } + } + + public class RethrowHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Rethrow; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 0); + + var parentScopes = tr.RootScope.SearchBlock(tr.Block); + var catchScope = parentScopes[parentScopes.Length - 1]; + if (catchScope.Type != ScopeType.Handler || + catchScope.ExceptionHandler.HandlerType != ExceptionHandlerType.Catch) + throw new InvalidProgramException(); + + var exVar = tr.Context.ResolveExceptionVar(catchScope.ExceptionHandler); + Debug.Assert(exVar != null); + + var ecallId = tr.VM.Runtime.VMCall.THROW; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, exVar)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL) { + Operand1 = IRConstant.FromI4(ecallId), + Operand2 = IRConstant.FromI4(1) + }); + return null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/FieldHandlers.cs b/KoiVM/VMIR/Translation/FieldHandlers.cs new file mode 100644 index 0000000..8ce4ec6 --- /dev/null +++ b/KoiVM/VMIR/Translation/FieldHandlers.cs @@ -0,0 +1,115 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class LdfldHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldfld; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var obj = tr.Translate(expr.Arguments[0]); + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var fieldId = (int)tr.VM.Data.GetId((IField)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.LDFLD; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, obj)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(fieldId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + return retVar; + } + } + + public class StfldHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Stfld; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var obj = tr.Translate(expr.Arguments[0]); + var val = tr.Translate(expr.Arguments[1]); + + var fieldId = (int)tr.VM.Data.GetId((IField)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.STFLD; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, obj)); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, val)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(fieldId))); + return null; + } + } + + public class LdsfldHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldsfld; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var fieldId = (int)tr.VM.Data.GetId((IField)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.LDFLD; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.Null())); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(fieldId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + return retVar; + } + } + + public class StsfldHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Stsfld; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var val = tr.Translate(expr.Arguments[0]); + + var fieldId = (int)tr.VM.Data.GetId((IField)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.STFLD; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.Null())); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, val)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(fieldId))); + return null; + } + } + + public class LdfldaHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldflda; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var obj = tr.Translate(expr.Arguments[0]); + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var fieldId = (int)(tr.VM.Data.GetId((IField)expr.Operand) | 0x80000000); + var ecallId = tr.VM.Runtime.VMCall.LDFLD; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, obj)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(fieldId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + return retVar; + } + } + + public class LdsfldaHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldsflda; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var fieldId = (int)(tr.VM.Data.GetId((IField)expr.Operand) | 0x80000000); + var ecallId = tr.VM.Runtime.VMCall.LDFLD; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.Null())); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(fieldId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/FnPtrHandlers.cs b/KoiVM/VMIR/Translation/FnPtrHandlers.cs new file mode 100644 index 0000000..82a0921 --- /dev/null +++ b/KoiVM/VMIR/Translation/FnPtrHandlers.cs @@ -0,0 +1,60 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class LdftnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldftn; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + + var method = ((IMethod)expr.Operand).ResolveMethodDef(); + + bool intraLinking = method != null && tr.VM.Settings.IsVirtualized(method); + var ecallId = tr.VM.Runtime.VMCall.LDFTN; + if (intraLinking) { + var sigId = (int)tr.VM.Data.GetId(method.DeclaringType, method.MethodSig); + uint entryKey = tr.VM.Data.LookupInfo(method).EntryKey; + entryKey = ((uint)tr.VM.Random.Next() & 0xffffff00) | entryKey; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI4((int)entryKey))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI4(sigId))); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, new IRMetaTarget(method) { LateResolve = true })); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId))); + } + else { + var methodId = (int)tr.VM.Data.GetId((IMethod)expr.Operand); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, IRConstant.FromI4(0))); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(methodId))); + } + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + return retVar; + } + } + + public class LdvirtftnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldvirtftn; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var obj = tr.Translate(expr.Arguments[0]); + + var method = (IMethod)expr.Operand; + var methodId = (int)tr.VM.Data.GetId(method); + + var ecallId = tr.VM.Runtime.VMCall.LDFTN; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, obj)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(methodId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/InvokeHandlers.cs b/KoiVM/VMIR/Translation/InvokeHandlers.cs new file mode 100644 index 0000000..fdd3ef6 --- /dev/null +++ b/KoiVM/VMIR/Translation/InvokeHandlers.cs @@ -0,0 +1,178 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; +using KoiVM.VM; + +namespace KoiVM.VMIR.Translation { + public class CallHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Call; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var callInfo = new InstrCallInfo("CALL") { Method = (IMethod)expr.Operand }; + + tr.Instructions.Add(new IRInstruction(IROpCode.__BEGINCALL) { + Annotation = callInfo + }); + + var args = new IIROperand[expr.Arguments.Length]; + for (int i = 0; i < args.Length; i++) { + args[i] = tr.Translate(expr.Arguments[i]); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH) { + Operand1 = args[i], + Annotation = callInfo + }); + } + callInfo.Arguments = args; + + + IIROperand retVal = null; + if (expr.Type != null) { + retVal = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__CALL) { + Operand1 = new IRMetaTarget(callInfo.Method), + Operand2 = retVal, + Annotation = callInfo + }); + } + else { + tr.Instructions.Add(new IRInstruction(IROpCode.__CALL) { + Operand1 = new IRMetaTarget(callInfo.Method), + Annotation = callInfo + }); + } + callInfo.ReturnValue = retVal; + + tr.Instructions.Add(new IRInstruction(IROpCode.__ENDCALL) { + Annotation = callInfo + }); + + return retVal; + } + } + + public class CallvirtHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Callvirt; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var callInfo = new InstrCallInfo("CALLVIRT") { Method = (IMethod)expr.Operand }; + if (expr.Prefixes != null && expr.Prefixes[0].OpCode == OpCodes.Constrained) + callInfo.ConstrainType = (ITypeDefOrRef)expr.Prefixes[0].Operand; + + tr.Instructions.Add(new IRInstruction(IROpCode.__BEGINCALL) { + Annotation = callInfo + }); + + var args = new IIROperand[expr.Arguments.Length]; + for (int i = 0; i < args.Length; i++) { + args[i] = tr.Translate(expr.Arguments[i]); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH) { + Operand1 = args[i], + Annotation = callInfo + }); + } + callInfo.Arguments = args; + + + IIROperand retVal = null; + if (expr.Type != null) { + retVal = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__CALLVIRT) { + Operand1 = new IRMetaTarget(callInfo.Method), + Operand2 = retVal, + Annotation = callInfo + }); + } + else { + tr.Instructions.Add(new IRInstruction(IROpCode.__CALLVIRT) { + Operand1 = new IRMetaTarget(callInfo.Method), + Annotation = callInfo + }); + } + callInfo.ReturnValue = retVal; + + tr.Instructions.Add(new IRInstruction(IROpCode.__ENDCALL) { + Annotation = callInfo + }); + + return retVal; + } + } + + public class NewobjHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Newobj; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var callInfo = new InstrCallInfo("NEWOBJ") { Method = (IMethod)expr.Operand }; + + tr.Instructions.Add(new IRInstruction(IROpCode.__BEGINCALL) { + Annotation = callInfo + }); + + var args = new IIROperand[expr.Arguments.Length]; + for (int i = 0; i < args.Length; i++) { + args[i] = tr.Translate(expr.Arguments[i]); + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH) { + Operand1 = args[i], + Annotation = callInfo + }); + } + callInfo.Arguments = args; + + + var retVal = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__NEWOBJ) { + Operand1 = new IRMetaTarget(callInfo.Method), + Operand2 = retVal, + Annotation = callInfo + }); + callInfo.ReturnValue = retVal; + + tr.Instructions.Add(new IRInstruction(IROpCode.__ENDCALL) { + Annotation = callInfo + }); + + return retVal; + } + } + + public class RetHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ret; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + if (expr.Arguments.Length == 1) { + var value = tr.Translate(expr.Arguments[0]); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = new IRRegister(VMRegisters.R0, value.Type), + Operand2 = value + }); + } + else + Debug.Assert(expr.Arguments.Length == 0); + tr.Instructions.Add(new IRInstruction(IROpCode.RET)); + + return null; + } + } + + public class CalliHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Calli; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/LocalHandlers.cs b/KoiVM/VMIR/Translation/LocalHandlers.cs new file mode 100644 index 0000000..37c1e53 --- /dev/null +++ b/KoiVM/VMIR/Translation/LocalHandlers.cs @@ -0,0 +1,58 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class LdlocHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldloc; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var local = tr.Context.ResolveLocal((Local)expr.Operand); + var ret = tr.Context.AllocateVRegister(local.Type); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, ret, local)); + + if (local.RawType.ElementType == ElementType.I1 || + local.RawType.ElementType == ElementType.I2) { + ret.RawType = local.RawType; + var r = tr.Context.AllocateVRegister(local.Type); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, r, ret)); + ret = r; + } + return ret; + } + } + + public class StlocHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Stloc; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = tr.Context.ResolveLocal((Local)expr.Operand), + Operand2 = tr.Translate(expr.Arguments[0]) + }); + return null; + } + } + + public class LdlocaHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldloca; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var local = tr.Context.ResolveLocal((Local)expr.Operand); + var ret = tr.Context.AllocateVRegister(ASTType.ByRef); + tr.Instructions.Add(new IRInstruction(IROpCode.__LEA, ret, local)); + return ret; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/LogicHandlers.cs b/KoiVM/VMIR/Translation/LogicHandlers.cs new file mode 100644 index 0000000..3f49078 --- /dev/null +++ b/KoiVM/VMIR/Translation/LogicHandlers.cs @@ -0,0 +1,149 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class AndHandler : ITranslationHandler { + public Code ILCode { + get { return Code.And; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__AND) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class OrHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Or; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__OR) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class XorHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Xor; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__XOR) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class NotHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Not; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__NOT) { + Operand1 = ret + }); + return ret; + } + } + + public class ShlHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Shl; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SHL) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class ShrHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Shr; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SHR) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class ShrUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Shr_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SHR) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/MiscHandlers.cs b/KoiVM/VMIR/Translation/MiscHandlers.cs new file mode 100644 index 0000000..3f17fae --- /dev/null +++ b/KoiVM/VMIR/Translation/MiscHandlers.cs @@ -0,0 +1,78 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class DupHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Dup; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + return ret; + } + } + + public class NopHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Nop; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + tr.Instructions.Add(new IRInstruction(IROpCode.NOP)); + return null; + } + } + + public class BreakHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Break; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var ecallId = tr.VM.Runtime.VMCall.BREAK; + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId))); + return null; + } + } + + public class CkfiniteHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ckfinite; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var value = tr.Translate(expr.Arguments[0]); + var ecallId = tr.VM.Runtime.VMCall.CKFINITE; + if (value.Type == ASTType.R4) { + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + } + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), value)); + return value; + } + } + + public class PopHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Pop; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + tr.Translate(expr.Arguments[0]); + return null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/NumericHandlers.cs b/KoiVM/VMIR/Translation/NumericHandlers.cs new file mode 100644 index 0000000..a586b06 --- /dev/null +++ b/KoiVM/VMIR/Translation/NumericHandlers.cs @@ -0,0 +1,436 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class AddHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Add; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class AddOvfHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Add_Ovf; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + + var ecallId = tr.VM.Runtime.VMCall.CKOVERFLOW; + var fl = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), fl)); + return ret; + } + } + + public class AddOvfUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Add_Ovf_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + + var ecallId = tr.VM.Runtime.VMCall.CKOVERFLOW; + var fl = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.CARRY) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), fl)); + return ret; + } + } + + public class SubHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Sub; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + if (expr.Type != null && (expr.Type.Value == ASTType.R4 || expr.Type.Value == ASTType.R8)) { + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SUB) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + } + else { + // A - B = A + (-B) = A + (~B + 1) = A + ~B + 1 + var tmp = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = tmp, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__NOT) { + Operand1 = tmp + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = tmp + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1) + }); + } + return ret; + } + } + + public class SubOvfHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Sub_Ovf; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + if (expr.Type != null && (expr.Type.Value == ASTType.R4 || expr.Type.Value == ASTType.R8)) { + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SUB) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + } + else { + // A - B = A + (-B) = A + (~B + 1) = A + ~B + 1 + var tmp = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = tmp, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__NOT) { + Operand1 = tmp + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = tmp, + Operand2 = IRConstant.FromI4(1) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = tmp + }); + } + + var ecallId = tr.VM.Runtime.VMCall.CKOVERFLOW; + var fl = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), fl)); + return ret; + } + } + + public class SubOvfUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Sub_Ovf_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + if (expr.Type != null && (expr.Type.Value == ASTType.R4 || expr.Type.Value == ASTType.R8)) { + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SUB) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + } + else { + // A - B = A + (-B) = A + (~B + 1) = A + ~B + 1 + var tmp = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = tmp, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__NOT) { + Operand1 = tmp + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = tmp + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1) + }); + } + + var ecallId = tr.VM.Runtime.VMCall.CKOVERFLOW; + var fl = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.CARRY) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), fl)); + return ret; + } + } + + public class MulHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Mul; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MUL) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class MulOvfHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Mul_Ovf; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MUL) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + + var ecallId = tr.VM.Runtime.VMCall.CKOVERFLOW; + var fl = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.OVERFLOW) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), fl)); + return ret; + } + } + + public class MulOvfUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Mul_Ovf_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.MUL) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + + var ecallId = tr.VM.Runtime.VMCall.CKOVERFLOW; + var fl = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__GETF) { + Operand1 = fl, + Operand2 = IRConstant.FromI4(1 << tr.Arch.Flags.CARRY) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), fl)); + return ret; + } + } + + public class DivHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Div; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.DIV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class DivUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Div_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.DIV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class NegHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Neg; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + if (expr.Type != null && (expr.Type.Value == ASTType.R4 || expr.Type.Value == ASTType.R8)) { + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(0) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.SUB) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + } + else { + // -A = ~A + 1 + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__NOT) { + Operand1 = ret + }); + tr.Instructions.Add(new IRInstruction(IROpCode.ADD) { + Operand1 = ret, + Operand2 = IRConstant.FromI4(1) + }); + } + return ret; + } + } + + public class RemHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Rem; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.REM) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } + + public class RemUnHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Rem_Un; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var ret = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[0]) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.__SETF) { + Operand1 = IRConstant.FromI4(1 << tr.Arch.Flags.UNSIGNED) + }); + tr.Instructions.Add(new IRInstruction(IROpCode.REM) { + Operand1 = ret, + Operand2 = tr.Translate(expr.Arguments[1]) + }); + return ret; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/ParameterHandlers.cs b/KoiVM/VMIR/Translation/ParameterHandlers.cs new file mode 100644 index 0000000..258f810 --- /dev/null +++ b/KoiVM/VMIR/Translation/ParameterHandlers.cs @@ -0,0 +1,58 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class LdargHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldarg; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var param = tr.Context.ResolveParameter((Parameter)expr.Operand); + var ret = tr.Context.AllocateVRegister(param.Type); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV, ret, param)); + + if (param.RawType.ElementType == ElementType.I1 || + param.RawType.ElementType == ElementType.I2) { + ret.RawType = param.RawType; + var r = tr.Context.AllocateVRegister(param.Type); + tr.Instructions.Add(new IRInstruction(IROpCode.SX, r, ret)); + ret = r; + } + return ret; + } + } + + public class StargHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Starg; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + tr.Instructions.Add(new IRInstruction(IROpCode.MOV) { + Operand1 = tr.Context.ResolveParameter((Parameter)expr.Operand), + Operand2 = tr.Translate(expr.Arguments[0]) + }); + return null; + } + } + + public class LdargaHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldarga; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var param = tr.Context.ResolveParameter((Parameter)expr.Operand); + var ret = tr.Context.AllocateVRegister(ASTType.ByRef); + tr.Instructions.Add(new IRInstruction(IROpCode.__LEA, ret, param)); + return ret; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Translation/PointerHandlers.cs b/KoiVM/VMIR/Translation/PointerHandlers.cs new file mode 100644 index 0000000..6b255dc --- /dev/null +++ b/KoiVM/VMIR/Translation/PointerHandlers.cs @@ -0,0 +1,95 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR.Translation { + public class LdobjHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Ldobj; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var addr = tr.Translate(expr.Arguments[0]); + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + tr.Instructions.Add(new IRInstruction(IROpCode.__LDOBJ, addr, retVar) { + Annotation = new PointerInfo("LDOBJ", (ITypeDefOrRef)expr.Operand) + }); + + return retVar; + } + } + + public class StobjHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Stobj; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 2); + var addr = tr.Translate(expr.Arguments[0]); + var value = tr.Translate(expr.Arguments[1]); + tr.Instructions.Add(new IRInstruction(IROpCode.__STOBJ, addr, value) { + Annotation = new PointerInfo("STOBJ", (ITypeDefOrRef)expr.Operand) + }); + + return null; + } + } + + public class InitobjHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Initobj; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var addr = tr.Translate(expr.Arguments[0]); + + var typeId = (int)tr.VM.Data.GetId((ITypeDefOrRef)expr.Operand); + var ecallId = tr.VM.Runtime.VMCall.INITOBJ; + tr.Instructions.Add(new IRInstruction(IROpCode.PUSH, addr)); + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + + return null; + } + } + + public class LocallocHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Localloc; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + Debug.Assert(expr.Arguments.Length == 1); + var size = tr.Translate(expr.Arguments[0]); + + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var ecallId = tr.VM.Runtime.VMCall.LOCALLOC; + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), size)); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } + + public class SizeofHandler : ITranslationHandler { + public Code ILCode { + get { return Code.Sizeof; } + } + + public IIROperand Translate(ILASTExpression expr, IRTranslator tr) { + var typeId = (int)tr.Runtime.Descriptor.Data.GetId((ITypeDefOrRef)expr.Operand); + var retVar = tr.Context.AllocateVRegister(expr.Type.Value); + var ecallId = tr.VM.Runtime.VMCall.SIZEOF; + tr.Instructions.Add(new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(ecallId), IRConstant.FromI4(typeId))); + tr.Instructions.Add(new IRInstruction(IROpCode.POP, retVar)); + + return retVar; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/TranslationHelpers.cs b/KoiVM/VMIR/TranslationHelpers.cs new file mode 100644 index 0000000..5e90284 --- /dev/null +++ b/KoiVM/VMIR/TranslationHelpers.cs @@ -0,0 +1,20 @@ +using System; +using System.Diagnostics; +using KoiVM.AST; +using KoiVM.AST.IR; + +namespace KoiVM.VMIR { + public static class TranslationHelpers { + public static void EmitCompareEq(IRTranslator tr, ASTType type, IIROperand a, IIROperand b) { + if (type == ASTType.O || type == ASTType.ByRef || + type == ASTType.R4 || type == ASTType.R8) { + tr.Instructions.Add(new IRInstruction(IROpCode.CMP, a, b)); + } + else { + // I4/I8/Ptr + Debug.Assert(type == ASTType.I4 || type == ASTType.I8 || type == ASTType.Ptr); + tr.Instructions.Add(new IRInstruction(IROpCode.CMP, a, b)); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/Virtualizer.cs b/KoiVM/Virtualizer.cs new file mode 100644 index 0000000..765a760 --- /dev/null +++ b/KoiVM/Virtualizer.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using KoiVM.RT; +using KoiVM.VMIL; + +namespace KoiVM { + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + public class Virtualizer : IVMSettings { + MethodVirtualizer vr; + string runtimeName; + Dictionary methodList = new Dictionary(); + HashSet processed = new HashSet(); + HashSet doInstantiation = new HashSet(); + GenericInstantiation instantiation = new GenericInstantiation(); + int seed; + bool debug; + + public ModuleDef RuntimeModule { + get { return Runtime.Module; } + } + + public VMRuntime Runtime { get; set; } + + public Virtualizer(int seed, bool debug) { + Runtime = null; + this.seed = seed; + this.debug = debug; + + instantiation.ShouldInstantiate += spec => doInstantiation.Contains(spec.Method.ResolveMethodDefThrow()); + } + + public void Initialize(ModuleDef runtimeLib) { + Runtime = new VMRuntime(this, runtimeLib); + runtimeName = runtimeLib.Assembly.Name; + vr = new MethodVirtualizer(Runtime); + } + + public void AddModule(ModuleDef module) { + foreach (var method in new Scanner(module).Scan()) + AddMethod(method.Item1, method.Item2); + } + + public void AddMethod(MethodDef method, bool isExport) { + if (!method.HasBody) + return; + + if (method.HasGenericParameters) { + if (!isExport) + doInstantiation.Add(method); + } + else + methodList.Add(method, isExport); + + if (!isExport) { + // Need to force set declaring type because will be used in VM compilation + var thisParam = method.HasThis ? method.Parameters[0].Type : null; + + var declType = method.DeclaringType; + declType.Methods.Remove(method); + if (method.SemanticsAttributes != 0) { + foreach (var prop in declType.Properties) { + if (prop.GetMethod == method) + prop.GetMethod = null; + if (prop.SetMethod == method) + prop.SetMethod = null; + } + foreach (var evt in declType.Events) { + if (evt.AddMethod == method) + evt.AddMethod = null; + if (evt.RemoveMethod == method) + evt.RemoveMethod = null; + if (evt.InvokeMethod == method) + evt.InvokeMethod = null; + } + } + method.DeclaringType2 = declType; + + if (thisParam != null) + method.Parameters[0].Type = thisParam; + } + } + + public IEnumerable GetMethods() { + return methodList.Keys; + } + + public void ProcessMethods(ModuleDef module, Action progress = null) { + if (processed.Contains(module)) + throw new InvalidOperationException("Module already processed."); + + if (progress == null) + progress = (num, total) => { }; + + var targets = methodList.Keys.Where(method => method.Module == module).ToList(); + + for (int i = 0; i < targets.Count; i++) { + var method = targets[i]; + instantiation.EnsureInstantiation(method, (spec, instantation) => { + if (instantation.Module == module || processed.Contains(instantation.Module)) + targets.Add(instantation); + methodList[instantation] = false; + }); + ProcessMethod(method, methodList[method]); + progress(i, targets.Count); + } + progress(targets.Count, targets.Count); + processed.Add(module); + } + + public IModuleWriterListener CommitModule(ModuleDefMD module, Action progress = null) { + if (progress == null) + progress = (num, total) => { }; + + var methods = methodList.Keys.Where(method => method.Module == module).ToArray(); + for (int i = 0; i < methods.Length; i++) { + var method = methods[i]; + PostProcessMethod(method, methodList[method]); + progress(i, methodList.Count); + } + progress(methods.Length, methods.Length); + + return Runtime.CommitModule(module); + } + + public void CommitRuntime(ModuleDef targetModule = null) { + Runtime.CommitRuntime(targetModule); + } + + void ProcessMethod(MethodDef method, bool isExport) { + vr.Run(method, isExport); + } + + void PostProcessMethod(MethodDef method, bool isExport) { + var scope = Runtime.LookupMethod(method); + + var ilTransformer = new ILPostTransformer(method, scope, Runtime); + ilTransformer.Transform(); + } + + public string SaveRuntime(string directory) { + var rtPath = Path.Combine(directory, runtimeName + ".dll"); + + File.WriteAllBytes(rtPath, Runtime.RuntimeLibrary); + if (Runtime.RuntimeSymbols.Length > 0) + File.WriteAllBytes(Path.ChangeExtension(rtPath, "pdb"), Runtime.RuntimeSymbols); + return rtPath; + } + + bool IVMSettings.IsExported(MethodDef method) { + bool ret; + if (!methodList.TryGetValue(method, out ret)) + return false; + return ret; + } + + bool IVMSettings.IsVirtualized(MethodDef method) { + return methodList.ContainsKey(method); + } + + int IVMSettings.Seed { + get { return seed; } + } + + bool IVMSettings.IsDebug { + get { return debug; } + } + + public bool ExportDbgInfo { get; set; } + public bool DoStackWalk { get; set; } + } +} \ No newline at end of file diff --git a/KoiVM/VisitFunc.cs b/KoiVM/VisitFunc.cs new file mode 100644 index 0000000..f0a887b --- /dev/null +++ b/KoiVM/VisitFunc.cs @@ -0,0 +1,5 @@ +using System; + +namespace KoiVM { + public delegate void VisitFunc(TList list, TInstr instr, ref int index, TState state); +} \ No newline at end of file diff --git a/KoiVM/Watermark.cs b/KoiVM/Watermark.cs new file mode 100644 index 0000000..7a6c1db --- /dev/null +++ b/KoiVM/Watermark.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; + +namespace KoiVM { + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + internal static class Watermark { + internal static byte[] GenerateWatermark(uint rand) { + uint id = 0x10000; + uint a = id * 0x94952c99; // 0x71b467a9 + uint b = id * 0xbaaa9827; // 0x1edd5797 + uint c = id * 0x6f3592e3; // 0x4fa242cb + uint d = a + b + c; + + byte[] watermark = new byte[0x10]; + watermark[0x0] = (byte)(a >> 24); + watermark[0x1] = (byte)(a >> 16); + watermark[0x2] = (byte)(a >> 8); + watermark[0x3] = (byte)(a >> 0); + + watermark[0x4] = (byte)(b >> 24); + watermark[0x5] = (byte)(b >> 16); + watermark[0x6] = (byte)(b >> 8); + watermark[0x7] = (byte)(b >> 0); + + watermark[0x8] = (byte)(c >> 24); + watermark[0x9] = (byte)(c >> 16); + watermark[0xA] = (byte)(c >> 8); + watermark[0xB] = (byte)(c >> 0); + + watermark[0xC] = (byte)(d >> 24); + watermark[0xD] = (byte)(d >> 16); + watermark[0xE] = (byte)(d >> 8); + watermark[0xF] = (byte)(d >> 0); + + return watermark; + } + } +} \ No newline at end of file diff --git a/KoiVM/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/KoiVM/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/KoiVM/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/KoiVM/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/KoiVM/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..12e1b8f93b19d3fccfb61d0648eab567af08d074 GIT binary patch literal 6277 zcmeHLTT>f16t=-^FoYD-ln`jr%`|P3j%NplduDhbwrN}nVQdeb4(lQE?y*r=uRM|# za2cNZL;4Fk{fX^4>kHS=KCEYWuslANkEC;SE|NYe7LUbZ|6rkCDi4Q{xZB*3LW!ET z_P7d|SJHvYg_RYJhVToyeA?UtskrdhGt1UIebQz&@N^(y-G@L+=B3Tupz3jF3tDAy z1paz;exbHhTd8F-?$SJ4U?Ze*^)s5@1>AEak;#JJ477TRgP$_b z6DQzqC>D@Q-(QYKv=k zeZp@S@$3fw@+i|oJC(jR%^a8DXdyYM$)>BBECG|w;V#pMYO;QfG2WD-h8`lTrX!P%NYJPb&PtqcaB>*QSTaG?5h4f&V#xcd0?E6xVh1_BEg_ITVG`^f*tM;le7T1q)5mzir@H{O12*%g=f)$H^G7`U z*3K15Tjm?P2*(IR!OZ)0?gQctzizuiqbxH-w02gw$m{&sEq?eppDmZ{4W*^n0c~#y zzPD|Q>L)t~)u4`4Asj6uWGaFZ-f<5fU*IFlVa_2WzaXrhT@*_7;9t1vliwTGHc1N@PBM9Mee4rF-^oe;eNw4o?ty;xt?dt zgf%#Y6h(w$VbC>zMdzRkyKUD;4E6ypA*6X0)znc9BE>ph7}^dtU!ATlzs8_+u%y|E zAY$xGk?y(TYRql2{-T?eEgdr143*8HvV%S->jKMA$=9glx9A*K<-XlP-=X+tD8AYU z8+x!>La66C>Z$Zk55_)03x9B24UVfwFJ@7ry>Qn&zzcChjT|WcJB%LCQGr)eZ23FU zTQ)Z@tb^Mqy-j`g;@pqCk2?4fWApvW=xFjA-1WL8MMo{Y))^*}V)WZ>iXc^};00C^ zoA}HYCwLWNuFErt6W+SPO%VX2k|Gcm;(~9nGIN%__1*8>c!{l3XYaYM>7|FBfC{*B z&W-PoKYLcb{ZXrRZhVjJQQ*2CP|n0zk)04~qeriE;}x=YqCJmO1lmHczQ#&F!WP0d cl>H!#5vigw{MTT=`LDO|!G6CG?g87)peIlbkr{DD!X^khs8JUZ=YUpcF z4}k;`kq=RU5Bg$3P$BhDkqCuQJykDKK`2B$6xlhmGkal$T6aAIXU>iDfB*M?|3A~+ z>hUrF6i^fe`WYA7cEa0ftz|uM7|IH?wxbY_Ae4C&Vgr)uZtt^p@B&m=Mhf6HW76yC zIoZzidD#|4l_fV+SwD|hkA_rUgtmYn0D$lR(%dt7XXu>;0I<#2Bg-j`EP@H#q)mV{21q9W)a_8h0C{_ljx_4QcknOmRk-X8vb@xV&Oo^bBew4MOHpScV7 zS0dLzr-?tFi?#ooi}lse*tSjb5%e8NqAwWHQSfpc4sy#`dXl*e;7h1E=|-Cn~CBcUK4(qx~COK@7XZ?1V@ zV)t^POXm+qJCWnfBQrRT)ldqAwt(YUA+<5yL7zMnFEO!7NnA+M@aBC2peV++4AUYx z`yVL)b{b&XBFHE5Tv~XNgPs~J{}u!*fx8XjL_TI&i&N(R008VV@OmMq$-ElLfZuE- VRUDLC6Y(D=r=$fcS%fJ;{|oyUXKMfe literal 0 HcmV?d00001 diff --git a/KoiVM/obj/Debug/KoiVM.csproj.CopyComplete b/KoiVM/obj/Debug/KoiVM.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/KoiVM/obj/Debug/KoiVM.csproj.CoreCompileInputs.cache b/KoiVM/obj/Debug/KoiVM.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..b74dcaf --- /dev/null +++ b/KoiVM/obj/Debug/KoiVM.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +bdaf1a1f839cecb276f0ca8610906fd313fb4b6d diff --git a/KoiVM/obj/Debug/KoiVM.csproj.FileListAbsolute.txt b/KoiVM/obj/Debug/KoiVM.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..551a6d5 --- /dev/null +++ b/KoiVM/obj/Debug/KoiVM.csproj.FileListAbsolute.txt @@ -0,0 +1,21 @@ +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\KoiVM.dll +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\KoiVM.pdb +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM\obj\Debug\KoiVM.csproj.AssemblyReference.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM\obj\Debug\KoiVM.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM\obj\Debug\KoiVM.csproj.CopyComplete +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM\obj\Debug\KoiVM.dll +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM\obj\Debug\KoiVM.pdb +C:\Users\akibu\Desktop\hahaxdjsd\bin\KoiVM.dll +C:\Users\akibu\Desktop\hahaxdjsd\bin\KoiVM.pdb +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM\obj\Debug\KoiVM.csproj.AssemblyReference.cache +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM\obj\Debug\KoiVM.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM\obj\Debug\KoiVM.csproj.CopyComplete +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM\obj\Debug\KoiVM.dll +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM\obj\Debug\KoiVM.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\KoiVM.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\KoiVM.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM\obj\Debug\KoiVM.csproj.AssemblyReference.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM\obj\Debug\KoiVM.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM\obj\Debug\KoiVM.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM\obj\Debug\KoiVM.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM\obj\Debug\KoiVM.pdb diff --git a/KoiVM/obj/Debug/KoiVM.dll b/KoiVM/obj/Debug/KoiVM.dll new file mode 100644 index 0000000000000000000000000000000000000000..4801d31e26328f6a7d565a42ffca0bd1088a195c GIT binary patch literal 212480 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ºl{hmAe3Ja3gEX1RmliK8zYM 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 NhwI<``~O`F{NI27^Opbs literal 0 HcmV?d00001 diff --git a/KoiVM/obj/Debug/KoiVM.pdb b/KoiVM/obj/Debug/KoiVM.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ce647df2c3f6c92ef474c7e3ca514685d057b2a5 GIT binary patch literal 747008 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

    GWa!v=?+2Ic-U&c4~<7eS3_zX_fPZg>4}B6f3v�SNE4> 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 drst24T37?j_XXBR5jmKH+x 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 + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8931260 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# AstroNet +An obfuscator uses dnlib, Modded KoiVM on decryption methods. diff --git a/References/dnlibOld.dll b/References/dnlibOld.dll new file mode 100644 index 0000000000000000000000000000000000000000..644472e5937a5f266c6b0c265b01a36d79aa3cff GIT binary patch literal 1264640 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�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

    OlV*+0h+FRqj<=PebOE@K&)XrD}Aa9b8KPQ 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≫n%N_Wvz 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 literal 0 HcmV?d00001 diff --git a/KoiVM.Runtime/AstroNet.cs b/KoiVM.Runtime/AstroNet.cs new file mode 100644 index 0000000..fe4ff3c --- /dev/null +++ b/KoiVM.Runtime/AstroNet.cs @@ -0,0 +1,26 @@ +using System; + +namespace Runtime { + public class AstroNet { + public static object Run(uint A_0, string A_1, RuntimeTypeHandle type, string id_, object[] args) { + uint id = Convert.ToUInt32(id_.Length); + var module = Type.GetTypeFromHandle(type).Module; + return VMInstance.Instance(module).Run(id, args); + } + + public static unsafe void Run(uint A_0, string A_1, RuntimeTypeHandle type, string id_, void*[] typedRefs, void* retTypedRef) { + uint id = Convert.ToUInt32(id_.Length); + var module = Type.GetTypeFromHandle(type).Module; + VMInstance.Instance(module).Run(id, typedRefs, retTypedRef); + } + + internal static object RunInternal(uint A_0, string A_1, int moduleId, ulong codeAddr, uint key, uint sigId, object[] args) { + return VMInstance.Instance(moduleId).Run(codeAddr, key, sigId, args); + } + + internal static unsafe void RunInternal(uint A_0, string A_1, int moduleId, ulong codeAddr, uint key, uint sigId, void*[] typedRefs, + void* retTypedRef) { + VMInstance.Instance(moduleId).Run(codeAddr, key, sigId, typedRefs, retTypedRef); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Data/OpCodeMap.cs b/KoiVM.Runtime/Data/OpCodeMap.cs new file mode 100644 index 0000000..129a462 --- /dev/null +++ b/KoiVM.Runtime/Data/OpCodeMap.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using Runtime.OpCodes; + +namespace Runtime.Data { + internal static class OpCodeMap { + static readonly Dictionary opCodes; + + static OpCodeMap() { + opCodes = new Dictionary(); + foreach (var type in typeof(OpCodeMap).Assembly.GetTypes()) { + if (typeof(IOpCode).IsAssignableFrom(type) && !type.IsAbstract) { + var opCode = (IOpCode)Activator.CreateInstance(type); + opCodes[opCode.Code] = opCode; + } + } + } + + public static IOpCode Lookup(byte code) { + return opCodes[code]; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Data/VCallMap.cs b/KoiVM.Runtime/Data/VCallMap.cs new file mode 100644 index 0000000..a631432 --- /dev/null +++ b/KoiVM.Runtime/Data/VCallMap.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using Runtime.VCalls; + +namespace Runtime.Data { + internal static class VCallMap { + static readonly Dictionary vCalls; + + static VCallMap() { + vCalls = new Dictionary(); + foreach (var type in typeof(VCallMap).Assembly.GetTypes()) { + if (typeof(IVCall).IsAssignableFrom(type) && !type.IsAbstract) { + var vCall = (IVCall)Activator.CreateInstance(type); + vCalls[vCall.Code] = vCall; + } + } + } + + public static IVCall Lookup(byte code) { + return vCalls[code]; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Data/VMData.cs b/KoiVM.Runtime/Data/VMData.cs new file mode 100644 index 0000000..4bcf510 --- /dev/null +++ b/KoiVM.Runtime/Data/VMData.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace Runtime.Data { + internal unsafe class VMData { + [StructLayout(LayoutKind.Sequential)] + struct VMDAT_HEADER { + public uint MAGIC; + public uint MD_COUNT; + public uint STR_COUNT; + public uint EXP_COUNT; + } + + class RefInfo { + public Module module; + public int token; + public MemberInfo resolved; + + public MemberInfo Member { + get { return resolved ?? (resolved = module.ResolveMember(token)); } + } + } + + Dictionary references; + Dictionary strings; + Dictionary exports; + + static Dictionary moduleVMData = new Dictionary(); + + public Module Module { get; private set; } + + public VMData(Module module, void* data) { + var header = (VMDAT_HEADER*)data; + if (header->MAGIC != 0x68736966) + throw new InvalidProgramException(); + + references = new Dictionary(); + strings = new Dictionary(); + exports = new Dictionary(); + + var ptr = (byte*)(header + 1); + for (int i = 0; i < header->MD_COUNT; i++) { + var id = Utils.ReadCompressedUInt(ref ptr); + var token = (int)Utils.FromCodedToken(Utils.ReadCompressedUInt(ref ptr)); + references[id] = new RefInfo { + module = module, + token = token + }; + } + for (int i = 0; i < header->STR_COUNT; i++) { + var id = Utils.ReadCompressedUInt(ref ptr); + var len = Utils.ReadCompressedUInt(ref ptr); + strings[id] = new string((char*)ptr, 0, (int)len); + ptr += len << 1; + } + for (int i = 0; i < header->EXP_COUNT; i++) { + exports[Utils.ReadCompressedUInt(ref ptr)] = new VMExportInfo(ref ptr, module); + } + + KoiSection = (byte*)data; + + Module = module; + moduleVMData[module] = this; + } + + public static VMData Instance(Module module) { + VMData data; + lock (moduleVMData) { + if (!moduleVMData.TryGetValue(module, out data)) + data = moduleVMData[module] = VMDataInitializer.GetData(module); + } + return data; + } + + public byte* KoiSection { get; set; } + + public MemberInfo LookupReference(uint id) { + return references[id].Member; + } + + public string LookupString(uint id) { + if (id == 0) + return null; + return strings[id]; + } + + public VMExportInfo LookupExport(uint id) { + return exports[id]; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Data/VMDataInitializer.cs b/KoiVM.Runtime/Data/VMDataInitializer.cs new file mode 100644 index 0000000..dbd303a --- /dev/null +++ b/KoiVM.Runtime/Data/VMDataInitializer.cs @@ -0,0 +1,155 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; + +namespace Runtime.Data { + internal unsafe class VMDataInitializer { + internal static VMData GetData(Module module) { + if (!Platform.LittleEndian) + throw new PlatformNotSupportedException(); + + var moduleBase = (byte*)Marshal.GetHINSTANCE(module); + string fqn = module.FullyQualifiedName; + bool isFlat = fqn.Length > 0 && fqn[0] == '<'; + if (isFlat) + return new VMData(module, GetKoiStreamFlat(moduleBase)); + else + return new VMData(module, GetKoiStreamMapped(moduleBase)); + } + + static void* GetKoiStreamMapped(byte* moduleBase) { + byte* ptr = moduleBase + 0x3c; + byte* ptr2; + ptr = ptr2 = moduleBase + *(uint*)ptr; + ptr += 0x6; + ushort sectNum = *(ushort*)ptr; + ptr += 14; + ushort optSize = *(ushort*)ptr; + ptr = ptr2 = ptr + 0x4 + optSize; + + byte* mdDir = moduleBase + *(uint*)(ptr - 16); + byte* mdHdr = moduleBase + *(uint*)(mdDir + 8); + mdHdr += 12; + mdHdr += *(uint*)mdHdr; + mdHdr = (byte*)(((ulong)mdHdr + 7) & ~3UL); + mdHdr += 2; + ushort numOfStream = *mdHdr; + mdHdr += 2; + var streamName = new StringBuilder(); + for (int i = 0; i < numOfStream; i++) { + uint offset = *(uint*)mdHdr; + uint len = *(uint*)(mdHdr + 4); + mdHdr += 8; + streamName.Length = 0; + for (int ii = 0; ii < 8; ii++) { + streamName.Append((char)*mdHdr++); + if (*mdHdr == 0) { + mdHdr += 3; + break; + } + streamName.Append((char)*mdHdr++); + if (*mdHdr == 0) { + mdHdr += 2; + break; + } + streamName.Append((char)*mdHdr++); + if (*mdHdr == 0) { + mdHdr += 1; + break; + } + streamName.Append((char)*mdHdr++); + if (*mdHdr == 0) + break; + } + if (streamName.ToString() == "#AstroNet") + return AllocateKoi(moduleBase + *(uint*)(mdDir + 8) + offset, len); + } + return null; + } + + static void* GetKoiStreamFlat(byte* moduleBase) { + byte* ptr = moduleBase + 0x3c; + byte* ptr2; + ptr = ptr2 = moduleBase + *(uint*)ptr; + ptr += 0x6; + ushort sectNum = *(ushort*)ptr; + ptr += 14; + ushort optSize = *(ushort*)ptr; + ptr = ptr2 = ptr + 0x4 + optSize; + + uint mdDir = *(uint*)(ptr - 16); + + var vAdrs = new uint[sectNum]; + var vSizes = new uint[sectNum]; + var rAdrs = new uint[sectNum]; + for (int i = 0; i < sectNum; i++) { + vAdrs[i] = *(uint*)(ptr + 12); + vSizes[i] = *(uint*)(ptr + 8); + rAdrs[i] = *(uint*)(ptr + 20); + ptr += 0x28; + } + + for (int i = 0; i < sectNum; i++) + if (vAdrs[i] <= mdDir && mdDir < vAdrs[i] + vSizes[i]) { + mdDir = mdDir - vAdrs[i] + rAdrs[i]; + break; + } + byte* mdDirPtr = moduleBase + mdDir; + uint mdHdr = *(uint*)(mdDirPtr + 8); + for (int i = 0; i < sectNum; i++) + if (vAdrs[i] <= mdHdr && mdHdr < vAdrs[i] + vSizes[i]) { + mdHdr = mdHdr - vAdrs[i] + rAdrs[i]; + break; + } + + + byte* mdHdrPtr = moduleBase + mdHdr; + mdHdrPtr += 12; + mdHdrPtr += *(uint*)mdHdrPtr; + mdHdrPtr = (byte*)(((ulong)mdHdrPtr + 7) & ~3UL); + mdHdrPtr += 2; + ushort numOfStream = *mdHdrPtr; + mdHdrPtr += 2; + var streamName = new StringBuilder(); + for (int i = 0; i < numOfStream; i++) { + uint offset = *(uint*)mdHdrPtr; + uint len = *(uint*)(mdHdrPtr + 4); + streamName.Length = 0; + mdHdrPtr += 8; + for (int ii = 0; ii < 8; ii++) { + streamName.Append((char)*mdHdrPtr++); + if (*mdHdrPtr == 0) { + mdHdrPtr += 3; + break; + } + streamName.Append((char)*mdHdrPtr++); + if (*mdHdrPtr == 0) { + mdHdrPtr += 2; + break; + } + streamName.Append((char)*mdHdrPtr++); + if (*mdHdrPtr == 0) { + mdHdrPtr += 1; + break; + } + streamName.Append((char)*mdHdrPtr++); + if (*mdHdrPtr == 0) + break; + } + if (streamName.ToString() == "#AstroNet") + return AllocateKoi(moduleBase + mdHdr + offset, len); + } + return null; + } + + [DllImport("kernel32.dll")] + static extern void CopyMemory(void* dest, void* src, uint count); + + static void* AllocateKoi(void* ptr, uint len) { + var koi = (void*)Marshal.AllocHGlobal((int)len); + CopyMemory(koi, ptr, len); + return koi; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Data/VMExportInfo.cs b/KoiVM.Runtime/Data/VMExportInfo.cs new file mode 100644 index 0000000..f711da6 --- /dev/null +++ b/KoiVM.Runtime/Data/VMExportInfo.cs @@ -0,0 +1,22 @@ +using System; +using System.Reflection; + +namespace Runtime.Data { + internal struct VMExportInfo { + public unsafe VMExportInfo(ref byte* ptr, Module module) { + CodeOffset = *(uint*)ptr; + ptr += 4; + if (CodeOffset != 0) { + EntryKey = *(uint*)ptr; + ptr += 4; + } + else + EntryKey = 0; + Signature = new VMFuncSig(ref ptr, module); + } + + public readonly uint CodeOffset; + public readonly uint EntryKey; + public readonly VMFuncSig Signature; + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Data/VMFuncSig.cs b/KoiVM.Runtime/Data/VMFuncSig.cs new file mode 100644 index 0000000..294243b --- /dev/null +++ b/KoiVM.Runtime/Data/VMFuncSig.cs @@ -0,0 +1,43 @@ +using System; +using System.Reflection; + +namespace Runtime.Data { + internal class VMFuncSig { + public unsafe VMFuncSig(ref byte* ptr, Module module) { + this.module = module; + + Flags = *ptr++; + paramToks = new int[Utils.ReadCompressedUInt(ref ptr)]; + for (int i = 0; i < paramToks.Length; i++) { + paramToks[i] = (int)Utils.FromCodedToken(Utils.ReadCompressedUInt(ref ptr)); + } + retTok = (int)Utils.FromCodedToken(Utils.ReadCompressedUInt(ref ptr)); + } + + Module module; + readonly int[] paramToks; + readonly int retTok; + Type[] paramTypes; + Type retType; + + public byte Flags; + + public Type[] ParamTypes { + get { + if (paramTypes != null) + return paramTypes; + + var p = new Type[paramToks.Length]; + for (int i = 0; i < p.Length; i++) { + p[i] = module.ResolveType(paramToks[i]); + } + paramTypes = p; + return p; + } + } + + public Type RetType { + get { return retType ?? (retType = module.ResolveType(retTok)); } + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Dynamic/Constants.cs b/KoiVM.Runtime/Dynamic/Constants.cs new file mode 100644 index 0000000..4e1719c --- /dev/null +++ b/KoiVM.Runtime/Dynamic/Constants.cs @@ -0,0 +1,134 @@ +using System; + +#pragma warning disable 0649 + +namespace Runtime.Dynamic { + internal static class Constants { + public static byte REG_R0; + public static byte REG_R1; + public static byte REG_R2; + public static byte REG_R3; + public static byte REG_R4; + public static byte REG_R5; + public static byte REG_R6; + public static byte REG_R7; + public static byte REG_BP; + public static byte REG_SP; + public static byte REG_IP; + public static byte REG_FL; + public static byte REG_K1; + public static byte REG_K2; + public static byte REG_M1; + public static byte REG_M2; + + public static byte FL_OVERFLOW; + public static byte FL_CARRY; + public static byte FL_ZERO; + public static byte FL_SIGN; + public static byte FL_UNSIGNED; + public static byte FL_BEHAV1; + public static byte FL_BEHAV2; + public static byte FL_BEHAV3; + + public static byte OP_NOP; + public static byte OP_LIND_PTR; + public static byte OP_LIND_OBJECT; + public static byte OP_LIND_BYTE; + public static byte OP_LIND_WORD; + public static byte OP_LIND_DWORD; + public static byte OP_LIND_QWORD; + public static byte OP_SIND_PTR; + public static byte OP_SIND_OBJECT; + public static byte OP_SIND_BYTE; + public static byte OP_SIND_WORD; + public static byte OP_SIND_DWORD; + public static byte OP_SIND_QWORD; + public static byte OP_POP; + public static byte OP_PUSHR_OBJECT; + public static byte OP_PUSHR_BYTE; + public static byte OP_PUSHR_WORD; + public static byte OP_PUSHR_DWORD; + public static byte OP_PUSHR_QWORD; + public static byte OP_PUSHI_DWORD; + public static byte OP_PUSHI_QWORD; + public static byte OP_SX_BYTE; + public static byte OP_SX_WORD; + public static byte OP_SX_DWORD; + public static byte OP_CALL; + public static byte OPX_RET; + public static byte OP_NOR_DWORD; + public static byte OP_NOR_QWORD; + public static byte OP_CMP; + public static byte OP_CMP_DWORD; + public static byte OP_CMP_QWORD; + public static byte OP_CMP_R32; + public static byte OP_CMP_R64; + public static byte OP_JZ; + public static byte OP_JNZ; + public static byte OP_JMP; + public static byte OP_SWT; + public static byte OP_ADD_DWORD; + public static byte OP_ADD_QWORD; + public static byte OP_ADD_R32; + public static byte OP_ADD_R64; + public static byte OP_SUB_R32; + public static byte OP_SUB_R64; + public static byte OP_MUL_DWORD; + public static byte OP_MUL_QWORD; + public static byte OP_MUL_R32; + public static byte OP_MUL_R64; + public static byte OP_DIV_DWORD; + public static byte OP_DIV_QWORD; + public static byte OP_DIV_R32; + public static byte OP_DIV_R64; + public static byte OP_REM_DWORD; + public static byte OP_REM_QWORD; + public static byte OP_REM_R32; + public static byte OP_REM_R64; + public static byte OP_SHR_DWORD; + public static byte OP_SHR_QWORD; + public static byte OP_SHL_DWORD; + public static byte OP_SHL_QWORD; + public static byte OP_FCONV_R32_R64; + public static byte OP_FCONV_R64_R32; + public static byte OP_FCONV_R32; + public static byte OPX_FCONV_R64; + public static byte OP_ICONV_PTR; + public static byte OP_ICONV_R64; + public static byte OP_VCALL; + public static byte OP_TRY; + public static byte OP_LEAVE; + + public static byte VCALL_EXIT; + public static byte VCALL_BREAK; + public static byte VCALL_ECALL; + public static byte VCALL_CAST; + public static byte VCALL_CKFINITE; + public static byte VCALL_CKOVERFLOW; + public static byte VCALL_RANGECHK; + public static byte VCALL_INITOBJ; + public static byte VCALL_LDFLD; + public static byte VCALL_LDFTN; + public static byte VCALL_TOKEN; + public static byte VCALL_THROW; + public static byte VCALL_SIZEOF; + public static byte VCALL_STFLD; + public static byte VCALL_BOX; + public static byte VCALL_UNBOX; + public static byte VCALL_LOCALLOC; + + public static byte HELPER_INIT; + + public static byte ECALL_CALL; + public static byte ECALL_CALLVIRT; + public static byte ECALL_NEWOBJ; + public static byte ECALL_CALLVIRT_CONSTRAINED; + + public static byte FLAG_INSTANCE; + + public static byte EH_CATCH; + public static byte EH_FILTER; + public static byte EH_FAULT; + public static byte EH_FINALLY; + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/EHFrame.cs b/KoiVM.Runtime/Execution/EHFrame.cs new file mode 100644 index 0000000..4045d5b --- /dev/null +++ b/KoiVM.Runtime/Execution/EHFrame.cs @@ -0,0 +1,13 @@ +using System; + +namespace Runtime.Execution { + internal struct EHFrame { + public byte EHType; + public ulong FilterAddr; + public ulong HandlerAddr; + public Type CatchType; + + public VMSlot BP; + public VMSlot SP; + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/EHState.cs b/KoiVM.Runtime/Execution/EHState.cs new file mode 100644 index 0000000..86ed41c --- /dev/null +++ b/KoiVM.Runtime/Execution/EHState.cs @@ -0,0 +1,17 @@ +using System; + +namespace Runtime.Execution { + internal class EHState { + public enum EHProcess { + Searching, // Search for handler, filter are executed + Unwinding // Unwind the stack, fault/finally are executed + } + + public EHProcess CurrentProcess; + public object ExceptionObj; + public VMSlot OldBP; + public VMSlot OldSP; + public int? CurrentFrame; + public int? HandlerFrame; + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/ExecutionState.cs b/KoiVM.Runtime/Execution/ExecutionState.cs new file mode 100644 index 0000000..67e5a36 --- /dev/null +++ b/KoiVM.Runtime/Execution/ExecutionState.cs @@ -0,0 +1,10 @@ +using System; + +namespace Runtime.Execution { + internal enum ExecutionState { + Next, + Exit, + Throw, + Rethrow + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/FieldRef.cs b/KoiVM.Runtime/Execution/FieldRef.cs new file mode 100644 index 0000000..11a0884 --- /dev/null +++ b/KoiVM.Runtime/Execution/FieldRef.cs @@ -0,0 +1,44 @@ +using System; +using System.Reflection; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + internal class FieldRef : IReference { + object instance; + FieldInfo field; + + public FieldRef(object instance, FieldInfo field) { + this.instance = instance; + this.field = field; + } + + public VMSlot GetValue(VMContext ctx, PointerType type) { + var inst = instance; + if (field.DeclaringType.IsValueType && instance is IReference) + inst = ((IReference)instance).GetValue(ctx, PointerType.OBJECT).ToObject(field.DeclaringType); + return VMSlot.FromObject(field.GetValue(inst), field.FieldType); + } + + public unsafe void SetValue(VMContext ctx, VMSlot slot, PointerType type) { + if (field.DeclaringType.IsValueType && instance is IReference) { + TypedReference typedRef; + ((IReference)instance).ToTypedReference(ctx, &typedRef, field.DeclaringType); + field.SetValueDirect(typedRef, slot.ToObject(field.FieldType)); + } + else + field.SetValue(instance, slot.ToObject(field.FieldType)); + } + + public IReference Add(uint value) { + return this; + } + + public IReference Add(ulong value) { + return this; + } + + public void ToTypedReference(VMContext ctx, TypedRefPtr typedRef, Type type) { + TypedReferenceHelpers.GetFieldAddr(ctx, instance, field, typedRef); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/IReference.cs b/KoiVM.Runtime/Execution/IReference.cs new file mode 100644 index 0000000..3bac65c --- /dev/null +++ b/KoiVM.Runtime/Execution/IReference.cs @@ -0,0 +1,12 @@ +using System; + +namespace Runtime.Execution { + internal interface IReference { + VMSlot GetValue(VMContext ctx, PointerType type); + void SetValue(VMContext ctx, VMSlot slot, PointerType type); + IReference Add(uint value); + IReference Add(ulong value); + + void ToTypedReference(VMContext ctx, TypedRefPtr typedRef, Type type); + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/ArrayStoreHelpers.cs b/KoiVM.Runtime/Execution/Internal/ArrayStoreHelpers.cs new file mode 100644 index 0000000..ceac21a --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/ArrayStoreHelpers.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection.Emit; + +namespace Runtime.Execution.Internal { + internal class ArrayStoreHelpers { + static Hashtable storeHelpers = new Hashtable(); + + delegate void _SetValue(Array array, int index, object value); + + public static void SetValue(Array array, int index, object value, Type valueType, Type elemType) { + Debug.Assert(value == null || value.GetType() == valueType); + + var key = new KeyValuePair(valueType, elemType); + var helper = storeHelpers[key]; + if (helper == null) { + lock (storeHelpers) { + helper = storeHelpers[key]; + if (helper == null) { + helper = BuildStoreHelper(valueType, elemType); + storeHelpers[key] = helper; + } + } + } + ((_SetValue)helper)(array, index, value); + } + + static _SetValue BuildStoreHelper(Type valueType, Type elemType) { + var paramTypes = new[] { typeof(Array), typeof(int), typeof(object) }; + var dm = new DynamicMethod("", typeof(void), paramTypes, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_2); + if (elemType.IsValueType) + gen.Emit(System.Reflection.Emit.OpCodes.Unbox_Any, valueType); + gen.Emit(System.Reflection.Emit.OpCodes.Stelem, elemType); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return (_SetValue)dm.CreateDelegate(typeof(_SetValue)); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/DirectCall.cs b/KoiVM.Runtime/Execution/Internal/DirectCall.cs new file mode 100644 index 0000000..849c229 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/DirectCall.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; + +namespace Runtime.Execution.Internal { + internal static class DirectCall { + static Hashtable directProxies = new Hashtable(); + static Hashtable typedProxies = new Hashtable(); + static Hashtable constrainedProxies = new Hashtable(); + static MethodInfo refToTypedRef; + static MethodInfo castTypedRef; + static ConstructorInfo newTypedRef; + + static DirectCall() { + foreach (var method in typeof(IReference).GetMethods()) { + foreach (var param in method.GetParameters()) + if (param.ParameterType == typeof(TypedRefPtr)) { + refToTypedRef = method; + break; + } + if (refToTypedRef != null) + break; + } + foreach (var method in typeof(TypedReferenceHelpers).GetMethods()) { + if (method.GetParameters()[0].ParameterType == typeof(TypedRefPtr)) { + castTypedRef = method; + break; + } + } + foreach (var ctor in typeof(TypedRef).GetConstructors()) { + foreach (var param in ctor.GetParameters()) + if (param.ParameterType == typeof(TypedReference)) { + newTypedRef = ctor; + break; + } + if (newTypedRef != null) + break; + } + } + + public delegate object TypedInvocation(VMContext ctx, IReference[] refs, Type[] types); + + public static MethodBase GetDirectInvocationProxy(MethodBase method) { + var proxy = (MethodBase)directProxies[method]; + if (proxy != null) + return proxy; + + lock (directProxies) { + proxy = (MethodBase)directProxies[method]; + if (proxy != null) + return proxy; + + var parameters = method.GetParameters(); + var paramTypes = new Type[parameters.Length + (method.IsStatic ? 0 : 1)]; + for (int i = 0; i < paramTypes.Length; i++) { + if (method.IsStatic) + paramTypes[i] = parameters[i].ParameterType; + else { + if (i == 0) + paramTypes[0] = method.DeclaringType; + else + paramTypes[i] = parameters[i - 1].ParameterType; + } + } + + var retType = method is MethodInfo ? ((MethodInfo)method).ReturnType : typeof(void); + var dm = new DynamicMethod("", retType, paramTypes, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + for (int i = 0; i < paramTypes.Length; i++) { + if (!method.IsStatic && i == 0 && paramTypes[0].IsValueType) + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, i); + else + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg, i); + } + if (method is MethodInfo) + gen.Emit(System.Reflection.Emit.OpCodes.Call, (MethodInfo)method); + else + gen.Emit(System.Reflection.Emit.OpCodes.Call, (ConstructorInfo)method); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + directProxies[method] = dm; + return dm; + } + } + + public static TypedInvocation GetTypedInvocationProxy(MethodBase method, OpCode opCode, Type constrainType) { + Hashtable table; + object key; + if (constrainType == null) { + key = new KeyValuePair(method, opCode); + table = typedProxies; + } + else { + key = new KeyValuePair(method, constrainType); + table = constrainedProxies; + } + + var proxy = (TypedInvocation)table[key]; + if (proxy != null) + return proxy; + + lock (typedProxies) { + proxy = (TypedInvocation)table[key]; + if (proxy != null) + return proxy; + + var parameters = method.GetParameters(); + Type[] paramTypes; + if (opCode != System.Reflection.Emit.OpCodes.Newobj) { + paramTypes = new Type[parameters.Length + (method.IsStatic ? 0 : 1) + 1]; + for (int i = 0; i < paramTypes.Length - 1; i++) { + if (method.IsStatic) + paramTypes[i] = parameters[i].ParameterType; + else { + if (i == 0) { + if (constrainType != null) + paramTypes[0] = constrainType.MakeByRefType(); + else if (method.DeclaringType.IsValueType) + paramTypes[0] = method.DeclaringType.MakeByRefType(); + else + paramTypes[0] = method.DeclaringType; + } + else + paramTypes[i] = parameters[i - 1].ParameterType; + } + } + } + else { + paramTypes = new Type[parameters.Length + 1]; + for (int i = 0; i < paramTypes.Length - 1; i++) { + paramTypes[i] = parameters[i].ParameterType; + } + } + + var retType = method is MethodInfo ? ((MethodInfo)method).ReturnType : typeof(void); + if (opCode == System.Reflection.Emit.OpCodes.Newobj) + retType = method.DeclaringType; + var dm = new DynamicMethod("", typeof(object), new[] { typeof(VMContext), typeof(IReference[]), typeof(Type[]) }, + Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + for (int i = 0; i < paramTypes.Length - 1; i++) { + var paramType = paramTypes[i]; + bool isByRef = paramType.IsByRef; + if (isByRef) + paramType = paramType.GetElementType(); + + var typedRefLocal = gen.DeclareLocal(typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, i); + gen.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + gen.Emit(System.Reflection.Emit.OpCodes.Ldloca, typedRefLocal); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_2); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, i); + gen.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref); + + gen.Emit(System.Reflection.Emit.OpCodes.Callvirt, refToTypedRef); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldloca, typedRefLocal); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_2); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, i); + gen.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref); + gen.Emit(System.Reflection.Emit.OpCodes.Call, castTypedRef); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldloc, typedRefLocal); + gen.Emit(System.Reflection.Emit.OpCodes.Refanyval, paramType); + + if (!isByRef) + gen.Emit(System.Reflection.Emit.OpCodes.Ldobj, paramType); + } + + if (constrainType != null) + gen.Emit(System.Reflection.Emit.OpCodes.Constrained, constrainType); + + if (method is MethodInfo) + gen.Emit(opCode, (MethodInfo)method); + else + gen.Emit(opCode, (ConstructorInfo)method); + + if (retType.IsByRef) { + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, retType.GetElementType()); + gen.Emit(System.Reflection.Emit.OpCodes.Newobj, newTypedRef); + } + else if (retType == typeof(void)) + gen.Emit(System.Reflection.Emit.OpCodes.Ldnull); + else if (retType.IsValueType) + gen.Emit(System.Reflection.Emit.OpCodes.Box, retType); + + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + proxy = (TypedInvocation)dm.CreateDelegate(typeof(TypedInvocation)); + table[key] = proxy; + return proxy; + } + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/EHHelper.cs b/KoiVM.Runtime/Execution/Internal/EHHelper.cs new file mode 100644 index 0000000..71e2fc9 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/EHHelper.cs @@ -0,0 +1,121 @@ +using System; +using System.Reflection; +using System.Reflection.Emit; + +namespace Runtime.Execution.Internal { + internal class EHHelper { + delegate void Throw(Exception ex, string ip, bool rethrow); + + static Throw rethrow; + + static bool BuildExceptionDispatchInfo(Type type) { + try { + var capture = type.GetMethod("Capture"); + var thr = type.GetMethod("Throw"); + + var dm = new DynamicMethod("", typeof(void), new[] { typeof(Exception), typeof(string), typeof(bool) }); + var ilGen = dm.GetILGenerator(); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + ilGen.Emit(System.Reflection.Emit.OpCodes.Call, capture); + ilGen.Emit(System.Reflection.Emit.OpCodes.Call, thr); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ret); + + rethrow = (Throw)dm.CreateDelegate(typeof(Throw)); + } + catch { + return false; + } + return true; + } + + static bool BuildInternalPreserve(Type type) { + try { + const BindingFlags fl = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod; + var at = (string)typeof(Environment).InvokeMember("GetResourceString", fl, null, null, new object[] { "Word_At" }); + + var preserve = type.GetMethod("InternalPreserveStackTrace", BindingFlags.Instance | BindingFlags.NonPublic); + var field = type.GetField("_remoteStackTraceString", BindingFlags.Instance | BindingFlags.NonPublic); + var stackTrace = type.GetProperty("StackTrace", BindingFlags.Instance | BindingFlags.Public).GetGetMethod(); + var fmt = typeof(string).GetMethod("Format", new[] { typeof(string), typeof(object), typeof(object) }); + + var dm = new DynamicMethod("", typeof(void), new[] { typeof(Exception), typeof(string), typeof(bool) }, true); + var ilGen = dm.GetILGenerator(); + var lbl = ilGen.DefineLabel(); + var lbl2 = ilGen.DefineLabel(); + var lbl3 = ilGen.DefineLabel(); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Dup); + ilGen.Emit(System.Reflection.Emit.OpCodes.Dup); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldfld, field); + ilGen.Emit(System.Reflection.Emit.OpCodes.Brtrue, lbl2); + ilGen.Emit(System.Reflection.Emit.OpCodes.Callvirt, stackTrace); + ilGen.Emit(System.Reflection.Emit.OpCodes.Br, lbl3); + ilGen.MarkLabel(lbl2); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldfld, field); + ilGen.MarkLabel(lbl3); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Call, preserve); + ilGen.Emit(System.Reflection.Emit.OpCodes.Stfld, field); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); + ilGen.Emit(System.Reflection.Emit.OpCodes.Brfalse, lbl); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_2); + ilGen.Emit(System.Reflection.Emit.OpCodes.Brtrue, lbl); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + + ilGen.Emit(System.Reflection.Emit.OpCodes.Dup); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldstr, + "{1}" + Environment.NewLine + " " + at + " KoiVM [{0}]" + Environment.NewLine); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldfld, field); + ilGen.Emit(System.Reflection.Emit.OpCodes.Call, fmt); + ilGen.Emit(System.Reflection.Emit.OpCodes.Stfld, field); + + + ilGen.Emit(System.Reflection.Emit.OpCodes.Throw); + + ilGen.MarkLabel(lbl); + ilGen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + ilGen.Emit(System.Reflection.Emit.OpCodes.Throw); + + rethrow = (Throw)dm.CreateDelegate(typeof(Throw)); + } + catch (Exception ex) { + Console.WriteLine(ex); + return false; + } + return true; + } + + static EHHelper() { + if (BuildInternalPreserve(typeof(Exception))) + return; + var type = Type.GetType("System.Runtime.ExceptionServices.ExceptionDispatchInfo"); + if (type != null && BuildExceptionDispatchInfo(type)) + return; + rethrow = null; + } + + static readonly object RethrowKey = new object(); + + public static void Rethrow(Exception ex, string tokens) { + if (tokens == null) + throw ex; + + bool r = ex.Data.Contains(RethrowKey); + if (!r) + ex.Data[RethrowKey] = RethrowKey; + + if (rethrow != null) + rethrow((Exception)ex, tokens, r); + throw ex; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/SizeOfHelper.cs b/KoiVM.Runtime/Execution/Internal/SizeOfHelper.cs new file mode 100644 index 0000000..7226669 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/SizeOfHelper.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections; +using System.Reflection.Emit; + +namespace Runtime.Execution.Internal { + internal class SizeOfHelper { + static Hashtable sizes = new Hashtable(); + + public static int SizeOf(Type type) { + var size = sizes[type]; + if (size == null) { + lock (sizes) { + size = sizes[type]; + if (size == null) { + size = GetSize(type); + sizes[type] = size; + } + } + } + return (int)size; + } + + static int GetSize(Type type) { + var dm = new DynamicMethod("", typeof(int), Type.EmptyTypes, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + gen.Emit(System.Reflection.Emit.OpCodes.Sizeof, type); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return (int)dm.Invoke(null, null); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/TypedReferenceHelpers.cs b/KoiVM.Runtime/Execution/Internal/TypedReferenceHelpers.cs new file mode 100644 index 0000000..19be344 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/TypedReferenceHelpers.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; + +namespace Runtime.Execution.Internal { + internal static unsafe class TypedReferenceHelpers { + static Hashtable castHelpers = new Hashtable(); + static Hashtable makeHelpers = new Hashtable(); + static Hashtable unboxHelpers = new Hashtable(); + static Hashtable setHelpers = new Hashtable(); + static Hashtable fieldAddrHelpers = new Hashtable(); + + delegate void Cast(TypedRefPtr typedRef); + + delegate void Make(void* ptr, TypedRefPtr typedRef); + + delegate void Unbox(object box, TypedRefPtr typedRef); + + delegate void Set(object value, TypedRefPtr typedRef); + + delegate void FieldAdr(TypedRefPtr value, TypedRefPtr typedRef); + + public static void CastTypedRef(TypedRefPtr typedRef, Type targetType) { + Type sourceType = TypedReference.GetTargetType(*(TypedReference*)typedRef); + var key = new KeyValuePair(sourceType, targetType); + + var helper = castHelpers[key]; + if (helper == null) { + lock (castHelpers) { + helper = castHelpers[key]; + if (helper == null) { + helper = BuildCastHelper(sourceType, targetType); + castHelpers[key] = helper; + } + } + } + ((Cast)helper)(typedRef); + } + + public static void MakeTypedRef(void* ptr, TypedRefPtr typedRef, Type targetType) { + var helper = makeHelpers[targetType]; + if (helper == null) { + lock (makeHelpers) { + helper = makeHelpers[targetType]; + if (helper == null) { + helper = BuildMakeHelper(targetType); + makeHelpers[targetType] = helper; + } + } + } + ((Make)helper)(ptr, typedRef); + } + + public static void UnboxTypedRef(object box, TypedRefPtr typedRef) { + UnboxTypedRef(box, typedRef, box.GetType()); + if (box is IValueTypeBox) + CastTypedRef(typedRef, ((IValueTypeBox)box).GetValueType()); + } + + public static void UnboxTypedRef(object box, TypedRefPtr typedRef, Type boxType) { + var helper = unboxHelpers[boxType]; + if (helper == null) { + lock (unboxHelpers) { + helper = unboxHelpers[boxType]; + if (helper == null) { + helper = BuildUnboxHelper(boxType); + unboxHelpers[boxType] = helper; + } + } + } + ((Unbox)helper)(box, typedRef); + } + + public static void SetTypedRef(object value, TypedRefPtr typedRef) { + Type type = TypedReference.GetTargetType(*(TypedReference*)typedRef); + var helper = setHelpers[type]; + if (helper == null) { + lock (setHelpers) { + helper = setHelpers[type]; + if (helper == null) { + helper = BuildSetHelper(type); + setHelpers[type] = helper; + } + } + } + ((Set)helper)(value, typedRef); + } + + public static void GetFieldAddr(VMContext context, object obj, FieldInfo field, TypedRefPtr typedRef) { + var helper = fieldAddrHelpers[field]; + if (helper == null) { + lock (fieldAddrHelpers) { + helper = fieldAddrHelpers[field]; + if (helper == null) { + helper = BuildAddrHelper(field); + fieldAddrHelpers[field] = helper; + } + } + } + TypedReference objRef; + if (obj == null) { + objRef = default(TypedReference); + } + else if (obj is IReference) + ((IReference)obj).ToTypedReference(context, &objRef, field.DeclaringType); + else { + objRef = __makeref(obj); + CastTypedRef(&objRef, obj.GetType()); + } + + ((FieldAdr)helper)(&objRef, typedRef); + } + + static FieldInfo typedPtrField = typeof(TypedRefPtr).GetFields()[0]; + + static Cast BuildCastHelper(Type sourceType, Type targetType) { + var dm = new DynamicMethod("", typeof(void), new[] { typeof(TypedRefPtr) }, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 0); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + gen.Emit(System.Reflection.Emit.OpCodes.Dup); + gen.Emit(System.Reflection.Emit.OpCodes.Ldobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Refanyval, sourceType); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, targetType); + gen.Emit(System.Reflection.Emit.OpCodes.Stobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + return (Cast)dm.CreateDelegate(typeof(Cast)); + } + + static Make BuildMakeHelper(Type targetType) { + var dm = new DynamicMethod("", typeof(void), new[] { typeof(void*), typeof(TypedRefPtr) }, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, targetType); + gen.Emit(System.Reflection.Emit.OpCodes.Stobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return (Make)dm.CreateDelegate(typeof(Make)); + } + + static Unbox BuildUnboxHelper(Type boxType) { + var dm = new DynamicMethod("", typeof(void), new[] { typeof(object), typeof(TypedRefPtr) }, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + gen.Emit(System.Reflection.Emit.OpCodes.Unbox, boxType); // Unbox pointer is readonly? Never mind... + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, boxType); + gen.Emit(System.Reflection.Emit.OpCodes.Stobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return (Unbox)dm.CreateDelegate(typeof(Unbox)); + } + + static Set BuildSetHelper(Type refType) { + var dm = new DynamicMethod("", typeof(void), new[] { typeof(object), typeof(TypedRefPtr) }, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + gen.Emit(System.Reflection.Emit.OpCodes.Ldobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Refanyval, refType); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); + gen.Emit(System.Reflection.Emit.OpCodes.Unbox_Any, refType); + gen.Emit(System.Reflection.Emit.OpCodes.Stobj, refType); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return (Set)dm.CreateDelegate(typeof(Set)); + } + + static FieldAdr BuildAddrHelper(FieldInfo field) { + var dm = new DynamicMethod("", typeof(void), new[] { typeof(TypedRefPtr), typeof(TypedRefPtr) }, Unverifier.Module, true); + var gen = dm.GetILGenerator(); + + if (field.IsStatic) { + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldsflda, field); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, field.FieldType); + gen.Emit(System.Reflection.Emit.OpCodes.Stobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + } + else { + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 1); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, 0); + gen.Emit(System.Reflection.Emit.OpCodes.Ldfld, typedPtrField); + gen.Emit(System.Reflection.Emit.OpCodes.Ldobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Refanyval, field.DeclaringType); + if (!field.DeclaringType.IsValueType) + gen.Emit(System.Reflection.Emit.OpCodes.Ldobj, field.DeclaringType); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldflda, field); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, field.FieldType); + gen.Emit(System.Reflection.Emit.OpCodes.Stobj, typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + } + + return (FieldAdr)dm.CreateDelegate(typeof(FieldAdr)); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/Unverifier.cs b/KoiVM.Runtime/Execution/Internal/Unverifier.cs new file mode 100644 index 0000000..ed169b9 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/Unverifier.cs @@ -0,0 +1,22 @@ +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Security.Permissions; + +namespace Runtime.Execution.Internal { + internal static class Unverifier { + public static readonly Module Module; + + static Unverifier() { + var asm = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("Fish"), AssemblyBuilderAccess.Run); + var mod = asm.DefineDynamicModule("Fish"); + CustomAttributeBuilder att = + new CustomAttributeBuilder(typeof(SecurityPermissionAttribute).GetConstructor(new[] { typeof(SecurityAction) }), + new object[] { SecurityAction.Assert }, + new[] { typeof(SecurityPermissionAttribute).GetProperty("SkipVerification") }, + new object[] { true }); + mod.SetCustomAttribute(att); + Module = mod.DefineType(" ").CreateType().Module; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/VMTrampoline.cs b/KoiVM.Runtime/Execution/Internal/VMTrampoline.cs new file mode 100644 index 0000000..30e53b4 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/VMTrampoline.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections; +using System.Reflection; +using System.Reflection.Emit; +using Runtime.Data; + +namespace Runtime.Execution.Internal { + internal static class VMTrampoline { + delegate RuntimeMethodHandle GetMethodDescriptor(DynamicMethod dm); + + static readonly GetMethodDescriptor getDesc; + static readonly MethodInfo entryStubNormal; + static readonly MethodInfo entryStubTyped; + + static readonly Hashtable trampolines = new Hashtable(); + + static VMTrampoline() { + foreach (var method in typeof(AstroNet).GetMethods(BindingFlags.Static | BindingFlags.NonPublic)) { + if (method.ReturnType != typeof(void) && method.GetParameters().Length > 4) + entryStubNormal = method; + else + entryStubTyped = method; + } + getDesc = (GetMethodDescriptor)Delegate.CreateDelegate(typeof(GetMethodDescriptor), + typeof(DynamicMethod).GetMethod("GetMethodDescriptor", BindingFlags.Instance | BindingFlags.NonPublic)); + } + + public static IntPtr CreateTrampoline(Module module, ulong codeAdr, uint key, VMFuncSig sig, uint sigId) { + object dm = trampolines[codeAdr]; + if (dm != null) + return getDesc((DynamicMethod)dm).GetFunctionPointer(); + + lock (trampolines) { + dm = (DynamicMethod)trampolines[codeAdr]; + if (dm != null) + return getDesc((DynamicMethod)dm).GetFunctionPointer(); + + if (ShouldBeTyped(sig)) + dm = CreateTrampolineTyped(VMInstance.GetModuleId(module), codeAdr, key, sig, sigId); + else + dm = CreateTrampolineNormal(VMInstance.GetModuleId(module), codeAdr, key, sig, sigId); + trampolines[codeAdr] = dm; + return getDesc((DynamicMethod)dm).GetFunctionPointer(); + } + } + + static bool ShouldBeTyped(VMFuncSig sig) { + foreach (var param in sig.ParamTypes) { + if (param.IsByRef) + return true; + } + return sig.RetType.IsByRef; + } + + static DynamicMethod CreateTrampolineNormal(int moduleId, ulong codeAdr, uint key, VMFuncSig sig, uint sigId) { + var dm = new DynamicMethod("", sig.RetType, sig.ParamTypes, Unverifier.Module, true); + + var gen = dm.GetILGenerator(); + //body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, id)); + //body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, "AstroNet - github.com/lckt0")); + //body.Instructions.Add(Instruction.Create(OpCodes.Ldtoken, method.DeclaringType)); + //body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, gx(id))); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)moduleId); + gen.Emit(System.Reflection.Emit.OpCodes.Ldstr, "AstroNet - github.com/lckt0"); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)moduleId); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I8, (long)codeAdr); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)key); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)sigId); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, sig.ParamTypes.Length); + gen.Emit(System.Reflection.Emit.OpCodes.Newarr, typeof(object)); + for (int i = 0; i < sig.ParamTypes.Length; i++) { + gen.Emit(System.Reflection.Emit.OpCodes.Dup); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, i); + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg, i); + if (sig.ParamTypes[i].IsValueType) + gen.Emit(System.Reflection.Emit.OpCodes.Box, sig.ParamTypes[i]); + gen.Emit(System.Reflection.Emit.OpCodes.Stelem_Ref); + } + + gen.Emit(System.Reflection.Emit.OpCodes.Call, entryStubNormal); + + if (sig.RetType == typeof(void)) + gen.Emit(System.Reflection.Emit.OpCodes.Pop); + else if (sig.RetType.IsValueType) + gen.Emit(System.Reflection.Emit.OpCodes.Unbox_Any, sig.RetType); + else + gen.Emit(System.Reflection.Emit.OpCodes.Castclass, sig.RetType); + + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return dm; + } + + static DynamicMethod CreateTrampolineTyped(int moduleId, ulong codeAdr, uint key, VMFuncSig sig, uint sigId) { + var dm = new DynamicMethod("", sig.RetType, sig.ParamTypes, Unverifier.Module, true); + + var gen = dm.GetILGenerator(); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)moduleId); + gen.Emit(System.Reflection.Emit.OpCodes.Ldstr, "AstroNet - github.com/lckt0"); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)moduleId); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I8, (long)codeAdr); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)key); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)sigId); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, sig.ParamTypes.Length); + gen.Emit(System.Reflection.Emit.OpCodes.Newarr, typeof(void*)); + for (int i = 0; i < sig.ParamTypes.Length; i++) { + gen.Emit(System.Reflection.Emit.OpCodes.Dup); + gen.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, i); + if (sig.ParamTypes[i].IsByRef) { + gen.Emit(System.Reflection.Emit.OpCodes.Ldarg, i); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, sig.ParamTypes[i].GetElementType()); + } + else { + gen.Emit(System.Reflection.Emit.OpCodes.Ldarga, i); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, sig.ParamTypes[i]); + } + var local = gen.DeclareLocal(typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Stloc, local); + gen.Emit(System.Reflection.Emit.OpCodes.Ldloca, local); + gen.Emit(System.Reflection.Emit.OpCodes.Conv_I); + gen.Emit(System.Reflection.Emit.OpCodes.Stelem_I); + } + + if (sig.RetType != typeof(void)) { + var retVar = gen.DeclareLocal(sig.RetType); + var retRef = gen.DeclareLocal(typeof(TypedReference)); + gen.Emit(System.Reflection.Emit.OpCodes.Ldloca, retVar); + gen.Emit(System.Reflection.Emit.OpCodes.Mkrefany, sig.RetType); + gen.Emit(System.Reflection.Emit.OpCodes.Stloc, retRef); + gen.Emit(System.Reflection.Emit.OpCodes.Ldloca, retRef); + gen.Emit(System.Reflection.Emit.OpCodes.Call, entryStubTyped); + + gen.Emit(System.Reflection.Emit.OpCodes.Ldloc, retVar); + } + else { + gen.Emit(System.Reflection.Emit.OpCodes.Ldnull); + gen.Emit(System.Reflection.Emit.OpCodes.Call, entryStubTyped); + } + gen.Emit(System.Reflection.Emit.OpCodes.Ret); + + return dm; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/Internal/ValueTypeBox.cs b/KoiVM.Runtime/Execution/Internal/ValueTypeBox.cs new file mode 100644 index 0000000..c9e16f4 --- /dev/null +++ b/KoiVM.Runtime/Execution/Internal/ValueTypeBox.cs @@ -0,0 +1,46 @@ +using System; +using System.Diagnostics; + +namespace Runtime.Execution.Internal { + // Unboxed VT is stored in these boxes, boxed VT is stored as raw object. + + internal interface IValueTypeBox { + object GetValue(); + Type GetValueType(); + IValueTypeBox Clone(); + } + + internal struct ValueTypeBox : IValueTypeBox { + public ValueTypeBox(T value) { + this.value = value; + } + + T value; + + public object GetValue() { + return value; + } + + public Type GetValueType() { + return typeof(T); + } + + public IValueTypeBox Clone() { + return new ValueTypeBox(value); + } + } + + internal static class ValueTypeBox { + public static IValueTypeBox Box(object vt, Type vtType) { + Debug.Assert(vtType.IsValueType); + var boxType = typeof(ValueTypeBox<>).MakeGenericType(vtType); + return (IValueTypeBox)Activator.CreateInstance(boxType, vt); + } + + public static object Unbox(object box) { + if (box is IValueTypeBox) + return ((IValueTypeBox)box).GetValue(); + return box; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/PointerRef.cs b/KoiVM.Runtime/Execution/PointerRef.cs new file mode 100644 index 0000000..20483d6 --- /dev/null +++ b/KoiVM.Runtime/Execution/PointerRef.cs @@ -0,0 +1,34 @@ +using System; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + internal unsafe class PointerRef : IReference { + // Only for typed reference use + + void* ptr; + + public PointerRef(void* ptr) { + this.ptr = ptr; + } + + public VMSlot GetValue(VMContext ctx, PointerType type) { + throw new NotSupportedException(); + } + + public void SetValue(VMContext ctx, VMSlot slot, PointerType type) { + throw new NotSupportedException(); + } + + public IReference Add(uint value) { + throw new NotSupportedException(); + } + + public IReference Add(ulong value) { + throw new NotSupportedException(); + } + + public void ToTypedReference(VMContext ctx, TypedRefPtr typedRef, Type type) { + TypedReferenceHelpers.MakeTypedRef(ptr, typedRef, type); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/PointerType.cs b/KoiVM.Runtime/Execution/PointerType.cs new file mode 100644 index 0000000..d1d0101 --- /dev/null +++ b/KoiVM.Runtime/Execution/PointerType.cs @@ -0,0 +1,11 @@ +using System; + +namespace Runtime.Execution { + internal enum PointerType { + BYTE, + WORD, + DWORD, + QWORD, + OBJECT + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/StackRef.cs b/KoiVM.Runtime/Execution/StackRef.cs new file mode 100644 index 0000000..4e87de9 --- /dev/null +++ b/KoiVM.Runtime/Execution/StackRef.cs @@ -0,0 +1,49 @@ +using System; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + internal class StackRef : IReference { + public StackRef(uint pos) { + StackPos = pos; + } + + public uint StackPos { get; set; } + + public VMSlot GetValue(VMContext ctx, PointerType type) { + var slot = ctx.Stack[StackPos]; + if (type == PointerType.BYTE) + slot.U8 = slot.U1; + else if (type == PointerType.WORD) + slot.U8 = slot.U2; + else if (type == PointerType.DWORD) + slot.U8 = slot.U4; + else if (slot.O is IValueTypeBox) { + // Value types have value-copying semantics. + slot.O = ((IValueTypeBox)slot.O).Clone(); + } + return slot; + } + + public void SetValue(VMContext ctx, VMSlot slot, PointerType type) { + if (type == PointerType.BYTE) + slot.U8 = slot.U1; + else if (type == PointerType.WORD) + slot.U8 = slot.U2; + else if (type == PointerType.DWORD) + slot.U8 = slot.U4; + ctx.Stack[StackPos] = slot; + } + + public IReference Add(uint value) { + return new StackRef(StackPos + value); + } + + public IReference Add(ulong value) { + return new StackRef(StackPos + (uint)(long)value); + } + + public void ToTypedReference(VMContext ctx, TypedRefPtr typedRef, Type type) { + ctx.Stack.ToTypedReference(StackPos, typedRef, type); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/TypedRef.cs b/KoiVM.Runtime/Execution/TypedRef.cs new file mode 100644 index 0000000..487d80b --- /dev/null +++ b/KoiVM.Runtime/Execution/TypedRef.cs @@ -0,0 +1,62 @@ +using System; +using System.Runtime.InteropServices; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + internal unsafe class TypedRef : IReference { + // TODO: compat with mono? + [StructLayout(LayoutKind.Sequential)] + struct PseudoTypedRef { + public IntPtr Type; + public IntPtr Value; + } + + TypedRefPtr? _ptr; + PseudoTypedRef _typedRef; + + public TypedRef(TypedRefPtr ptr) { + _ptr = ptr; + } + + public TypedRef(TypedReference typedRef) { + _ptr = null; + _typedRef = *(PseudoTypedRef*)&typedRef; + } + + public VMSlot GetValue(VMContext ctx, PointerType type) { + TypedReference typedRef; + if (_ptr != null) + *&typedRef = *(TypedReference*)_ptr.Value; + else + *(PseudoTypedRef*)&typedRef = _typedRef; + return VMSlot.FromObject(TypedReference.ToObject(typedRef), __reftype(typedRef)); + } + + public void SetValue(VMContext ctx, VMSlot slot, PointerType type) { + TypedReference typedRef; + if (_ptr != null) + *&typedRef = *(TypedReference*)_ptr.Value; + else + *(PseudoTypedRef*)&typedRef = _typedRef; + + var refType = __reftype(typedRef); + var value = slot.ToObject(refType); + TypedReferenceHelpers.SetTypedRef(value, &typedRef); + } + + public IReference Add(uint value) { + return this; + } + + public IReference Add(ulong value) { + return this; + } + + public void ToTypedReference(VMContext ctx, TypedRefPtr typedRef, Type type) { + if (_ptr != null) + *(TypedReference*)typedRef = *(TypedReference*)_ptr.Value; + else + *(PseudoTypedRef*)typedRef = _typedRef; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/TypedRefPtr.cs b/KoiVM.Runtime/Execution/TypedRefPtr.cs new file mode 100644 index 0000000..57d1388 --- /dev/null +++ b/KoiVM.Runtime/Execution/TypedRefPtr.cs @@ -0,0 +1,15 @@ +using System; + +namespace Runtime.Execution { + internal unsafe struct TypedRefPtr { + public void* ptr; + + public static implicit operator TypedRefPtr(void* ptr) { + return new TypedRefPtr { ptr = ptr }; + } + + public static implicit operator void*(TypedRefPtr ptr) { + return ptr.ptr; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/VMContext.cs b/KoiVM.Runtime/Execution/VMContext.cs new file mode 100644 index 0000000..59f5288 --- /dev/null +++ b/KoiVM.Runtime/Execution/VMContext.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using Runtime.Dynamic; + +namespace Runtime.Execution { + internal class VMContext { + const int NumRegisters = 16; + + public readonly VMSlot[] Registers = new VMSlot[16]; + public readonly VMStack Stack = new VMStack(); + public readonly VMInstance Instance; + public readonly List EHStack = new List(); + public readonly List EHStates = new List(); + + public VMContext(VMInstance inst) { + Instance = inst; + } + + public unsafe byte ReadByte() { + var key = Registers[Constants.REG_K1].U4; + var ip = (byte*)Registers[Constants.REG_IP].U8++; + byte b = (byte)(*ip ^ key); + key = key * 7 + b; + Registers[Constants.REG_K1].U4 = key; + return b; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/VMDispatcher.cs b/KoiVM.Runtime/Execution/VMDispatcher.cs new file mode 100644 index 0000000..d4d14c4 --- /dev/null +++ b/KoiVM.Runtime/Execution/VMDispatcher.cs @@ -0,0 +1,258 @@ +using System; +using System.Runtime.CompilerServices; +using System.Text; +using Runtime.Data; +using Runtime.Dynamic; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + internal static class VMDispatcher { + public static ExecutionState Run(VMContext ctx) { + ExecutionState state = ExecutionState.Next; + bool isAbnormal = true; + do { + try { + state = RunInternal(ctx); + switch (state) { + case ExecutionState.Throw: { + var sp = ctx.Registers[Constants.REG_SP].U4; + var ex = ctx.Stack[sp--]; + ctx.Registers[Constants.REG_SP].U4 = sp; + DoThrow(ctx, ex.O); + break; + } + case ExecutionState.Rethrow: { + var sp = ctx.Registers[Constants.REG_SP].U4; + var ex = ctx.Stack[sp--]; + ctx.Registers[Constants.REG_SP].U4 = sp; + HandleRethrow(ctx, ex.O); + return state; + } + } + isAbnormal = false; + } + catch (Exception ex) { + // Patched to catch object + SetupEHState(ctx, ex); + isAbnormal = false; + } + finally { + if (isAbnormal) { + HandleAbnormalExit(ctx); + state = ExecutionState.Exit; + } + else if (ctx.EHStates.Count > 0) { + do { + HandleEH(ctx, ref state); + } while (state == ExecutionState.Rethrow); + } + } + } while (state != ExecutionState.Exit); + return state; + } + + static Exception Throw(object obj) { + return null; + } + + static ExecutionState RunInternal(VMContext ctx) { + ExecutionState state; + while (true) { + var op = ctx.ReadByte(); + var p = ctx.ReadByte(); // For key fixup + OpCodeMap.Lookup(op).Run(ctx, out state); + + if (ctx.Registers[Constants.REG_IP].U8 == 1) + state = ExecutionState.Exit; + + if (state != ExecutionState.Next) + return state; + } + } + + static void SetupEHState(VMContext ctx, object ex) { + EHState ehState; + if (ctx.EHStates.Count != 0) { + ehState = ctx.EHStates[ctx.EHStates.Count - 1]; + if (ehState.CurrentFrame != null) { + if (ehState.CurrentProcess == EHState.EHProcess.Searching) { + // Return from filter => throw exception, default to 0 by Partition III 3.34 + ctx.Registers[Constants.REG_R1].U1 = 0; + } + else if (ehState.CurrentProcess == EHState.EHProcess.Unwinding) { + // Return from finally => throw exception, replace current exception + // https://stackoverflow.com/questions/2911215/what-happens-if-a-finally-block-throws-an-exception + ehState.ExceptionObj = ex; + } + return; + } + } + ehState = new EHState { + OldBP = ctx.Registers[Constants.REG_BP], + OldSP = ctx.Registers[Constants.REG_SP], + ExceptionObj = ex, + CurrentProcess = EHState.EHProcess.Searching, + CurrentFrame = null, + HandlerFrame = null + }; + ctx.EHStates.Add(ehState); + } + + static void HandleRethrow(VMContext ctx, object ex) { + if (ctx.EHStates.Count > 0) + SetupEHState(ctx, ex); + else + DoThrow(ctx, ex); + } + + static unsafe string GetIP(VMContext ctx) { + var ip = (uint)(ctx.Registers[Constants.REG_IP].U8 - (ulong)ctx.Instance.Data.KoiSection); + ulong key = (uint)(new object().GetHashCode() + Environment.TickCount) | 1; + return ((ip * key) << 32 | (key & (~1UL))).ToString("x16"); + } + + static uint rand_state = (uint)Environment.TickCount; + + static unsafe string StackWalk(VMContext ctx) { + uint ip = (uint)(ctx.Registers[Constants.REG_IP].U8 - (ulong)ctx.Instance.Data.KoiSection); + uint bp = ctx.Registers[Constants.REG_BP].U4; + var sb = new StringBuilder(); + do { + rand_state = rand_state * 1664525 + 1013904223; + ulong key = rand_state | 1; + sb.AppendFormat("|{0:x16}", (ip * key) << 32 | (key & (~1UL))); + if (bp > 1) { + ip = (uint)(ctx.Stack[bp - 1].U8 - (ulong)ctx.Instance.Data.KoiSection); + var bpRef = ctx.Stack[bp].O as StackRef; + if (bpRef == null) + break; + bp = bpRef.StackPos; + } + else + break; + } while (bp > 0); + return sb.ToString(1, sb.Length - 1); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + internal static void DoThrow(VMContext ctx, object ex) { + if (ex is Exception) { + EHHelper.Rethrow((Exception)ex, GetIP(ctx)); + } + throw Throw(ex); + } + + static void HandleEH(VMContext ctx, ref ExecutionState state) { + var ehState = ctx.EHStates[ctx.EHStates.Count - 1]; + switch (ehState.CurrentProcess) { + case EHState.EHProcess.Searching: { + if (ehState.CurrentFrame != null) { + // Return from filter + bool filterResult = ctx.Registers[Constants.REG_R1].U1 != 0; + if (filterResult) { + ehState.CurrentProcess = EHState.EHProcess.Unwinding; + ehState.HandlerFrame = ehState.CurrentFrame; + ehState.CurrentFrame = ctx.EHStack.Count; + state = ExecutionState.Next; + goto case EHState.EHProcess.Unwinding; + } + ehState.CurrentFrame--; + } + else + ehState.CurrentFrame = ctx.EHStack.Count - 1; + + var exType = ehState.ExceptionObj.GetType(); + for (; ehState.CurrentFrame >= 0 && ehState.HandlerFrame == null; ehState.CurrentFrame--) { + var frame = ctx.EHStack[ehState.CurrentFrame.Value]; + if (frame.EHType == Constants.EH_FILTER) { + // Run filter + var sp = ehState.OldSP.U4; + ctx.Stack.SetTopPosition(++sp); + ctx.Stack[sp] = new VMSlot { O = ehState.ExceptionObj }; + ctx.Registers[Constants.REG_K1].U1 = 0; + ctx.Registers[Constants.REG_SP].U4 = sp; + ctx.Registers[Constants.REG_BP] = frame.BP; + ctx.Registers[Constants.REG_IP].U8 = frame.FilterAddr; + break; + } + if (frame.EHType == Constants.EH_CATCH) { + if (frame.CatchType.IsAssignableFrom(exType)) { + ehState.CurrentProcess = EHState.EHProcess.Unwinding; + ehState.HandlerFrame = ehState.CurrentFrame; + ehState.CurrentFrame = ctx.EHStack.Count; + goto case EHState.EHProcess.Unwinding; + } + } + } + if (ehState.CurrentFrame == -1 && ehState.HandlerFrame == null) { + ctx.EHStates.RemoveAt(ctx.EHStates.Count - 1); + state = ExecutionState.Rethrow; + if (ctx.EHStates.Count == 0) + HandleRethrow(ctx, ehState.ExceptionObj); + } + else + state = ExecutionState.Next; + break; + } + case EHState.EHProcess.Unwinding: { + ehState.CurrentFrame--; + int i; + for (i = ehState.CurrentFrame.Value; i > ehState.HandlerFrame.Value; i--) { + var frame = ctx.EHStack[i]; + ctx.EHStack.RemoveAt(i); + if (frame.EHType == Constants.EH_FAULT || frame.EHType == Constants.EH_FINALLY) { + // Run finally + SetupFinallyFrame(ctx, frame); + break; + } + } + ehState.CurrentFrame = i; + + if (ehState.CurrentFrame == ehState.HandlerFrame) { + var frame = ctx.EHStack[ehState.HandlerFrame.Value]; + ctx.EHStack.RemoveAt(ehState.HandlerFrame.Value); + // Run handler + frame.SP.U4++; + ctx.Stack.SetTopPosition(frame.SP.U4); + ctx.Stack[frame.SP.U4] = new VMSlot { O = ehState.ExceptionObj }; + + ctx.Registers[Constants.REG_K1].U1 = 0; + ctx.Registers[Constants.REG_SP] = frame.SP; + ctx.Registers[Constants.REG_BP] = frame.BP; + ctx.Registers[Constants.REG_IP].U8 = frame.HandlerAddr; + + ctx.EHStates.RemoveAt(ctx.EHStates.Count - 1); + } + state = ExecutionState.Next; + break; + } + default: + throw new ExecutionEngineException(); + } + } + + static void HandleAbnormalExit(VMContext ctx) { + var oldBP = ctx.Registers[Constants.REG_BP]; + var oldSP = ctx.Registers[Constants.REG_SP]; + + for (int i = ctx.EHStack.Count - 1; i >= 0; i--) { + var frame = ctx.EHStack[i]; + if (frame.EHType == Constants.EH_FAULT || frame.EHType == Constants.EH_FINALLY) { + SetupFinallyFrame(ctx, frame); + Run(ctx); + } + } + ctx.EHStack.Clear(); + } + + static void SetupFinallyFrame(VMContext ctx, EHFrame frame) { + frame.SP.U4++; + ctx.Registers[Constants.REG_K1].U1 = 0; + ctx.Registers[Constants.REG_SP] = frame.SP; + ctx.Registers[Constants.REG_BP] = frame.BP; + ctx.Registers[Constants.REG_IP].U8 = frame.HandlerAddr; + + ctx.Stack[frame.SP.U4] = new VMSlot { U8 = 1 }; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/VMSlot.cs b/KoiVM.Runtime/Execution/VMSlot.cs new file mode 100644 index 0000000..55bf2e1 --- /dev/null +++ b/KoiVM.Runtime/Execution/VMSlot.cs @@ -0,0 +1,180 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + [StructLayout(LayoutKind.Explicit)] + internal struct VMSlot { + [FieldOffset(0)] ulong u8; + [FieldOffset(0)] double r8; + [FieldOffset(0)] uint u4; + [FieldOffset(0)] float r4; + [FieldOffset(0)] ushort u2; + [FieldOffset(0)] byte u1; + [FieldOffset(8)] object o; + + public ulong U8 { + get { return u8; } + set { + u8 = value; + o = null; + } + } + + public uint U4 { + get { return u4; } + set { + u4 = value; + o = null; + } + } + + public ushort U2 { + get { return u2; } + set { + u2 = value; + o = null; + } + } + + public byte U1 { + get { return u1; } + set { + u1 = value; + o = null; + } + } + + public double R8 { + get { return r8; } + set { + r8 = value; + o = null; + } + } + + public float R4 { + get { return r4; } + set { + r4 = value; + o = null; + } + } + + public object O { + get { return o; } + set { + o = value; + u8 = 0; + } + } + + public static readonly VMSlot Null; + + public static unsafe VMSlot FromObject(object obj, Type type) { + if (type.IsEnum) { + var elemType = Enum.GetUnderlyingType(type); + return FromObject(Convert.ChangeType(obj, elemType), elemType); + } + + switch (Type.GetTypeCode(type)) { + case TypeCode.Byte: + return new VMSlot { u1 = (byte)obj }; + case TypeCode.SByte: + return new VMSlot { u1 = (byte)(sbyte)obj }; + case TypeCode.Boolean: + return new VMSlot { u1 = (byte)((bool)obj ? 1 : 0) }; + + case TypeCode.UInt16: + return new VMSlot { u2 = (ushort)obj }; + case TypeCode.Int16: + return new VMSlot { u2 = (ushort)(short)obj }; + case TypeCode.Char: + return new VMSlot { u2 = (char)obj }; + + case TypeCode.UInt32: + return new VMSlot { u4 = (uint)obj }; + case TypeCode.Int32: + return new VMSlot { u4 = (uint)(int)obj }; + + case TypeCode.UInt64: + return new VMSlot { u8 = (ulong)obj }; + case TypeCode.Int64: + return new VMSlot { u8 = (ulong)(long)obj }; + + case TypeCode.Single: + return new VMSlot { r4 = (float)obj }; + case TypeCode.Double: + return new VMSlot { r8 = (double)obj }; + + default: + if (obj is Pointer) + return new VMSlot { u8 = (ulong)Pointer.Unbox(obj) }; + if (obj is IntPtr) + return new VMSlot { u8 = (ulong)(IntPtr)obj }; + if (obj is UIntPtr) + return new VMSlot { u8 = (ulong)(UIntPtr)obj }; + if (type.IsValueType) + return new VMSlot { o = ValueTypeBox.Box(obj, type) }; + return new VMSlot { o = obj }; + } + } + + public unsafe void ToTypedReferencePrimitive(TypedRefPtr typedRef) { + *(TypedReference*)typedRef = __makeref(u4); + } + + public unsafe void ToTypedReferenceObject(TypedRefPtr typedRef, Type type) { + if (o is ValueType && type.IsValueType) + TypedReferenceHelpers.UnboxTypedRef(o, typedRef); + else + *(TypedReference*)typedRef = __makeref(o); + } + + public unsafe object ToObject(Type type) { + if (type.IsEnum) + return Enum.ToObject(type, ToObject(Enum.GetUnderlyingType(type))); + + switch (Type.GetTypeCode(type)) { + case TypeCode.Byte: + return u1; + case TypeCode.SByte: + return (sbyte)u1; + case TypeCode.Boolean: + return u1 != 0; + + case TypeCode.UInt16: + return u2; + case TypeCode.Int16: + return (short)u2; + case TypeCode.Char: + return (char)u2; + + case TypeCode.UInt32: + return u4; + case TypeCode.Int32: + return (int)u4; + + case TypeCode.UInt64: + return (ulong)u8; + case TypeCode.Int64: + return (long)u8; + + case TypeCode.Single: + return r4; + case TypeCode.Double: + return r8; + + default: + if (type.IsPointer) + return Pointer.Box((void*)u8, type); + if (type == typeof(IntPtr)) + return Platform.x64 ? new IntPtr((long)u8) : new IntPtr((int)u4); + if (type == typeof(UIntPtr)) + return Platform.x64 ? new UIntPtr(u8) : new UIntPtr(u4); + return ValueTypeBox.Unbox(o); + } + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Execution/VMStack.cs b/KoiVM.Runtime/Execution/VMStack.cs new file mode 100644 index 0000000..327a584 --- /dev/null +++ b/KoiVM.Runtime/Execution/VMStack.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Runtime.Execution.Internal; + +namespace Runtime.Execution { + internal class VMStack { + class LocallocNode { + public uint GuardPos; + public IntPtr Memory; + public LocallocNode Next; + + ~LocallocNode() { + if (Memory != IntPtr.Zero) { + Marshal.FreeHGlobal(Memory); + Memory = IntPtr.Zero; + } + } + + public LocallocNode Free() { + if (Memory != IntPtr.Zero) { + Marshal.FreeHGlobal(Memory); + Memory = IntPtr.Zero; + } + return Next; + } + } + + const int SectionSize = 6; // 1 << 6 = 64 + const int IndexMask = (1 << SectionSize) - 1; + + List sections = new List(); + uint topPos; + LocallocNode localPool; + + public VMSlot this[uint pos] { + get { + if (pos > topPos) + return VMSlot.Null; + var sectionIndex = pos >> SectionSize; + return sections[(int)sectionIndex][pos & IndexMask]; + } + set { + if (pos > topPos) + return; + var sectionIndex = pos >> SectionSize; + sections[(int)sectionIndex][pos & IndexMask] = value; + } + } + + public void SetTopPosition(uint topPos) { + if (topPos > 0x7fffffff) + throw new StackOverflowException(); + + var sectionIndex = topPos >> SectionSize; + if (sectionIndex >= sections.Count) { + do { + sections.Add(new VMSlot[1 << SectionSize]); + } while (sectionIndex >= sections.Count); + } + else if (sectionIndex < sections.Count - 2) { + do { + sections.RemoveAt(sections.Count - 1); + } while (sectionIndex < sections.Count - 2); + } + + // Clear stack object references + var stackIndex = (topPos & IndexMask) + 1; + var section = sections[(int)sectionIndex]; + while (stackIndex < section.Length && section[stackIndex].O != null) + section[stackIndex++] = VMSlot.Null; + if (stackIndex == section.Length && sectionIndex + 1 < sections.Count) { + stackIndex = 0; + section = sections[(int)sectionIndex + 1]; + while (stackIndex < section.Length && section[stackIndex].O != null) + section[stackIndex++] = VMSlot.Null; + } + this.topPos = topPos; + + CheckFreeLocalloc(); + } + + void CheckFreeLocalloc() { + while (localPool != null && localPool.GuardPos > topPos) + localPool = localPool.Free(); + } + + public IntPtr Localloc(uint guardPos, uint size) { + var node = new LocallocNode { + GuardPos = guardPos, + Memory = Marshal.AllocHGlobal((int)size) + }; + var insert = localPool; + while (insert != null) { + if (insert.Next == null || insert.Next.GuardPos < guardPos) + break; + insert = insert.Next; + } + if (insert == null) + localPool = node; + else { + node.Next = insert.Next; + insert.Next = node; + } + return node.Memory; + } + + public void FreeAllLocalloc() { + var node = localPool; + while (node != null) + node = node.Free(); + localPool = null; + } + + ~VMStack() { + FreeAllLocalloc(); + } + + public void ToTypedReference(uint pos, TypedRefPtr typedRef, Type type) { + if (pos > topPos) + throw new ExecutionEngineException(); + var section = sections[(int)(pos >> SectionSize)]; + uint index = pos & IndexMask; + if (type.IsEnum) + type = Enum.GetUnderlyingType(type); + if (type.IsPrimitive || type.IsPointer) { + section[index].ToTypedReferencePrimitive(typedRef); + TypedReferenceHelpers.CastTypedRef(typedRef, type); + } + else + section[index].ToTypedReferenceObject(typedRef, type); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Add.cs b/KoiVM.Runtime/OpCodes/Add.cs new file mode 100644 index 0000000..bdd3b5d --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Add.cs @@ -0,0 +1,125 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class AddDword : IOpCode { + public byte Code { + get { return Constants.OP_ADD_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + if (op1Slot.O is IReference) + slot.O = ((IReference)op1Slot.O).Add(op2Slot.U4); + else if (op2Slot.O is IReference) + slot.O = ((IReference)op2Slot.O).Add(op1Slot.U4); + else + slot.U4 = op2Slot.U4 + op1Slot.U4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class AddQword : IOpCode { + public byte Code { + get { return Constants.OP_ADD_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + if (op1Slot.O is IReference) + slot.O = ((IReference)op1Slot.O).Add(op2Slot.U8); + else if (op2Slot.O is IReference) + slot.O = ((IReference)op2Slot.O).Add(op1Slot.U8); + else + slot.U8 = op2Slot.U8 + op1Slot.U8; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(op1Slot.U8, op2Slot.U8, slot.U8, slot.U8, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class AddR32 : IOpCode { + public byte Code { + get { return Constants.OP_ADD_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R4 = op2Slot.R4 + op1Slot.R4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R4 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R4 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class AddR64 : IOpCode { + public byte Code { + get { return Constants.OP_ADD_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R8 = op2Slot.R8 + op1Slot.R8; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R8 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R8 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Call.cs b/KoiVM.Runtime/OpCodes/Call.cs new file mode 100644 index 0000000..9e82c15 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Call.cs @@ -0,0 +1,19 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Call : IOpCode { + public byte Code { + get { return Constants.OP_CALL; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var slot = ctx.Stack[sp]; + ctx.Stack[sp] = ctx.Registers[Constants.REG_IP]; + ctx.Registers[Constants.REG_IP].U8 = slot.U8; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Cmp.cs b/KoiVM.Runtime/OpCodes/Cmp.cs new file mode 100644 index 0000000..1d45c1e --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Cmp.cs @@ -0,0 +1,138 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class CmpDword : IOpCode { + public byte Code { + get { return Constants.OP_CMP_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var result = op1Slot.U4 - op2Slot.U4; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(result, op2Slot.U4, op1Slot.U4, result, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class CmpQword : IOpCode { + public byte Code { + get { return Constants.OP_CMP_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var result = op1Slot.U8 - op2Slot.U8; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(result, op2Slot.U8, op1Slot.U8, result, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class CmpR32 : IOpCode { + public byte Code { + get { return Constants.OP_CMP_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var result = op1Slot.R4 - op2Slot.R4; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (result == 0) + fl |= Constants.FL_ZERO; + else if (result < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class CmpR64 : IOpCode { + public byte Code { + get { return Constants.OP_CMP_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var result = op1Slot.R8 - op2Slot.R8; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (result == 0) + fl |= Constants.FL_ZERO; + else if (result < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class Cmp : IOpCode { + public byte Code { + get { return Constants.OP_CMP; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + int result; + if (ReferenceEquals(op1Slot.O, op2Slot.O)) + result = 0; + else + result = -1; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (result == 0) + fl |= Constants.FL_ZERO; + else if (result < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Div.cs b/KoiVM.Runtime/OpCodes/Div.cs new file mode 100644 index 0000000..cc206e9 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Div.cs @@ -0,0 +1,123 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class DivDword : IOpCode { + public byte Code { + get { return Constants.OP_DIV_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + + var slot = new VMSlot(); + if ((fl & Constants.FL_UNSIGNED) != 0) + slot.U4 = op1Slot.U4 / op2Slot.U4; + else + slot.U4 = (uint)((int)op1Slot.U4 / (int)op2Slot.U4); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class DivQword : IOpCode { + public byte Code { + get { return Constants.OP_DIV_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + + var slot = new VMSlot(); + if ((fl & Constants.FL_UNSIGNED) != 0) + slot.U8 = op1Slot.U8 / op2Slot.U8; + else + slot.U8 = (uint)((int)op1Slot.U8 / (int)op2Slot.U8); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + Utils.UpdateFL(op1Slot.U8, op2Slot.U8, slot.U8, slot.U8, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class DivR32 : IOpCode { + public byte Code { + get { return Constants.OP_DIV_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R4 = op1Slot.R4 / op2Slot.R4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R4 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R4 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class DivR64 : IOpCode { + public byte Code { + get { return Constants.OP_DIV_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R8 = op1Slot.R8 / op2Slot.R8; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R8 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R8 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/FConv.cs b/KoiVM.Runtime/OpCodes/FConv.cs new file mode 100644 index 0000000..1d86ab8 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/FConv.cs @@ -0,0 +1,76 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class FConvR32 : IOpCode { + public byte Code { + get { return Constants.OP_FCONV_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp]; + + valueSlot.R4 = (long)valueSlot.U8; + + ctx.Stack[sp] = valueSlot; + + state = ExecutionState.Next; + } + } + + internal class FConvR64 : IOpCode { + public byte Code { + get { return Constants.OPX_FCONV_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp]; + + byte fl = ctx.Registers[Constants.REG_FL].U1; + if ((fl & Constants.FL_UNSIGNED) != 0) { + valueSlot.R8 = valueSlot.U8; + } + else { + valueSlot.R8 = (long)valueSlot.U8; + } + ctx.Registers[Constants.REG_FL].U1 = (byte)(fl & ~Constants.FL_UNSIGNED); + + ctx.Stack[sp] = valueSlot; + + state = ExecutionState.Next; + } + } + + internal class FConvR32R64 : IOpCode { + public byte Code { + get { return Constants.OP_FCONV_R32_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp]; + valueSlot.R8 = valueSlot.R4; + ctx.Stack[sp] = valueSlot; + + state = ExecutionState.Next; + } + } + + internal class FConvR64R32 : IOpCode { + public byte Code { + get { return Constants.OP_FCONV_R64_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp]; + valueSlot.R4 = (float)valueSlot.R8; + ctx.Stack[sp] = valueSlot; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/IConv.cs b/KoiVM.Runtime/OpCodes/IConv.cs new file mode 100644 index 0000000..2b402ca --- /dev/null +++ b/KoiVM.Runtime/OpCodes/IConv.cs @@ -0,0 +1,63 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class IConvPtr : IOpCode { + public byte Code { + get { return Constants.OP_ICONV_PTR; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp]; + + byte fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~Constants.FL_OVERFLOW); + if (!Platform.x64 && (valueSlot.U8 >> 32) != 0) + fl |= Constants.FL_OVERFLOW; + ctx.Registers[Constants.REG_FL].U1 = fl; + + ctx.Stack[sp] = valueSlot; + + state = ExecutionState.Next; + } + } + + internal class IConvR64 : IOpCode { + public byte Code { + get { return Constants.OP_ICONV_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + // coreclr/src/vm/jithelpers.cpp JIT_Dbl2ULngOvf & JIT_Dbl2LngOvf + + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp]; + + const double two63 = 2147483648.0 * 4294967296.0; + const double two64 = 4294967296.0 * 4294967296.0; + + double value = valueSlot.R8; + valueSlot.U8 = (ulong)(long)value; + byte fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~Constants.FL_OVERFLOW); + + if ((fl & Constants.FL_UNSIGNED) != 0) { + if (!(value > -1.0 && value < two64)) + fl |= Constants.FL_OVERFLOW; + + if (!(value < two63)) + valueSlot.U8 = (ulong)((long)value - two63) + 0x8000000000000000UL; + } + else { + if (!(value > -two63 - 0x402 && value < two63)) + fl |= Constants.FL_OVERFLOW; + } + + ctx.Registers[Constants.REG_FL].U1 = (byte)(fl & ~Constants.FL_UNSIGNED); + + ctx.Stack[sp] = valueSlot; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/IOpCode.cs b/KoiVM.Runtime/OpCodes/IOpCode.cs new file mode 100644 index 0000000..74d3a19 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/IOpCode.cs @@ -0,0 +1,9 @@ +using System; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal interface IOpCode { + byte Code { get; } + void Run(VMContext ctx, out ExecutionState state); + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Jmp.cs b/KoiVM.Runtime/OpCodes/Jmp.cs new file mode 100644 index 0000000..f10d290 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Jmp.cs @@ -0,0 +1,80 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Jmp : IOpCode { + public byte Code { + get { return Constants.OP_JMP; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var slot = ctx.Stack[sp]; + ctx.Stack.SetTopPosition(--sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + ctx.Registers[Constants.REG_IP].U8 = slot.U8; + state = ExecutionState.Next; + } + } + + internal class Jz : IOpCode { + public byte Code { + get { return Constants.OP_JZ; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + var valSlot = ctx.Stack[sp - 1]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (valSlot.U8 == 0) + ctx.Registers[Constants.REG_IP].U8 = adrSlot.U8; + state = ExecutionState.Next; + } + } + + internal class Jnz : IOpCode { + public byte Code { + get { return Constants.OP_JNZ; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + var valSlot = ctx.Stack[sp - 1]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (valSlot.U8 != 0) + ctx.Registers[Constants.REG_IP].U8 = adrSlot.U8; + state = ExecutionState.Next; + } + } + + internal class Swt : IOpCode { + public byte Code { + get { return Constants.OP_SWT; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var tblSlot = ctx.Stack[sp]; + var valSlot = ctx.Stack[sp - 1]; + sp -= 2; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + uint index = valSlot.U4; + ushort len = *(ushort*)(tblSlot.U8 - 2); + if (index < len) + ctx.Registers[Constants.REG_IP].U8 += (ulong)(int)((uint*)tblSlot.U8)[index]; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Leave.cs b/KoiVM.Runtime/OpCodes/Leave.cs new file mode 100644 index 0000000..f9d177f --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Leave.cs @@ -0,0 +1,34 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Leave : IOpCode { + public byte Code { + get { return Constants.OP_LEAVE; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var handler = ctx.Stack[sp--].U8; + + var frameIndex = ctx.EHStack.Count - 1; + var frame = ctx.EHStack[frameIndex]; + + if (frame.HandlerAddr != handler) + throw new InvalidProgramException(); + ctx.EHStack.RemoveAt(frameIndex); + + if (frame.EHType == Constants.EH_FINALLY) { + ctx.Stack[++sp] = ctx.Registers[Constants.REG_IP]; + ctx.Registers[Constants.REG_K1].U1 = 0; + ctx.Registers[Constants.REG_IP].U8 = frame.HandlerAddr; + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Lind.cs b/KoiVM.Runtime/OpCodes/Lind.cs new file mode 100644 index 0000000..5daf250 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Lind.cs @@ -0,0 +1,148 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class LindByte : IOpCode { + public byte Code { + get { return Constants.OP_LIND_BYTE; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + + VMSlot valSlot; + if (adrSlot.O is IReference) { + valSlot = ((IReference)adrSlot.O).GetValue(ctx, PointerType.BYTE); + } + else { + var ptr = (byte*)adrSlot.U8; + valSlot = new VMSlot { U1 = *ptr }; + } + ctx.Stack[sp] = valSlot; + + state = ExecutionState.Next; + } + } + + internal class LindWord : IOpCode { + public byte Code { + get { return Constants.OP_LIND_WORD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + + VMSlot valSlot; + if (adrSlot.O is IReference) { + valSlot = ((IReference)adrSlot.O).GetValue(ctx, PointerType.WORD); + } + else { + var ptr = (ushort*)adrSlot.U8; + valSlot = new VMSlot { U2 = *ptr }; + } + ctx.Stack[sp] = valSlot; + + state = ExecutionState.Next; + } + } + + internal class LindDword : IOpCode { + public byte Code { + get { return Constants.OP_LIND_DWORD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + + VMSlot valSlot; + if (adrSlot.O is IReference) { + valSlot = ((IReference)adrSlot.O).GetValue(ctx, PointerType.DWORD); + } + else { + var ptr = (uint*)adrSlot.U8; + valSlot = new VMSlot { U4 = *ptr }; + } + ctx.Stack[sp] = valSlot; + + state = ExecutionState.Next; + } + } + + internal class LindQword : IOpCode { + public byte Code { + get { return Constants.OP_LIND_QWORD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + + VMSlot valSlot; + if (adrSlot.O is IReference) { + valSlot = ((IReference)adrSlot.O).GetValue(ctx, PointerType.QWORD); + } + else { + var ptr = (ulong*)adrSlot.U8; + valSlot = new VMSlot { U8 = *ptr }; + } + ctx.Stack[sp] = valSlot; + + state = ExecutionState.Next; + } + } + + internal class LindObject : IOpCode { + public byte Code { + get { return Constants.OP_LIND_OBJECT; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + + VMSlot valSlot; + if (adrSlot.O is IReference) { + valSlot = ((IReference)adrSlot.O).GetValue(ctx, PointerType.OBJECT); + } + else { + throw new ExecutionEngineException(); + } + ctx.Stack[sp] = valSlot; + + state = ExecutionState.Next; + } + } + + internal class LindPtr : IOpCode { + public byte Code { + get { return Constants.OP_LIND_PTR; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp]; + + VMSlot valSlot; + if (adrSlot.O is IReference) { + valSlot = ((IReference)adrSlot.O).GetValue(ctx, Platform.x64 ? PointerType.QWORD : PointerType.DWORD); + } + else { + if (Platform.x64) { + var ptr = (ulong*)adrSlot.U8; + valSlot = new VMSlot { U8 = *ptr }; + } + else { + var ptr = (uint*)adrSlot.U8; + valSlot = new VMSlot { U4 = *ptr }; + } + } + ctx.Stack[sp] = valSlot; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Mul.cs b/KoiVM.Runtime/OpCodes/Mul.cs new file mode 100644 index 0000000..332cd8e --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Mul.cs @@ -0,0 +1,163 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class MulDword : IOpCode { + public byte Code { + get { return Constants.OP_MUL_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + + var slot = new VMSlot(); + ulong result = op1Slot.U4 * op2Slot.U4; + slot.U4 = (uint)result; + ctx.Stack[sp] = slot; + + byte mask1 = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + byte mask2 = (byte)(Constants.FL_CARRY | Constants.FL_OVERFLOW); + byte ovF = 0; + if ((fl & Constants.FL_UNSIGNED) != 0) { + if ((result & (0xffffffff << 32)) != 0) + ovF = mask2; + } + else { + result = (ulong)((int)op1Slot.U4 * (int)op2Slot.U4); + if ((result >> 63) != (slot.U4 >> 31)) { + ovF = mask2; + } + } + fl = (byte)((fl & ~mask2) | ovF); + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask1); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class MulQword : IOpCode { + public byte Code { + get { return Constants.OP_MUL_QWORD; } + } + + static ulong Carry(ulong a, ulong b) { + // https://stackoverflow.com/questions/1815367/multiplication-of-large-numbers-how-to-catch-overflow + ulong lo1 = a & 0xffffffff, hi1 = a >> 32; + ulong lo2 = b & 0xffffffff, hi2 = b >> 32; + + ulong s0, s1, s2; + ulong x = lo1 * lo2; + s0 = x & 0xffffffff; + + x = hi1 * lo2 + (x >> 32); + s1 = x & 0xffffffff; + s2 = x >> 32; + + x = s1 + lo1 * hi2; + s1 = x & 0xffffffff; + + x = s2 + hi1 * hi2 + (x >> 32); + return x; + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + + var slot = new VMSlot(); + ulong result = op1Slot.U8 * op2Slot.U8; + slot.U8 = result; + ctx.Stack[sp] = slot; + + byte mask1 = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + byte mask2 = (byte)(Constants.FL_CARRY | Constants.FL_OVERFLOW); + byte ovF = 0; + if ((fl & Constants.FL_UNSIGNED) != 0) { + if (Carry(op1Slot.U8, op2Slot.U8) != 0) + ovF = mask2; + } + else { + if ((result >> 63) != ((op1Slot.U8 ^ op2Slot.U8) >> 63)) + ovF = mask2; + } + fl = (byte)((fl & ~mask2) | ovF); + Utils.UpdateFL(op1Slot.U4, op2Slot.U8, slot.U8, slot.U8, ref fl, mask1); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class MulR32 : IOpCode { + public byte Code { + get { return Constants.OP_MUL_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R4 = op2Slot.R4 * op1Slot.R4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R4 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R4 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class MulR64 : IOpCode { + public byte Code { + get { return Constants.OP_MUL_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R8 = op2Slot.R8 * op1Slot.R8; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R8 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R8 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Nop.cs b/KoiVM.Runtime/OpCodes/Nop.cs new file mode 100644 index 0000000..e7219b9 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Nop.cs @@ -0,0 +1,15 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Nop : IOpCode { + public byte Code { + get { return Constants.OP_NOP; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Nor.cs b/KoiVM.Runtime/OpCodes/Nor.cs new file mode 100644 index 0000000..3b66801 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Nor.cs @@ -0,0 +1,57 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class NorDword : IOpCode { + public byte Code { + get { return Constants.OP_NOR_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.U4 = ~(op1Slot.U4 | op2Slot.U4); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class NorQword : IOpCode { + public byte Code { + get { return Constants.OP_NOR_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.U8 = ~(op1Slot.U8 | op2Slot.U8); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(op1Slot.U8, op2Slot.U8, slot.U8, slot.U8, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Pop.cs b/KoiVM.Runtime/OpCodes/Pop.cs new file mode 100644 index 0000000..d5fbbb4 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Pop.cs @@ -0,0 +1,25 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Pop : IOpCode { + public byte Code { + get { return Constants.OP_POP; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var slot = ctx.Stack[sp]; + ctx.Stack.SetTopPosition(--sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var regId = ctx.ReadByte(); + if ((regId == Constants.REG_SP || regId == Constants.REG_BP) && slot.O is StackRef) + ctx.Registers[regId] = new VMSlot { U4 = ((StackRef)slot.O).StackPos }; + else + ctx.Registers[regId] = slot; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Push.cs b/KoiVM.Runtime/OpCodes/Push.cs new file mode 100644 index 0000000..0871cd8 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Push.cs @@ -0,0 +1,141 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class PushRByte : IOpCode { + public byte Code { + get { return Constants.OP_PUSHR_BYTE; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + + var regId = ctx.ReadByte(); + var slot = ctx.Registers[regId]; + ctx.Stack[sp] = new VMSlot { U1 = slot.U1 }; + + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } + + internal class PushRWord : IOpCode { + public byte Code { + get { return Constants.OP_PUSHR_WORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + + var regId = ctx.ReadByte(); + var slot = ctx.Registers[regId]; + ctx.Stack[sp] = new VMSlot { U2 = slot.U2 }; + + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } + + internal class PushRDword : IOpCode { + public byte Code { + get { return Constants.OP_PUSHR_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + + var regId = ctx.ReadByte(); + var slot = ctx.Registers[regId]; + if (regId == Constants.REG_SP || regId == Constants.REG_BP) + ctx.Stack[sp] = new VMSlot { O = new StackRef(slot.U4) }; + else + ctx.Stack[sp] = new VMSlot { U4 = slot.U4 }; + + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } + + internal class PushRQword : IOpCode { + public byte Code { + get { return Constants.OP_PUSHR_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + + var regId = ctx.ReadByte(); + var slot = ctx.Registers[regId]; + ctx.Stack[sp] = new VMSlot { U8 = slot.U8 }; + + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } + + internal class PushRObject : IOpCode { + public byte Code { + get { return Constants.OP_PUSHR_OBJECT; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + + var regId = ctx.ReadByte(); + var slot = ctx.Registers[regId]; + ctx.Stack[sp] = slot; + + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } + + internal class PushIDword : IOpCode { + public byte Code { + get { return Constants.OP_PUSHI_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + ulong imm = ctx.ReadByte(); + imm |= ((ulong)ctx.ReadByte() << 8); + imm |= ((ulong)ctx.ReadByte() << 16); + imm |= ((ulong)ctx.ReadByte() << 24); + var sx = (imm & 0x80000000) != 0 ? (0xffffffffUL << 32) : 0; + ctx.Stack[sp] = new VMSlot { U8 = sx | imm }; + state = ExecutionState.Next; + } + } + + internal class PushIQword : IOpCode { + public byte Code { + get { return Constants.OP_PUSHI_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + ctx.Stack.SetTopPosition(++sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + ulong imm = ctx.ReadByte(); + imm |= ((ulong)ctx.ReadByte() << 8); + imm |= ((ulong)ctx.ReadByte() << 16); + imm |= ((ulong)ctx.ReadByte() << 24); + imm |= ((ulong)ctx.ReadByte() << 32); + imm |= ((ulong)ctx.ReadByte() << 40); + imm |= ((ulong)ctx.ReadByte() << 48); + imm |= ((ulong)ctx.ReadByte() << 56); + ctx.Stack[sp] = new VMSlot { U8 = imm }; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Rem.cs b/KoiVM.Runtime/OpCodes/Rem.cs new file mode 100644 index 0000000..ae6b9d9 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Rem.cs @@ -0,0 +1,123 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class RemDword : IOpCode { + public byte Code { + get { return Constants.OP_REM_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + + var slot = new VMSlot(); + if ((fl & Constants.FL_UNSIGNED) != 0) + slot.U4 = op1Slot.U4 % op2Slot.U4; + else + slot.U4 = (uint)((int)op1Slot.U4 % (int)op2Slot.U4); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class RemQword : IOpCode { + public byte Code { + get { return Constants.OP_REM_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + + var slot = new VMSlot(); + if ((fl & Constants.FL_UNSIGNED) != 0) + slot.U8 = op1Slot.U8 % op2Slot.U8; + else + slot.U8 = (ulong)((long)op1Slot.U8 % (long)op2Slot.U8); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + Utils.UpdateFL(op1Slot.U8, op2Slot.U8, slot.U8, slot.U8, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class RemR32 : IOpCode { + public byte Code { + get { return Constants.OP_REM_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R4 = op2Slot.R4 % op1Slot.R4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R4 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R4 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class RemR64 : IOpCode { + public byte Code { + get { return Constants.OP_REM_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R8 = op2Slot.R8 % op1Slot.R8; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R8 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R8 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Ret.cs b/KoiVM.Runtime/OpCodes/Ret.cs new file mode 100644 index 0000000..fce69c8 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Ret.cs @@ -0,0 +1,21 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Ret : IOpCode { + public byte Code { + get { return Constants.OPX_RET; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var slot = ctx.Stack[sp]; + ctx.Stack.SetTopPosition(--sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + ctx.Registers[Constants.REG_IP].U8 = slot.U8; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Shl.cs b/KoiVM.Runtime/OpCodes/Shl.cs new file mode 100644 index 0000000..5f9a42c --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Shl.cs @@ -0,0 +1,57 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class ShlDword : IOpCode { + public byte Code { + get { return Constants.OP_SHL_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.U4 = op1Slot.U4 << (int)op2Slot.U4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class ShlQword : IOpCode { + public byte Code { + get { return Constants.OP_SHL_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.U8 = op1Slot.U8 << (int)op2Slot.U4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN); + var fl = ctx.Registers[Constants.REG_FL].U1; + Utils.UpdateFL(op1Slot.U8, op2Slot.U8, slot.U8, slot.U8, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Shr.cs b/KoiVM.Runtime/OpCodes/Shr.cs new file mode 100644 index 0000000..6693cc1 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Shr.cs @@ -0,0 +1,63 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class ShrDword : IOpCode { + public byte Code { + get { return Constants.OP_SHR_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + var slot = new VMSlot(); + if ((fl & Constants.FL_UNSIGNED) != 0) + slot.U4 = op1Slot.U4 >> (int)op2Slot.U4; + else + slot.U4 = (uint)((int)op1Slot.U4 >> (int)op2Slot.U4); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + Utils.UpdateFL(op1Slot.U4, op2Slot.U4, slot.U4, slot.U4, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class ShrQword : IOpCode { + public byte Code { + get { return Constants.OP_SHR_QWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var fl = ctx.Registers[Constants.REG_FL].U1; + var slot = new VMSlot(); + if ((fl & Constants.FL_UNSIGNED) != 0) + slot.U8 = op1Slot.U8 >> (int)op2Slot.U4; + else + slot.U8 = (ulong)((long)op1Slot.U8 >> (int)op2Slot.U4); + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_UNSIGNED); + Utils.UpdateFL(op1Slot.U8, op2Slot.U8, slot.U8, slot.U8, ref fl, mask); + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Sind.cs b/KoiVM.Runtime/OpCodes/Sind.cs new file mode 100644 index 0000000..c0a7de9 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Sind.cs @@ -0,0 +1,152 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class SindByte : IOpCode { + public byte Code { + get { return Constants.OP_SIND_BYTE; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (adrSlot.O is IReference) { + ((IReference)adrSlot.O).SetValue(ctx, valSlot, PointerType.BYTE); + } + else { + var value = valSlot.U1; + var ptr = (byte*)adrSlot.U8; + *ptr = value; + } + state = ExecutionState.Next; + } + } + + internal class SindWord : IOpCode { + public byte Code { + get { return Constants.OP_SIND_WORD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (adrSlot.O is IReference) { + ((IReference)adrSlot.O).SetValue(ctx, valSlot, PointerType.WORD); + } + else { + var value = valSlot.U2; + var ptr = (ushort*)adrSlot.U8; + *ptr = value; + } + state = ExecutionState.Next; + } + } + + internal class SindDword : IOpCode { + public byte Code { + get { return Constants.OP_SIND_DWORD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (adrSlot.O is IReference) { + ((IReference)adrSlot.O).SetValue(ctx, valSlot, PointerType.DWORD); + } + else { + var value = valSlot.U4; + var ptr = (uint*)adrSlot.U8; + *ptr = value; + } + state = ExecutionState.Next; + } + } + + internal class SindQword : IOpCode { + public byte Code { + get { return Constants.OP_SIND_QWORD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (adrSlot.O is IReference) { + ((IReference)adrSlot.O).SetValue(ctx, valSlot, PointerType.QWORD); + } + else { + var value = valSlot.U8; + var ptr = (ulong*)adrSlot.U8; + *ptr = value; + } + state = ExecutionState.Next; + } + } + + internal class SindObject : IOpCode { + public byte Code { + get { return Constants.OP_SIND_OBJECT; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (adrSlot.O is IReference) { + ((IReference)adrSlot.O).SetValue(ctx, valSlot, PointerType.OBJECT); + } + else { + throw new ExecutionEngineException(); + } + state = ExecutionState.Next; + } + } + + internal class SindPtr : IOpCode { + public byte Code { + get { return Constants.OP_SIND_PTR; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var adrSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + if (adrSlot.O is IReference) { + ((IReference)adrSlot.O).SetValue(ctx, valSlot, Platform.x64 ? PointerType.QWORD : PointerType.DWORD); + } + else { + if (Platform.x64) { + var ptr = (ulong*)adrSlot.U8; + *ptr = valSlot.U8; + } + else { + var ptr = (uint*)adrSlot.U8; + *ptr = valSlot.U4; + } + } + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Sub.cs b/KoiVM.Runtime/OpCodes/Sub.cs new file mode 100644 index 0000000..7665e7b --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Sub.cs @@ -0,0 +1,63 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class SubR32 : IOpCode { + public byte Code { + get { return Constants.OP_SUB_R32; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R4 = op1Slot.R4 - op2Slot.R4; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R4 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R4 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } + + internal class SubR64 : IOpCode { + public byte Code { + get { return Constants.OP_SUB_R64; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var op1Slot = ctx.Stack[sp - 1]; + var op2Slot = ctx.Stack[sp]; + sp -= 1; + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var slot = new VMSlot(); + slot.R8 = op1Slot.R8 - op2Slot.R8; + ctx.Stack[sp] = slot; + + byte mask = (byte)(Constants.FL_ZERO | Constants.FL_SIGN | Constants.FL_OVERFLOW | Constants.FL_CARRY); + var fl = (byte)(ctx.Registers[Constants.REG_FL].U1 & ~mask); + if (slot.R8 == 0) + fl |= Constants.FL_ZERO; + else if (slot.R8 < 0) + fl |= Constants.FL_SIGN; + ctx.Registers[Constants.REG_FL].U1 = fl; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Sx.cs b/KoiVM.Runtime/OpCodes/Sx.cs new file mode 100644 index 0000000..07bb561 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Sx.cs @@ -0,0 +1,53 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class SxDword : IOpCode { + public byte Code { + get { return Constants.OP_SX_DWORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var operand = ctx.Stack[sp]; + if ((operand.U4 & 0x80000000) != 0) + operand.U8 = 0xffffffff00000000 | operand.U4; + ctx.Stack[sp] = operand; + + state = ExecutionState.Next; + } + } + + internal class SxWord : IOpCode { + public byte Code { + get { return Constants.OP_SX_WORD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var operand = ctx.Stack[sp]; + if ((operand.U2 & 0x8000) != 0) + operand.U4 = operand.U2 | 0xffff0000; + ctx.Stack[sp] = operand; + + state = ExecutionState.Next; + } + } + + internal class SxByte : IOpCode { + public byte Code { + get { return Constants.OP_SX_BYTE; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var operand = ctx.Stack[sp]; + if ((operand.U1 & 0x80) != 0) + operand.U4 = operand.U1 | 0xffffff00; + ctx.Stack[sp] = operand; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Try.cs b/KoiVM.Runtime/OpCodes/Try.cs new file mode 100644 index 0000000..f624aae --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Try.cs @@ -0,0 +1,35 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Try : IOpCode { + public byte Code { + get { return Constants.OP_TRY; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var type = ctx.Stack[sp--].U1; + + var frame = new EHFrame(); + frame.EHType = type; + if (type == Constants.EH_CATCH) { + frame.CatchType = (Type)ctx.Instance.Data.LookupReference(ctx.Stack[sp--].U4); + } + else if (type == Constants.EH_FILTER) { + frame.FilterAddr = ctx.Stack[sp--].U8; + } + frame.HandlerAddr = ctx.Stack[sp--].U8; + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + frame.BP = ctx.Registers[Constants.REG_BP]; + frame.SP = ctx.Registers[Constants.REG_SP]; + ctx.EHStack.Add(frame); + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/OpCodes/Vcall.cs b/KoiVM.Runtime/OpCodes/Vcall.cs new file mode 100644 index 0000000..d7e3130 --- /dev/null +++ b/KoiVM.Runtime/OpCodes/Vcall.cs @@ -0,0 +1,22 @@ +using System; +using Runtime.Data; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.OpCodes { + internal class Vcall : IOpCode { + public byte Code { + get { return Constants.OP_VCALL; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var slot = ctx.Stack[sp]; + ctx.Stack.SetTopPosition(--sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + + var vCall = VCallMap.Lookup(slot.U1); + vCall.Run(ctx, out state); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Platform.cs b/KoiVM.Runtime/Platform.cs new file mode 100644 index 0000000..bc653bd --- /dev/null +++ b/KoiVM.Runtime/Platform.cs @@ -0,0 +1,8 @@ +using System; + +namespace Runtime { + internal static class Platform { + public static readonly bool x64 = (IntPtr.Size == 8); + public static readonly bool LittleEndian = BitConverter.IsLittleEndian; + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/Properties/AssemblyInfo.cs b/KoiVM.Runtime/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3d9aaf8 --- /dev/null +++ b/KoiVM.Runtime/Properties/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System; +using System.Reflection; + +[assembly: AssemblyTitle("KoiVM Runtime")] +[assembly: AssemblyDescription("KoiVM runtime library")] \ No newline at end of file diff --git a/KoiVM.Runtime/Runtime.csproj b/KoiVM.Runtime/Runtime.csproj new file mode 100644 index 0000000..7ca41a8 --- /dev/null +++ b/KoiVM.Runtime/Runtime.csproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47} + Library + Properties + Runtime + Runtime + v4.6.1 + 512 + + + + true + full + false + ..\bin\ + DEBUG;TRACE + prompt + 4 + true + false + + + pdbonly + true + ..\bin\ + TRACE + prompt + 4 + true + false + + + true + ..\bin\ + TRACE;__TRACE + true + full + AnyCPU + prompt + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KoiVM.Runtime/Utils.cs b/KoiVM.Runtime/Utils.cs new file mode 100644 index 0000000..7513745 --- /dev/null +++ b/KoiVM.Runtime/Utils.cs @@ -0,0 +1,66 @@ +using System; +using Runtime.Dynamic; + +namespace Runtime { + internal static unsafe class Utils { + public static uint ReadCompressedUInt(ref byte* ptr) { + uint num = 0; + int shift = 0; + do { + num |= (*ptr & 0x7fu) << shift; + shift += 7; + } while ((*ptr++ & 0x80) != 0); + return num; + } + + public static uint FromCodedToken(uint codedToken) { + uint rid = codedToken >> 3; + switch (codedToken & 7) { + case 1: + return rid | 0x02000000; + case 2: + return rid | 0x01000000; + case 3: + return rid | 0x1b000000; + case 4: + return rid | 0x0a000000; + case 5: + return rid | 0x06000000; + case 6: + return rid | 0x04000000; + case 7: + return rid | 0x2b000000; + } + return rid; + } + + // https://github.com/copy/v86/blob/master/src/misc_instr.macro.js + public static void UpdateFL(uint op1, uint op2, uint flResult, uint result, ref byte fl, byte mask) { + const ulong SignMask = (1U << 31); + byte flag = 0; + if (result == 0) + flag |= Constants.FL_ZERO; + if ((result & SignMask) != 0) + flag |= Constants.FL_SIGN; + if (((op1 ^ flResult) & (op2 ^ flResult) & SignMask) != 0) + flag |= Constants.FL_OVERFLOW; + if (((op1 ^ (op1 ^ op2) & (op2 ^ flResult)) & SignMask) != 0) + flag |= Constants.FL_CARRY; + fl = (byte)((fl & ~mask) | (flag & mask)); + } + + public static void UpdateFL(ulong op1, ulong op2, ulong flResult, ulong result, ref byte fl, byte mask) { + const ulong SignMask = (1U << 63); + byte flag = 0; + if (result == 0) + flag |= Constants.FL_ZERO; + if ((result & SignMask) != 0) + flag |= Constants.FL_SIGN; + if (((op1 ^ flResult) & (op2 ^ flResult) & SignMask) != 0) + flag |= Constants.FL_OVERFLOW; + if (((op1 ^ (op1 ^ op2) & (op2 ^ flResult)) & SignMask) != 0) + flag |= Constants.FL_CARRY; + fl = (byte)((fl & ~mask) | (flag & mask)); + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Box.cs b/KoiVM.Runtime/VCalls/Box.cs new file mode 100644 index 0000000..20dab95 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Box.cs @@ -0,0 +1,31 @@ +using System; +using System.Diagnostics; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Box : IVCall { + public byte Code { + get { return Constants.VCALL_BOX; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var typeSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp]; + + var valType = (Type)ctx.Instance.Data.LookupReference(typeSlot.U4); + if (Type.GetTypeCode(valType) == TypeCode.String && valSlot.O == null) + valSlot.O = ctx.Instance.Data.LookupString(valSlot.U4); + else { + Debug.Assert(valType.IsValueType); + valSlot.O = valSlot.ToObject(valType); + } + ctx.Stack[sp] = valSlot; + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Cast.cs b/KoiVM.Runtime/VCalls/Cast.cs new file mode 100644 index 0000000..4f3ad21 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Cast.cs @@ -0,0 +1,34 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Cast : IVCall { + public byte Code { + get { return Constants.VCALL_CAST; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var typeSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp]; + + bool castclass = (typeSlot.U4 & 0x80000000) != 0; + var castType = (Type)ctx.Instance.Data.LookupReference(typeSlot.U4 & ~0x80000000); + if (Type.GetTypeCode(castType) == TypeCode.String && valSlot.O == null) + valSlot.O = ctx.Instance.Data.LookupString(valSlot.U4); + else if (valSlot.O == null) + valSlot.O = null; + else if (!castType.IsInstanceOfType(valSlot.O)) { + valSlot.O = null; + if (castclass) + throw new InvalidCastException(); + } + ctx.Stack[sp] = valSlot; + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Ckfinite.cs b/KoiVM.Runtime/VCalls/Ckfinite.cs new file mode 100644 index 0000000..038cf21 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Ckfinite.cs @@ -0,0 +1,32 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Ckfinite : IVCall { + public byte Code { + get { return Constants.VCALL_CKFINITE; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp--]; + + var fl = ctx.Registers[Constants.REG_FL].U1; + if ((fl & Constants.FL_UNSIGNED) != 0) { + float v = valueSlot.R4; + if (float.IsNaN(v) || float.IsInfinity(v)) + throw new ArithmeticException(); + } + else { + double v = valueSlot.R8; + if (double.IsNaN(v) || double.IsInfinity(v)) + throw new ArithmeticException(); + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Ckoverflow.cs b/KoiVM.Runtime/VCalls/Ckoverflow.cs new file mode 100644 index 0000000..7f66213 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Ckoverflow.cs @@ -0,0 +1,23 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Ckoverflow : IVCall { + public byte Code { + get { return Constants.VCALL_CKOVERFLOW; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var fSlot = ctx.Stack[sp--]; + + if (fSlot.U4 != 0) + throw new OverflowException(); + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Ecall.cs b/KoiVM.Runtime/VCalls/Ecall.cs new file mode 100644 index 0000000..871e0a8 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Ecall.cs @@ -0,0 +1,232 @@ +using System; +using System.Diagnostics; +using System.Reflection; +using System.Reflection.Emit; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal unsafe class Ecall : IVCall { + public byte Code { + get { return Constants.VCALL_ECALL; } + } + + static object PopObject(VMContext ctx, Type type, ref uint sp) { + var arg = ctx.Stack[sp--]; + if (Type.GetTypeCode(type) == TypeCode.String && arg.O == null) + return ctx.Instance.Data.LookupString(arg.U4); + return arg.ToObject(type); + } + + static IReference PopRef(VMContext ctx, Type type, ref uint sp) { + var arg = ctx.Stack[sp]; + + if (type.IsByRef) { + sp--; + type = type.GetElementType(); + if (arg.O is Pointer) { + void* ptr = Pointer.Unbox(arg.O); + return new PointerRef(ptr); + } + if (arg.O is IReference) { + return (IReference)arg.O; + } + return new PointerRef((void*)arg.U8); + } + if (Type.GetTypeCode(type) == TypeCode.String && arg.O == null) { + arg.O = ctx.Instance.Data.LookupString(arg.U4); + ctx.Stack[sp] = arg; + } + return new StackRef(sp--); + } + + static bool NeedTypedInvoke(VMContext ctx, uint sp, MethodBase method, bool isNewObj) { + if (!isNewObj && !method.IsStatic) { + if (method.DeclaringType.IsValueType) + return true; + } + foreach (var param in method.GetParameters()) + if (param.ParameterType.IsByRef) + return true; + if (method is MethodInfo && ((MethodInfo)method).ReturnType.IsByRef) + return true; + return false; + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var mSlot = ctx.Stack[sp--]; + + var mId = mSlot.U4 & 0x3fffffff; + var opCode = (byte)(mSlot.U4 >> 30); + var targetMethod = (MethodBase)ctx.Instance.Data.LookupReference(mId); + bool typedInvoke = opCode == Constants.ECALL_CALLVIRT_CONSTRAINED; + if (!typedInvoke) + typedInvoke = NeedTypedInvoke(ctx, sp, targetMethod, opCode == Constants.ECALL_NEWOBJ); + + if (typedInvoke) + InvokeTyped(ctx, targetMethod, opCode, ref sp, out state); + else + InvokeNormal(ctx, targetMethod, opCode, ref sp, out state); + } + + void InvokeNormal(VMContext ctx, MethodBase targetMethod, byte opCode, ref uint sp, out ExecutionState state) { + uint _sp = sp; + var parameters = targetMethod.GetParameters(); + object self = null; + object[] args = new object[parameters.Length]; + if (opCode == Constants.ECALL_CALL && targetMethod.IsVirtual) { + int indexOffset = targetMethod.IsStatic ? 0 : 1; + args = new object[parameters.Length + indexOffset]; + for (int i = parameters.Length - 1; i >= 0; i--) + args[i + indexOffset] = PopObject(ctx, parameters[i].ParameterType, ref sp); + if (!targetMethod.IsStatic) + args[0] = PopObject(ctx, targetMethod.DeclaringType, ref sp); + + targetMethod = DirectCall.GetDirectInvocationProxy(targetMethod); + } + else { + args = new object[parameters.Length]; + for (int i = parameters.Length - 1; i >= 0; i--) + args[i] = PopObject(ctx, parameters[i].ParameterType, ref sp); + if (!targetMethod.IsStatic && opCode != Constants.ECALL_NEWOBJ) { + self = PopObject(ctx, targetMethod.DeclaringType, ref sp); + + if (self != null && !targetMethod.DeclaringType.IsInstanceOfType(self)) { + // ConfuserEx sometimes produce this to circumvent peverify (see ref proxy) + // Reflection won't allow it, so use typed invoke + InvokeTyped(ctx, targetMethod, opCode, ref _sp, out state); + return; + } + } + } + + object result; + if (opCode == Constants.ECALL_NEWOBJ) { + try { + result = ((ConstructorInfo)targetMethod).Invoke(args); + } + catch (TargetInvocationException ex) { + EHHelper.Rethrow(ex.InnerException, null); + throw; + } + } + else { + if (!targetMethod.IsStatic && self == null) + throw new NullReferenceException(); + + Type selfType; + if (self != null && (selfType = self.GetType()).IsArray && targetMethod.Name == "SetValue") { + Type valueType; + if (args[0] == null) + valueType = selfType.GetElementType(); + else + valueType = args[0].GetType(); + ArrayStoreHelpers.SetValue((Array)self, (int)args[1], args[0], valueType, selfType.GetElementType()); + result = null; + } + else { + try { + result = targetMethod.Invoke(self, args); + } + catch (TargetInvocationException ex) { + VMDispatcher.DoThrow(ctx, ex.InnerException); + throw; + } + } + } + + if (targetMethod is MethodInfo && ((MethodInfo)targetMethod).ReturnType != typeof(void)) { + ctx.Stack[++sp] = VMSlot.FromObject(result, ((MethodInfo)targetMethod).ReturnType); + } + else if (opCode == Constants.ECALL_NEWOBJ) { + ctx.Stack[++sp] = VMSlot.FromObject(result, targetMethod.DeclaringType); + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + + void InvokeTyped(VMContext ctx, MethodBase targetMethod, byte opCode, ref uint sp, out ExecutionState state) { + var parameters = targetMethod.GetParameters(); + int paramCount = parameters.Length; + if (!targetMethod.IsStatic && opCode != Constants.ECALL_NEWOBJ) + paramCount++; + + Type constrainType = null; + if (opCode == Constants.ECALL_CALLVIRT_CONSTRAINED) { + constrainType = (Type)ctx.Instance.Data.LookupReference(ctx.Stack[sp--].U4); + } + + int indexOffset = (targetMethod.IsStatic || opCode == Constants.ECALL_NEWOBJ) ? 0 : 1; + IReference[] references = new IReference[paramCount]; + Type[] types = new Type[paramCount]; + for (int i = paramCount - 1; i >= 0; i--) { + Type paramType; + if (!targetMethod.IsStatic && opCode != Constants.ECALL_NEWOBJ) { + if (i == 0) { + if (!targetMethod.IsStatic) { + var thisSlot = ctx.Stack[sp]; + if (thisSlot.O is ValueType && !targetMethod.DeclaringType.IsValueType) { + Debug.Assert(targetMethod.DeclaringType.IsInterface); + Debug.Assert(opCode == Constants.ECALL_CALLVIRT); + // Interface dispatch on valuetypes => use constrained. invocation + constrainType = thisSlot.O.GetType(); + } + } + + if (constrainType != null) + paramType = constrainType.MakeByRefType(); + else if (targetMethod.DeclaringType.IsValueType) + paramType = targetMethod.DeclaringType.MakeByRefType(); + else + paramType = targetMethod.DeclaringType; + } + else + paramType = parameters[i - 1].ParameterType; + } + else { + paramType = parameters[i].ParameterType; + } + references[i] = PopRef(ctx, paramType, ref sp); + if (paramType.IsByRef) + paramType = paramType.GetElementType(); + types[i] = paramType; + } + + OpCode callOp; + Type retType; + if (opCode == Constants.ECALL_CALL) { + callOp = System.Reflection.Emit.OpCodes.Call; + retType = targetMethod is MethodInfo ? ((MethodInfo)targetMethod).ReturnType : typeof(void); + } + else if (opCode == Constants.ECALL_CALLVIRT || + opCode == Constants.ECALL_CALLVIRT_CONSTRAINED) { + callOp = System.Reflection.Emit.OpCodes.Callvirt; + retType = targetMethod is MethodInfo ? ((MethodInfo)targetMethod).ReturnType : typeof(void); + } + else if (opCode == Constants.ECALL_NEWOBJ) { + callOp = System.Reflection.Emit.OpCodes.Newobj; + retType = targetMethod.DeclaringType; + } + else + throw new InvalidProgramException(); + var proxy = DirectCall.GetTypedInvocationProxy(targetMethod, callOp, constrainType); + + object result = proxy(ctx, references, types); + + if (retType != typeof(void)) { + ctx.Stack[++sp] = VMSlot.FromObject(result, retType); + } + else if (opCode == Constants.ECALL_NEWOBJ) { + ctx.Stack[++sp] = VMSlot.FromObject(result, retType); + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Exit.cs b/KoiVM.Runtime/VCalls/Exit.cs new file mode 100644 index 0000000..2979d6d --- /dev/null +++ b/KoiVM.Runtime/VCalls/Exit.cs @@ -0,0 +1,15 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Exit : IVCall { + public byte Code { + get { return Constants.VCALL_EXIT; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + state = ExecutionState.Exit; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/IVCall.cs b/KoiVM.Runtime/VCalls/IVCall.cs new file mode 100644 index 0000000..b2611d3 --- /dev/null +++ b/KoiVM.Runtime/VCalls/IVCall.cs @@ -0,0 +1,9 @@ +using System; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal interface IVCall { + byte Code { get; } + void Run(VMContext ctx, out ExecutionState state); + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Initobj.cs b/KoiVM.Runtime/VCalls/Initobj.cs new file mode 100644 index 0000000..cbd7850 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Initobj.cs @@ -0,0 +1,41 @@ +using System; +using System.Runtime.Serialization; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal class Initobj : IVCall { + public byte Code { + get { return Constants.VCALL_INITOBJ; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var typeSlot = ctx.Stack[sp--]; + var addrSlot = ctx.Stack[sp--]; + + var type = (Type)ctx.Instance.Data.LookupReference(typeSlot.U4); + if (addrSlot.O is IReference) { + var reference = (IReference)addrSlot.O; + var slot = new VMSlot(); + if (type.IsValueType) { + object def = null; + if (Nullable.GetUnderlyingType(type) == null) + def = FormatterServices.GetUninitializedObject(type); + slot.O = ValueTypeBox.Box(def, type); + } + else + slot.O = null; + reference.SetValue(ctx, slot, PointerType.OBJECT); + } + else { + throw new NotSupportedException(); + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Ldfld.cs b/KoiVM.Runtime/VCalls/Ldfld.cs new file mode 100644 index 0000000..e7bc22d --- /dev/null +++ b/KoiVM.Runtime/VCalls/Ldfld.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Ldfld : IVCall { + public byte Code { + get { return Constants.VCALL_LDFLD; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var fieldSlot = ctx.Stack[sp--]; + var objSlot = ctx.Stack[sp]; + + bool addr = (fieldSlot.U4 & 0x80000000) != 0; + var field = (FieldInfo)ctx.Instance.Data.LookupReference(fieldSlot.U4 & 0x7fffffff); + if (!field.IsStatic && objSlot.O == null) + throw new NullReferenceException(); + + if (addr) + ctx.Stack[sp] = new VMSlot { O = new FieldRef(objSlot.O, field) }; + else { + object instance; + if (field.DeclaringType.IsValueType && objSlot.O is IReference) + instance = ((IReference)objSlot.O).GetValue(ctx, PointerType.OBJECT).ToObject(field.DeclaringType); + else + instance = objSlot.ToObject(field.DeclaringType); + ctx.Stack[sp] = VMSlot.FromObject(field.GetValue(instance), field.FieldType); + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Ldftn.cs b/KoiVM.Runtime/VCalls/Ldftn.cs new file mode 100644 index 0000000..d62cd78 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Ldftn.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal class Ldftn : IVCall { + public byte Code { + get { return Constants.VCALL_LDFTN; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var methodSlot = ctx.Stack[sp--]; + var objectSlot = ctx.Stack[sp]; + + if (objectSlot.O != null) { + var method = (MethodInfo)ctx.Instance.Data.LookupReference(methodSlot.U4); + var type = objectSlot.O.GetType(); + + var baseTypes = new List(); + do { + baseTypes.Add(type); + type = type.BaseType; + } while (type != null && type != method.DeclaringType); + baseTypes.Reverse(); + + MethodInfo found = method; + const BindingFlags fl = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; + foreach (var baseType in baseTypes) { + foreach (var m in baseType.GetMethods(fl)) + if (m.GetBaseDefinition() == found) { + found = m; + break; + } + } + + ctx.Stack[sp] = new VMSlot { U8 = (ulong)found.MethodHandle.GetFunctionPointer() }; + } + if (objectSlot.U8 != 0) { + // intra linking + var entryKey = ctx.Stack[--sp].U4; + var codeAdr = methodSlot.U8; + var sig = ctx.Instance.Data.LookupExport(objectSlot.U4).Signature; + var ptr = VMTrampoline.CreateTrampoline(ctx.Instance.Data.Module, codeAdr, entryKey, sig, objectSlot.U4); + ctx.Stack[sp] = new VMSlot { U8 = (ulong)ptr }; + } + else { + var method = (MethodBase)ctx.Instance.Data.LookupReference(methodSlot.U4); + ctx.Stack[sp] = new VMSlot { U8 = (ulong)method.MethodHandle.GetFunctionPointer() }; + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Localloc.cs b/KoiVM.Runtime/VCalls/Localloc.cs new file mode 100644 index 0000000..4e238ff --- /dev/null +++ b/KoiVM.Runtime/VCalls/Localloc.cs @@ -0,0 +1,22 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Localloc : IVCall { + public byte Code { + get { return Constants.VCALL_LOCALLOC; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var bp = ctx.Registers[Constants.REG_BP].U4; + var size = ctx.Stack[sp].U4; + ctx.Stack[sp] = new VMSlot { + U8 = (ulong)ctx.Stack.Localloc(bp, size) + }; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Rangechk.cs b/KoiVM.Runtime/VCalls/Rangechk.cs new file mode 100644 index 0000000..f94a705 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Rangechk.cs @@ -0,0 +1,26 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Rangechk : IVCall { + public byte Code { + get { return Constants.VCALL_RANGECHK; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var valueSlot = ctx.Stack[sp--]; + var maxSlot = ctx.Stack[sp--]; + var minSlot = ctx.Stack[sp]; + + valueSlot.U8 = ((long)valueSlot.U8 > (long)maxSlot.U8 || (long)valueSlot.U8 < (long)minSlot.U8) ? 1u : 0; + + ctx.Stack[sp] = valueSlot; + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Sizeof.cs b/KoiVM.Runtime/VCalls/Sizeof.cs new file mode 100644 index 0000000..8c4a440 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Sizeof.cs @@ -0,0 +1,23 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal class Sizeof : IVCall { + public byte Code { + get { return Constants.VCALL_SIZEOF; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var bp = ctx.Registers[Constants.REG_BP].U4; + var type = (Type)ctx.Instance.Data.LookupReference(ctx.Stack[sp].U4); + ctx.Stack[sp] = new VMSlot { + U4 = (uint)SizeOfHelper.SizeOf(type) + }; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Stfld.cs b/KoiVM.Runtime/VCalls/Stfld.cs new file mode 100644 index 0000000..f30d463 --- /dev/null +++ b/KoiVM.Runtime/VCalls/Stfld.cs @@ -0,0 +1,43 @@ +using System; +using System.Reflection; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal class Stfld : IVCall { + public byte Code { + get { return Constants.VCALL_STFLD; } + } + + public unsafe void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var fieldSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp--]; + var objSlot = ctx.Stack[sp--]; + + var field = (FieldInfo)ctx.Instance.Data.LookupReference(fieldSlot.U4); + if (!field.IsStatic && objSlot.O == null) + throw new NullReferenceException(); + + object value; + if (Type.GetTypeCode(field.FieldType) == TypeCode.String && valSlot.O == null) + value = ctx.Instance.Data.LookupString(valSlot.U4); + else + value = valSlot.ToObject(field.FieldType); + + if (field.DeclaringType.IsValueType && objSlot.O is IReference) { + TypedReference typedRef; + ((IReference)objSlot.O).ToTypedReference(ctx, &typedRef, field.DeclaringType); + TypedReferenceHelpers.CastTypedRef(&typedRef, field.DeclaringType); + field.SetValueDirect(typedRef, value); + } + else + field.SetValue(objSlot.ToObject(field.DeclaringType), value); + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Throw.cs b/KoiVM.Runtime/VCalls/Throw.cs new file mode 100644 index 0000000..284bb4f --- /dev/null +++ b/KoiVM.Runtime/VCalls/Throw.cs @@ -0,0 +1,21 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; + +namespace Runtime.VCalls { + internal class Throw : IVCall { + public byte Code { + get { return Constants.VCALL_THROW; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var type = ctx.Stack[sp--].U4; + ctx.Registers[Constants.REG_SP].U4 = sp; + if (type == 1) + state = ExecutionState.Rethrow; + else + state = ExecutionState.Throw; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Token.cs b/KoiVM.Runtime/VCalls/Token.cs new file mode 100644 index 0000000..fa0850b --- /dev/null +++ b/KoiVM.Runtime/VCalls/Token.cs @@ -0,0 +1,29 @@ +using System; +using System.Reflection; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal class Token : IVCall { + public byte Code { + get { return Constants.VCALL_TOKEN; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var typeSlot = ctx.Stack[sp]; + + var reference = ctx.Instance.Data.LookupReference(typeSlot.U4); + if (reference is Type) + typeSlot.O = ValueTypeBox.Box(((Type)reference).TypeHandle, typeof(RuntimeTypeHandle)); + else if (reference is MethodBase) + typeSlot.O = ValueTypeBox.Box(((MethodBase)reference).MethodHandle, typeof(RuntimeMethodHandle)); + else if (reference is FieldInfo) + typeSlot.O = ValueTypeBox.Box(((FieldInfo)reference).FieldHandle, typeof(RuntimeFieldHandle)); + ctx.Stack[sp] = typeSlot; + + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VCalls/Unbox.cs b/KoiVM.Runtime/VCalls/Unbox.cs new file mode 100644 index 0000000..7a957bf --- /dev/null +++ b/KoiVM.Runtime/VCalls/Unbox.cs @@ -0,0 +1,40 @@ +using System; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime.VCalls { + internal class Unbox : IVCall { + public byte Code { + get { return Constants.VCALL_UNBOX; } + } + + public void Run(VMContext ctx, out ExecutionState state) { + var sp = ctx.Registers[Constants.REG_SP].U4; + var typeSlot = ctx.Stack[sp--]; + var valSlot = ctx.Stack[sp]; + + bool unboxPtr = (typeSlot.U4 & 0x80000000) != 0; + var valType = (Type)ctx.Instance.Data.LookupReference(typeSlot.U4 & ~0x80000000); + if (unboxPtr) { + unsafe { + TypedReference typedRef; + TypedReferenceHelpers.UnboxTypedRef(valSlot.O, &typedRef); + var reference = new TypedRef(typedRef); + valSlot = VMSlot.FromObject(valSlot.O, valType); + ctx.Stack[sp] = valSlot; + } + } + else { + if (valType == typeof(object) && valSlot.O != null) + valType = valSlot.O.GetType(); + valSlot = VMSlot.FromObject(valSlot.O, valType); + ctx.Stack[sp] = valSlot; + } + + ctx.Stack.SetTopPosition(sp); + ctx.Registers[Constants.REG_SP].U4 = sp; + state = ExecutionState.Next; + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/VMInstance.cs b/KoiVM.Runtime/VMInstance.cs new file mode 100644 index 0000000..435aa9f --- /dev/null +++ b/KoiVM.Runtime/VMInstance.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using Runtime.Data; +using Runtime.Dynamic; +using Runtime.Execution; +using Runtime.Execution.Internal; + +namespace Runtime { + internal unsafe class VMInstance { + [ThreadStatic] static Dictionary instances; + static readonly object initLock = new object(); + static Dictionary initialized = new Dictionary(); + + public static VMInstance Instance(Module module) { + VMInstance inst; + if (instances == null) { + instances = new Dictionary(); + } + if (!instances.TryGetValue(module, out inst)) { + inst = new VMInstance(VMData.Instance(module)); + instances[module] = inst; + lock (initLock) { + if (!initialized.ContainsKey(module)) { + inst.Initialize(); + initialized.Add(module, initialized.Count); + } + } + } + return inst; + } + + public static VMInstance Instance(int id) { + foreach (var entry in initialized) + if (entry.Value == id) + return Instance(entry.Key); + return null; + } + + public static int GetModuleId(Module module) { + return initialized[module]; + } + + Stack ctxStack = new Stack(); + VMContext currentCtx; + + VMInstance(VMData data) { + Data = data; + } + + public VMData Data { get; private set; } + + void Initialize() { + var initFunc = Data.LookupExport(Constants.HELPER_INIT); + var codeAddr = (ulong)(Data.KoiSection + initFunc.CodeOffset); + Run(codeAddr, initFunc.EntryKey, initFunc.Signature, new object[0]); + } + + public object Run(uint id, object[] arguments) { + var export = Data.LookupExport(id); + var codeAddr = (ulong)(Data.KoiSection + export.CodeOffset); + return Run(codeAddr, export.EntryKey, export.Signature, arguments); + } + + public object Run(ulong codeAddr, uint key, uint sigId, object[] arguments) { + var sig = Data.LookupExport(sigId).Signature; + return Run(codeAddr, key, sig, arguments); + } + + public void Run(uint id, void*[] typedRefs, void* retTypedRef) { + var export = Data.LookupExport(id); + var codeAddr = (ulong)(Data.KoiSection + export.CodeOffset); + Run(codeAddr, export.EntryKey, export.Signature, typedRefs, retTypedRef); + } + + public void Run(ulong codeAddr, uint key, uint sigId, void*[] typedRefs, void* retTypedRef) { + var sig = Data.LookupExport(sigId).Signature; + Run(codeAddr, key, sig, typedRefs, retTypedRef); + } + + object Run(ulong codeAddr, uint key, VMFuncSig sig, object[] arguments) { + if (currentCtx != null) + ctxStack.Push(currentCtx); + currentCtx = new VMContext(this); + + try { + Debug.Assert(sig.ParamTypes.Length == arguments.Length); + currentCtx.Stack.SetTopPosition((uint)arguments.Length + 1); + for (uint i = 0; i < arguments.Length; i++) { + currentCtx.Stack[i + 1] = VMSlot.FromObject(arguments[i], sig.ParamTypes[i]); + } + currentCtx.Stack[(uint)arguments.Length + 1] = new VMSlot { U8 = 1 }; + + currentCtx.Registers[Constants.REG_K1] = new VMSlot { U4 = key }; + currentCtx.Registers[Constants.REG_BP] = new VMSlot { U4 = 0 }; + currentCtx.Registers[Constants.REG_SP] = new VMSlot { U4 = (uint)arguments.Length + 1 }; + currentCtx.Registers[Constants.REG_IP] = new VMSlot { U8 = codeAddr }; + VMDispatcher.Run(currentCtx); + Debug.Assert(currentCtx.EHStack.Count == 0); + + object retVal = null; + if (sig.RetType != typeof(void)) { + var retSlot = currentCtx.Registers[Constants.REG_R0]; + if (Type.GetTypeCode(sig.RetType) == TypeCode.String && retSlot.O == null) + retVal = Data.LookupString(retSlot.U4); + else + retVal = retSlot.ToObject(sig.RetType); + } + + return retVal; + } + finally { + currentCtx.Stack.FreeAllLocalloc(); + + if (ctxStack.Count > 0) + currentCtx = ctxStack.Pop(); + } + } + + void Run(ulong codeAddr, uint key, VMFuncSig sig, void*[] arguments, void* retTypedRef) { + if (currentCtx != null) + ctxStack.Push(currentCtx); + currentCtx = new VMContext(this); + + try { + Debug.Assert(sig.ParamTypes.Length == arguments.Length); + currentCtx.Stack.SetTopPosition((uint)arguments.Length + 1); + for (uint i = 0; i < arguments.Length; i++) { + var paramType = sig.ParamTypes[i]; + if (paramType.IsByRef) { + currentCtx.Stack[i + 1] = new VMSlot { O = new TypedRef(arguments[i]) }; + } + else { + var typedRef = *(TypedReference*)arguments[i]; + currentCtx.Stack[i + 1] = VMSlot.FromObject(TypedReference.ToObject(typedRef), __reftype(typedRef)); + } + } + currentCtx.Stack[(uint)arguments.Length + 1] = new VMSlot { U8 = 1 }; + + currentCtx.Registers[Constants.REG_K1] = new VMSlot { U4 = key }; + currentCtx.Registers[Constants.REG_BP] = new VMSlot { U4 = 0 }; + currentCtx.Registers[Constants.REG_SP] = new VMSlot { U4 = (uint)arguments.Length + 1 }; + currentCtx.Registers[Constants.REG_IP] = new VMSlot { U8 = codeAddr }; + VMDispatcher.Run(currentCtx); + Debug.Assert(currentCtx.EHStack.Count == 0); + + if (sig.RetType != typeof(void)) { + if (sig.RetType.IsByRef) { + var retRef = currentCtx.Registers[Constants.REG_R0].O; + if (!(retRef is IReference)) + throw new ExecutionEngineException(); + ((IReference)retRef).ToTypedReference(currentCtx, retTypedRef, sig.RetType.GetElementType()); + } + else { + var retSlot = currentCtx.Registers[Constants.REG_R0]; + object retVal; + if (Type.GetTypeCode(sig.RetType) == TypeCode.String && retSlot.O == null) + retVal = Data.LookupString(retSlot.U4); + else + retVal = retSlot.ToObject(sig.RetType); + TypedReferenceHelpers.SetTypedRef(retVal, retTypedRef); + } + } + } + finally { + currentCtx.Stack.FreeAllLocalloc(); + + if (ctxStack.Count > 0) + currentCtx = ctxStack.Pop(); + } + } + } +} \ No newline at end of file diff --git a/KoiVM.Runtime/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs b/KoiVM.Runtime/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs new file mode 100644 index 0000000..3aa5318 --- /dev/null +++ b/KoiVM.Runtime/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.1", FrameworkDisplayName = ".NET Framework 4.6.1")] diff --git a/KoiVM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/KoiVM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..c793fd7c449afbcd228e94f6f1cdb2fbfbbbb617 GIT binary patch literal 139 zcmeZu3JP{+WMpJuU|>viwu%WT%1p)&kGVOV)r>A&N>7k!W-!L=FB{*704r;pTY9>p-q;s^#^pTpb-(XBOrKn+q$g3F%b*{8* zT~3IjV;U%g3n=JnFs^8syV12He0~h_)!pnYS51$#Na4+iokUw~Pu!Ej0i}f8LhHFk zpD^V*Q@||-zUB?+Ot~qk9VIm%C@4Y=B={&QFGT}|end%6WS1L;#TYS04I>g6MLH6V zMh*NTjg0&`R%$5?4NOm5Uq@5ISwDggk~`LW4AzJA!NEO4a7XMjFMvJ9<%hSup(QQ3 zUr(A1g66={@+_{ZH=usE34^^rDaI1Z&Z@^+3`S49Yh=|{SE5_7Z;5VQ*;nn z)Z0yi5dOe(s?Qr}n4p8mp<#md>&01#5)O`!BAJNCs5wRi;Xow*2nqg-6NwX0Jqd^eK~I_rR`g?dHlo44FJxwpOilvI{{wa5HyyVLU-ee?&9y z>};X5ZN9aOaDqS-%$#56J|N=o>$WR2N;5-DYiERuyw0D!;x9kvGUbxJrL+{gpzUqJ z_jjxgPO?Syqn(9nP)Di|n3fSd6+sE_q=%F*k&@*w=Lq7Tk%QAno?rK&dm(81VkB_H zER8UGZknN&#taGQjQSkgv4-NFF^jDU!!vn!CinIB(Qil-?(ajq^)=Mkq2j;8 z_#vH!c>ltlzhk|PbNf~{ymCLF9eE7r)N{^q?|69)FIfUiV4RyPZl>#tS6B z4&=a15OfH2yu?NbwKKj!(UpOuMV>j#MI@34K@X~V6y^dY3O%EL4Ue|}sx1$XwqDJz GGWjo<4A<-c literal 0 HcmV?d00001 diff --git a/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.CoreCompileInputs.cache b/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..b1355c2 --- /dev/null +++ b/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +b69cbec917433cd61ccacf3165e3a8de2a0d6673 diff --git a/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.FileListAbsolute.txt b/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..da92168 --- /dev/null +++ b/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\bin\Debug\KoiVM.Runtime.dll +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\bin\Debug\KoiVM.Runtime.pdb +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\KoiVM.Runtime.csprojAssemblyReference.cache +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\KoiVM.Runtime.csproj.CoreCompileInputs.cache +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\KoiVM.Runtime.dll +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\KoiVM.Runtime.pdb +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\bin\KoiVM.Runtime.dll +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\bin\KoiVM.Runtime.pdb diff --git a/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csprojAssemblyReference.cache b/KoiVM.Runtime/obj/Debug/KoiVM.Runtime.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..e18859965dc34bf74b0c0e12469e76bbcd754285 GIT binary patch literal 424 zcmaJ-Jx{|h5Oqk>55mxii6QKjm8gnfiI9kdkN^Qn)e&?_E@0J-kw1p=oB0pmD-{#) zhUdHUJ>NUCfHC&zK_}tpz|+&6Xtgq`xBSux+3_Wqwc(Z0I8RrojZj0G7d+<~&*o|6 zq;(q00iD$#=jnrMq-bw&yHsl&$|hU%MSs@kc~@kxfS87z{ywAL8jG9Sf<@|@_Cn$= z3s1hUybCF@wcdi^*I-^PG!n`6H1re^{o6Y74TrZ1x+`d{(&PO;iMLy+%^PUc6MDB6 z?-==_8LdD%G>nBTj+4pp-p9S}!~pU~^YM6oF(w<4r(FGBzvC1{aB=IX%hA$Ow2SD`ZY|OiaR`*_U9N=Yk0e)ZUApR*5jVew z;O^w-Fc8UUt6T z9b^S;nUg&s6{oQXJ;CmFGa-`b&pyuf_L4}3wonLL0oU{@d)0Eaa)zL{mKecAr-aW5 zVbK9NMNZhvGR|2r%@1vE1dfq!kND=O_W5ip0C1SM@uf)UV5Gv7O0kgR>v?Z_@ZmNJ zM>lu8CyGXTsi6w9 SfJ7rj)5$_+v)||6vws7C_}cRT literal 0 HcmV?d00001 diff --git a/KoiVM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache b/KoiVM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..a48ff18 --- /dev/null +++ b/KoiVM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +2895be5efc65d52df2359191b87849aa715cb5e1 diff --git a/KoiVM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt b/KoiVM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..af131e7 --- /dev/null +++ b/KoiVM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt @@ -0,0 +1,24 @@ +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\Runtime.csproj.CoreCompileInputs.cache +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\bin\Runtime.dll +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\bin\Runtime.pdb +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\Runtime.dll +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\Runtime.pdb +C:\Users\admin\Desktop\personal coding\KoiVM-1-master\KoiVM.Runtime\obj\Debug\Runtime.csprojAssemblyReference.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\Runtime.dll +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\bin\Runtime.pdb +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM.Runtime\obj\Debug\Runtime.csproj.AssemblyReference.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM.Runtime\obj\Debug\Runtime.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM.Runtime\obj\Debug\Runtime.dll +D:\Reverse Engineering\reverse try\AndyLarkinsVM-main\KoiVM.Runtime\obj\Debug\Runtime.pdb +C:\Users\akibu\Desktop\hahaxdjsd\bin\Runtime.dll +C:\Users\akibu\Desktop\hahaxdjsd\bin\Runtime.pdb +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM.Runtime\obj\Debug\Runtime.csproj.AssemblyReference.cache +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM.Runtime\obj\Debug\Runtime.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM.Runtime\obj\Debug\Runtime.dll +C:\Users\akibu\Desktop\hahaxdjsd\KoiVM.Runtime\obj\Debug\Runtime.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\Runtime.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\Runtime.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM.Runtime\obj\Debug\Runtime.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM.Runtime\obj\Debug\Runtime.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM.Runtime\obj\Debug\Runtime.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\KoiVM.Runtime\obj\Debug\Runtime.csproj.AssemblyReference.cache diff --git a/KoiVM.Runtime/obj/Debug/Runtime.csprojAssemblyReference.cache b/KoiVM.Runtime/obj/Debug/Runtime.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..e18859965dc34bf74b0c0e12469e76bbcd754285 GIT binary patch literal 424 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%0A*|U&jHO#K@Femy$C;ewcW+| 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 Sid8e_x1RYka{T{Df&T@06fuhc literal 0 HcmV?d00001 diff --git a/KoiVM.Runtime/obj/Debug/Runtime.pdb b/KoiVM.Runtime/obj/Debug/Runtime.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1e8ed1585ea5889bbc1a3d572a5e99af427be89d GIT binary patch literal 296448 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
    p|FIhXKMzWJcGEZ8cf2_9>zAwD{^`Qg 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 Yd63yVp8`D>>"); + else if (Value is string) + EscapeString(ret, (string)Value, true); + else + ret.Append(Value); + return ret.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ASTExpression.cs b/KoiVM/AST/ASTExpression.cs new file mode 100644 index 0000000..c97418a --- /dev/null +++ b/KoiVM/AST/ASTExpression.cs @@ -0,0 +1,7 @@ +using System; + +namespace KoiVM.AST { + public abstract class ASTExpression : ASTNode { + public ASTType? Type { get; set; } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ASTNode.cs b/KoiVM/AST/ASTNode.cs new file mode 100644 index 0000000..a9a10a5 --- /dev/null +++ b/KoiVM/AST/ASTNode.cs @@ -0,0 +1,6 @@ +using System; + +namespace KoiVM.AST { + public abstract class ASTNode { + } +} \ No newline at end of file diff --git a/KoiVM/AST/ASTType.cs b/KoiVM/AST/ASTType.cs new file mode 100644 index 0000000..7c6f6e2 --- /dev/null +++ b/KoiVM/AST/ASTType.cs @@ -0,0 +1,15 @@ +using System; +using System.Reflection; + +namespace KoiVM.AST { + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + public enum ASTType { + I4, + I8, + R4, + R8, + O, + Ptr, + ByRef + } +} \ No newline at end of file diff --git a/KoiVM/AST/ASTVariable.cs b/KoiVM/AST/ASTVariable.cs new file mode 100644 index 0000000..934c34f --- /dev/null +++ b/KoiVM/AST/ASTVariable.cs @@ -0,0 +1,12 @@ +using System; + +namespace KoiVM.AST { + public class ASTVariable { + public ASTType Type { get; set; } + public string Name { get; set; } + + public override string ToString() { + return Name; + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/IHasOffset.cs b/KoiVM/AST/IL/IHasOffset.cs new file mode 100644 index 0000000..a978f24 --- /dev/null +++ b/KoiVM/AST/IL/IHasOffset.cs @@ -0,0 +1,7 @@ +using System; + +namespace KoiVM.AST.IL { + public interface IHasOffset { + uint Offset { get; } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/IILOperand.cs b/KoiVM/AST/IL/IILOperand.cs new file mode 100644 index 0000000..0ba6389 --- /dev/null +++ b/KoiVM/AST/IL/IILOperand.cs @@ -0,0 +1,6 @@ +using System; + +namespace KoiVM.AST.IL { + public interface IILOperand { + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILBlock.cs b/KoiVM/AST/IL/ILBlock.cs new file mode 100644 index 0000000..272f50c --- /dev/null +++ b/KoiVM/AST/IL/ILBlock.cs @@ -0,0 +1,16 @@ +using System; +using dnlib.DotNet; +using KoiVM.CFG; +using KoiVM.RT; + +namespace KoiVM.AST.IL { + public class ILBlock : BasicBlock { + public ILBlock(int id, ILInstrList content) + : base(id, content) { + } + + public virtual IKoiChunk CreateChunk(VMRuntime rt, MethodDef method) { + return new BasicBlockChunk(rt, method, this); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILDataTarget.cs b/KoiVM/AST/IL/ILDataTarget.cs new file mode 100644 index 0000000..546c5f3 --- /dev/null +++ b/KoiVM/AST/IL/ILDataTarget.cs @@ -0,0 +1,21 @@ +using System; +using KoiVM.RT; + +namespace KoiVM.AST.IL { + public class ILDataTarget : IILOperand, IHasOffset { + public ILDataTarget(BinaryChunk target) { + Target = target; + } + + public BinaryChunk Target { get; set; } + public string Name { get; set; } + + public uint Offset { + get { return Target.Offset; } + } + + public override string ToString() { + return Name; + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILImmediate.cs b/KoiVM/AST/IL/ILImmediate.cs new file mode 100644 index 0000000..273bfe3 --- /dev/null +++ b/KoiVM/AST/IL/ILImmediate.cs @@ -0,0 +1,12 @@ +using System; + +namespace KoiVM.AST.IL { + public class ILImmediate : ASTConstant, IILOperand { + public static ILImmediate Create(object value, ASTType type) { + return new ILImmediate { + Value = value, + Type = type + }; + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILInstrList.cs b/KoiVM/AST/IL/ILInstrList.cs new file mode 100644 index 0000000..c5de383 --- /dev/null +++ b/KoiVM/AST/IL/ILInstrList.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace KoiVM.AST.IL { + public class ILInstrList : List { + public override string ToString() { + return string.Join(Environment.NewLine, this); + } + + public void VisitInstrs(VisitFunc visitFunc, T arg) { + for (int i = 0; i < Count; i++) + visitFunc(this, this[i], ref i, arg); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILInstruction.cs b/KoiVM/AST/IL/ILInstruction.cs new file mode 100644 index 0000000..455c8d0 --- /dev/null +++ b/KoiVM/AST/IL/ILInstruction.cs @@ -0,0 +1,47 @@ +using System; +using System.Text; +using KoiVM.AST.IR; +using KoiVM.VMIL; + +namespace KoiVM.AST.IL { + public class ILInstruction : ASTNode, IHasOffset { + public ILInstruction(ILOpCode opCode) { + OpCode = opCode; + } + + public ILInstruction(ILOpCode opCode, IILOperand operand) { + OpCode = opCode; + Operand = operand; + } + + public ILInstruction(ILOpCode opCode, IILOperand operand, object annotation) { + OpCode = opCode; + Operand = operand; + Annotation = annotation; + } + + public ILInstruction(ILOpCode opCode, IILOperand operand, ILInstruction origin) { + OpCode = opCode; + Operand = operand; + Annotation = origin.Annotation; + IR = origin.IR; + } + + public uint Offset { get; set; } + public IRInstruction IR { get; set; } + public ILOpCode OpCode { get; set; } + public IILOperand Operand { get; set; } + public object Annotation { get; set; } + + public override string ToString() { + var ret = new StringBuilder(); + ret.AppendFormat("{0}", OpCode.ToString().PadLeft(16)); + if (Operand != null) { + ret.AppendFormat(" {0}", Operand); + } + if (Annotation != null) + ret.AppendFormat(" ; {0}", Annotation); + return ret.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILJumpTable.cs b/KoiVM/AST/IL/ILJumpTable.cs new file mode 100644 index 0000000..bd1b100 --- /dev/null +++ b/KoiVM/AST/IL/ILJumpTable.cs @@ -0,0 +1,24 @@ +using System; +using KoiVM.CFG; +using KoiVM.RT; + +namespace KoiVM.AST.IL { + public class ILJumpTable : IILOperand, IHasOffset { + public ILJumpTable(IBasicBlock[] targets) { + Targets = targets; + Chunk = new JumpTableChunk(this); + } + + public JumpTableChunk Chunk { get; private set; } + public ILInstruction RelativeBase { get; set; } + public IBasicBlock[] Targets { get; set; } + + public uint Offset { + get { return Chunk.Offset; } + } + + public override string ToString() { + return string.Format("[..{0}..]", Targets.Length); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILJumpTarget.cs b/KoiVM/AST/IL/ILJumpTarget.cs new file mode 100644 index 0000000..2376e66 --- /dev/null +++ b/KoiVM/AST/IL/ILJumpTarget.cs @@ -0,0 +1,20 @@ +using System; +using KoiVM.CFG; + +namespace KoiVM.AST.IL { + public class ILBlockTarget : IILOperand, IHasOffset { + public ILBlockTarget(IBasicBlock target) { + Target = target; + } + + public IBasicBlock Target { get; set; } + + public uint Offset { + get { return ((ILBlock)Target).Content[0].Offset; } + } + + public override string ToString() { + return string.Format("Block_{0:x2}", Target.Id); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILMethodTarget.cs b/KoiVM/AST/IL/ILMethodTarget.cs new file mode 100644 index 0000000..27213ac --- /dev/null +++ b/KoiVM/AST/IL/ILMethodTarget.cs @@ -0,0 +1,27 @@ +using System; +using dnlib.DotNet; +using KoiVM.RT; + +namespace KoiVM.AST.IL { + public class ILMethodTarget : IILOperand, IHasOffset { + ILBlock methodEntry; + + public ILMethodTarget(MethodDef target) { + Target = target; + } + + public MethodDef Target { get; set; } + + public void Resolve(VMRuntime runtime) { + runtime.LookupMethod(Target, out methodEntry); + } + + public uint Offset { + get { return methodEntry == null ? 0 : methodEntry.Content[0].Offset; } + } + + public override string ToString() { + return Target.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILRegister.cs b/KoiVM/AST/IL/ILRegister.cs new file mode 100644 index 0000000..46767c8 --- /dev/null +++ b/KoiVM/AST/IL/ILRegister.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using KoiVM.VM; + +namespace KoiVM.AST.IL { + public class ILRegister : IILOperand { + static readonly Dictionary regMap = new Dictionary(); + + ILRegister(VMRegisters reg) { + Register = reg; + regMap.Add(reg, this); + } + + public VMRegisters Register { get; set; } + + public override string ToString() { + return Register.ToString(); + } + + public static readonly ILRegister R0 = new ILRegister(VMRegisters.R0); + public static readonly ILRegister R1 = new ILRegister(VMRegisters.R1); + public static readonly ILRegister R2 = new ILRegister(VMRegisters.R2); + public static readonly ILRegister R3 = new ILRegister(VMRegisters.R3); + public static readonly ILRegister R4 = new ILRegister(VMRegisters.R4); + public static readonly ILRegister R5 = new ILRegister(VMRegisters.R5); + public static readonly ILRegister R6 = new ILRegister(VMRegisters.R6); + public static readonly ILRegister R7 = new ILRegister(VMRegisters.R7); + + public static readonly ILRegister BP = new ILRegister(VMRegisters.BP); + public static readonly ILRegister SP = new ILRegister(VMRegisters.SP); + public static readonly ILRegister IP = new ILRegister(VMRegisters.IP); + public static readonly ILRegister FL = new ILRegister(VMRegisters.FL); + public static readonly ILRegister K1 = new ILRegister(VMRegisters.K1); + public static readonly ILRegister K2 = new ILRegister(VMRegisters.K2); + public static readonly ILRegister M1 = new ILRegister(VMRegisters.M1); + public static readonly ILRegister M2 = new ILRegister(VMRegisters.M2); + + public static ILRegister LookupRegister(VMRegisters reg) { + return regMap[reg]; + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IL/ILRelReference.cs b/KoiVM/AST/IL/ILRelReference.cs new file mode 100644 index 0000000..94923ae --- /dev/null +++ b/KoiVM/AST/IL/ILRelReference.cs @@ -0,0 +1,25 @@ +using System; +using KoiVM.RT; + +namespace KoiVM.AST.IL { + public class ILRelReference : IILOperand { + public ILRelReference(IHasOffset target, IHasOffset relBase) { + Target = target; + Base = relBase; + } + + public IHasOffset Target { get; set; } + public IHasOffset Base { get; set; } + + public virtual uint Resolve(VMRuntime runtime) { + var relBase = Base.Offset; + if (Base is ILInstruction) + relBase += runtime.serializer.ComputeLength((ILInstruction)Base); + return Target.Offset - relBase; + } + + public override string ToString() { + return string.Format("[{0:x8}:{1:x8}]", Base.Offset, Target.Offset); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/IILASTNode.cs b/KoiVM/AST/ILAST/IILASTNode.cs new file mode 100644 index 0000000..4fd972d --- /dev/null +++ b/KoiVM/AST/ILAST/IILASTNode.cs @@ -0,0 +1,7 @@ +using System; + +namespace KoiVM.AST.ILAST { + public interface IILASTNode { + ASTType? Type { get; } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/IILASTStatement.cs b/KoiVM/AST/ILAST/IILASTStatement.cs new file mode 100644 index 0000000..94645c1 --- /dev/null +++ b/KoiVM/AST/ILAST/IILASTStatement.cs @@ -0,0 +1,6 @@ +using System; + +namespace KoiVM.AST.ILAST { + public interface IILASTStatement { + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/ILASTAssignment.cs b/KoiVM/AST/ILAST/ILASTAssignment.cs new file mode 100644 index 0000000..01d6249 --- /dev/null +++ b/KoiVM/AST/ILAST/ILASTAssignment.cs @@ -0,0 +1,12 @@ +using System; + +namespace KoiVM.AST.ILAST { + public class ILASTAssignment : ASTNode, IILASTStatement { + public ILASTVariable Variable { get; set; } + public ILASTExpression Value { get; set; } + + public override string ToString() { + return string.Format("{0} = {1}", Variable, Value); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/ILASTExpression.cs b/KoiVM/AST/ILAST/ILASTExpression.cs new file mode 100644 index 0000000..cf2fc42 --- /dev/null +++ b/KoiVM/AST/ILAST/ILASTExpression.cs @@ -0,0 +1,45 @@ +using System; +using System.Linq; +using System.Text; +using dnlib.DotNet.Emit; +using KoiVM.CFG; + +namespace KoiVM.AST.ILAST { + public class ILASTExpression : ASTExpression, IILASTNode, IILASTStatement { + public Code ILCode { get; set; } + public Instruction CILInstr { get; set; } + public object Operand { get; set; } + public IILASTNode[] Arguments { get; set; } + public Instruction[] Prefixes { get; set; } + + public override string ToString() { + var ret = new StringBuilder(); + ret.AppendFormat("{0}{1}(", ILCode.ToOpCode().Name, Type == null ? "" : ":" + Type.Value); + if (Operand != null) { + if (Operand is string) + ASTConstant.EscapeString(ret, (string)Operand, true); + else if (Operand is IBasicBlock) + ret.AppendFormat("Block_{0:x2}", ((IBasicBlock)Operand).Id); + else if (Operand is IBasicBlock[]) { + var targets = ((IBasicBlock[])Operand).Select(block => string.Format("Block_{0:x2}", block.Id)); + ret.AppendFormat("[{0}]", string.Join(", ", targets)); + } + else + ret.Append(Operand); + if (Arguments.Length > 0) + ret.Append(";"); + } + for (int i = 0; i < Arguments.Length; i++) { + if (i != 0) + ret.Append(","); + ret.Append(Arguments[i]); + } + ret.Append(")"); + return ret.ToString(); + } + + public ILASTExpression Clone() { + return (ILASTExpression)MemberwiseClone(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/ILASTPhi.cs b/KoiVM/AST/ILAST/ILASTPhi.cs new file mode 100644 index 0000000..63c4a3a --- /dev/null +++ b/KoiVM/AST/ILAST/ILASTPhi.cs @@ -0,0 +1,21 @@ +using System; +using System.Text; + +namespace KoiVM.AST.ILAST { + public class ILASTPhi : ASTNode, IILASTStatement { + public ILASTVariable Variable { get; set; } + public ILASTVariable[] SourceVariables { get; set; } + + public override string ToString() { + var ret = new StringBuilder(); + ret.AppendFormat("{0} = [", Variable); + for (int i = 0; i < SourceVariables.Length; i++) { + if (i != 0) + ret.Append(", "); + ret.Append(SourceVariables[i]); + } + ret.Append("]"); + return ret.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/ILASTTree.cs b/KoiVM/AST/ILAST/ILASTTree.cs new file mode 100644 index 0000000..4d2c4a5 --- /dev/null +++ b/KoiVM/AST/ILAST/ILASTTree.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace KoiVM.AST.ILAST { + public class ILASTTree : List { + public ILASTVariable[] StackRemains { get; set; } + + public override string ToString() { + var ret = new StringBuilder(); + foreach (var st in this) + ret.AppendLine(st.ToString()); + ret.AppendLine(); + ret.Append("["); + for (int i = 0; i < StackRemains.Length; i++) { + if (i != 0) + ret.Append(", "); + ret.Append(StackRemains[i]); + } + ret.AppendLine("]"); + return ret.ToString(); + } + + public void TraverseTree(Action visitFunc, T state) { + foreach (var st in this) { + if (st is ILASTExpression) + TraverseTreeInternal((ILASTExpression)st, visitFunc, state); + else if (st is ILASTAssignment) + TraverseTreeInternal(((ILASTAssignment)st).Value, visitFunc, state); + } + } + + void TraverseTreeInternal(ILASTExpression expr, Action visitFunc, T state) { + foreach (var arg in expr.Arguments) { + if (arg is ILASTExpression) + TraverseTreeInternal((ILASTExpression)arg, visitFunc, state); + } + visitFunc(expr, state); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/ILASTVariable.cs b/KoiVM/AST/ILAST/ILASTVariable.cs new file mode 100644 index 0000000..e5f4224 --- /dev/null +++ b/KoiVM/AST/ILAST/ILASTVariable.cs @@ -0,0 +1,12 @@ +using System; + +namespace KoiVM.AST.ILAST { + public class ILASTVariable : ASTVariable, IILASTNode { + ASTType? IILASTNode.Type { + get { return base.Type; } + } + + public ILASTVariableType VariableType { get; set; } + public object Annotation { get; set; } + } +} \ No newline at end of file diff --git a/KoiVM/AST/ILAST/ILASTVariableType.cs b/KoiVM/AST/ILAST/ILASTVariableType.cs new file mode 100644 index 0000000..01f5566 --- /dev/null +++ b/KoiVM/AST/ILAST/ILASTVariableType.cs @@ -0,0 +1,10 @@ +using System; + +namespace KoiVM.AST.ILAST { + public enum ILASTVariableType { + StackVar, + ExceptionVar, + FilterVar, + PhiVar + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IIROperand.cs b/KoiVM/AST/IR/IIROperand.cs new file mode 100644 index 0000000..25d2830 --- /dev/null +++ b/KoiVM/AST/IR/IIROperand.cs @@ -0,0 +1,7 @@ +using System; + +namespace KoiVM.AST.IR { + public interface IIROperand { + ASTType Type { get; } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRBlockTarget.cs b/KoiVM/AST/IR/IRBlockTarget.cs new file mode 100644 index 0000000..87a26fa --- /dev/null +++ b/KoiVM/AST/IR/IRBlockTarget.cs @@ -0,0 +1,20 @@ +using System; +using KoiVM.CFG; + +namespace KoiVM.AST.IR { + public class IRBlockTarget : IIROperand { + public IRBlockTarget(IBasicBlock target) { + Target = target; + } + + public IBasicBlock Target { get; set; } + + public ASTType Type { + get { return ASTType.Ptr; } + } + + public override string ToString() { + return string.Format("Block_{0:x2}", Target.Id); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRConstant.cs b/KoiVM/AST/IR/IRConstant.cs new file mode 100644 index 0000000..0fe1f37 --- /dev/null +++ b/KoiVM/AST/IR/IRConstant.cs @@ -0,0 +1,51 @@ +using System; + +namespace KoiVM.AST.IR { + public class IRConstant : ASTConstant, IIROperand { + ASTType IIROperand.Type { + get { return base.Type.Value; } + } + + public static IRConstant FromI4(int value) { + return new IRConstant { + Value = value, + Type = ASTType.I4 + }; + } + + public static IRConstant FromI8(long value) { + return new IRConstant { + Value = value, + Type = ASTType.I8 + }; + } + + public static IRConstant FromR4(float value) { + return new IRConstant { + Value = value, + Type = ASTType.R4 + }; + } + + public static IRConstant FromR8(double value) { + return new IRConstant { + Value = value, + Type = ASTType.R8 + }; + } + + public static IRConstant FromString(string value) { + return new IRConstant { + Value = value, + Type = ASTType.O + }; + } + + public static IRConstant Null() { + return new IRConstant { + Value = null, + Type = ASTType.O + }; + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRDataTarget.cs b/KoiVM/AST/IR/IRDataTarget.cs new file mode 100644 index 0000000..91dbb14 --- /dev/null +++ b/KoiVM/AST/IR/IRDataTarget.cs @@ -0,0 +1,21 @@ +using System; +using KoiVM.RT; + +namespace KoiVM.AST.IR { + public class IRDataTarget : IIROperand { + public IRDataTarget(BinaryChunk target) { + Target = target; + } + + public BinaryChunk Target { get; set; } + public string Name { get; set; } + + public ASTType Type { + get { return ASTType.Ptr; } + } + + public override string ToString() { + return Name; + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRInstrList.cs b/KoiVM/AST/IR/IRInstrList.cs new file mode 100644 index 0000000..790e493 --- /dev/null +++ b/KoiVM/AST/IR/IRInstrList.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace KoiVM.AST.IR { + public class IRInstrList : List { + public override string ToString() { + return string.Join(Environment.NewLine, this); + } + + public void VisitInstrs(VisitFunc visitFunc, T arg) { + for (int i = 0; i < Count; i++) + visitFunc(this, this[i], ref i, arg); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRInstruction.cs b/KoiVM/AST/IR/IRInstruction.cs new file mode 100644 index 0000000..32792d8 --- /dev/null +++ b/KoiVM/AST/IR/IRInstruction.cs @@ -0,0 +1,57 @@ +using System; +using System.Text; +using KoiVM.AST.ILAST; +using KoiVM.VMIR; + +namespace KoiVM.AST.IR { + public class IRInstruction : ASTNode { + public IRInstruction(IROpCode opCode) { + OpCode = opCode; + } + + public IRInstruction(IROpCode opCode, IIROperand op1) { + OpCode = opCode; + Operand1 = op1; + } + + public IRInstruction(IROpCode opCode, IIROperand op1, IIROperand op2) { + OpCode = opCode; + Operand1 = op1; + Operand2 = op2; + } + + public IRInstruction(IROpCode opCode, IIROperand op1, IIROperand op2, object annotation) { + OpCode = opCode; + Operand1 = op1; + Operand2 = op2; + Annotation = annotation; + } + + public IRInstruction(IROpCode opCode, IIROperand op1, IIROperand op2, IRInstruction origin) { + OpCode = opCode; + Operand1 = op1; + Operand2 = op2; + Annotation = origin.Annotation; + ILAST = origin.ILAST; + } + + public IROpCode OpCode { get; set; } + public IILASTStatement ILAST { get; set; } + public IIROperand Operand1 { get; set; } + public IIROperand Operand2 { get; set; } + public object Annotation { get; set; } + + public override string ToString() { + var ret = new StringBuilder(); + ret.AppendFormat("{0}", OpCode.ToString().PadLeft(16)); + if (Operand1 != null) { + ret.AppendFormat(" {0}", Operand1); + if (Operand2 != null) + ret.AppendFormat(", {0}", Operand2); + } + if (Annotation != null) + ret.AppendFormat(" ; {0}", Annotation); + return ret.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRJumpTable.cs b/KoiVM/AST/IR/IRJumpTable.cs new file mode 100644 index 0000000..66b39bf --- /dev/null +++ b/KoiVM/AST/IR/IRJumpTable.cs @@ -0,0 +1,20 @@ +using System; +using KoiVM.CFG; + +namespace KoiVM.AST.IR { + public class IRJumpTable : IIROperand { + public IRJumpTable(IBasicBlock[] targets) { + Targets = targets; + } + + public IBasicBlock[] Targets { get; set; } + + public ASTType Type { + get { return ASTType.Ptr; } + } + + public override string ToString() { + return string.Format("[..{0}..]", Targets.Length); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRMetaTarget.cs b/KoiVM/AST/IR/IRMetaTarget.cs new file mode 100644 index 0000000..0f29be1 --- /dev/null +++ b/KoiVM/AST/IR/IRMetaTarget.cs @@ -0,0 +1,20 @@ +using System; + +namespace KoiVM.AST.IR { + public class IRMetaTarget : IIROperand { + public IRMetaTarget(object mdItem) { + MetadataItem = mdItem; + } + + public object MetadataItem { get; set; } + public bool LateResolve { get; set; } + + public ASTType Type { + get { return ASTType.Ptr; } + } + + public override string ToString() { + return MetadataItem.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRPointer.cs b/KoiVM/AST/IR/IRPointer.cs new file mode 100644 index 0000000..db0f54a --- /dev/null +++ b/KoiVM/AST/IR/IRPointer.cs @@ -0,0 +1,21 @@ +using System; + +namespace KoiVM.AST.IR { + public class IRPointer : IIROperand { + public IRRegister Register { get; set; } + public int Offset { get; set; } + + public IRVariable SourceVariable { get; set; } + public ASTType Type { get; set; } + + public override string ToString() { + string prefix = Type.ToString(); + string offsetStr = ""; + if (Offset > 0) + offsetStr = string.Format(" + {0:x}h", Offset); + else if (Offset < 0) + offsetStr = string.Format(" - {0:x}h", -Offset); + return string.Format("{0}:[{1}{2}]", prefix, Register, offsetStr); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRRegister.cs b/KoiVM/AST/IR/IRRegister.cs new file mode 100644 index 0000000..444fbe8 --- /dev/null +++ b/KoiVM/AST/IR/IRRegister.cs @@ -0,0 +1,33 @@ +using System; +using KoiVM.VM; + +namespace KoiVM.AST.IR { + public class IRRegister : IIROperand { + public IRRegister(VMRegisters reg) { + Register = reg; + Type = ASTType.Ptr; + } + + public IRRegister(VMRegisters reg, ASTType type) { + Register = reg; + Type = type; + } + + public VMRegisters Register { get; set; } + public IRVariable SourceVariable { get; set; } + public ASTType Type { get; set; } + + public override string ToString() { + return Register.ToString(); + } + + public static readonly IRRegister BP = new IRRegister(VMRegisters.BP, ASTType.I4); + public static readonly IRRegister SP = new IRRegister(VMRegisters.SP, ASTType.I4); + public static readonly IRRegister IP = new IRRegister(VMRegisters.IP); + public static readonly IRRegister FL = new IRRegister(VMRegisters.FL, ASTType.I4); + public static readonly IRRegister K1 = new IRRegister(VMRegisters.K1, ASTType.I4); + public static readonly IRRegister K2 = new IRRegister(VMRegisters.K2, ASTType.I4); + public static readonly IRRegister M1 = new IRRegister(VMRegisters.M1, ASTType.I4); + public static readonly IRRegister M2 = new IRRegister(VMRegisters.M2, ASTType.I4); + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRVariable.cs b/KoiVM/AST/IR/IRVariable.cs new file mode 100644 index 0000000..a5bf02f --- /dev/null +++ b/KoiVM/AST/IR/IRVariable.cs @@ -0,0 +1,15 @@ +using System; +using dnlib.DotNet; + +namespace KoiVM.AST.IR { + public class IRVariable : ASTVariable, IIROperand { + public IRVariableType VariableType { get; set; } + public TypeSig RawType { get; set; } + public int Id { get; set; } + public object Annotation { get; set; } + + public override string ToString() { + return string.Format("{0}:{1}", Name, Type); + } + } +} \ No newline at end of file diff --git a/KoiVM/AST/IR/IRVariableType.cs b/KoiVM/AST/IR/IRVariableType.cs new file mode 100644 index 0000000..ca12f16 --- /dev/null +++ b/KoiVM/AST/IR/IRVariableType.cs @@ -0,0 +1,10 @@ +using System; + +namespace KoiVM.AST.IR { + public enum IRVariableType { + VirtualRegister, + Local, + Argument, + ExceptionObj + } +} \ No newline at end of file diff --git a/KoiVM/AST/InstrAnnotation.cs b/KoiVM/AST/InstrAnnotation.cs new file mode 100644 index 0000000..5c933b5 --- /dev/null +++ b/KoiVM/AST/InstrAnnotation.cs @@ -0,0 +1,56 @@ +using System; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.IR; + +namespace KoiVM.AST { + public class InstrAnnotation { + public InstrAnnotation(string name) { + Name = name; + } + + public string Name { get; private set; } + + public override string ToString() { + return Name; + } + + public static readonly InstrAnnotation JUMP = new InstrAnnotation("JUMP"); + } + + public class InstrCallInfo : InstrAnnotation { + public InstrCallInfo(string name) + : base(name) { + } + + public ITypeDefOrRef ConstrainType { get; set; } + public IMethod Method { get; set; } + public IIROperand[] Arguments { get; set; } + public IIROperand ReturnValue { get; set; } + public IRRegister ReturnRegister { get; set; } + public IRPointer ReturnSlot { get; set; } + public bool IsECall { get; set; } + + public override string ToString() { + return base.ToString() + " " + Method; + } + } + + public class PointerInfo : InstrAnnotation { + public PointerInfo(string name, ITypeDefOrRef ptrType) + : base(name) { + PointerType = ptrType; + } + + public ITypeDefOrRef PointerType { get; set; } + } + + public class EHInfo : InstrAnnotation { + public EHInfo(ExceptionHandler eh) + : base("EH_" + eh.GetHashCode()) { + ExceptionHandler = eh; + } + + public ExceptionHandler ExceptionHandler { get; set; } + } +} \ No newline at end of file diff --git a/KoiVM/AST/TypeInference.cs b/KoiVM/AST/TypeInference.cs new file mode 100644 index 0000000..4793c74 --- /dev/null +++ b/KoiVM/AST/TypeInference.cs @@ -0,0 +1,80 @@ +using System; +using dnlib.DotNet; + +namespace KoiVM.AST { + public static class TypeInference { + public static ASTType ToASTType(TypeSig type) { + switch (type.ElementType) { + case ElementType.I1: + case ElementType.I2: + case ElementType.I4: + case ElementType.U1: + case ElementType.U2: + case ElementType.U4: + case ElementType.Boolean: + case ElementType.Char: + return ASTType.I4; + + case ElementType.I8: + case ElementType.U8: + return ASTType.I8; + + case ElementType.R4: + return ASTType.R4; + + case ElementType.R8: + return ASTType.R8; + + case ElementType.I: + case ElementType.U: + case ElementType.FnPtr: + case ElementType.Ptr: + return ASTType.Ptr; + + case ElementType.ByRef: + return ASTType.ByRef; + + case ElementType.ValueType: + var typeDef = type.ScopeType.ResolveTypeDef(); + if (typeDef != null && typeDef.IsEnum) + return ToASTType(typeDef.GetEnumUnderlyingType()); + return ASTType.O; + + default: + return ASTType.O; + } + } + + public static ASTType InferBinaryOp(ASTType a, ASTType b) { + if (a == b && (a == ASTType.I4 || a == ASTType.I8 || a == ASTType.R4 || a == ASTType.R8)) + return a; + // Here we sometimes uses I8 for Ptr + if ((a == ASTType.Ptr && (b == ASTType.I4 || b == ASTType.I8 || b == ASTType.Ptr)) || + (b == ASTType.Ptr && (a == ASTType.I4 || b == ASTType.I4 || a == ASTType.Ptr))) + return ASTType.Ptr; + if ((a == ASTType.ByRef && (b == ASTType.I4 || b == ASTType.Ptr)) || + (b == ASTType.ByRef && (a == ASTType.I4 || a == ASTType.Ptr))) + return ASTType.ByRef; + if (a == ASTType.ByRef && b == ASTType.ByRef) + return ASTType.Ptr; + throw new ArgumentException("Invalid Binary Op Operand Types."); + } + + public static ASTType InferIntegerOp(ASTType a, ASTType b) { + if (a == b && (a == ASTType.I4 || a == ASTType.I8 || a == ASTType.R4 || a == ASTType.R8)) + return a; + // Here we sometimes uses I8 for Ptr + if ((a == ASTType.Ptr && (b == ASTType.I4 || b == ASTType.I8 || b == ASTType.Ptr)) || + (b == ASTType.Ptr && (a == ASTType.I4 || b == ASTType.I8 || a == ASTType.Ptr))) + return ASTType.Ptr; + throw new ArgumentException("Invalid Integer Op Operand Types."); + } + + public static ASTType InferShiftOp(ASTType a, ASTType b) { + if ((b == ASTType.Ptr || b == ASTType.I4) && + (a == ASTType.I4 || b == ASTType.I4 || a == ASTType.Ptr)) + return a; + throw new ArgumentException("Invalid Shift Op Operand Types."); + } + } +} \ No newline at end of file diff --git a/KoiVM/CFG/BasicBlock.cs b/KoiVM/CFG/BasicBlock.cs new file mode 100644 index 0000000..3ee2881 --- /dev/null +++ b/KoiVM/CFG/BasicBlock.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; + +namespace KoiVM.CFG { + public class BasicBlock : IBasicBlock { + public BasicBlock(int id, TContent content) { + Id = id; + Content = content; + Sources = new List>(); + Targets = new List>(); + } + + public int Id { get; set; } + public TContent Content { get; set; } + public BlockFlags Flags { get; set; } + public IList> Sources { get; private set; } + public IList> Targets { get; private set; } + + object IBasicBlock.Content { + get { return Content; } + } + + IEnumerable IBasicBlock.Sources { + get { return Sources; } + } + + IEnumerable IBasicBlock.Targets { + get { return Targets; } + } + + public void LinkTo(BasicBlock target) { + Targets.Add(target); + target.Sources.Add(this); + } + + public override string ToString() { + return string.Format("Block_{0:x2}:{1}{2}", Id, Environment.NewLine, Content); + } + } +} \ No newline at end of file diff --git a/KoiVM/CFG/BlockFlags.cs b/KoiVM/CFG/BlockFlags.cs new file mode 100644 index 0000000..4cd3476 --- /dev/null +++ b/KoiVM/CFG/BlockFlags.cs @@ -0,0 +1,10 @@ +using System; + +namespace KoiVM.CFG { + [Flags] + public enum BlockFlags { + Normal = 0, + ExitEHLeave = 1, + ExitEHReturn = 2 + } +} \ No newline at end of file diff --git a/KoiVM/CFG/BlockParser.cs b/KoiVM/CFG/BlockParser.cs new file mode 100644 index 0000000..5b32678 --- /dev/null +++ b/KoiVM/CFG/BlockParser.cs @@ -0,0 +1,261 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Pdb; + +namespace KoiVM.CFG { + public class BlockParser { + public static ScopeBlock Parse(MethodDef method, CilBody body) { + body.SimplifyMacros(method.Parameters); + ExpandSequencePoints(body); + HashSet headers, entries; + FindHeaders(body, out headers, out entries); + var blocks = SplitBlocks(body, headers, entries); + LinkBlocks(blocks); + return AssignScopes(body, blocks); + } + + static void ExpandSequencePoints(CilBody body) { + SequencePoint current = null; + foreach (var instr in body.Instructions) { + if (instr.SequencePoint != null) + current = instr.SequencePoint; + else + instr.SequencePoint = current; + } + } + + static void FindHeaders(CilBody body, out HashSet headers, out HashSet entries) { + headers = new HashSet(); + entries = new HashSet(); + + foreach (var eh in body.ExceptionHandlers) { + headers.Add(eh.TryStart); + if (eh.TryEnd != null) + headers.Add(eh.TryEnd); + + headers.Add(eh.HandlerStart); + entries.Add(eh.HandlerStart); + if (eh.HandlerEnd != null) + headers.Add(eh.HandlerEnd); + + if (eh.FilterStart != null) { + headers.Add(eh.FilterStart); + entries.Add(eh.FilterStart); + } + } + + var instrs = body.Instructions; + for (int i = 0; i < instrs.Count; i++) { + var instr = instrs[i]; + + if (instr.Operand is Instruction) { + headers.Add((Instruction)instr.Operand); + if (i + 1 < body.Instructions.Count) + headers.Add(body.Instructions[i + 1]); + } + else if (instr.Operand is Instruction[]) { + foreach (Instruction target in (Instruction[])instr.Operand) + headers.Add(target); + if (i + 1 < body.Instructions.Count) + headers.Add(body.Instructions[i + 1]); + } + else if ((instr.OpCode.FlowControl == FlowControl.Throw || instr.OpCode.FlowControl == FlowControl.Return) && + i + 1 < body.Instructions.Count) { + headers.Add(body.Instructions[i + 1]); + } + } + if (instrs.Count > 0) { + headers.Add(instrs[0]); + entries.Add(instrs[0]); + } + } + + static List> SplitBlocks(CilBody body, HashSet headers, + HashSet entries) { + int nextBlockId = 0; + int currentBlockId = -1; + Instruction currentBlockHdr = null; + var blocks = new List>(); + + var instrList = new CILInstrList(); + for (int i = 0; i < body.Instructions.Count; i++) { + Instruction instr = body.Instructions[i]; + if (headers.Contains(instr)) { + if (currentBlockHdr != null) { + Instruction footer = body.Instructions[i - 1]; + + Debug.Assert(instrList.Count > 0); + blocks.Add(new BasicBlock(currentBlockId, instrList)); + instrList = new CILInstrList(); + } + + currentBlockId = nextBlockId++; + currentBlockHdr = instr; + } + + instrList.Add(instr); + } + if (blocks.Count == 0 || blocks[blocks.Count - 1].Id != currentBlockId) { + Instruction footer = body.Instructions[body.Instructions.Count - 1]; + + Debug.Assert(instrList.Count > 0); + blocks.Add(new BasicBlock(currentBlockId, instrList)); + } + return blocks; + } + + static void LinkBlocks(List> blocks) { + var instrMap = blocks + .SelectMany(block => block.Content.Select(instr => new { Instr = instr, Block = block })) + .ToDictionary(instr => instr.Instr, instr => instr.Block); + + foreach (var block in blocks) + foreach (var instr in block.Content) { + if (instr.Operand is Instruction) { + var dstBlock = instrMap[(Instruction)instr.Operand]; + dstBlock.Sources.Add(block); + block.Targets.Add(dstBlock); + } + else if (instr.Operand is Instruction[]) { + foreach (Instruction target in (Instruction[])instr.Operand) { + var dstBlock = instrMap[target]; + dstBlock.Sources.Add(block); + block.Targets.Add(dstBlock); + } + } + } + for (int i = 0; i < blocks.Count; i++) { + var footer = blocks[i].Content.Last(); + if (footer.OpCode.FlowControl != FlowControl.Branch && + footer.OpCode.FlowControl != FlowControl.Return && + footer.OpCode.FlowControl != FlowControl.Throw && + i + 1 < blocks.Count) { + var src = blocks[i]; + var dst = blocks[i + 1]; + if (!src.Targets.Contains(dst)) { + src.Targets.Add(dst); + dst.Sources.Add(src); + src.Content.Add(Instruction.Create(OpCodes.Br, dst.Content[0])); + } + } + } + } + + static ScopeBlock AssignScopes(CilBody body, List> blocks) { + var ehScopes = new Dictionary>(); + foreach (var eh in body.ExceptionHandlers) { + var tryBlock = new ScopeBlock(ScopeType.Try, eh); + var handlerBlock = new ScopeBlock(ScopeType.Handler, eh); + + if (eh.FilterStart != null) { + var filterBlock = new ScopeBlock(ScopeType.Filter, eh); + ehScopes[eh] = Tuple.Create(tryBlock, handlerBlock, filterBlock); + } + else + ehScopes[eh] = Tuple.Create(tryBlock, handlerBlock, (ScopeBlock)null); + } + + var root = new ScopeBlock(); + var scopeStack = new Stack(); + scopeStack.Push(root); + + foreach (var block in blocks) { + var header = block.Content[0]; + + foreach (ExceptionHandler eh in body.ExceptionHandlers) { + Tuple ehScope = ehScopes[eh]; + + if (header == eh.TryEnd) { + var pop = scopeStack.Pop(); + Debug.Assert(pop == ehScope.Item1); + } + + if (header == eh.HandlerEnd) { + var pop = scopeStack.Pop(); + Debug.Assert(pop == ehScope.Item2); + } + + if (eh.FilterStart != null && header == eh.HandlerStart) { + // Filter must precede handler immediately + Debug.Assert(scopeStack.Peek().Type == ScopeType.Filter); + var pop = scopeStack.Pop(); + Debug.Assert(pop == ehScope.Item3); + } + } + foreach (ExceptionHandler eh in body.ExceptionHandlers.Reverse()) { + Tuple ehScope = ehScopes[eh]; + ScopeBlock parent = scopeStack.Count > 0 ? scopeStack.Peek() : null; + + if (header == eh.TryStart) { + if (parent != null) + AddScopeBlock(parent, ehScope.Item1); + scopeStack.Push(ehScope.Item1); + } + + if (header == eh.HandlerStart) { + if (parent != null) + AddScopeBlock(parent, ehScope.Item2); + scopeStack.Push(ehScope.Item2); + } + + if (header == eh.FilterStart) { + if (parent != null) + AddScopeBlock(parent, ehScope.Item3); + scopeStack.Push(ehScope.Item3); + } + } + + ScopeBlock scope = scopeStack.Peek(); + AddBasicBlock(scope, block); + } + foreach (ExceptionHandler eh in body.ExceptionHandlers) { + if (eh.TryEnd == null) { + var pop = scopeStack.Pop(); + Debug.Assert(pop == ehScopes[eh].Item1); + } + if (eh.HandlerEnd == null) { + var pop = scopeStack.Pop(); + Debug.Assert(pop == ehScopes[eh].Item2); + } + } + Debug.Assert(scopeStack.Count == 1); + Validate(root); + + return root; + } + + static void Validate(ScopeBlock scope) { + scope.Validate(); + foreach (var child in scope.Children) + Validate(child); + } + + static void AddScopeBlock(ScopeBlock block, ScopeBlock child) { + if (block.Content.Count > 0) { + var newScope = new ScopeBlock(); + foreach (var instrBlock in block.Content) + newScope.Content.Add(instrBlock); + block.Content.Clear(); + block.Children.Add(newScope); + } + block.Children.Add(child); + } + + static void AddBasicBlock(ScopeBlock block, BasicBlock child) { + if (block.Children.Count > 0) { + var last = block.Children.Last(); + if (last.Type != ScopeType.None) { + last = new ScopeBlock(); + block.Children.Add(last); + } + block = last; + } + Debug.Assert(block.Children.Count == 0); + block.Content.Add(child); + } + } +} \ No newline at end of file diff --git a/KoiVM/CFG/CILInstrList.cs b/KoiVM/CFG/CILInstrList.cs new file mode 100644 index 0000000..b20d976 --- /dev/null +++ b/KoiVM/CFG/CILInstrList.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet.Emit; + +namespace KoiVM.CFG { + public class CILInstrList : List { + public override string ToString() { + return string.Join(Environment.NewLine, this); + } + } +} \ No newline at end of file diff --git a/KoiVM/CFG/IBasicBlock.cs b/KoiVM/CFG/IBasicBlock.cs new file mode 100644 index 0000000..ef68cd8 --- /dev/null +++ b/KoiVM/CFG/IBasicBlock.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace KoiVM.CFG { + public interface IBasicBlock { + int Id { get; } + object Content { get; } + BlockFlags Flags { get; set; } + IEnumerable Sources { get; } + IEnumerable Targets { get; } + } +} \ No newline at end of file diff --git a/KoiVM/CFG/ScopeBlock.cs b/KoiVM/CFG/ScopeBlock.cs new file mode 100644 index 0000000..aa9614d --- /dev/null +++ b/KoiVM/CFG/ScopeBlock.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using dnlib.DotNet.Emit; + +namespace KoiVM.CFG { + public class ScopeBlock { + public ScopeBlock() { + Type = ScopeType.None; + ExceptionHandler = null; + Children = new List(); + Content = new List(); + } + + public ScopeBlock(ScopeType type, ExceptionHandler eh) { + if (type == ScopeType.None) + throw new ArgumentException("type"); + Type = type; + ExceptionHandler = eh; + Children = new List(); + Content = new List(); + } + + public ScopeType Type { get; private set; } + public ExceptionHandler ExceptionHandler { get; private set; } + public IList Children { get; private set; } + public IList Content { get; private set; } + + public IEnumerable GetBasicBlocks() { + Validate(); + if (Content.Count > 0) + return Content; + return Children.SelectMany(child => child.GetBasicBlocks()); + } + + public Dictionary, BasicBlock> UpdateBasicBlocks( + Func, TNew> updateFunc) { + return UpdateBasicBlocks(updateFunc, (id, content) => new BasicBlock(id, content)); + } + + public Dictionary, BasicBlock> UpdateBasicBlocks( + Func, TNew> updateFunc, + Func> factoryFunc) { + var blockMap = new Dictionary, BasicBlock>(); + UpdateBasicBlocksInternal(updateFunc, blockMap, factoryFunc); + foreach (var blockPair in blockMap) { + foreach (var src in blockPair.Key.Sources) + blockPair.Value.Sources.Add(blockMap[src]); + foreach (var dst in blockPair.Key.Targets) + blockPair.Value.Targets.Add(blockMap[dst]); + } + return blockMap; + } + + void UpdateBasicBlocksInternal(Func, TNew> updateFunc, + Dictionary, BasicBlock> blockMap, + Func> factoryFunc) { + Validate(); + if (Content.Count > 0) { + for (int i = 0; i < Content.Count; i++) { + var oldBlock = (BasicBlock)Content[i]; + var newContent = updateFunc(oldBlock); + var newBlock = factoryFunc(oldBlock.Id, newContent); + newBlock.Flags = oldBlock.Flags; + Content[i] = newBlock; + blockMap[oldBlock] = newBlock; + } + } + else { + foreach (var child in Children) + child.UpdateBasicBlocksInternal(updateFunc, blockMap, factoryFunc); + } + } + + public void ProcessBasicBlocks(Action> processFunc) { + Validate(); + if (Content.Count > 0) { + foreach (var child in Content) + processFunc((BasicBlock)child); + } + else { + foreach (var child in Children) + child.ProcessBasicBlocks(processFunc); + } + } + + public void Validate() { + if (Children.Count != 0 && Content.Count != 0) + throw new InvalidOperationException("Children and Content cannot be set at the same time."); + } + + public ScopeBlock[] SearchBlock(IBasicBlock target) { + var scopeStack = new Stack(); + SearchBlockInternal(this, target, scopeStack); + return scopeStack.Reverse().ToArray(); + } + + static bool SearchBlockInternal(ScopeBlock scope, IBasicBlock target, Stack scopeStack) { + if (scope.Content.Count > 0) { + if (scope.Content.Contains(target)) { + scopeStack.Push(scope); + return true; + } + return false; + } + scopeStack.Push(scope); + foreach (var child in scope.Children) { + if (SearchBlockInternal(child, target, scopeStack)) + return true; + } + scopeStack.Pop(); + return false; + } + + + static string ToString(ExceptionHandler eh) { + return string.Format("{0:x8}:{1}", eh.GetHashCode(), eh.HandlerType); + } + + public override string ToString() { + var ret = new StringBuilder(); + if (Type == ScopeType.Try) + ret.AppendLine("try @ " + ToString(ExceptionHandler) + " {"); + else if (Type == ScopeType.Handler) + ret.AppendLine("handler @ " + ToString(ExceptionHandler) + " {"); + else if (Type == ScopeType.Filter) + ret.AppendLine("filter @ " + ToString(ExceptionHandler) + " {"); + else + ret.AppendLine("{"); + if (Children.Count > 0) { + foreach (var child in Children) + ret.AppendLine(child.ToString()); + } + else { + foreach (var child in Content) + ret.AppendLine(child.ToString()); + } + ret.AppendLine("}"); + return ret.ToString(); + } + } +} \ No newline at end of file diff --git a/KoiVM/CFG/ScopeType.cs b/KoiVM/CFG/ScopeType.cs new file mode 100644 index 0000000..4c14965 --- /dev/null +++ b/KoiVM/CFG/ScopeType.cs @@ -0,0 +1,10 @@ +using System; + +namespace KoiVM.CFG { + public enum ScopeType { + None, + Try, + Filter, + Handler + } +} \ No newline at end of file diff --git a/KoiVM/GenericInstantiation.cs b/KoiVM/GenericInstantiation.cs new file mode 100644 index 0000000..4ad5e06 --- /dev/null +++ b/KoiVM/GenericInstantiation.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace KoiVM { + public class GenericInstantiation { + readonly Dictionary instantiations = + new Dictionary(MethodEqualityComparer.CompareDeclaringTypes); + + public event Func ShouldInstantiate; + + public void EnsureInstantiation(MethodDef method, Action onInstantiated) { + foreach (var instr in method.Body.Instructions) { + if (instr.Operand is MethodSpec) { + var spec = (MethodSpec)instr.Operand; + if (ShouldInstantiate != null && !ShouldInstantiate(spec)) + continue; + + MethodDef instantiation; + if (!Instantiate(spec, out instantiation)) + onInstantiated(spec, instantiation); + instr.Operand = instantiation; + } + } + } + + public bool Instantiate(MethodSpec methodSpec, out MethodDef def) { + if (instantiations.TryGetValue(methodSpec, out def)) + return true; + + var genericArguments = new GenericArguments(); + genericArguments.PushMethodArgs(methodSpec.GenericInstMethodSig.GenericArguments); + var originDef = methodSpec.Method.ResolveMethodDefThrow(); + + var newSig = ResolveMethod(originDef.MethodSig, genericArguments); + newSig.Generic = false; + newSig.GenParamCount = 0; + + string newName = originDef.Name; + foreach (var typeArg in methodSpec.GenericInstMethodSig.GenericArguments) + newName += ";" + typeArg.TypeName; + + def = new MethodDefUser(newName, newSig, originDef.ImplAttributes, originDef.Attributes); + var thisParam = originDef.HasThis ? originDef.Parameters[0].Type : null; + def.DeclaringType2 = originDef.DeclaringType2; + if (thisParam != null) { + def.Parameters[0].Type = thisParam; + } + + foreach (var declSec in originDef.DeclSecurities) + def.DeclSecurities.Add(declSec); + def.ImplMap = originDef.ImplMap; + foreach (var ov in originDef.Overrides) + def.Overrides.Add(ov); + + def.Body = new CilBody(); + def.Body.InitLocals = originDef.Body.InitLocals; + def.Body.MaxStack = originDef.Body.MaxStack; + foreach (var variable in originDef.Body.Variables) { + var newVar = new Local(variable.Type); + def.Body.Variables.Add(newVar); + } + + var instrMap = new Dictionary(); + foreach (var instr in originDef.Body.Instructions) { + var newInstr = new Instruction(instr.OpCode, ResolveOperand(instr.Operand, genericArguments)); + def.Body.Instructions.Add(newInstr); + instrMap[instr] = newInstr; + } + foreach (var instr in def.Body.Instructions) { + if (instr.Operand is Instruction) + instr.Operand = instrMap[(Instruction)instr.Operand]; + else if (instr.Operand is Instruction[]) { + var targets = (Instruction[])((Instruction[])instr.Operand).Clone(); + for (int i = 0; i < targets.Length; i++) + targets[i] = instrMap[targets[i]]; + instr.Operand = targets; + } + } + def.Body.UpdateInstructionOffsets(); + + foreach (var eh in originDef.Body.ExceptionHandlers) { + var newEH = new ExceptionHandler(eh.HandlerType); + newEH.TryStart = instrMap[eh.TryStart]; + newEH.HandlerStart = instrMap[eh.HandlerStart]; + if (eh.TryEnd != null) + newEH.TryEnd = instrMap[eh.TryEnd]; + if (eh.HandlerEnd != null) + newEH.HandlerEnd = instrMap[eh.HandlerEnd]; + if (eh.CatchType != null) + newEH.CatchType = genericArguments.Resolve(newEH.CatchType.ToTypeSig()).ToTypeDefOrRef(); + else if (eh.FilterStart != null) + newEH.FilterStart = instrMap[eh.FilterStart]; + + def.Body.ExceptionHandlers.Add(newEH); + } + + instantiations[methodSpec] = def; + return false; + } + + FieldSig ResolveField(FieldSig sig, GenericArguments genericArgs) { + var newSig = sig.Clone(); + newSig.Type = genericArgs.ResolveType(newSig.Type); + return newSig; + } + + GenericInstMethodSig ResolveInst(GenericInstMethodSig sig, GenericArguments genericArgs) { + var newSig = sig.Clone(); + for (int i = 0; i < newSig.GenericArguments.Count; i++) + newSig.GenericArguments[i] = genericArgs.ResolveType(newSig.GenericArguments[i]); + return newSig; + } + + MethodSig ResolveMethod(MethodSig sig, GenericArguments genericArgs) { + var newSig = sig.Clone(); + + for (int i = 0; i < newSig.Params.Count; i++) + newSig.Params[i] = genericArgs.ResolveType(newSig.Params[i]); + + if (newSig.ParamsAfterSentinel != null) { + for (int i = 0; i < newSig.ParamsAfterSentinel.Count; i++) + newSig.ParamsAfterSentinel[i] = genericArgs.ResolveType(newSig.ParamsAfterSentinel[i]); + } + + newSig.RetType = genericArgs.ResolveType(newSig.RetType); + return newSig; + } + + object ResolveOperand(object operand, GenericArguments genericArgs) { + if (operand is MemberRef) { + var memberRef = (MemberRef)operand; + if (memberRef.IsFieldRef) { + var field = ResolveField(memberRef.FieldSig, genericArgs); + memberRef = new MemberRefUser(memberRef.Module, memberRef.Name, field, memberRef.Class); + } + else { + var method = ResolveMethod(memberRef.MethodSig, genericArgs); + memberRef = new MemberRefUser(memberRef.Module, memberRef.Name, method, memberRef.Class); + } + return memberRef; + } + if (operand is TypeSpec) { + var sig = ((TypeSpec)operand).TypeSig; + return genericArgs.ResolveType(sig).ToTypeDefOrRef(); + } + if (operand is MethodSpec) { + var spec = (MethodSpec)operand; + spec = new MethodSpecUser(spec.Method, ResolveInst(spec.GenericInstMethodSig, genericArgs)); + return spec; + } + return operand; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/ILASTBuilder.cs b/KoiVM/ILAST/ILASTBuilder.cs new file mode 100644 index 0000000..156def3 --- /dev/null +++ b/KoiVM/ILAST/ILASTBuilder.cs @@ -0,0 +1,267 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; +using KoiVM.CFG; + +namespace KoiVM.ILAST { + using CILBlock = BasicBlock; + + public class ILASTBuilder { + MethodDef method; + CilBody body; + ScopeBlock scope; + IList basicBlocks; + Dictionary blockHeaders; + Dictionary blockStates; + List instrReferences; + + ILASTBuilder(MethodDef method, CilBody body, ScopeBlock scope) { + this.method = method; + this.body = body; + this.scope = scope; + + basicBlocks = scope.GetBasicBlocks().Cast().ToList(); + blockHeaders = basicBlocks.ToDictionary(block => block.Content[0], block => block); + blockStates = new Dictionary(); + instrReferences = new List(); + Debug.Assert(basicBlocks.Count > 0); + } + + struct BlockState { + public ILASTVariable[] BeginStack; + public ILASTTree ASTTree; + } + + public static void BuildAST(MethodDef method, CilBody body, ScopeBlock scope) { + var builder = new ILASTBuilder(method, body, scope); + var basicBlocks = scope.GetBasicBlocks().Cast().ToList(); + builder.BuildAST(); + } + + void BuildAST() { + BuildASTInternal(); + BuildPhiNodes(); + var blockMap = scope.UpdateBasicBlocks((CILBlock block) => blockStates[block].ASTTree); + var newBlockMap = blockHeaders.ToDictionary(pair => pair.Key, pair => blockMap[pair.Value]); + foreach (var expr in instrReferences) { + if (expr.Operand is Instruction) + expr.Operand = newBlockMap[(Instruction)expr.Operand]; + else + expr.Operand = ((Instruction[])expr.Operand).Select(instr => (IBasicBlock)newBlockMap[instr]).ToArray(); + } + } + + void BuildASTInternal() { + var workList = new Stack(); + PopulateBeginStates(workList); + + var visited = new HashSet(); + while (workList.Count > 0) { + var block = workList.Pop(); + if (visited.Contains(block)) + continue; + visited.Add(block); + + Debug.Assert(blockStates.ContainsKey(block)); + var state = blockStates[block]; + Debug.Assert(state.ASTTree == null); + + var tree = BuildAST(block.Content, state.BeginStack); + var remains = tree.StackRemains; + state.ASTTree = tree; + blockStates[block] = state; + + // Propagate stack states + foreach (var successor in block.Targets) { + BlockState successorState; + if (!blockStates.TryGetValue(successor, out successorState)) { + var blockVars = new ILASTVariable[remains.Length]; + for (int i = 0; i < blockVars.Length; i++) { + blockVars[i] = new ILASTVariable { + Name = string.Format("ph_{0:x2}_{1:x2}", successor.Id, i), + Type = remains[i].Type, + VariableType = ILASTVariableType.PhiVar + }; + } + successorState = new BlockState { + BeginStack = blockVars + }; + blockStates[successor] = successorState; + } + else { + if (successorState.BeginStack.Length != remains.Length) + throw new InvalidProgramException("Inconsistent stack depth."); + } + workList.Push(successor); + } + } + } + + void PopulateBeginStates(Stack workList) { + for (int i = 0; i < body.ExceptionHandlers.Count; i++) { + var eh = body.ExceptionHandlers[i]; + blockStates[blockHeaders[eh.TryStart]] = new BlockState { + BeginStack = new ILASTVariable[0] + }; + + var handlerBlock = blockHeaders[eh.HandlerStart]; + workList.Push(handlerBlock); + if (eh.HandlerType == ExceptionHandlerType.Fault || + eh.HandlerType == ExceptionHandlerType.Finally) { + blockStates[handlerBlock] = new BlockState { + BeginStack = new ILASTVariable[0] + }; + } + else { + var type = TypeInference.ToASTType(eh.CatchType.ToTypeSig()); + // Do not process overlapped handler blocks twice + if (!blockStates.ContainsKey(handlerBlock)) { + var exVar = new ILASTVariable { + Name = string.Format("ex_{0:x2}", i), + Type = type, + VariableType = ILASTVariableType.ExceptionVar, + Annotation = eh + }; + blockStates[handlerBlock] = new BlockState { + BeginStack = new[] { exVar } + }; + } + else + Debug.Assert(blockStates[handlerBlock].BeginStack.Length == 1); + + if (eh.FilterStart != null) { + var filterVar = new ILASTVariable { + Name = string.Format("ef_{0:x2}", i), + Type = type, + VariableType = ILASTVariableType.FilterVar, + Annotation = eh + }; + var filterBlock = blockHeaders[eh.FilterStart]; + workList.Push(filterBlock); + blockStates[filterBlock] = new BlockState { + BeginStack = new[] { filterVar } + }; + } + } + } + blockStates[basicBlocks[0]] = new BlockState { + BeginStack = new ILASTVariable[0] + }; + workList.Push(basicBlocks[0]); + foreach (var block in basicBlocks) { + if (block.Sources.Count > 0) + continue; + if (workList.Contains(block)) + continue; + blockStates[block] = new BlockState { + BeginStack = new ILASTVariable[0] + }; + workList.Push(block); + } + } + + void BuildPhiNodes() { + foreach (var statePair in blockStates) { + var block = statePair.Key; + var state = statePair.Value; + // source count = 0 => eh handlers begin state, having ex object + if (block.Sources.Count == 0 && state.BeginStack.Length > 0) { + Debug.Assert(state.BeginStack.Length == 1); + var phi = new ILASTPhi { + Variable = state.BeginStack[0], + SourceVariables = new[] { state.BeginStack[0] } + }; + state.ASTTree.Insert(0, phi); + } + else if (state.BeginStack.Length > 0) { + for (int varIndex = 0; varIndex < state.BeginStack.Length; varIndex++) { + var phi = new ILASTPhi { Variable = state.BeginStack[varIndex] }; + phi.SourceVariables = new ILASTVariable[block.Sources.Count]; + for (int i = 0; i < phi.SourceVariables.Length; i++) { + phi.SourceVariables[i] = blockStates[block.Sources[i]].ASTTree.StackRemains[varIndex]; + } + // reverse phi nodes => pop in correct order + state.ASTTree.Insert(0, phi); + } + } + } + } + + ILASTTree BuildAST(CILInstrList instrs, ILASTVariable[] beginStack) { + var tree = new ILASTTree(); + var evalStack = new Stack(beginStack); + Func popArgs = numArgs => { + var args = new IILASTNode[numArgs]; + for (int i = numArgs - 1; i >= 0; i--) + args[i] = evalStack.Pop(); + return args; + }; + + List prefixes = new List(); + foreach (var instr in instrs) { + if (instr.OpCode.OpCodeType == OpCodeType.Prefix) { + prefixes.Add(instr); + continue; + } + + int pushes, pops; + ILASTExpression expr; + if (instr.OpCode.Code == Code.Dup) { + pushes = pops = 1; + + var arg = evalStack.Peek(); + expr = new ILASTExpression { + ILCode = Code.Dup, + Operand = null, + Arguments = new IILASTNode[] { arg } + }; + } + else { + instr.CalculateStackUsage(method.ReturnType.ElementType != ElementType.Void, out pushes, out pops); + Debug.Assert(pushes == 0 || pushes == 1); + + if (pops == -1) { + evalStack.Clear(); + pops = 0; + } + + expr = new ILASTExpression { + ILCode = instr.OpCode.Code, + Operand = instr.Operand, + Arguments = popArgs(pops) + }; + if (expr.Operand is Instruction || expr.Operand is Instruction[]) + instrReferences.Add(expr); + } + expr.CILInstr = instr; + if (prefixes.Count > 0) { + expr.Prefixes = prefixes.ToArray(); + prefixes.Clear(); + } + + if (pushes == 1) { + var variable = new ILASTVariable { + Name = string.Format("s_{0:x4}", instr.Offset), + VariableType = ILASTVariableType.StackVar + }; + evalStack.Push(variable); + + tree.Add(new ILASTAssignment { + Variable = variable, + Value = expr + }); + } + else { + tree.Add(expr); + } + } + tree.StackRemains = evalStack.Reverse().ToArray(); + return tree; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/ILASTTransformer.cs b/KoiVM/ILAST/ILASTTransformer.cs new file mode 100644 index 0000000..8bfc2ee --- /dev/null +++ b/KoiVM/ILAST/ILASTTransformer.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using KoiVM.AST.ILAST; +using KoiVM.CFG; +using KoiVM.ILAST.Transformation; +using KoiVM.RT; +using KoiVM.VM; + +namespace KoiVM.ILAST { + public class ILASTTransformer { + ITransformationHandler[] pipeline; + + public ILASTTransformer(MethodDef method, ScopeBlock rootScope, VMRuntime runtime) { + RootScope = rootScope; + Method = method; + Runtime = runtime; + + Annotations = new Dictionary(); + InitPipeline(); + } + + void InitPipeline() { + pipeline = new ITransformationHandler[] { + new VariableInlining(), + new StringTransform(), + new ArrayTransform(), + new IndirectTransform(), + new ILASTTypeInference(), + new NullTransform(), + new BranchTransform() + }; + } + + public MethodDef Method { get; private set; } + public ScopeBlock RootScope { get; private set; } + public VMRuntime Runtime { get; private set; } + + public VMDescriptor VM { + get { return Runtime.Descriptor; } + } + + internal Dictionary Annotations { get; private set; } + internal BasicBlock Block { get; private set; } + + internal ILASTTree Tree { + get { return Block.Content; } + } + + public void Transform() { + if (pipeline == null) + throw new InvalidOperationException("Transformer already used."); + + foreach (var handler in pipeline) { + handler.Initialize(this); + + RootScope.ProcessBasicBlocks(block => { + Block = block; + handler.Transform(this); + }); + } + + pipeline = null; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/ITransformationHandler.cs b/KoiVM/ILAST/ITransformationHandler.cs new file mode 100644 index 0000000..b20bc81 --- /dev/null +++ b/KoiVM/ILAST/ITransformationHandler.cs @@ -0,0 +1,8 @@ +using System; + +namespace KoiVM.ILAST { + public interface ITransformationHandler { + void Initialize(ILASTTransformer tr); + void Transform(ILASTTransformer tr); + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/ArrayTransform.cs b/KoiVM/ILAST/Transformation/ArrayTransform.cs new file mode 100644 index 0000000..c480a89 --- /dev/null +++ b/KoiVM/ILAST/Transformation/ArrayTransform.cs @@ -0,0 +1,186 @@ +using System; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class ArrayTransform : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public void Transform(ILASTTransformer tr) { + var module = tr.Method.Module; + tr.Tree.TraverseTree(Transform, module); + + for (int i = 0; i < tr.Tree.Count; i++) { + var st = tr.Tree[i]; + var expr = VariableInlining.GetExpression(st); + if (expr == null) + continue; + + switch (expr.ILCode) { + case Code.Stelem: + TransformSTELEM(expr, module, (ITypeDefOrRef)expr.Operand, tr.Tree, ref i); + break; + case Code.Stelem_I1: + TransformSTELEM(expr, module, module.CorLibTypes.SByte.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_I2: + TransformSTELEM(expr, module, module.CorLibTypes.Int16.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_I4: + TransformSTELEM(expr, module, module.CorLibTypes.Int32.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_I8: + TransformSTELEM(expr, module, module.CorLibTypes.Int64.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_R4: + TransformSTELEM(expr, module, module.CorLibTypes.Single.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_R8: + TransformSTELEM(expr, module, module.CorLibTypes.Double.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_I: + TransformSTELEM(expr, module, module.CorLibTypes.IntPtr.ToTypeDefOrRef(), tr.Tree, ref i); + break; + case Code.Stelem_Ref: + TransformSTELEM(expr, module, module.CorLibTypes.Object.ToTypeDefOrRef(), tr.Tree, ref i); + break; + } + } + } + + static void Transform(ILASTExpression expr, ModuleDef module) { + switch (expr.ILCode) { + case Code.Ldlen: { + expr.ILCode = Code.Call; + var array = module.CorLibTypes.GetTypeRef("System", "Array"); + var lenSig = MethodSig.CreateInstance(module.CorLibTypes.Int32); + var methodRef = new MemberRefUser(module, "get_Length", lenSig, array); + expr.Operand = methodRef; + break; + } + case Code.Newarr: { + expr.ILCode = Code.Newobj; + var array = new SZArraySig(((ITypeDefOrRef)expr.Operand).ToTypeSig()).ToTypeDefOrRef(); + var ctorSig = MethodSig.CreateInstance(module.CorLibTypes.Void, module.CorLibTypes.Int32); + var ctorRef = new MemberRefUser(module, ".ctor", ctorSig, array); + expr.Operand = ctorRef; + break; + } + case Code.Ldelema: { + expr.ILCode = Code.Call; + var elemType = ((ITypeDefOrRef)expr.Operand).ToTypeSig(); + var array = new SZArraySig(elemType).ToTypeDefOrRef(); + var addrSig = MethodSig.CreateInstance(new ByRefSig(elemType), module.CorLibTypes.Int32); + var addrRef = new MemberRefUser(module, "Address", addrSig, array); + expr.Operand = addrRef; + break; + } + case Code.Ldelem: + TransformLDELEM(expr, module, (ITypeDefOrRef)expr.Operand); + break; + case Code.Ldelem_I1: + TransformLDELEM(expr, module, module.CorLibTypes.SByte.ToTypeDefOrRef()); + break; + case Code.Ldelem_U1: + TransformLDELEM(expr, module, module.CorLibTypes.Byte.ToTypeDefOrRef()); + break; + case Code.Ldelem_I2: + TransformLDELEM(expr, module, module.CorLibTypes.Int16.ToTypeDefOrRef()); + break; + case Code.Ldelem_U2: + TransformLDELEM(expr, module, module.CorLibTypes.UInt16.ToTypeDefOrRef()); + break; + case Code.Ldelem_I4: + TransformLDELEM(expr, module, module.CorLibTypes.Int32.ToTypeDefOrRef()); + break; + case Code.Ldelem_U4: + TransformLDELEM(expr, module, module.CorLibTypes.UInt32.ToTypeDefOrRef()); + break; + case Code.Ldelem_I8: + TransformLDELEM(expr, module, module.CorLibTypes.Int64.ToTypeDefOrRef()); + break; + case Code.Ldelem_R4: + TransformLDELEM(expr, module, module.CorLibTypes.Single.ToTypeDefOrRef()); + break; + case Code.Ldelem_R8: + TransformLDELEM(expr, module, module.CorLibTypes.Double.ToTypeDefOrRef()); + break; + case Code.Ldelem_I: + TransformLDELEM(expr, module, module.CorLibTypes.IntPtr.ToTypeDefOrRef()); + break; + case Code.Ldelem_Ref: + TransformLDELEM(expr, module, module.CorLibTypes.Object.ToTypeDefOrRef()); + break; + } + } + + static void TransformLDELEM(ILASTExpression expr, ModuleDef module, ITypeDefOrRef type) { + var array = module.CorLibTypes.GetTypeRef("System", "Array"); + var getValSig = MethodSig.CreateInstance(module.CorLibTypes.Object, module.CorLibTypes.Int32); + var getValRef = new MemberRefUser(module, "GetValue", getValSig, array); + + var getValue = new ILASTExpression { + ILCode = Code.Call, + Operand = getValRef, + Arguments = expr.Arguments + }; + expr.ILCode = Code.Unbox_Any; + expr.Operand = type.IsValueType ? module.CorLibTypes.Object.ToTypeDefOrRef() : type; + expr.Type = TypeInference.ToASTType(type.ToTypeSig()); + expr.Arguments = new IILASTNode[] { getValue }; + } + + static void TransformSTELEM(ILASTExpression expr, ModuleDef module, ITypeDefOrRef type, ILASTTree tree, ref int index) { + var array = module.CorLibTypes.GetTypeRef("System", "Array"); + var setValSig = MethodSig.CreateInstance(module.CorLibTypes.Void, module.CorLibTypes.Object, module.CorLibTypes.Int32); + var setValRef = new MemberRefUser(module, "SetValue", setValSig, array); + + ILASTVariable tmpVar1, tmpVar2; + if (expr.Arguments[1] is ILASTVariable) { + tmpVar1 = (ILASTVariable)expr.Arguments[1]; + } + else { + tmpVar1 = new ILASTVariable { + Name = string.Format("arr_{0:x4}_1", expr.CILInstr.Offset), + VariableType = ILASTVariableType.StackVar + }; + tree.Insert(index++, new ILASTAssignment { + Variable = tmpVar1, + Value = (ILASTExpression)expr.Arguments[1] + }); + } + if (expr.Arguments[2] is ILASTVariable) { + tmpVar2 = (ILASTVariable)expr.Arguments[2]; + } + else { + tmpVar2 = new ILASTVariable { + Name = string.Format("arr_{0:x4}_2", expr.CILInstr.Offset), + VariableType = ILASTVariableType.StackVar + }; + tree.Insert(index++, new ILASTAssignment { + Variable = tmpVar2, + Value = (ILASTExpression)expr.Arguments[2] + }); + } + + if (type.IsPrimitive) { + var elem = new ILASTExpression { + ILCode = Code.Box, + Operand = type, + Arguments = new[] { tmpVar2 } + }; + expr.Arguments[2] = tmpVar1; + expr.Arguments[1] = elem; + } + else { + expr.Arguments[2] = tmpVar1; + expr.Arguments[1] = tmpVar2; + } + expr.ILCode = Code.Call; + expr.Operand = setValRef; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/BranchTransform.cs b/KoiVM/ILAST/Transformation/BranchTransform.cs new file mode 100644 index 0000000..1bbc427 --- /dev/null +++ b/KoiVM/ILAST/Transformation/BranchTransform.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class BranchTransform : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public void Transform(ILASTTransformer tr) { + tr.Tree.TraverseTree(Transform, tr.Method.Module); + } + + /* + * Transform according to spec, identical effects + * beq -> ceq; brtrue + * bne.un -> ceq; brfalse + * bge -> clt/clt.un; brfalse + * bge.un -> clt.un/clt; brfalse (spec does not say?) + * bgt -> cgt; brtrue + * bgt.un -> cgt.un; brtrue + * ble -> cgt/cgt.un; brfalse + * ble.un -> cgt.un/cgt; brfalse + * blt -> clt; brtrue + * blt.un -> clt.un; brtrue + */ + + static readonly Dictionary> transformMap = + new Dictionary> { + { Code.Beq, Tuple.Create(Code.Ceq, Code.Ceq, Code.Brtrue) }, + { Code.Bne_Un, Tuple.Create(Code.Ceq, Code.Ceq, Code.Brfalse) }, + { Code.Bge, Tuple.Create(Code.Clt, Code.Clt_Un, Code.Brfalse) }, + { Code.Bge_Un, Tuple.Create(Code.Clt_Un, Code.Clt, Code.Brfalse) }, + { Code.Ble, Tuple.Create(Code.Cgt, Code.Cgt_Un, Code.Brfalse) }, + { Code.Ble_Un, Tuple.Create(Code.Cgt_Un, Code.Cgt, Code.Brfalse) }, + { Code.Bgt, Tuple.Create(Code.Cgt, Code.Cgt, Code.Brtrue) }, + { Code.Bgt_Un, Tuple.Create(Code.Cgt_Un, Code.Cgt_Un, Code.Brtrue) }, + { Code.Blt, Tuple.Create(Code.Clt, Code.Clt, Code.Brtrue) }, + { Code.Blt_Un, Tuple.Create(Code.Clt_Un, Code.Clt_Un, Code.Brtrue) } + }; + + static void Transform(ILASTExpression expr, ModuleDef module) { + switch (expr.ILCode) { + case Code.Beq: + case Code.Bne_Un: + case Code.Bge: + case Code.Bge_Un: + case Code.Bgt: + case Code.Bgt_Un: + case Code.Ble: + case Code.Ble_Un: + case Code.Blt: + case Code.Blt_Un: + break; + default: + return; + } + Debug.Assert(expr.Arguments.Length == 2); + var mapInfo = transformMap[expr.ILCode]; + var isFloat = expr.Arguments.Any(arg => arg.Type.Value == ASTType.R4 || arg.Type.Value == ASTType.R8); + var compCode = isFloat ? mapInfo.Item2 : mapInfo.Item1; + + expr.ILCode = mapInfo.Item3; + expr.Arguments = new IILASTNode[] { + new ILASTExpression { + ILCode = compCode, + Arguments = expr.Arguments, + Type = ASTType.I4 + } + }; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/ILASTTypeInference.cs b/KoiVM/ILAST/Transformation/ILASTTypeInference.cs new file mode 100644 index 0000000..0137345 --- /dev/null +++ b/KoiVM/ILAST/Transformation/ILASTTypeInference.cs @@ -0,0 +1,215 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class ILASTTypeInference : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public void Transform(ILASTTransformer tr) { + foreach (var st in tr.Tree) { + if (st is ILASTExpression) + ProcessExpression((ILASTExpression)st); + else if (st is ILASTAssignment) { + var assignment = (ILASTAssignment)st; + assignment.Variable.Type = ProcessExpression(assignment.Value).Value; + } + else if (st is ILASTPhi) { + ProcessPhiNode((ILASTPhi)st); + } + } + } + + void ProcessPhiNode(ILASTPhi phi) { + // TODO: Check all source variables having same type? + phi.Variable.Type = phi.SourceVariables[0].Type; + } + + ASTType? ProcessExpression(ILASTExpression expr) { + foreach (var arg in expr.Arguments) { + if (arg is ILASTExpression) { + var argExpr = (ILASTExpression)arg; + argExpr.Type = ProcessExpression(argExpr).Value; + } + } + var exprType = InferType(expr); + if (exprType != null) + expr.Type = exprType.Value; + return exprType; + } + + static ASTType? InferType(ILASTExpression expr) { + if (expr.Type != null) + return expr.Type; + + var opCode = expr.ILCode.ToOpCode(); + switch (opCode.StackBehaviourPush) { + case StackBehaviour.Push1: + return InferPush1(expr); + case StackBehaviour.Pushi: + return InferPushI(expr); + case StackBehaviour.Pushi8: + return InferPushI8(expr); + case StackBehaviour.Pushr4: + return InferPushR4(expr); + case StackBehaviour.Pushr8: + return InferPushR8(expr); + case StackBehaviour.Pushref: + return InferPushRef(expr); + case StackBehaviour.Varpush: + return InferVarPush(expr); + + case StackBehaviour.Push1_push1: + Debug.Assert(expr.Arguments.Length == 1); + return expr.Arguments[0].Type; + + case StackBehaviour.Push0: + default: + return null; + } + } + + static ASTType? InferPush1(ILASTExpression expr) { + switch (expr.ILCode) { + case Code.Add: + case Code.Add_Ovf: + case Code.Add_Ovf_Un: + case Code.Sub: + case Code.Sub_Ovf: + case Code.Sub_Ovf_Un: + case Code.Mul: + case Code.Mul_Ovf: + case Code.Mul_Ovf_Un: + case Code.Div: + case Code.Div_Un: + case Code.Rem: + case Code.Rem_Un: + Debug.Assert(expr.Arguments.Length == 2); + Debug.Assert(expr.Arguments[0].Type != null && expr.Arguments[1].Type != null); + return TypeInference.InferBinaryOp(expr.Arguments[0].Type.Value, expr.Arguments[1].Type.Value); + + case Code.Xor: + case Code.And: + case Code.Or: + Debug.Assert(expr.Arguments.Length == 2); + Debug.Assert(expr.Arguments[0].Type != null && expr.Arguments[1].Type != null); + return TypeInference.InferIntegerOp(expr.Arguments[0].Type.Value, expr.Arguments[1].Type.Value); + + case Code.Not: + Debug.Assert(expr.Arguments.Length == 1 && expr.Arguments[0].Type != null); + if (expr.Arguments[0].Type != ASTType.I4 && + expr.Arguments[0].Type != ASTType.I8 && + expr.Arguments[0].Type != ASTType.Ptr) + throw new ArgumentException("Invalid Not Operand Types."); + return expr.Arguments[0].Type; + + case Code.Neg: + Debug.Assert(expr.Arguments.Length == 1 && expr.Arguments[0].Type != null); + if (expr.Arguments[0].Type != ASTType.I4 && + expr.Arguments[0].Type != ASTType.I8 && + expr.Arguments[0].Type != ASTType.R4 && + expr.Arguments[0].Type != ASTType.R8 && + expr.Arguments[0].Type != ASTType.Ptr) + throw new ArgumentException("Invalid Not Operand Types."); + return expr.Arguments[0].Type; + + case Code.Shr: + case Code.Shl: + case Code.Shr_Un: + Debug.Assert(expr.Arguments.Length == 2); + Debug.Assert(expr.Arguments[0].Type != null && expr.Arguments[1].Type != null); + return TypeInference.InferShiftOp(expr.Arguments[0].Type.Value, expr.Arguments[1].Type.Value); + + case Code.Mkrefany: + return ASTType.O; + + case Code.Ldarg: + return TypeInference.ToASTType(((Parameter)expr.Operand).Type); + case Code.Ldloc: + return TypeInference.ToASTType(((Local)expr.Operand).Type); + + case Code.Unbox_Any: + case Code.Ldelem: + case Code.Ldobj: + return TypeInference.ToASTType(((ITypeDefOrRef)expr.Operand).ToTypeSig()); + + case Code.Ldfld: + case Code.Ldsfld: + return TypeInference.ToASTType(((IField)expr.Operand).FieldSig.Type); + + default: + throw new NotSupportedException(expr.ILCode.ToString()); + } + } + + static ASTType? InferPushI(ILASTExpression expr) { + switch (expr.ILCode) { + case Code.Ldftn: + case Code.Ldind_I: + case Code.Ldelem_I: + case Code.Ldvirtftn: + case Code.Localloc: + case Code.Conv_U: + case Code.Conv_Ovf_U: + case Code.Conv_Ovf_U_Un: + case Code.Conv_I: + case Code.Conv_Ovf_I: + case Code.Conv_Ovf_I_Un: + return ASTType.Ptr; + + case Code.Ldarga: + case Code.Ldelema: + case Code.Ldflda: + case Code.Ldloca: + case Code.Ldsflda: + return ASTType.ByRef; + + case Code.Ldtoken: + case Code.Arglist: + case Code.Unbox: + case Code.Refanytype: + case Code.Refanyval: + case Code.Isinst: + return ASTType.O; + + default: + return ASTType.I4; + } + } + + static ASTType? InferPushI8(ILASTExpression expr) { + return ASTType.I8; + } + + static ASTType? InferPushR4(ILASTExpression expr) { + return ASTType.R4; + } + + static ASTType? InferPushR8(ILASTExpression expr) { + return ASTType.R8; + } + + static ASTType? InferPushRef(ILASTExpression expr) { + return ASTType.O; + } + + static ASTType? InferVarPush(ILASTExpression expr) { + var method = (IMethod)expr.Operand; + if (method.MethodSig.RetType.ElementType == ElementType.Void) + return null; + + var genArgs = new GenericArguments(); + if (method is MethodSpec) + genArgs.PushMethodArgs(((MethodSpec)method).GenericInstMethodSig.GenericArguments); + if (method.DeclaringType.TryGetGenericInstSig() != null) + genArgs.PushTypeArgs(method.DeclaringType.TryGetGenericInstSig().GenericArguments); + + + return TypeInference.ToASTType(genArgs.ResolveType(method.MethodSig.RetType)); + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/IndirectTransform.cs b/KoiVM/ILAST/Transformation/IndirectTransform.cs new file mode 100644 index 0000000..59d96a3 --- /dev/null +++ b/KoiVM/ILAST/Transformation/IndirectTransform.cs @@ -0,0 +1,103 @@ +using System; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class IndirectTransform : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public void Transform(ILASTTransformer tr) { + tr.Tree.TraverseTree(Transform, tr.Method.Module); + } + + static void Transform(ILASTExpression expr, ModuleDef module) { + switch (expr.ILCode) { + case Code.Ldind_I1: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.SByte.ToTypeDefOrRef(); + + expr.Arguments = new IILASTNode[] { expr.Clone() }; + expr.ILCode = Code.Conv_I1; + break; + case Code.Ldind_U1: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.Byte.ToTypeDefOrRef(); + break; + case Code.Ldind_I2: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.Int16.ToTypeDefOrRef(); + + expr.Arguments = new IILASTNode[] { expr.Clone() }; + expr.ILCode = Code.Conv_I2; + break; + case Code.Ldind_U2: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.UInt16.ToTypeDefOrRef(); + break; + case Code.Ldind_I4: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.Int32.ToTypeDefOrRef(); + break; + case Code.Ldind_U4: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.UInt32.ToTypeDefOrRef(); + break; + case Code.Ldind_I8: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.UInt64.ToTypeDefOrRef(); + break; + case Code.Ldind_R4: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.Single.ToTypeDefOrRef(); + break; + case Code.Ldind_R8: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.Double.ToTypeDefOrRef(); + break; + case Code.Ldind_I: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.IntPtr.ToTypeDefOrRef(); + break; + case Code.Ldind_Ref: + expr.ILCode = Code.Ldobj; + expr.Operand = module.CorLibTypes.Object.ToTypeDefOrRef(); + break; + + case Code.Stind_I1: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.SByte.ToTypeDefOrRef(); + break; + case Code.Stind_I2: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.Int16.ToTypeDefOrRef(); + break; + case Code.Stind_I4: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.Int32.ToTypeDefOrRef(); + break; + case Code.Stind_I8: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.UInt64.ToTypeDefOrRef(); + break; + case Code.Stind_R4: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.Single.ToTypeDefOrRef(); + break; + case Code.Stind_R8: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.Double.ToTypeDefOrRef(); + break; + case Code.Stind_I: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.IntPtr.ToTypeDefOrRef(); + break; + case Code.Stind_Ref: + expr.ILCode = Code.Stobj; + expr.Operand = module.CorLibTypes.Object.ToTypeDefOrRef(); + break; + } + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/NullTransform.cs b/KoiVM/ILAST/Transformation/NullTransform.cs new file mode 100644 index 0000000..d6d25be --- /dev/null +++ b/KoiVM/ILAST/Transformation/NullTransform.cs @@ -0,0 +1,22 @@ +using System; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class NullTransform : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public void Transform(ILASTTransformer tr) { + tr.Tree.TraverseTree(Transform, tr); + } + + static void Transform(ILASTExpression expr, ILASTTransformer tr) { + if (expr.ILCode != Code.Ldnull) + return; + + expr.ILCode = Code.Ldc_I4; + expr.Operand = 0; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/StringTransform.cs b/KoiVM/ILAST/Transformation/StringTransform.cs new file mode 100644 index 0000000..8d6df10 --- /dev/null +++ b/KoiVM/ILAST/Transformation/StringTransform.cs @@ -0,0 +1,31 @@ +using System; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class StringTransform : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public void Transform(ILASTTransformer tr) { + tr.Tree.TraverseTree(Transform, tr); + } + + static void Transform(ILASTExpression expr, ILASTTransformer tr) { + if (expr.ILCode != Code.Ldstr) + return; + + var operand = (string)expr.Operand; + expr.ILCode = Code.Box; + expr.Operand = tr.Method.Module.CorLibTypes.String.ToTypeDefOrRef(); + expr.Arguments = new IILASTNode[] { + new ILASTExpression { + ILCode = Code.Ldc_I4, + Operand = (int)tr.VM.Data.GetId(operand), + Arguments = new IILASTNode[0] + } + }; + } + } +} \ No newline at end of file diff --git a/KoiVM/ILAST/Transformation/VariableInlining.cs b/KoiVM/ILAST/Transformation/VariableInlining.cs new file mode 100644 index 0000000..e0693cc --- /dev/null +++ b/KoiVM/ILAST/Transformation/VariableInlining.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using dnlib.DotNet.Emit; +using KoiVM.AST.ILAST; + +namespace KoiVM.ILAST.Transformation { + public class VariableInlining : ITransformationHandler { + public void Initialize(ILASTTransformer tr) { + } + + public static ILASTExpression GetExpression(IILASTStatement node) { + if (node is ILASTExpression) { + var expr = (ILASTExpression)node; + if (expr.ILCode == Code.Pop && expr.Arguments[0] is ILASTExpression) + expr = (ILASTExpression)expr.Arguments[0]; + return expr; + } + else if (node is ILASTAssignment) + return ((ILASTAssignment)node).Value; + else + return null; + } + + public void Transform(ILASTTransformer tr) { + var varUsage = new Dictionary(); + + for (int i = 0; i < tr.Tree.Count; i++) { + var st = tr.Tree[i]; + var expr = GetExpression(st); + if (expr == null) + continue; + + if (st is ILASTExpression && expr.ILCode == Code.Nop) { + tr.Tree.RemoveAt(i); + i--; + continue; + } + else if (st is ILASTAssignment) { + var assignment = (ILASTAssignment)st; + if (Array.IndexOf(tr.Tree.StackRemains, assignment.Variable) != -1) + continue; + Debug.Assert(assignment.Variable.VariableType == ILASTVariableType.StackVar); + } + + foreach (var arg in expr.Arguments) { + Debug.Assert(arg is ILASTVariable); + var argVar = (ILASTVariable)arg; + if (argVar.VariableType == ILASTVariableType.StackVar) + varUsage.Increment(argVar); + } + } + + // If a variable is remained on stack, it cannot be inlined since it would be pushed on the stack. + foreach (var remain in tr.Tree.StackRemains) + varUsage.Remove(remain); + + var simpleVars = new HashSet(varUsage.Where(usage => usage.Value == 1).Select(pair => pair.Key)); + bool modified; + do { + modified = false; + + for (int i = 0; i < tr.Tree.Count - 1; i++) { + var assignment = tr.Tree[i] as ILASTAssignment; + if (assignment == null) + continue; + + if (!simpleVars.Contains(assignment.Variable)) + continue; + + var expr = GetExpression(tr.Tree[i + 1]); + if (expr == null || expr.ILCode.ToOpCode().Name.StartsWith("stelem")) + continue; + + for (int argIndex = 0; argIndex < expr.Arguments.Length; argIndex++) { + var argVar = expr.Arguments[argIndex] as ILASTVariable; + // If previous arguments are not variables (ie. expression), + // there might be side-effect inlining succeeding arguments. + if (argVar == null) + break; + + if (argVar == assignment.Variable) { + expr.Arguments[argIndex] = assignment.Value; + tr.Tree.RemoveAt(i); + i--; + modified = true; + break; + } + } + + // Ensure the block is processed sequentially. + if (modified) + break; + } + } while (modified); + } + } +} \ No newline at end of file diff --git a/KoiVM/IVMSettings.cs b/KoiVM/IVMSettings.cs new file mode 100644 index 0000000..d64f07e --- /dev/null +++ b/KoiVM/IVMSettings.cs @@ -0,0 +1,13 @@ +using System; +using dnlib.DotNet; + +namespace KoiVM { + public interface IVMSettings { + int Seed { get; } + bool IsDebug { get; } + bool ExportDbgInfo { get; } + bool DoStackWalk { get; } + bool IsVirtualized(MethodDef method); + bool IsExported(MethodDef method); + } +} \ No newline at end of file diff --git a/KoiVM/KoiVM.csproj b/KoiVM/KoiVM.csproj new file mode 100644 index 0000000..cbce865 --- /dev/null +++ b/KoiVM/KoiVM.csproj @@ -0,0 +1,237 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {9E333771-BC67-4120-9C67-D15311C0F67C} + Library + Properties + KoiVM + KoiVM + v4.0 + + + 512 + + + true + ..\bin\ + DEBUG;TRACE + full + AnyCPU + prompt + true + + + ..\Release\ + TRACE + true + pdbonly + AnyCPU + prompt + + + + + + true + bin\Debug\ + TRACE;__TRACE + full + AnyCPU + prompt + true + + + + ..\References\dnlibOld.dll + + + + + + + + + Code + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {1A1DA722-FE8A-4B49-86ED-DC582F0B0B47} + Runtime + + + + + + \ No newline at end of file diff --git a/KoiVM/MethodVirtualizer.cs b/KoiVM/MethodVirtualizer.cs new file mode 100644 index 0000000..35eb937 --- /dev/null +++ b/KoiVM/MethodVirtualizer.cs @@ -0,0 +1,88 @@ +using System; +using System.Reflection; +using dnlib.DotNet; +using KoiVM.CFG; +using KoiVM.ILAST; +using KoiVM.RT; +using KoiVM.VMIL; +using KoiVM.VMIR; + +namespace KoiVM { + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + public class MethodVirtualizer { + public MethodVirtualizer(VMRuntime runtime) { + Runtime = runtime; + } + + protected VMRuntime Runtime { get; private set; } + protected MethodDef Method { get; private set; } + protected ScopeBlock RootScope { get; private set; } + protected IRContext IRContext { get; private set; } + protected bool IsExport { get; private set; } + + public ScopeBlock Run(MethodDef method, bool isExport) { + try { + Method = method; + IsExport = isExport; + + Init(); + BuildILAST(); + TransformILAST(); + BuildVMIR(); + TransformVMIR(); + BuildVMIL(); + TransformVMIL(); + Deinitialize(); + + var scope = RootScope; + RootScope = null; + Method = null; + return scope; + } + catch (Exception ex) { + throw new Exception(string.Format("Failed to translate method {0}.", method), ex); + } + } + + protected virtual void Init() { + RootScope = BlockParser.Parse(Method, Method.Body); + IRContext = new IRContext(Method, Method.Body); + } + + protected virtual void BuildILAST() { + ILASTBuilder.BuildAST(Method, Method.Body, RootScope); + } + + protected virtual void TransformILAST() { + var transformer = new ILASTTransformer(Method, RootScope, Runtime); + transformer.Transform(); + } + + protected virtual void BuildVMIR() { + var translator = new IRTranslator(IRContext, Runtime); + translator.Translate(RootScope); + } + + protected virtual void TransformVMIR() { + var transformer = new IRTransformer(RootScope, IRContext, Runtime); + transformer.Transform(); + } + + protected virtual void BuildVMIL() { + var translator = new ILTranslator(Runtime); + translator.Translate(RootScope); + } + + protected virtual void TransformVMIL() { + var transformer = new ILTransformer(Method, RootScope, Runtime); + transformer.Transform(); + } + + protected virtual void Deinitialize() { + IRContext = null; + Runtime.AddMethod(Method, RootScope); + if (IsExport) + Runtime.ExportMethod(Method); + } + } +} \ No newline at end of file diff --git a/KoiVM/Obfuscation.cs b/KoiVM/Obfuscation.cs new file mode 100644 index 0000000..cc093c6 --- /dev/null +++ b/KoiVM/Obfuscation.cs @@ -0,0 +1,14 @@ +using System; +using System.Reflection; + +[assembly: Obfuscation(Exclude = false, Feature = "koi(dbgInfo=true,rtName=kiRT)", ApplyToMembers = false)] + +[assembly: Obfuscation(Exclude = false, Feature = + "preset(aggressive);+constants(mode=dynamic,decoderCount=10,cfg=true);" + + "+ctrl flow(predicate=expression,intensity=100);+rename(renPublic=true,mode=sequential);" + + "+ref proxy(mode=strong,encoding=expression,typeErasure=true);" + + "+resources(mode=dynamic);" +#if DEBUG + + "-anti debug;-rename;" +#endif +)] \ No newline at end of file diff --git a/KoiVM/Properties/AssemblyInfo.cs b/KoiVM/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..47bbc33 --- /dev/null +++ b/KoiVM/Properties/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System; +using System.Reflection; + +[assembly: AssemblyTitle("KoiVM virtualizer")] +[assembly: AssemblyDescription("KoiVM virtualizer")] \ No newline at end of file diff --git a/KoiVM/Protections/SMC/SMCBlock.cs b/KoiVM/Protections/SMC/SMCBlock.cs new file mode 100644 index 0000000..32a207f --- /dev/null +++ b/KoiVM/Protections/SMC/SMCBlock.cs @@ -0,0 +1,64 @@ +using System; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.RT; + +namespace KoiVM.Protections.SMC { + internal class SMCBlock : ILBlock { + public SMCBlock(int id, ILInstrList content) + : base(id, content) { + } + + internal static readonly InstrAnnotation CounterInit = new InstrAnnotation("SMC_COUNTER"); + internal static readonly InstrAnnotation EncryptionKey = new InstrAnnotation("SMC_KEY"); + internal static readonly InstrAnnotation AddressPart1 = new InstrAnnotation("SMC_PART1"); + internal static readonly InstrAnnotation AddressPart2 = new InstrAnnotation("SMC_PART2"); + + public byte Key { get; set; } + public ILImmediate CounterOperand { get; set; } + + public override IKoiChunk CreateChunk(VMRuntime rt, MethodDef method) { + return new SMCBlockChunk(rt, method, this); + } + } + + internal class SMCBlockChunk : BasicBlockChunk, IKoiChunk { + public SMCBlockChunk(VMRuntime rt, MethodDef method, SMCBlock block) + : base(rt, method, block) { + block.CounterOperand.Value = Length + 1; + } + + uint IKoiChunk.Length { + get { return base.Length + 1; } + } + + void IKoiChunk.OnOffsetComputed(uint offset) { + base.OnOffsetComputed(offset + 1); + } + + byte[] IKoiChunk.GetData() { + byte[] data = GetData(); + byte[] newData = new byte[data.Length + 1]; + byte key = ((SMCBlock)Block).Key; + + for (int i = 0; i < data.Length; i++) + newData[i + 1] = (byte)(data[i] ^ key); + newData[0] = key; + return newData; + } + } + + internal class SMCBlockRef : ILRelReference { + public SMCBlockRef(IHasOffset target, IHasOffset relBase, uint key) + : base(target, relBase) { + Key = key; + } + + public uint Key { get; set; } + + public override uint Resolve(VMRuntime runtime) { + return base.Resolve(runtime) ^ Key; + } + } +} \ No newline at end of file diff --git a/KoiVM/Protections/SMC/SMCILTransform.cs b/KoiVM/Protections/SMC/SMCILTransform.cs new file mode 100644 index 0000000..ba9fadd --- /dev/null +++ b/KoiVM/Protections/SMC/SMCILTransform.cs @@ -0,0 +1,82 @@ +using System; +using System.Linq; +using KoiVM.AST.IL; +using KoiVM.VMIL; + +namespace KoiVM.Protections.SMC { + internal class SMCILTransform : ITransform { + ILBlock trampoline; + SMCBlock newTrampoline; + int adrKey; + + public void Initialize(ILTransformer tr) { + trampoline = null; + tr.RootScope.ProcessBasicBlocks(b => { + if (b.Content.Any(instr => instr.IR != null && instr.IR.Annotation == SMCBlock.AddressPart2)) + trampoline = (ILBlock)b; + }); + if (trampoline == null) + return; + + var scope = tr.RootScope.SearchBlock(trampoline).Last(); + newTrampoline = new SMCBlock(trampoline.Id, trampoline.Content); + scope.Content[scope.Content.IndexOf(trampoline)] = newTrampoline; + + adrKey = tr.VM.Random.Next(); + newTrampoline.Key = (byte)tr.VM.Random.Next(); + } + + public void Transform(ILTransformer tr) { + if (tr.Block.Targets.Contains(trampoline)) + tr.Block.Targets[tr.Block.Targets.IndexOf(trampoline)] = newTrampoline; + + if (tr.Block.Sources.Contains(trampoline)) + tr.Block.Sources[tr.Block.Sources.IndexOf(trampoline)] = newTrampoline; + + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(ILInstrList instrs, ILInstruction instr, ref int index, ILTransformer tr) { + if (instr.Operand is ILBlockTarget) { + var target = (ILBlockTarget)instr.Operand; + if (target.Target == trampoline) + target.Target = newTrampoline; + } + else if (instr.IR == null) + return; + + if (instr.IR.Annotation == SMCBlock.CounterInit && instr.OpCode == ILOpCode.PUSHI_DWORD) { + var imm = (ILImmediate)instr.Operand; + if ((int)imm.Value == 0x0f000001) { + newTrampoline.CounterOperand = imm; + } + } + else if (instr.IR.Annotation == SMCBlock.EncryptionKey && instr.OpCode == ILOpCode.PUSHI_DWORD) { + var imm = (ILImmediate)instr.Operand; + if ((int)imm.Value == 0x0f000002) { + imm.Value = (int)newTrampoline.Key; + } + } + else if (instr.IR.Annotation == SMCBlock.AddressPart1 && instr.OpCode == ILOpCode.PUSHI_DWORD && + instr.Operand is ILBlockTarget) { + var target = (ILBlockTarget)instr.Operand; + + var relBase = new ILInstruction(ILOpCode.PUSHR_QWORD, ILRegister.IP, instr); + instr.OpCode = ILOpCode.PUSHI_DWORD; + instr.Operand = new SMCBlockRef(target, relBase, (uint)adrKey); + + instrs.Replace(index, new[] { + relBase, + instr, + new ILInstruction(ILOpCode.ADD_QWORD, null, instr) + }); + } + else if (instr.IR.Annotation == SMCBlock.AddressPart2 && instr.OpCode == ILOpCode.PUSHI_DWORD) { + var imm = (ILImmediate)instr.Operand; + if ((int)imm.Value == 0x0f000003) { + imm.Value = adrKey; + } + } + } + } +} \ No newline at end of file diff --git a/KoiVM/Protections/SMC/SMCIRTransform.cs b/KoiVM/Protections/SMC/SMCIRTransform.cs new file mode 100644 index 0000000..fdf76dc --- /dev/null +++ b/KoiVM/Protections/SMC/SMCIRTransform.cs @@ -0,0 +1,86 @@ +using System; +using System.Linq; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.Protections.SMC; +using KoiVM.VMIR; + +namespace KoiVM.Protections { + public class SMCIRTransform : ITransform { + bool doWork = true; + + public void Initialize(IRTransformer tr) { + if (tr.Context.Method.Module == null) { + doWork = false; + return; + } + + var counter = tr.Context.AllocateVRegister(ASTType.I4); + var pointer = tr.Context.AllocateVRegister(ASTType.Ptr); + var t1 = tr.Context.AllocateVRegister(ASTType.I4); + var t2 = tr.Context.AllocateVRegister(ASTType.I4); + var t3 = tr.Context.AllocateVRegister(ASTType.I4); + + var entry = (BasicBlock)tr.RootScope.GetBasicBlocks().First(); + + var entryStub = new BasicBlock(-3, new IRInstrList()); + var loopBody = new BasicBlock(-2, new IRInstrList()); + var trampoline = new BasicBlock(-1, new IRInstrList()); + + var byteType = tr.Context.Method.Module.CorLibTypes.Byte.ToTypeDefOrRef(); + + entryStub.Content.AddRange(new[] { + new IRInstruction(IROpCode.MOV, counter, IRConstant.FromI4(0x0f000001), SMCBlock.CounterInit), + new IRInstruction(IROpCode.MOV, pointer, new IRBlockTarget(trampoline)), + new IRInstruction(IROpCode.ADD, pointer, IRConstant.FromI4(-1)), + new IRInstruction(IROpCode.__LDOBJ, pointer, t1, new PointerInfo("LDOBJ", byteType)), + new IRInstruction(IROpCode.CMP, t1, IRConstant.FromI4(0)), + new IRInstruction(IROpCode.__GETF, t1, IRConstant.FromI4(1 << tr.VM.Architecture.Flags.ZERO)), + new IRInstruction(IROpCode.JNZ, new IRBlockTarget(trampoline), t1), + new IRInstruction(IROpCode.CMP, counter, IRConstant.FromI4(0)), + new IRInstruction(IROpCode.__GETF, t1, IRConstant.FromI4(1 << tr.VM.Architecture.Flags.ZERO)), + new IRInstruction(IROpCode.JZ, new IRBlockTarget(loopBody), t1), + new IRInstruction(IROpCode.MOV, t3, new IRBlockTarget(entry), SMCBlock.AddressPart1), + new IRInstruction(IROpCode.JMP, new IRBlockTarget(trampoline)), + }); + entryStub.LinkTo(loopBody); + entryStub.LinkTo(trampoline); + + loopBody.Content.AddRange(new[] { + new IRInstruction(IROpCode.__LDOBJ, pointer, t2, new PointerInfo("LDOBJ", byteType)), + new IRInstruction(IROpCode.__XOR, t2, IRConstant.FromI4(0x0f000002), SMCBlock.EncryptionKey), + new IRInstruction(IROpCode.__STOBJ, pointer, t2, new PointerInfo("STOBJ", byteType)), + new IRInstruction(IROpCode.ADD, counter, IRConstant.FromI4(-1)), + new IRInstruction(IROpCode.ADD, pointer, IRConstant.FromI4(1)), + new IRInstruction(IROpCode.CMP, counter, IRConstant.FromI4(0)), + new IRInstruction(IROpCode.__GETF, t2, IRConstant.FromI4(1 << tr.VM.Architecture.Flags.ZERO)), + new IRInstruction(IROpCode.JZ, new IRBlockTarget(loopBody), t2), + new IRInstruction(IROpCode.MOV, t3, new IRBlockTarget(entry), SMCBlock.AddressPart1), + new IRInstruction(IROpCode.NOP), + new IRInstruction(IROpCode.JMP, new IRBlockTarget(trampoline)), + }); + loopBody.LinkTo(loopBody); + loopBody.LinkTo(trampoline); + + trampoline.Content.AddRange(new[] { + new IRInstruction(IROpCode.NOP), + new IRInstruction(IROpCode.NOP), + new IRInstruction(IROpCode.__XOR, t3, IRConstant.FromI4(0x0f000003), SMCBlock.AddressPart2), + new IRInstruction(IROpCode.JMP, new IRBlockTarget(entry)), + }); + trampoline.LinkTo(entry); + + var scope = tr.RootScope.SearchBlock(entry).Last(); + scope.Content.Insert(0, entryStub); + scope.Content.Insert(1, loopBody); + scope.Content.Insert(2, trampoline); + } + + public void Transform(IRTransformer tr) { + if (doWork) + tr.Block.Id += 3; + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/BasicBlockChunk.cs b/KoiVM/RT/BasicBlockChunk.cs new file mode 100644 index 0000000..4eea009 --- /dev/null +++ b/KoiVM/RT/BasicBlockChunk.cs @@ -0,0 +1,110 @@ +using System; +using System.Diagnostics; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.VMIL; + +namespace KoiVM.RT { + internal class BasicBlockChunk : IKoiChunk { + VMRuntime rt; + MethodDef method; + + public BasicBlockChunk(VMRuntime rt, MethodDef method, ILBlock block) { + this.rt = rt; + this.method = method; + Block = block; + Length = rt.serializer.ComputeLength(block); + } + + public ILBlock Block { get; set; } + + public uint Length { get; set; } + + public void OnOffsetComputed(uint offset) { + var len = rt.serializer.ComputeOffset(Block, offset); + Debug.Assert(len - offset == Length); + } + + public byte[] GetData() { + var stream = new MemoryStream(); + rt.serializer.WriteData(Block, new BinaryWriter(stream)); + return Encrypt(stream.ToArray()); + } + + byte[] Encrypt(byte[] data) { + var blockKey = rt.Descriptor.Data.LookupInfo(method).BlockKeys[Block]; + byte currentKey = blockKey.EntryKey; + + var firstInstr = Block.Content[0]; + var lastInstr = Block.Content[Block.Content.Count - 1]; + foreach (var instr in Block.Content) { + var instrStart = instr.Offset - firstInstr.Offset; + var instrEnd = instrStart + rt.serializer.ComputeLength(instr); + + // Encrypt OpCode + { + byte b = data[instrStart]; + data[instrStart] ^= currentKey; + currentKey = (byte)(currentKey * 7 + b); + } + + byte? fixupTarget = null; + if (instr.Annotation == InstrAnnotation.JUMP || + instr == lastInstr) { + fixupTarget = blockKey.ExitKey; + } + else if (instr.OpCode == ILOpCode.LEAVE) { + var eh = ((EHInfo)instr.Annotation).ExceptionHandler; + if (eh.HandlerType == ExceptionHandlerType.Finally) { + fixupTarget = blockKey.ExitKey; + } + } + else if (instr.OpCode == ILOpCode.CALL) { + var callInfo = (InstrCallInfo)instr.Annotation; + var info = rt.Descriptor.Data.LookupInfo((MethodDef)callInfo.Method); + fixupTarget = info.EntryKey; + } + + if (fixupTarget != null) { + var fixup = CalculateFixupByte(fixupTarget.Value, data, currentKey, instrStart + 1, instrEnd); + data[instrStart + 1] = fixup; + } + + // Encrypt rest of instruction + for (uint i = instrStart + 1; i < instrEnd; i++) { + byte b = data[i]; + data[i] ^= currentKey; + currentKey = (byte)(currentKey * 7 + b); + } + if (fixupTarget != null) + Debug.Assert(currentKey == fixupTarget.Value); + + if (instr.OpCode == ILOpCode.CALL) { + var callInfo = (InstrCallInfo)instr.Annotation; + var info = rt.Descriptor.Data.LookupInfo((MethodDef)callInfo.Method); + currentKey = info.ExitKey; + } + } + + return data; + } + + static byte CalculateFixupByte(byte target, byte[] data, uint currentKey, uint rangeStart, uint rangeEnd) { + // Calculate fixup byte + // f = k3 * 7 + d3 + // f = (k2 * 7 + d2) * 7 + d3 + // f = ((k1 * 7 + d1) * 7 + d2) * 7 + d3 + // f = (((k0 * 7 + d0) * 7 + d1) * 7 + d2) * 7 + d3 + // 7 ^ -1 (mod 256) = 183 + byte fixupByte = target; + for (uint i = rangeEnd - 1; i > rangeStart; i--) { + fixupByte = (byte)((fixupByte - data[i]) * 183); + } + fixupByte -= (byte)(currentKey * 7); + return fixupByte; + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/BasicBlockSerializer.cs b/KoiVM/RT/BasicBlockSerializer.cs new file mode 100644 index 0000000..74e99f0 --- /dev/null +++ b/KoiVM/RT/BasicBlockSerializer.cs @@ -0,0 +1,146 @@ +using System; +using System.IO; +using dnlib.DotNet.Pdb; +using KoiVM.AST.IL; +using KoiVM.AST.ILAST; + +namespace KoiVM.RT { + internal class BasicBlockSerializer { + VMRuntime rt; + + public BasicBlockSerializer(VMRuntime rt) { + this.rt = rt; + } + + public uint ComputeLength(ILBlock block) { + uint len = 0; + foreach (var instr in block.Content) + len += ComputeLength(instr); + return len; + } + + public uint ComputeLength(ILInstruction instr) { + uint len = 2; + if (instr.Operand != null) { + if (instr.Operand is ILRegister) + len++; + else if (instr.Operand is ILImmediate) { + var value = ((ILImmediate)instr.Operand).Value; + if (value is uint || value is int || value is float) + len += 4; + else if (value is ulong || value is long || value is double) + len += 8; + else + throw new NotSupportedException(); + } + else if (instr.Operand is ILRelReference) { + len += 4; + } + else + throw new NotSupportedException(); + } + return len; + } + + public uint ComputeOffset(ILBlock block, uint offset) { + foreach (var instr in block.Content) { + instr.Offset = offset; + offset += 2; + if (instr.Operand != null) { + if (instr.Operand is ILRegister) + offset++; + else if (instr.Operand is ILImmediate) { + var value = ((ILImmediate)instr.Operand).Value; + if (value is uint || value is int || value is float) + offset += 4; + else if (value is ulong || value is long || value is double) + offset += 8; + else + throw new NotSupportedException(); + } + else if (instr.Operand is ILRelReference) { + offset += 4; + } + else + throw new NotSupportedException(); + } + } + return offset; + } + + static bool Equals(SequencePoint a, SequencePoint b) { + return a.Document.Url == b.Document.Url && a.StartLine == b.StartLine; + } + + public void WriteData(ILBlock block, BinaryWriter writer) { + uint offset = 0; + SequencePoint prevSeq = null; + uint prevOffset = 0; + foreach (var instr in block.Content) { + if (rt.dbgWriter != null && instr.IR.ILAST is ILASTExpression) { + var expr = (ILASTExpression)instr.IR.ILAST; + var seq = expr.CILInstr == null ? null : expr.CILInstr.SequencePoint; + + if (seq != null && seq.StartLine != 0xfeefee && (prevSeq == null || !Equals(seq, prevSeq))) { + if (prevSeq != null) { + uint len = offset - prevOffset, line = (uint)prevSeq.StartLine; + var doc = prevSeq.Document.Url; + + rt.dbgWriter.AddSequencePoint(block, prevOffset, len, doc, line); + } + prevSeq = seq; + prevOffset = offset; + } + } + + writer.Write(rt.Descriptor.Architecture.OpCodes[instr.OpCode]); + // Leave a padding to let BasicBlockChunk fixup block exit key + writer.Write((byte)rt.Descriptor.Random.Next()); + offset += 2; + + if (instr.Operand != null) { + if (instr.Operand is ILRegister) { + writer.Write(rt.Descriptor.Architecture.Registers[((ILRegister)instr.Operand).Register]); + offset++; + } + else if (instr.Operand is ILImmediate) { + var value = ((ILImmediate)instr.Operand).Value; + if (value is int) { + writer.Write((int)value); + offset += 4; + } + else if (value is uint) { + writer.Write((uint)value); + offset += 4; + } + else if (value is long) { + writer.Write((long)value); + offset += 8; + } + else if (value is ulong) { + writer.Write((ulong)value); + offset += 8; + } + else if (value is float) { + writer.Write((float)value); + offset += 4; + } + else if (value is double) { + writer.Write((double)value); + offset += 8; + } + } + else + throw new NotSupportedException(); + } + } + + if (prevSeq != null) { + uint len = offset - prevOffset, line = (uint)prevSeq.StartLine; + var doc = prevSeq.Document.Url; + + rt.dbgWriter.AddSequencePoint(block, prevOffset, len, doc, line); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/BinaryChunk.cs b/KoiVM/RT/BinaryChunk.cs new file mode 100644 index 0000000..1677de4 --- /dev/null +++ b/KoiVM/RT/BinaryChunk.cs @@ -0,0 +1,36 @@ +using System; + +namespace KoiVM.RT { + public class BinaryChunk : IKoiChunk { + public BinaryChunk(byte[] data) { + Data = data; + } + + public byte[] Data { get; private set; } + public uint Offset { get; private set; } + + public EventHandler OffsetComputed; + + uint IKoiChunk.Length { + get { return (uint)Data.Length; } + } + + void IKoiChunk.OnOffsetComputed(uint offset) { + if (OffsetComputed != null) + OffsetComputed(this, new OffsetComputeEventArgs(offset)); + Offset = offset; + } + + byte[] IKoiChunk.GetData() { + return Data; + } + } + + public class OffsetComputeEventArgs : EventArgs { + internal OffsetComputeEventArgs(uint offset) { + Offset = offset; + } + + public uint Offset { get; private set; } + } +} \ No newline at end of file diff --git a/KoiVM/RT/DbgWriter.cs b/KoiVM/RT/DbgWriter.cs new file mode 100644 index 0000000..e9abd90 --- /dev/null +++ b/KoiVM/RT/DbgWriter.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Reflection; +using System.Security.Cryptography; +using KoiVM.AST.IL; + +namespace KoiVM.RT { + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + internal class DbgWriter { + struct DbgEntry { + public uint offset; + public uint len; + + public string document; + public uint lineNum; + } + + Dictionary> entries = new Dictionary>(); + HashSet documents = new HashSet(); + byte[] dbgInfo; + + public void AddSequencePoint(ILBlock block, uint offset, uint len, string document, uint lineNum) { + List entryList; + if (!entries.TryGetValue(block, out entryList)) + entryList = entries[block] = new List(); + + entryList.Add(new DbgEntry { + offset = offset, + len = len, + document = document, + lineNum = lineNum + }); + documents.Add(document); + } + + public DbgSerializer GetSerializer() { + return new DbgSerializer(this); + } + + public byte[] GetDbgInfo() { + return dbgInfo; + } + + internal class DbgSerializer : IDisposable { + DbgWriter dbg; + BinaryWriter writer; + MemoryStream stream; + Dictionary docMap; + + internal DbgSerializer(DbgWriter dbg) { + this.dbg = dbg; + stream = new MemoryStream(); + var aes = new AesManaged(); + aes.IV = aes.Key = Convert.FromBase64String("UkVwAyrARLAy4GmQLL860w=="); + writer = new BinaryWriter( + new DeflateStream( + new CryptoStream(stream, aes.CreateEncryptor(), CryptoStreamMode.Write), + CompressionMode.Compress + ) + ); + + InitStream(); + } + + void InitStream() { + docMap = new Dictionary(); + writer.Write(dbg.documents.Count); + uint docId = 0; + foreach (var doc in dbg.documents) { + writer.Write(doc); + docMap[doc] = docId++; + } + } + + public void WriteBlock(BasicBlockChunk chunk) { + List entryList; + if (chunk == null || !dbg.entries.TryGetValue(chunk.Block, out entryList) || + chunk.Block.Content.Count == 0) + return; + + var offset = chunk.Block.Content[0].Offset; + foreach (var entry in entryList) { + writer.Write(entry.offset + chunk.Block.Content[0].Offset); + writer.Write(entry.len); + writer.Write(docMap[entry.document]); + writer.Write(entry.lineNum); + } + } + + public void Dispose() { + writer.Dispose(); + dbg.dbgInfo = stream.ToArray(); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/HeaderChunk.cs b/KoiVM/RT/HeaderChunk.cs new file mode 100644 index 0000000..e14e8d9 --- /dev/null +++ b/KoiVM/RT/HeaderChunk.cs @@ -0,0 +1,133 @@ +using System; +using System.Diagnostics; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.MD; + +namespace KoiVM.RT { + internal class HeaderChunk : IKoiChunk { + byte[] data; + + public HeaderChunk(VMRuntime rt) { + Length = ComputeLength(rt); + } + + uint GetCodedLen(MDToken token) { + switch (token.Table) { + case Table.TypeDef: + case Table.TypeRef: + case Table.TypeSpec: + case Table.MemberRef: + case Table.Method: + case Table.Field: + case Table.MethodSpec: + return Utils.GetCompressedUIntLength(token.Rid << 3); + default: + throw new NotSupportedException(); + } + } + + uint GetCodedToken(MDToken token) { + switch (token.Table) { + case Table.TypeDef: + return (token.Rid << 3) | 1; + case Table.TypeRef: + return (token.Rid << 3) | 2; + case Table.TypeSpec: + return (token.Rid << 3) | 3; + case Table.MemberRef: + return (token.Rid << 3) | 4; + case Table.Method: + return (token.Rid << 3) | 5; + case Table.Field: + return (token.Rid << 3) | 6; + case Table.MethodSpec: + return (token.Rid << 3) | 7; + default: + throw new NotSupportedException(); + } + } + + uint ComputeLength(VMRuntime rt) { + uint len = 16; + foreach (var reference in rt.Descriptor.Data.refMap) { + len += Utils.GetCompressedUIntLength(reference.Value) + GetCodedLen(reference.Key.MDToken); + } + foreach (var str in rt.Descriptor.Data.strMap) { + len += Utils.GetCompressedUIntLength(str.Value); + len += Utils.GetCompressedUIntLength((uint)str.Key.Length); + len += (uint)str.Key.Length * 2; + } + foreach (var sig in rt.Descriptor.Data.sigs) { + len += Utils.GetCompressedUIntLength(sig.Id); + len += 4; + if (sig.Method != null) + len += 4; + var paramCount = (uint)sig.FuncSig.ParamSigs.Length; + len += 1 + Utils.GetCompressedUIntLength(paramCount); + + foreach (var param in sig.FuncSig.ParamSigs) + len += GetCodedLen(param.MDToken); + len += GetCodedLen(sig.FuncSig.RetType.MDToken); + } + return len; + } + + internal void WriteData(VMRuntime rt) { + var stream = new MemoryStream(); + var writer = new BinaryWriter(stream); + + writer.Write((uint)0x68736966); + writer.Write(rt.Descriptor.Data.refMap.Count); + writer.Write(rt.Descriptor.Data.strMap.Count); + writer.Write(rt.Descriptor.Data.sigs.Count); + + foreach (var refer in rt.Descriptor.Data.refMap) { + writer.WriteCompressedUInt(refer.Value); + writer.WriteCompressedUInt(GetCodedToken(refer.Key.MDToken)); + } + + foreach (var str in rt.Descriptor.Data.strMap) { + writer.WriteCompressedUInt(str.Value); + writer.WriteCompressedUInt((uint)str.Key.Length); + foreach (var chr in str.Key) + writer.Write((ushort)chr); + } + + foreach (var sig in rt.Descriptor.Data.sigs) { + writer.WriteCompressedUInt(sig.Id); + if (sig.Method != null) { + var entry = rt.methodMap[sig.Method].Item2; + var entryOffset = entry.Content[0].Offset; + Debug.Assert(entryOffset != 0); + writer.Write(entryOffset); + + var key = (uint)rt.Descriptor.Random.Next(); + key = (key << 8) | rt.Descriptor.Data.LookupInfo(sig.Method).EntryKey; + writer.Write(key); + } + else + writer.Write(0u); + + writer.Write(sig.FuncSig.Flags); + writer.WriteCompressedUInt((uint)sig.FuncSig.ParamSigs.Length); + foreach (var paramType in sig.FuncSig.ParamSigs) { + writer.WriteCompressedUInt(GetCodedToken(paramType.MDToken)); + } + writer.WriteCompressedUInt(GetCodedToken(sig.FuncSig.RetType.MDToken)); + } + + data = stream.ToArray(); + Debug.Assert(data.Length == Length); + } + + public uint Length { get; set; } + + public void OnOffsetComputed(uint offset) { + } + + public byte[] GetData() { + return data; + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/IKoiChunk.cs b/KoiVM/RT/IKoiChunk.cs new file mode 100644 index 0000000..d663cd4 --- /dev/null +++ b/KoiVM/RT/IKoiChunk.cs @@ -0,0 +1,10 @@ +using System; + +namespace KoiVM.RT { + public interface IKoiChunk { + uint Length { get; } + + void OnOffsetComputed(uint offset); + byte[] GetData(); + } +} \ No newline at end of file diff --git a/KoiVM/RT/JumpTableChunk.cs b/KoiVM/RT/JumpTableChunk.cs new file mode 100644 index 0000000..7ce379b --- /dev/null +++ b/KoiVM/RT/JumpTableChunk.cs @@ -0,0 +1,45 @@ +using System; +using KoiVM.AST.IL; + +namespace KoiVM.RT { + public class JumpTableChunk : IKoiChunk { + internal VMRuntime runtime; + + public JumpTableChunk(ILJumpTable table) { + Table = table; + if (table.Targets.Length > ushort.MaxValue) + throw new NotSupportedException("Jump table too large."); + } + + public ILJumpTable Table { get; private set; } + public uint Offset { get; private set; } + + uint IKoiChunk.Length { + get { return (uint)Table.Targets.Length * 4 + 2; } + } + + void IKoiChunk.OnOffsetComputed(uint offset) { + Offset = offset + 2; + } + + byte[] IKoiChunk.GetData() { + byte[] data = new byte[Table.Targets.Length * 4 + 2]; + ushort len = (ushort)Table.Targets.Length; + int ptr = 0; + data[ptr++] = (byte)Table.Targets.Length; + data[ptr++] = (byte)(Table.Targets.Length >> 8); + + var relBase = Table.RelativeBase.Offset; + relBase += runtime.serializer.ComputeLength(Table.RelativeBase); + for (int i = 0; i < Table.Targets.Length; i++) { + var offset = ((ILBlock)Table.Targets[i]).Content[0].Offset; + offset -= relBase; + data[ptr++] = (byte)(offset >> 0); + data[ptr++] = (byte)(offset >> 8); + data[ptr++] = (byte)(offset >> 16); + data[ptr++] = (byte)(offset >> 24); + } + return data; + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/KoiHeap.cs b/KoiVM/RT/KoiHeap.cs new file mode 100644 index 0000000..ff23dbd --- /dev/null +++ b/KoiVM/RT/KoiHeap.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.Writer; + +namespace KoiVM.RT { + internal class KoiHeap : HeapBase { + List chunks = new List(); + uint currentLen; + + public uint AddChunk(byte[] chunk) { + uint offset = currentLen; + chunks.Add(chunk); + currentLen += (uint)chunk.Length; + return offset; + } + + public override string Name { + get { return "#AstroNet"; } + } + + public override uint GetRawLength() { + return currentLen; + } + + protected override void WriteToImpl(BinaryWriter writer) { + foreach (var chunk in chunks) + writer.Write(chunk); + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/MethodPatcher.cs b/KoiVM/RT/Mutation/MethodPatcher.cs new file mode 100644 index 0000000..9e325ee --- /dev/null +++ b/KoiVM/RT/Mutation/MethodPatcher.cs @@ -0,0 +1,148 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace KoiVM.RT.Mutation +{ + internal class MethodPatcher + { + MethodDef vmEntryNormal; + MethodDef vmEntryTyped; + + public MethodPatcher(ModuleDef rtModule) + { + foreach (var entry in rtModule.Find(RTMap.VMEntry, true).FindMethods(RTMap.VMRun)) + { + if (entry.Parameters.Count == 5) + vmEntryNormal = entry; + else + vmEntryTyped = entry; + } + } + + static bool ShouldBeTyped(MethodDef method) + { + if (!method.IsStatic && method.DeclaringType.IsValueType) + return true; + foreach (var param in method.Parameters) + { + if (param.Type.IsByRef) + return true; + } + if (method.ReturnType.IsByRef) + return true; + return false; + } + + public void PatchMethodStub(MethodDef method, uint id) + { + if (ShouldBeTyped(method)) + PatchTyped(method.Module, method, (int)id); + else + PatchNormal(method.Module, method, (int)id); + } + internal string gx(int a) + { + string tr = ""; + for (int i = 0; i < a; i++) + { + tr += "x"; + } + return tr; + } + void PatchNormal(ModuleDef module, MethodDef method, int id) + { + var body = new CilBody(); + method.Body = body; + + body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, id)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, "AstroNet - github.com/lckt0")); + body.Instructions.Add(Instruction.Create(OpCodes.Ldtoken, method.DeclaringType)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, gx(id))); + body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, method.Parameters.Count)); + body.Instructions.Add(Instruction.Create(OpCodes.Newarr, method.Module.CorLibTypes.Object.ToTypeDefOrRef())); + + foreach (var param in method.Parameters) + { + body.Instructions.Add(Instruction.Create(OpCodes.Dup)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, param.Index)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldarg, param)); + if (param.Type.IsValueType) + body.Instructions.Add(Instruction.Create(OpCodes.Box, param.Type.ToTypeDefOrRef())); + else if (param.Type.IsPointer) + { + body.Instructions.Add(Instruction.Create(OpCodes.Conv_U)); + body.Instructions.Add(Instruction.Create(OpCodes.Box, method.Module.CorLibTypes.UIntPtr.ToTypeDefOrRef())); + } + body.Instructions.Add(Instruction.Create(OpCodes.Stelem_Ref)); + } + body.Instructions.Add(Instruction.Create(OpCodes.Call, method.Module.Import(vmEntryNormal))); + if (method.ReturnType.ElementType == ElementType.Void) + body.Instructions.Add(Instruction.Create(OpCodes.Pop)); + else if (method.ReturnType.IsValueType) + body.Instructions.Add(Instruction.Create(OpCodes.Unbox_Any, method.ReturnType.ToTypeDefOrRef())); + else + body.Instructions.Add(Instruction.Create(OpCodes.Castclass, method.ReturnType.ToTypeDefOrRef())); + body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + + body.OptimizeMacros(); + } + + void PatchTyped(ModuleDef module, MethodDef method, int id) + { + var body = new CilBody(); + method.Body = body; + + body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, id)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, "AstroNet - github.com/lckt0")); + body.Instructions.Add(Instruction.Create(OpCodes.Ldtoken, method.DeclaringType)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldstr, gx(id))); + body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, method.Parameters.Count)); + body.Instructions.Add(Instruction.Create(OpCodes.Newarr, new PtrSig(method.Module.CorLibTypes.Void).ToTypeDefOrRef())); + + foreach (var param in method.Parameters) + { + body.Instructions.Add(Instruction.Create(OpCodes.Dup)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldc_I4, param.Index)); + if (param.Type.IsByRef) + { + body.Instructions.Add(Instruction.Create(OpCodes.Ldarg, param)); + body.Instructions.Add(Instruction.Create(OpCodes.Mkrefany, param.Type.Next.ToTypeDefOrRef())); + } + else + { + body.Instructions.Add(Instruction.Create(OpCodes.Ldarga, param)); + body.Instructions.Add(Instruction.Create(OpCodes.Mkrefany, param.Type.ToTypeDefOrRef())); + } + var local = new Local(method.Module.CorLibTypes.TypedReference); + body.Variables.Add(local); + body.Instructions.Add(Instruction.Create(OpCodes.Stloc, local)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldloca, local)); + body.Instructions.Add(Instruction.Create(OpCodes.Conv_I)); + body.Instructions.Add(Instruction.Create(OpCodes.Stelem_I)); + } + + if (method.ReturnType.GetElementType() != ElementType.Void) + { + var retVar = new Local(method.ReturnType); + var retRef = new Local(method.Module.CorLibTypes.TypedReference); + body.Variables.Add(retVar); + body.Variables.Add(retRef); + body.Instructions.Add(Instruction.Create(OpCodes.Ldloca, retVar)); + body.Instructions.Add(Instruction.Create(OpCodes.Mkrefany, method.ReturnType.ToTypeDefOrRef())); + body.Instructions.Add(Instruction.Create(OpCodes.Stloc, retRef)); + body.Instructions.Add(Instruction.Create(OpCodes.Ldloca, retRef)); + body.Instructions.Add(Instruction.Create(OpCodes.Call, method.Module.Import(vmEntryTyped))); + + body.Instructions.Add(Instruction.Create(OpCodes.Ldloc, retVar)); + } + else + { + body.Instructions.Add(Instruction.Create(OpCodes.Ldnull)); + body.Instructions.Add(Instruction.Create(OpCodes.Call, method.Module.Import(vmEntryTyped))); + } + body.Instructions.Add(Instruction.Create(OpCodes.Ret)); + + body.OptimizeMacros(); + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/RTConstants.cs b/KoiVM/RT/Mutation/RTConstants.cs new file mode 100644 index 0000000..784562e --- /dev/null +++ b/KoiVM/RT/Mutation/RTConstants.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.VM; +using KoiVM.VMIL; + +namespace KoiVM.RT.Mutation { + public class RTConstants { + Dictionary constants = new Dictionary(); + + void AddField(string fieldName, int fieldValue) { + constants[fieldName] = fieldValue; + } + + void Conclude(Random random, IList instrs, TypeDef constType) { + var constValues = constants.ToList(); + random.Shuffle(constValues); + foreach (var c in constValues) { + instrs.Add(new Instruction(OpCodes.Ldnull)); + instrs.Add(new Instruction(OpCodes.Ldc_I4, c.Value)); + instrs.Add(new Instruction(OpCodes.Stfld, constType.FindField(RTMap.VMConstMap[c.Key]))); + } + } + + public int? GetConstant(string name) { + int ret; + if (!constants.TryGetValue(name, out ret)) + return null; + return ret; + } + + public void InjectConstants(ModuleDef rtModule, VMDescriptor desc, RuntimeHelpers helpers) { + var constants = rtModule.Find(RTMap.VMConstants, true); + var cctor = constants.FindOrCreateStaticConstructor(); + var instrs = cctor.Body.Instructions; + instrs.Clear(); + + for (int i = 0; i < (int)VMRegisters.Max; i++) { + var reg = (VMRegisters)i; + var regId = desc.Architecture.Registers[reg]; + var regField = reg.ToString(); + AddField(regField, regId); + } + + for (int i = 0; i < (int)VMFlags.Max; i++) { + var fl = (VMFlags)i; + var flId = desc.Architecture.Flags[fl]; + var flField = fl.ToString(); + AddField(flField, 1 << flId); + } + + for (int i = 0; i < (int)ILOpCode.Max; i++) { + var op = (ILOpCode)i; + var opId = desc.Architecture.OpCodes[op]; + var opField = op.ToString(); + AddField(opField, opId); + } + + for (int i = 0; i < (int)VMCalls.Max; i++) { + var vc = (VMCalls)i; + var vcId = desc.Runtime.VMCall[vc]; + var vcField = vc.ToString(); + AddField(vcField, vcId); + } + + AddField(ConstantFields.E_CALL.ToString(), (int)desc.Runtime.VCallOps.ECALL_CALL); + AddField(ConstantFields.E_CALLVIRT.ToString(), (int)desc.Runtime.VCallOps.ECALL_CALLVIRT); + AddField(ConstantFields.E_NEWOBJ.ToString(), (int)desc.Runtime.VCallOps.ECALL_NEWOBJ); + AddField(ConstantFields.E_CALLVIRT_CONSTRAINED.ToString(), (int)desc.Runtime.VCallOps.ECALL_CALLVIRT_CONSTRAINED); + + AddField(ConstantFields.INIT.ToString(), (int)helpers.INIT); + + AddField(ConstantFields.INSTANCE.ToString(), desc.Runtime.RTFlags.INSTANCE); + + AddField(ConstantFields.CATCH.ToString(), desc.Runtime.RTFlags.EH_CATCH); + AddField(ConstantFields.FILTER.ToString(), desc.Runtime.RTFlags.EH_FILTER); + AddField(ConstantFields.FAULT.ToString(), desc.Runtime.RTFlags.EH_FAULT); + AddField(ConstantFields.FINALLY.ToString(), desc.Runtime.RTFlags.EH_FINALLY); + + Conclude(desc.Random, instrs, constants); + instrs.Add(Instruction.Create(OpCodes.Ret)); + cctor.Body.OptimizeMacros(); + } + } + + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + internal enum ConstantFields { + E_CALL, + E_CALLVIRT, + E_NEWOBJ, + E_CALLVIRT_CONSTRAINED, + + INIT, + + INSTANCE, + + CATCH, + FILTER, + FAULT, + FINALLY, + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/RTMap.cs b/KoiVM/RT/Mutation/RTMap.cs new file mode 100644 index 0000000..b042b76 --- /dev/null +++ b/KoiVM/RT/Mutation/RTMap.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace KoiVM.RT.Mutation { + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + internal class RTMap { + public static readonly string VMEntry = "Runtime.AstroNet"; + public static readonly string VMRun = "Run"; + public static readonly string VMDispatcher = "Runtime.Execution.VMDispatcher"; + public static readonly string VMDispatcherDothrow = "DoThrow"; + public static readonly string VMDispatcherThrow = "Throw"; + public static readonly string VMDispatcherGetIP = "GetIP"; + public static readonly string VMDispatcherStackwalk = "StackWalk"; + + public static readonly string VMConstants = "Runtime.Dynamic.Constants"; + + public static readonly Dictionary VMConstMap; + + static RTMap() { + const string map = @" +REG_R0 R0 +REG_R1 R1 +REG_R2 R2 +REG_R3 R3 +REG_R4 R4 +REG_R5 R5 +REG_R6 R6 +REG_R7 R7 +REG_BP BP +REG_SP SP +REG_IP IP +REG_FL FL +REG_K1 K1 +REG_K2 K2 +REG_M1 M1 +REG_M2 M2 +FL_OVERFLOW OVERFLOW +FL_CARRY CARRY +FL_ZERO ZERO +FL_SIGN SIGN +FL_UNSIGNED UNSIGNED +FL_BEHAV1 BEHAV1 +FL_BEHAV2 BEHAV2 +FL_BEHAV3 BEHAV3 +OP_NOP NOP +OP_LIND_PTR LIND_PTR +OP_LIND_OBJECT LIND_OBJECT +OP_LIND_BYTE LIND_BYTE +OP_LIND_WORD LIND_WORD +OP_LIND_DWORD LIND_DWORD +OP_LIND_QWORD LIND_QWORD +OP_SIND_PTR SIND_PTR +OP_SIND_OBJECT SIND_OBJECT +OP_SIND_BYTE SIND_BYTE +OP_SIND_WORD SIND_WORD +OP_SIND_DWORD SIND_DWORD +OP_SIND_QWORD SIND_QWORD +OP_POP POP +OP_PUSHR_OBJECT PUSHR_OBJECT +OP_PUSHR_BYTE PUSHR_BYTE +OP_PUSHR_WORD PUSHR_WORD +OP_PUSHR_DWORD PUSHR_DWORD +OP_PUSHR_QWORD PUSHR_QWORD +OP_PUSHI_DWORD PUSHI_DWORD +OP_PUSHI_QWORD PUSHI_QWORD +OP_SX_BYTE SX_BYTE +OP_SX_WORD SX_WORD +OP_SX_DWORD SX_DWORD +OP_CALL CALL +OPX_RET RET +OP_NOR_DWORD NOR_DWORD +OP_NOR_QWORD NOR_QWORD +OP_CMP CMP +OP_CMP_DWORD CMP_DWORD +OP_CMP_QWORD CMP_QWORD +OP_CMP_R32 CMP_R32 +OP_CMP_R64 CMP_R64 +OP_JZ JZ +OP_JNZ JNZ +OP_JMP JMP +OP_SWT SWT +OP_ADD_DWORD ADD_DWORD +OP_ADD_QWORD ADD_QWORD +OP_ADD_R32 ADD_R32 +OP_ADD_R64 ADD_R64 +OP_SUB_R32 SUB_R32 +OP_SUB_R64 SUB_R64 +OP_MUL_DWORD MUL_DWORD +OP_MUL_QWORD MUL_QWORD +OP_MUL_R32 MUL_R32 +OP_MUL_R64 MUL_R64 +OP_DIV_DWORD DIV_DWORD +OP_DIV_QWORD DIV_QWORD +OP_DIV_R32 DIV_R32 +OP_DIV_R64 DIV_R64 +OP_REM_DWORD REM_DWORD +OP_REM_QWORD REM_QWORD +OP_REM_R32 REM_R32 +OP_REM_R64 REM_R64 +OP_SHR_DWORD SHR_DWORD +OP_SHR_QWORD SHR_QWORD +OP_SHL_DWORD SHL_DWORD +OP_SHL_QWORD SHL_QWORD +OP_FCONV_R32_R64 FCONV_R32_R64 +OP_FCONV_R64_R32 FCONV_R64_R32 +OP_FCONV_R32 FCONV_R32 +OPX_FCONV_R64 FCONV_R64 +OP_ICONV_PTR ICONV_PTR +OP_ICONV_R64 ICONV_R64 +OP_VCALL VCALL +OP_TRY TRY +OP_LEAVE LEAVE +VCALL_EXIT EXIT +VCALL_BREAK BREAK +VCALL_ECALL ECALL +VCALL_CAST CAST +VCALL_CKFINITE CKFINITE +VCALL_CKOVERFLOW CKOVERFLOW +VCALL_RANGECHK RANGECHK +VCALL_INITOBJ INITOBJ +VCALL_LDFLD LDFLD +VCALL_LDFTN LDFTN +VCALL_TOKEN TOKEN +VCALL_THROW THROW +VCALL_SIZEOF SIZEOF +VCALL_STFLD STFLD +VCALL_BOX BOX +VCALL_UNBOX UNBOX +VCALL_LOCALLOC LOCALLOC +HELPER_INIT INIT +ECALL_CALL E_CALL +ECALL_CALLVIRT E_CALLVIRT +ECALL_NEWOBJ E_NEWOBJ +ECALL_CALLVIRT_CONSTRAINED E_CALLVIRT_CONSTRAINED +FLAG_INSTANCE INSTANCE +EH_CATCH CATCH +EH_FILTER FILTER +EH_FAULT FAULT +EH_FINALLY FINALLY +"; + + VMConstMap = new Dictionary(); + using (var reader = new StringReader(map)) { + while (reader.Peek() > 0) { + var line = reader.ReadLine().Trim(); + if (string.IsNullOrEmpty(line)) + continue; + var entry = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + VMConstMap[entry[1]] = entry[0]; + } + } + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/Renamer.cs b/KoiVM/RT/Mutation/Renamer.cs new file mode 100644 index 0000000..b929ff0 --- /dev/null +++ b/KoiVM/RT/Mutation/Renamer.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; + +namespace KoiVM.RT.Mutation { + public class Renamer { + public Renamer(int seed) { + next = seed; + } + + Dictionary nameMap = new Dictionary(); + int next; + + string ToString(int id) { + return id.ToString("x"); + } + + string NewName(string name) { + string newName; + if (!nameMap.TryGetValue(name, out newName)) { + nameMap[name] = newName = ToString(next); + next = next * 0x19660D + 0x3C6EF35F; + } + return newName; + } + + public void Process(ModuleDef module) { + foreach (var type in module.GetTypes()) { + if (!type.IsPublic) { + type.Namespace = Guid.NewGuid().ToString().ToUpper().Substring(0, 8); + type.Name = Guid.NewGuid().ToString().ToUpper().Substring(0, 8); + } + foreach (var genParam in type.GenericParameters) + genParam.Name = ""; + + bool isDelegate = type.BaseType != null && + (type.BaseType.FullName == "System.Delegate" || + type.BaseType.FullName == "System.MulticastDelegate"); + + foreach (var method in type.Methods) { + if (method.HasBody) { + foreach (var instr in method.Body.Instructions) { + var memberRef = instr.Operand as MemberRef; + if (memberRef != null) { + var typeDef = memberRef.DeclaringType.ResolveTypeDef(); + + if (memberRef.IsMethodRef && typeDef != null) { + var target = typeDef.ResolveMethod(memberRef); + if (target != null && target.IsRuntimeSpecialName) + typeDef = null; + } + + if (typeDef != null && typeDef.Module == module) + memberRef.Name = NewName(memberRef.Name); + } + } + } + + foreach (var arg in method.Parameters) + arg.Name = ""; + if (method.IsRuntimeSpecialName || isDelegate || type.IsPublic) + continue; + method.Name = NewName(method.Name); + method.CustomAttributes.Clear(); + } + for (int i = 0; i < type.Fields.Count; i++) { + var field = type.Fields[i]; + if (field.IsLiteral) { + type.Fields.RemoveAt(i--); + continue; + } + if (field.IsRuntimeSpecialName) + continue; + field.Name = NewName(field.Name); + } + type.Properties.Clear(); + type.Events.Clear(); + type.CustomAttributes.Clear(); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/RuntimeHelpers.cs b/KoiVM/RT/Mutation/RuntimeHelpers.cs new file mode 100644 index 0000000..c12c0ef --- /dev/null +++ b/KoiVM/RT/Mutation/RuntimeHelpers.cs @@ -0,0 +1,98 @@ +using System; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.VM; +using KoiVM.VMIL; +using KoiVM.VMIR; + +namespace KoiVM.RT.Mutation { + public class RuntimeHelpers { + VMRuntime rt; + TypeDef rtHelperType; + ModuleDef rtModule; + RTConstants constants; + + public RuntimeHelpers(RTConstants constants, VMRuntime rt, ModuleDef rtModule) { + this.rt = rt; + this.rtModule = rtModule; + this.constants = constants; + rtHelperType = new TypeDefUser("Runtime", "Helpers"); + AllocateHelpers(); + } + + MethodDef methodINIT; + + public uint INIT { get; private set; } + + MethodDef CreateHelperMethod(string name) { + var helper = new MethodDefUser(name, MethodSig.CreateStatic(rtModule.CorLibTypes.Void)); + helper.Body = new CilBody(); + return helper; + } + + void AllocateHelpers() { + methodINIT = CreateHelperMethod("INIT"); + INIT = rt.Descriptor.Data.GetExportId(methodINIT); + } + + public void AddHelpers() { + var scope = new ScopeBlock(); + + var initBlock = new BasicBlock(1, new IRInstrList { + new IRInstruction(IROpCode.RET) + }); + scope.Content.Add(initBlock); + + var retnBlock = new BasicBlock(0, new IRInstrList { + new IRInstruction(IROpCode.VCALL, IRConstant.FromI4(rt.Descriptor.Runtime.VMCall[VMCalls.EXIT])) + }); + scope.Content.Add(initBlock); + + CompileHelpers(methodINIT, scope); + + var info = rt.Descriptor.Data.LookupInfo(methodINIT); + scope.ProcessBasicBlocks(block => { + if (block.Id == 1) { + AddHelper(null, methodINIT, (ILBlock)block); + var blockKey = info.BlockKeys[block]; + info.EntryKey = blockKey.EntryKey; + info.ExitKey = blockKey.ExitKey; + } + rt.AddBlock(methodINIT, (ILBlock)block); + }); + } + + void AddHelper(VMMethodInfo info, MethodDef method, ILBlock block) { + var helperScope = new ScopeBlock(); + block.Id = 0; + helperScope.Content.Add(block); + if (info != null) { + var helperInfo = new VMMethodInfo(); + var keys = info.BlockKeys[block]; + helperInfo.RootScope = helperScope; + helperInfo.EntryKey = keys.EntryKey; + helperInfo.ExitKey = keys.ExitKey; + rt.Descriptor.Data.SetInfo(method, helperInfo); + } + rt.AddHelper(method, helperScope, block); + } + + void CompileHelpers(MethodDef method, ScopeBlock scope) { + var methodCtx = new IRContext(method, method.Body); + methodCtx.IsRuntime = true; + var irTransformer = new IRTransformer(scope, methodCtx, rt); + irTransformer.Transform(); + + var ilTranslator = new ILTranslator(rt); + var ilTransformer = new ILTransformer(method, scope, rt); + ilTranslator.Translate(scope); + ilTransformer.Transform(); + + var postTransformer = new ILPostTransformer(method, scope, rt); + postTransformer.Transform(); + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/RuntimeMutator.cs b/KoiVM/RT/Mutation/RuntimeMutator.cs new file mode 100644 index 0000000..61e7582 --- /dev/null +++ b/KoiVM/RT/Mutation/RuntimeMutator.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using dnlib.DotNet; +using dnlib.DotNet.Writer; + +namespace KoiVM.RT.Mutation { + internal class RuntimeMutator : IModuleWriterListener { + ModuleWriterBase rtWriter; + MetaData rtMD; + VMRuntime rt; + RuntimeHelpers helpers; + MethodPatcher methodPatcher; + internal RTConstants constants; + + public RuntimeMutator(ModuleDef module, VMRuntime rt) { + RTModule = module; + this.rt = rt; + methodPatcher = new MethodPatcher(module); + + constants = new RTConstants(); + helpers = new RuntimeHelpers(constants, rt, module); + constants.InjectConstants(module, rt.Descriptor, helpers); + helpers.AddHelpers(); + } + + public void InitHelpers() { + helpers = new RuntimeHelpers(constants, rt, RTModule); + helpers.AddHelpers(); + } + + public ModuleDef RTModule { get; set; } + public byte[] RuntimeLib { get; private set; } + public byte[] RuntimeSym { get; private set; } + + public void CommitRuntime(ModuleDef targetModule) { + MutateRuntime(); + + if (targetModule == null) { + var stream = new MemoryStream(); + var pdbStream = new MemoryStream(); + + var options = new ModuleWriterOptions(RTModule); + + RTModule.Write(stream, options); + RuntimeLib = stream.ToArray(); + RuntimeSym = new byte[0]; + } + else { + var types = RTModule.Types.Where(t => !t.IsGlobalModuleType).ToList(); + RTModule.Types.Clear(); + foreach (var type in types) { + targetModule.Types.Add(type); + } + } + } + + public IModuleWriterListener CommitModule(ModuleDef module) { + ImportReferences(module); + return this; + } + + public void ReplaceMethodStub(MethodDef method) { + methodPatcher.PatchMethodStub(method, rt.Descriptor.Data.GetExportId(method)); + } + + public event EventHandler RequestKoi; + + void MutateRuntime() { + var settings = rt.Descriptor.Settings; + RuntimePatcher.Patch(RTModule, settings.ExportDbgInfo, settings.DoStackWalk); + constants.InjectConstants(RTModule, rt.Descriptor, helpers); + new Renamer(rt.Descriptor.Random.Next()).Process(RTModule); + } + + void ImportReferences(ModuleDef module) { + var refCopy = rt.Descriptor.Data.refMap.ToList(); + rt.Descriptor.Data.refMap.Clear(); + foreach (var mdRef in refCopy) { + object item; + if (mdRef.Key is ITypeDefOrRef) + item = module.Import((ITypeDefOrRef)mdRef.Key); + else if (mdRef.Key is MemberRef) + item = module.Import((MemberRef)mdRef.Key); + else if (mdRef.Key is MethodDef) + item = module.Import((MethodDef)mdRef.Key); + else if (mdRef.Key is MethodSpec) + item = module.Import((MethodSpec)mdRef.Key); + else if (mdRef.Key is FieldDef) + item = module.Import((FieldDef)mdRef.Key); + else + item = mdRef.Key; + rt.Descriptor.Data.refMap.Add((IMemberRef)item, mdRef.Value); + } + foreach (var sig in rt.Descriptor.Data.sigs) { + var methodSig = sig.Signature; + var funcSig = sig.FuncSig; + + if (methodSig.HasThis) + funcSig.Flags |= rt.Descriptor.Runtime.RTFlags.INSTANCE; + + var paramTypes = new List(); + if (methodSig.HasThis && !methodSig.ExplicitThis) { + IType thisType; + if (sig.DeclaringType.IsValueType) + thisType = module.Import(new ByRefSig(sig.DeclaringType.ToTypeSig()).ToTypeDefOrRef()); + else + thisType = module.Import(sig.DeclaringType); + paramTypes.Add((ITypeDefOrRef)thisType); + } + foreach (var param in methodSig.Params) { + var paramType = (ITypeDefOrRef)module.Import(param.ToTypeDefOrRef()); + paramTypes.Add(paramType); + } + funcSig.ParamSigs = paramTypes.ToArray(); + + var retType = (ITypeDefOrRef)module.Import(methodSig.RetType.ToTypeDefOrRef()); + funcSig.RetType = retType; + } + } + + void MutateMetadata() { + foreach (var mdRef in rt.Descriptor.Data.refMap) + mdRef.Key.Rid = rtMD.GetToken(mdRef.Key).Rid; + + foreach (var sig in rt.Descriptor.Data.sigs) { + var funcSig = sig.FuncSig; + + foreach (var paramType in funcSig.ParamSigs) + paramType.Rid = rtMD.GetToken(paramType).Rid; + + funcSig.RetType.Rid = rtMD.GetToken(funcSig.RetType).Rid; + } + } + + void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { + rtWriter = writer; + rtMD = writer.MetaData; + if (evt == ModuleWriterEvent.MDEndCreateTables) { + MutateMetadata(); + var request = new RequestKoiEventArgs(); + RequestKoi(this, request); + writer.TheOptions.MetaDataOptions.OtherHeaps.Add(request.Heap); + + rt.ResetData(); + } + } + } + + internal class RequestKoiEventArgs : EventArgs { + public KoiHeap Heap { get; set; } + } +} \ No newline at end of file diff --git a/KoiVM/RT/Mutation/RuntimePatcher.cs b/KoiVM/RT/Mutation/RuntimePatcher.cs new file mode 100644 index 0000000..f785d80 --- /dev/null +++ b/KoiVM/RT/Mutation/RuntimePatcher.cs @@ -0,0 +1,51 @@ +using System; +using System.Reflection; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace KoiVM.RT.Mutation { + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + internal static class RuntimePatcher { + public static void Patch(ModuleDef runtime, bool debug, bool stackwalk) { + PatchDispatcher(runtime, debug, stackwalk); + } + + static void PatchDispatcher(ModuleDef runtime, bool debug, bool stackwalk) { + var dispatcher = runtime.Find(RTMap.VMDispatcher, true); + var dispatcherRun = dispatcher.FindMethod(RTMap.VMRun); + foreach (var eh in dispatcherRun.Body.ExceptionHandlers) { + if (eh.HandlerType == ExceptionHandlerType.Catch) + eh.CatchType = runtime.CorLibTypes.Object.ToTypeDefOrRef(); + } + PatchDoThrow(dispatcher.FindMethod(RTMap.VMDispatcherDothrow).Body, debug, stackwalk); + dispatcher.Methods.Remove(dispatcher.FindMethod(RTMap.VMDispatcherThrow)); + } + + static void PatchDoThrow(CilBody body, bool debug, bool stackwalk) { + for (int i = 0; i < body.Instructions.Count; i++) { + var method = body.Instructions[i].Operand as IMethod; + if (method != null && method.Name == RTMap.VMDispatcherThrow) { + body.Instructions.RemoveAt(i); + } + else if (method != null && method.Name == RTMap.VMDispatcherGetIP) { + if (!debug) { + body.Instructions.RemoveAt(i); + body.Instructions[i - 1].OpCode = OpCodes.Ldnull; + var def = method.ResolveMethodDefThrow(); + def.DeclaringType.Methods.Remove(def); + } + else if (stackwalk) { + var def = method.ResolveMethodDefThrow(); + body.Instructions[i].Operand = def.DeclaringType.FindMethod(RTMap.VMDispatcherStackwalk); + def.DeclaringType.Methods.Remove(def); + } + else { + var def = method.ResolveMethodDefThrow(); + def = def.DeclaringType.FindMethod(RTMap.VMDispatcherStackwalk); + def.DeclaringType.Methods.Remove(def); + } + } + } + } + } +} \ No newline at end of file diff --git a/KoiVM/RT/VMRuntime.cs b/KoiVM/RT/VMRuntime.cs new file mode 100644 index 0000000..725ca96 --- /dev/null +++ b/KoiVM/RT/VMRuntime.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.CFG; +using KoiVM.RT.Mutation; +using KoiVM.VM; + +namespace KoiVM.RT { + public class VMRuntime { + internal Dictionary> methodMap; + List> basicBlocks; + + List extraChunks; + List finalChunks; + internal BasicBlockSerializer serializer; + IVMSettings settings; + + RuntimeMutator rtMutator; + + public VMRuntime(IVMSettings settings, ModuleDef rt) { + this.settings = settings; + Init(rt); + } + + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + void Init(ModuleDef rt) { + Descriptor = new VMDescriptor(settings); + methodMap = new Dictionary>(); + basicBlocks = new List>(); + + extraChunks = new List(); + finalChunks = new List(); + serializer = new BasicBlockSerializer(this); + + rtMutator = new RuntimeMutator(rt, this); + rtMutator.RequestKoi += OnKoiRequested; + } + + public ModuleDef Module { + get { return rtMutator.RTModule; } + } + + public VMDescriptor Descriptor { get; private set; } + public byte[] RuntimeLibrary { get; private set; } + public byte[] RuntimeSymbols { get; private set; } + + public void AddMethod(MethodDef method, ScopeBlock rootScope) { + ILBlock entry = null; + foreach (ILBlock block in rootScope.GetBasicBlocks()) { + if (block.Id == 0) + entry = block; + basicBlocks.Add(Tuple.Create(method, block)); + } + Debug.Assert(entry != null); + methodMap[method] = Tuple.Create(rootScope, entry); + } + + internal void AddHelper(MethodDef method, ScopeBlock rootScope, ILBlock entry) { + methodMap[method] = Tuple.Create(rootScope, entry); + } + + public void AddBlock(MethodDef method, ILBlock block) { + basicBlocks.Add(Tuple.Create(method, block)); + } + + public ScopeBlock LookupMethod(MethodDef method) { + var m = methodMap[method]; + return m.Item1; + } + + public ScopeBlock LookupMethod(MethodDef method, out ILBlock entry) { + var m = methodMap[method]; + entry = m.Item2; + return m.Item1; + } + + public void AddChunk(IKoiChunk chunk) { + extraChunks.Add(chunk); + } + + public void ExportMethod(MethodDef method) { + rtMutator.ReplaceMethodStub(method); + } + + public IModuleWriterListener CommitModule(ModuleDefMD module) { + return rtMutator.CommitModule(module); + } + + public void CommitRuntime(ModuleDef targetModule = null) { + rtMutator.CommitRuntime(targetModule); + RuntimeLibrary = rtMutator.RuntimeLib; + RuntimeSymbols = rtMutator.RuntimeSym; + } + + [Obfuscation(Exclude = false, Feature = "+koi;-ref proxy")] + void OnKoiRequested(object sender, RequestKoiEventArgs e) { + var header = new HeaderChunk(this); + + foreach (var block in basicBlocks) { + finalChunks.Add(block.Item2.CreateChunk(this, block.Item1)); + } + finalChunks.AddRange(extraChunks); + finalChunks.Add(new BinaryChunk(Watermark.GenerateWatermark((uint)settings.Seed))); + Descriptor.Random.Shuffle(finalChunks); + finalChunks.Insert(0, header); + + ComputeOffsets(); + FixupReferences(); + header.WriteData(this); + e.Heap = CreateHeap(); + } + + void ComputeOffsets() { + uint offset = 0; + foreach (var chunk in finalChunks) { + chunk.OnOffsetComputed(offset); + offset += chunk.Length; + } + } + + void FixupReferences() { + foreach (var block in basicBlocks) { + foreach (var instr in block.Item2.Content) { + if (instr.Operand is ILRelReference) { + var reference = (ILRelReference)instr.Operand; + instr.Operand = ILImmediate.Create(reference.Resolve(this), ASTType.I4); + } + } + } + } + + internal DbgWriter dbgWriter; + + KoiHeap CreateHeap() { + if (settings.ExportDbgInfo) + dbgWriter = new DbgWriter(); + + var heap = new KoiHeap(); + foreach (var chunk in finalChunks) { + heap.AddChunk(chunk.GetData()); + } + if (dbgWriter != null) { + using (var serializer = dbgWriter.GetSerializer()) { + foreach (var chunk in finalChunks) + serializer.WriteBlock(chunk as BasicBlockChunk); + } + } + return heap; + } + + public byte[] DebugInfo { + get { return dbgWriter.GetDbgInfo(); } + } + + public void ResetData() { + methodMap = new Dictionary>(); + basicBlocks = new List>(); + + extraChunks = new List(); + finalChunks = new List(); + Descriptor.ResetData(); + + rtMutator.InitHelpers(); + } + } +} \ No newline at end of file diff --git a/KoiVM/Scanner.cs b/KoiVM/Scanner.cs new file mode 100644 index 0000000..5faefc5 --- /dev/null +++ b/KoiVM/Scanner.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace KoiVM { + public class Scanner { + ModuleDef module; + HashSet methods; + HashSet exclude = new HashSet(); + HashSet export = new HashSet(); + List> results = new List>(); + + public Scanner(ModuleDef module) + : this(module, null) { + } + + public Scanner(ModuleDef module, HashSet methods) { + this.module = module; + this.methods = methods; + } + + public IEnumerable> Scan() { + ScanMethods(FindExclusion); + ScanMethods(ScanExport); + ScanMethods(PopulateResult); + return results; + } + + void ScanMethods(Action scanFunc) { + foreach (var type in module.GetTypes()) { + foreach (var method in type.Methods) + scanFunc(method); + } + } + + void FindExclusion(MethodDef method) { + if (!method.HasBody || (methods != null && !methods.Contains(method))) + exclude.Add(method); + else if (method.HasGenericParameters) { + foreach (var instr in method.Body.Instructions) { + var target = instr.Operand as IMethod; + if (target != null && target.IsMethod && + (target = target.ResolveMethodDef()) != null && + (methods == null || methods.Contains((MethodDef)target))) + export.Add((MethodDef)target); + } + } + } + + void ScanExport(MethodDef method) { + if (!method.HasBody) + return; + + bool shouldExport = false; + shouldExport |= method.IsPublic; + shouldExport |= method.SemanticsAttributes != 0; + shouldExport |= method.IsConstructor; + shouldExport |= method.IsVirtual; + shouldExport |= (method.Module.EntryPoint == method); + if (shouldExport) + export.Add(method); + + bool excluded = exclude.Contains(method) || method.DeclaringType.HasGenericParameters; + foreach (var instr in method.Body.Instructions) { + if (instr.OpCode == OpCodes.Callvirt || + (instr.Operand is IMethod && excluded)) { + var target = ((IMethod)instr.Operand).ResolveMethodDef(); + if (target != null && (methods == null || methods.Contains((MethodDef)target))) + export.Add(target); + } + } + } + + void PopulateResult(MethodDef method) { + if (exclude.Contains(method) || method.DeclaringType.HasGenericParameters) + return; + results.Add(Tuple.Create(method, export.Contains(method))); + } + } +} \ No newline at end of file diff --git a/KoiVM/Utils.cs b/KoiVM/Utils.cs new file mode 100644 index 0000000..c8df1fa --- /dev/null +++ b/KoiVM/Utils.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet; +using KoiVM.AST.IR; +using KoiVM.VM; + +namespace KoiVM { + public static class Utils { + public static void Increment(this Dictionary self, T key) { + int count; + if (!self.TryGetValue(key, out count)) + count = 0; + self[key] = ++count; + } + + public static void Shuffle(this Random random, IList list) { + int n = list.Count; + while (n > 1) { + n--; + int k = random.Next(n + 1); + T value = list[k]; + list[k] = list[n]; + list[n] = value; + } + } + + public static void Replace(this List list, int index, IEnumerable newItems) { + list.RemoveAt(index); + list.InsertRange(index, newItems); + } + + public static void Replace(this List list, int index, IEnumerable newItems) { + var instr = list[index]; + list.RemoveAt(index); + foreach (var i in newItems) + i.ILAST = instr.ILAST; + list.InsertRange(index, newItems); + } + + public static bool IsGPR(this VMRegisters reg) { + if (reg >= VMRegisters.R0 && reg <= VMRegisters.R7) + return true; + return false; + } + + public static uint GetCompressedUIntLength(uint value) { + uint len = 0; + do { + value >>= 7; + len++; + } while (value != 0); + return len; + } + + public static void WriteCompressedUInt(this BinaryWriter writer, uint value) { + do { + byte b = (byte)(value & 0x7f); + value >>= 7; + if (value != 0) + b |= 0x80; + writer.Write(b); + } while (value != 0); + } + + public static TypeSig ResolveType(this GenericArguments genericArgs, TypeSig typeSig) { + switch (typeSig.ElementType) { + case ElementType.Ptr: + return new PtrSig(genericArgs.ResolveType(typeSig.Next)); + + case ElementType.ByRef: + return new ByRefSig(genericArgs.ResolveType(typeSig.Next)); + + case ElementType.SZArray: + return new SZArraySig(genericArgs.ResolveType(typeSig.Next)); + + case ElementType.Array: + var arraySig = (ArraySig)typeSig; + return new ArraySig(genericArgs.ResolveType(typeSig.Next), arraySig.Rank, arraySig.Sizes, arraySig.LowerBounds); + + case ElementType.Pinned: + return new PinnedSig(genericArgs.ResolveType(typeSig.Next)); + + case ElementType.Var: + case ElementType.MVar: + return genericArgs.Resolve(typeSig); + + case ElementType.GenericInst: + var genInst = (GenericInstSig)typeSig; + var typeArgs = new List(); + foreach (var arg in genInst.GenericArguments) + typeArgs.Add(genericArgs.ResolveType(arg)); + return new GenericInstSig(genInst.GenericType, typeArgs); + + case ElementType.CModReqd: + return new CModReqdSig(((CModReqdSig)typeSig).Modifier, genericArgs.ResolveType(typeSig.Next)); + + case ElementType.CModOpt: + return new CModOptSig(((CModOptSig)typeSig).Modifier, genericArgs.ResolveType(typeSig.Next)); + + case ElementType.ValueArray: + return new ValueArraySig(genericArgs.ResolveType(typeSig.Next), ((ValueArraySig)typeSig).Size); + + case ElementType.Module: + return new ModuleSig(((ModuleSig)typeSig).Index, genericArgs.ResolveType(typeSig.Next)); + } + if (typeSig.IsTypeDefOrRef) { + var s = (TypeDefOrRefSig)typeSig; + if (s.TypeDefOrRef is TypeSpec) + throw new NotSupportedException(); // TODO: ? + } + return typeSig; + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/ArchDescriptor.cs b/KoiVM/VM/Descriptors/ArchDescriptor.cs new file mode 100644 index 0000000..5826055 --- /dev/null +++ b/KoiVM/VM/Descriptors/ArchDescriptor.cs @@ -0,0 +1,15 @@ +using System; + +namespace KoiVM.VM { + public class ArchDescriptor { + public ArchDescriptor(Random random) { + OpCodes = new OpCodeDescriptor(random); + Flags = new FlagDescriptor(random); + Registers = new RegisterDescriptor(random); + } + + public OpCodeDescriptor OpCodes { get; private set; } + public FlagDescriptor Flags { get; private set; } + public RegisterDescriptor Registers { get; private set; } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/DataDescriptor.cs b/KoiVM/VM/Descriptors/DataDescriptor.cs new file mode 100644 index 0000000..ad7ac5a --- /dev/null +++ b/KoiVM/VM/Descriptors/DataDescriptor.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; + +namespace KoiVM.VM { + public class DataDescriptor { + internal class FuncSigDesc { + public readonly uint Id; + public readonly MethodDef Method; + public readonly ITypeDefOrRef DeclaringType; + public readonly MethodSig Signature; + public readonly FuncSig FuncSig; + + public FuncSigDesc(uint id, MethodDef method) { + Id = id; + Method = method; + DeclaringType = method.DeclaringType; + Signature = method.MethodSig; + FuncSig = new FuncSig(); + } + + public FuncSigDesc(uint id, ITypeDefOrRef declType, MethodSig sig) { + Id = id; + Method = null; + DeclaringType = declType; + Signature = sig; + FuncSig = new FuncSig(); + } + } + + internal Dictionary refMap = new Dictionary(); + internal Dictionary strMap = new Dictionary(StringComparer.Ordinal); + Dictionary exportMap = new Dictionary(); + Dictionary sigMap = new Dictionary(SignatureEqualityComparer.Instance); + internal List sigs = new List(); + Dictionary methodInfos = new Dictionary(); + + uint nextRefId; + uint nextStrId; + uint nextSigId; + Random random; + + public DataDescriptor(Random random) { + // 0 = null, 1 = "" + strMap[""] = 1; + nextStrId = 2; + + nextRefId = 1; + nextSigId = 1; + + this.random = random; + } + + public uint GetId(IMemberRef memberRef) { + uint ret; + if (!refMap.TryGetValue(memberRef, out ret)) + refMap[memberRef] = ret = nextRefId++; + return ret; + } + + public void ReplaceReference(IMemberRef old, IMemberRef @new) { + uint id; + if (!refMap.TryGetValue(old, out id)) + return; + refMap.Remove(old); + refMap[@new] = id; + } + + public uint GetId(string str) { + uint ret; + if (!strMap.TryGetValue(str, out ret)) + strMap[str] = ret = nextStrId++; + return ret; + } + + public uint GetId(ITypeDefOrRef declType, MethodSig methodSig) { + uint ret; + if (!sigMap.TryGetValue(methodSig, out ret)) { + var id = nextSigId++; + sigMap[methodSig] = ret = id; + sigs.Add(new FuncSigDesc(id, declType, methodSig)); + } + return ret; + } + + public uint GetExportId(MethodDef method) { + uint ret; + if (!exportMap.TryGetValue(method, out ret)) { + var id = nextSigId++; + exportMap[method] = ret = id; + sigs.Add(new FuncSigDesc(id, method)); + } + return ret; + } + + public VMMethodInfo LookupInfo(MethodDef method) { + VMMethodInfo ret; + if (!methodInfos.TryGetValue(method, out ret)) { + var k = random.Next(); + ret = new VMMethodInfo { + EntryKey = (byte)k, + ExitKey = (byte)(k >> 8) + }; + methodInfos[method] = ret; + } + return ret; + } + + public void SetInfo(MethodDef method, VMMethodInfo info) { + methodInfos[method] = info; + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/FlagDescriptor.cs b/KoiVM/VM/Descriptors/FlagDescriptor.cs new file mode 100644 index 0000000..b4b298b --- /dev/null +++ b/KoiVM/VM/Descriptors/FlagDescriptor.cs @@ -0,0 +1,48 @@ +using System; +using System.Linq; + +namespace KoiVM.VM { + public class FlagDescriptor { + int[] flagOrder = Enumerable.Range(0, (int)VMFlags.Max).ToArray(); + + public FlagDescriptor(Random random) { + random.Shuffle(flagOrder); + } + + public int this[VMFlags flag] { + get { return flagOrder[(int)flag]; } + } + + public int OVERFLOW { + get { return flagOrder[0]; } + } + + public int CARRY { + get { return flagOrder[1]; } + } + + public int ZERO { + get { return flagOrder[2]; } + } + + public int SIGN { + get { return flagOrder[3]; } + } + + public int UNSIGNED { + get { return flagOrder[4]; } + } + + public int BEHAV1 { + get { return flagOrder[5]; } + } + + public int BEHAV2 { + get { return flagOrder[6]; } + } + + public int BEHAV3 { + get { return flagOrder[7]; } + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/OpCodeDescriptor.cs b/KoiVM/VM/Descriptors/OpCodeDescriptor.cs new file mode 100644 index 0000000..c355f77 --- /dev/null +++ b/KoiVM/VM/Descriptors/OpCodeDescriptor.cs @@ -0,0 +1,17 @@ +using System; +using System.Linq; +using KoiVM.VMIL; + +namespace KoiVM.VM { + public class OpCodeDescriptor { + byte[] opCodeOrder = Enumerable.Range(0, 256).Select(x => (byte)x).ToArray(); + + public OpCodeDescriptor(Random random) { + random.Shuffle(opCodeOrder); + } + + public byte this[ILOpCode opCode] { + get { return opCodeOrder[(int)opCode]; } + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/RTFlagDescriptor.cs b/KoiVM/VM/Descriptors/RTFlagDescriptor.cs new file mode 100644 index 0000000..59e58cd --- /dev/null +++ b/KoiVM/VM/Descriptors/RTFlagDescriptor.cs @@ -0,0 +1,34 @@ +using System; +using System.Linq; + +namespace KoiVM.VM { + public class RTFlagDescriptor { + byte[] flagOrder = Enumerable.Range(1, 7).Select(x => (byte)x).ToArray(); + byte[] ehOrder = Enumerable.Range(0, 4).Select(x => (byte)x).ToArray(); + + public RTFlagDescriptor(Random random) { + random.Shuffle(flagOrder); + random.Shuffle(ehOrder); + } + + public byte INSTANCE { + get { return flagOrder[0]; } + } + + public byte EH_CATCH { + get { return ehOrder[0]; } + } + + public byte EH_FILTER { + get { return ehOrder[1]; } + } + + public byte EH_FAULT { + get { return ehOrder[2]; } + } + + public byte EH_FINALLY { + get { return ehOrder[3]; } + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/RegisterDescriptor.cs b/KoiVM/VM/Descriptors/RegisterDescriptor.cs new file mode 100644 index 0000000..2b47f03 --- /dev/null +++ b/KoiVM/VM/Descriptors/RegisterDescriptor.cs @@ -0,0 +1,16 @@ +using System; +using System.Linq; + +namespace KoiVM.VM { + public class RegisterDescriptor { + byte[] regOrder = Enumerable.Range(0, (int)VMRegisters.Max).Select(x => (byte)x).ToArray(); + + public RegisterDescriptor(Random random) { + random.Shuffle(regOrder); + } + + public byte this[VMRegisters reg] { + get { return regOrder[(int)reg]; } + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/RuntimeDescriptor.cs b/KoiVM/VM/Descriptors/RuntimeDescriptor.cs new file mode 100644 index 0000000..d882cb4 --- /dev/null +++ b/KoiVM/VM/Descriptors/RuntimeDescriptor.cs @@ -0,0 +1,15 @@ +using System; + +namespace KoiVM.VM { + public class RuntimeDescriptor { + public RuntimeDescriptor(Random random) { + VMCall = new VMCallDescriptor(random); + VCallOps = new VCallOpsDescriptor(random); + RTFlags = new RTFlagDescriptor(random); + } + + public VMCallDescriptor VMCall { get; private set; } + public VCallOpsDescriptor VCallOps { get; private set; } + public RTFlagDescriptor RTFlags { get; private set; } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/VCallOpsDescriptor.cs b/KoiVM/VM/Descriptors/VCallOpsDescriptor.cs new file mode 100644 index 0000000..d1ea08e --- /dev/null +++ b/KoiVM/VM/Descriptors/VCallOpsDescriptor.cs @@ -0,0 +1,27 @@ +using System; + +namespace KoiVM.VM { + public class VCallOpsDescriptor { + uint[] ecallOrder = { 0, 1, 2, 3 }; + + public VCallOpsDescriptor(Random random) { + random.Shuffle(ecallOrder); + } + + public uint ECALL_CALL { + get { return ecallOrder[0]; } + } + + public uint ECALL_CALLVIRT { + get { return ecallOrder[1]; } + } + + public uint ECALL_NEWOBJ { + get { return ecallOrder[2]; } + } + + public uint ECALL_CALLVIRT_CONSTRAINED { + get { return ecallOrder[3]; } + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/VMCallDescriptor.cs b/KoiVM/VM/Descriptors/VMCallDescriptor.cs new file mode 100644 index 0000000..8dc3d4e --- /dev/null +++ b/KoiVM/VM/Descriptors/VMCallDescriptor.cs @@ -0,0 +1,84 @@ +using System; +using System.Linq; + +namespace KoiVM.VM { + public class VMCallDescriptor { + int[] callOrder = Enumerable.Range(0, 256).ToArray(); + + public VMCallDescriptor(Random random) { + random.Shuffle(callOrder); + } + + public int this[VMCalls call] { + get { return callOrder[(int)call]; } + } + + public int EXIT { + get { return callOrder[0]; } + } + + public int BREAK { + get { return callOrder[1]; } + } + + public int ECALL { + get { return callOrder[2]; } + } + + public int CAST { + get { return callOrder[3]; } + } + + public int CKFINITE { + get { return callOrder[4]; } + } + + public int CKOVERFLOW { + get { return callOrder[5]; } + } + + public int RANGECHK { + get { return callOrder[6]; } + } + + public int INITOBJ { + get { return callOrder[7]; } + } + + public int LDFLD { + get { return callOrder[8]; } + } + + public int LDFTN { + get { return callOrder[9]; } + } + + public int TOKEN { + get { return callOrder[10]; } + } + + public int THROW { + get { return callOrder[11]; } + } + + public int SIZEOF { + get { return callOrder[12]; } + } + + public int STFLD { + get { return callOrder[13]; } + } + + public int BOX { + get { return callOrder[14]; } + } + + public int UNBOX { + get { return callOrder[15]; } + } + + public int LOCALLOC { + get { return callOrder[16]; } + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/Descriptors/VMDescriptor.cs b/KoiVM/VM/Descriptors/VMDescriptor.cs new file mode 100644 index 0000000..e3c88de --- /dev/null +++ b/KoiVM/VM/Descriptors/VMDescriptor.cs @@ -0,0 +1,23 @@ +using System; + +namespace KoiVM.VM { + public class VMDescriptor { + public VMDescriptor(IVMSettings settings) { + Random = new Random(settings.Seed); + Settings = settings; + Architecture = new ArchDescriptor(Random); + Runtime = new RuntimeDescriptor(Random); + Data = new DataDescriptor(Random); + } + + public Random Random { get; private set; } + public IVMSettings Settings { get; private set; } + public ArchDescriptor Architecture { get; private set; } + public RuntimeDescriptor Runtime { get; private set; } + public DataDescriptor Data { get; private set; } + + public void ResetData() { + Data = new DataDescriptor(Random); + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/FuncSig.cs b/KoiVM/VM/FuncSig.cs new file mode 100644 index 0000000..3ce7c0a --- /dev/null +++ b/KoiVM/VM/FuncSig.cs @@ -0,0 +1,35 @@ +using System; +using dnlib.DotNet; + +namespace KoiVM.VM { + public class FuncSig { + public byte Flags; + public ITypeDefOrRef[] ParamSigs; + public ITypeDefOrRef RetType; + + public override int GetHashCode() { + var comparer = new SigComparer(); + int hashCode = Flags; + foreach (var param in ParamSigs) + hashCode = (hashCode * 7) + comparer.GetHashCode(param); + return (hashCode * 7) + comparer.GetHashCode(RetType); + } + + public override bool Equals(object obj) { + var other = obj as FuncSig; + if (other == null || other.Flags != Flags) + return false; + + if (other.ParamSigs.Length != ParamSigs.Length) + return false; + var comparer = new SigComparer(); + for (int i = 0; i < ParamSigs.Length; i++) { + if (!comparer.Equals(ParamSigs[i], other.ParamSigs[i])) + return false; + } + if (!comparer.Equals(RetType, other.RetType)) + return false; + return true; + } + } +} \ No newline at end of file diff --git a/KoiVM/VM/VMCalls.cs b/KoiVM/VM/VMCalls.cs new file mode 100644 index 0000000..23f7c42 --- /dev/null +++ b/KoiVM/VM/VMCalls.cs @@ -0,0 +1,27 @@ +using System; +using System.Reflection; + +namespace KoiVM.VM { + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + public enum VMCalls { + EXIT = 0, + BREAK = 1, + ECALL = 2, + CAST = 3, + CKFINITE = 4, + CKOVERFLOW = 5, + RANGECHK = 6, + INITOBJ = 7, + LDFLD = 8, + LDFTN = 9, + TOKEN = 10, + THROW = 11, + SIZEOF = 12, + STFLD = 13, + BOX = 14, + UNBOX = 15, + LOCALLOC = 16, + + Max + } +} \ No newline at end of file diff --git a/KoiVM/VM/VMFlags.cs b/KoiVM/VM/VMFlags.cs new file mode 100644 index 0000000..f134df6 --- /dev/null +++ b/KoiVM/VM/VMFlags.cs @@ -0,0 +1,18 @@ +using System; +using System.Reflection; + +namespace KoiVM.VM { + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + public enum VMFlags { + OVERFLOW = 0, + CARRY = 1, + ZERO = 2, + SIGN = 3, + UNSIGNED = 4, + BEHAV1 = 5, + BEHAV2 = 6, + BEHAV3 = 7, + + Max + } +} \ No newline at end of file diff --git a/KoiVM/VM/VMMethodInfo.cs b/KoiVM/VM/VMMethodInfo.cs new file mode 100644 index 0000000..f2a83a9 --- /dev/null +++ b/KoiVM/VM/VMMethodInfo.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using KoiVM.CFG; + +namespace KoiVM.VM { + public class VMMethodInfo { + public VMMethodInfo() { + BlockKeys = new Dictionary(); + UsedRegister = new HashSet(); + } + + public ScopeBlock RootScope; + public readonly Dictionary BlockKeys; + public readonly HashSet UsedRegister; + public byte EntryKey; + public byte ExitKey; + } + + public struct VMBlockKey { + public byte EntryKey; + public byte ExitKey; + } +} \ No newline at end of file diff --git a/KoiVM/VM/VMRegisters.cs b/KoiVM/VM/VMRegisters.cs new file mode 100644 index 0000000..3a27864 --- /dev/null +++ b/KoiVM/VM/VMRegisters.cs @@ -0,0 +1,27 @@ +using System; +using System.Reflection; + +namespace KoiVM.VM { + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + public enum VMRegisters { + R0 = 0, + R1 = 1, + R2 = 2, + R3 = 3, + R4 = 4, + R5 = 5, + R6 = 6, + R7 = 7, + + BP = 8, + SP = 9, + IP = 10, + FL = 11, + K1 = 12, + K2 = 13, + M1 = 14, + M2 = 15, + + Max + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/ILOpCode.cs b/KoiVM/VMIL/ILOpCode.cs new file mode 100644 index 0000000..c253e92 --- /dev/null +++ b/KoiVM/VMIL/ILOpCode.cs @@ -0,0 +1,104 @@ +using System; +using System.Reflection; + +namespace KoiVM.VMIL { + [Obfuscation(Exclude = false, ApplyToMembers = false, Feature = "+rename(forceRen=true);")] + public enum ILOpCode { + NOP, + + LIND_PTR, + LIND_OBJECT, + LIND_BYTE, + LIND_WORD, + LIND_DWORD, + LIND_QWORD, + + SIND_PTR, + SIND_OBJECT, + SIND_BYTE, + SIND_WORD, + SIND_DWORD, + SIND_QWORD, + + POP, + + PUSHR_OBJECT, + PUSHR_BYTE, + PUSHR_WORD, + PUSHR_DWORD, + PUSHR_QWORD, + + PUSHI_DWORD, + PUSHI_QWORD, + + SX_BYTE, + SX_WORD, + SX_DWORD, + + CALL, + RET, + + NOR_DWORD, + NOR_QWORD, + + CMP, + CMP_DWORD, + CMP_QWORD, + CMP_R32, + CMP_R64, + + JZ, + JNZ, + JMP, + SWT, + + ADD_DWORD, + ADD_QWORD, + ADD_R32, + ADD_R64, + + SUB_R32, + SUB_R64, + + MUL_DWORD, + MUL_QWORD, + MUL_R32, + MUL_R64, + + DIV_DWORD, + DIV_QWORD, + DIV_R32, + DIV_R64, + + REM_DWORD, + REM_QWORD, + REM_R32, + REM_R64, + + SHR_DWORD, + SHR_QWORD, + SHL_DWORD, + SHL_QWORD, + + FCONV_R32_R64, + FCONV_R64_R32, + FCONV_R32, + FCONV_R64, + ICONV_PTR, + ICONV_R64, + + VCALL, + + TRY, + LEAVE, + + Max, + + // Pseudo-Opcodes, will be eliminate by transforms + __ENTRY, + __EXIT, + + __BEGINCALL, + __ENDCALL + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/ILPostTransformer.cs b/KoiVM/VMIL/ILPostTransformer.cs new file mode 100644 index 0000000..398c766 --- /dev/null +++ b/KoiVM/VMIL/ILPostTransformer.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using KoiVM.AST.IL; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.VMIL.Transforms; + +namespace KoiVM.VMIL { + public class ILPostTransformer { + IPostTransform[] pipeline; + + public ILPostTransformer(MethodDef method, ScopeBlock rootScope, VMRuntime runtime) { + RootScope = rootScope; + Method = method; + Runtime = runtime; + + Annotations = new Dictionary(); + pipeline = InitPipeline(); + } + + IPostTransform[] InitPipeline() { + return new IPostTransform[] { + new SaveRegistersTransform(), + new FixMethodRefTransform(), + new BlockKeyTransform() + }; + } + + public VMRuntime Runtime { get; private set; } + public MethodDef Method { get; private set; } + public ScopeBlock RootScope { get; private set; } + + internal Dictionary Annotations { get; private set; } + internal ILBlock Block { get; private set; } + + internal ILInstrList Instructions { + get { return Block.Content; } + } + + public void Transform() { + if (pipeline == null) + throw new InvalidOperationException("Transformer already used."); + + foreach (var handler in pipeline) { + handler.Initialize(this); + + RootScope.ProcessBasicBlocks(block => { + Block = (ILBlock)block; + handler.Transform(this); + }); + } + + pipeline = null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/ILTransformer.cs b/KoiVM/VMIL/ILTransformer.cs new file mode 100644 index 0000000..01fdd9c --- /dev/null +++ b/KoiVM/VMIL/ILTransformer.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using KoiVM.AST.IL; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.VM; +using KoiVM.VMIL.Transforms; + +namespace KoiVM.VMIL { + public class ILTransformer { + ITransform[] pipeline; + + public ILTransformer(MethodDef method, ScopeBlock rootScope, VMRuntime runtime) { + RootScope = rootScope; + Method = method; + Runtime = runtime; + + Annotations = new Dictionary(); + pipeline = InitPipeline(); + } + + ITransform[] InitPipeline() { + return new ITransform[] { + // new SMCILTransform(), + new ReferenceOffsetTransform(), + new EntryExitTransform(), + new SaveInfoTransform() + }; + } + + public VMRuntime Runtime { get; private set; } + public MethodDef Method { get; private set; } + public ScopeBlock RootScope { get; private set; } + + public VMDescriptor VM { + get { return Runtime.Descriptor; } + } + + internal Dictionary Annotations { get; private set; } + internal ILBlock Block { get; private set; } + + internal ILInstrList Instructions { + get { return Block.Content; } + } + + public void Transform() { + if (pipeline == null) + throw new InvalidOperationException("Transformer already used."); + + foreach (var handler in pipeline) { + handler.Initialize(this); + + RootScope.ProcessBasicBlocks(block => { + Block = (ILBlock)block; + handler.Transform(this); + }); + } + + pipeline = null; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/ILTranslator.cs b/KoiVM/VMIL/ILTranslator.cs new file mode 100644 index 0000000..59580f1 --- /dev/null +++ b/KoiVM/VMIL/ILTranslator.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.VM; +using KoiVM.VMIR; + +namespace KoiVM.VMIL { + public class ILTranslator { + static ILTranslator() { + handlers = new Dictionary(); + foreach (var type in typeof(ILTranslator).Assembly.GetExportedTypes()) { + if (typeof(ITranslationHandler).IsAssignableFrom(type) && !type.IsAbstract) { + var handler = (ITranslationHandler)Activator.CreateInstance(type); + handlers.Add(handler.IRCode, handler); + } + } + } + + static readonly Dictionary handlers; + + public ILTranslator(VMRuntime runtime) { + Runtime = runtime; + } + + public VMRuntime Runtime { get; private set; } + + public VMDescriptor VM { + get { return Runtime.Descriptor; } + } + + internal ILInstrList Instructions { get; private set; } + + public ILInstrList Translate(IRInstrList instrs) { + Instructions = new ILInstrList(); + + int i = 0; + foreach (var instr in instrs) { + ITranslationHandler handler; + if (!handlers.TryGetValue(instr.OpCode, out handler)) + throw new NotSupportedException(instr.OpCode.ToString()); + try { + handler.Translate(instr, this); + } + catch (Exception ex) { + throw new Exception(string.Format("Failed to translate ir {0}.", instr.ILAST), ex); + } + while (i < Instructions.Count) { + Instructions[i].IR = instr; + i++; + } + } + + var ret = Instructions; + Instructions = null; + return ret; + } + + public void Translate(ScopeBlock rootScope) { + var blockMap = rootScope.UpdateBasicBlocks( + block => { return Translate(block.Content); }, + (id, content) => new ILBlock(id, content)); + + rootScope.ProcessBasicBlocks(block => { + foreach (var instr in block.Content) { + if (instr.Operand is ILBlockTarget) { + var op = (ILBlockTarget)instr.Operand; + op.Target = blockMap[(BasicBlock)op.Target]; + } + else if (instr.Operand is ILJumpTable) { + var op = (ILJumpTable)instr.Operand; + for (int i = 0; i < op.Targets.Length; i++) + op.Targets[i] = blockMap[(BasicBlock)op.Targets[i]]; + } + } + }); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/IPostTransform.cs b/KoiVM/VMIL/IPostTransform.cs new file mode 100644 index 0000000..ad034a3 --- /dev/null +++ b/KoiVM/VMIL/IPostTransform.cs @@ -0,0 +1,8 @@ +using System; + +namespace KoiVM.VMIL { + public interface IPostTransform { + void Initialize(ILPostTransformer tr); + void Transform(ILPostTransformer tr); + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/ITransform.cs b/KoiVM/VMIL/ITransform.cs new file mode 100644 index 0000000..5ecf3a7 --- /dev/null +++ b/KoiVM/VMIL/ITransform.cs @@ -0,0 +1,8 @@ +using System; + +namespace KoiVM.VMIL { + public interface ITransform { + void Initialize(ILTransformer tr); + void Transform(ILTransformer tr); + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/ITranslationHandler.cs b/KoiVM/VMIL/ITranslationHandler.cs new file mode 100644 index 0000000..385d92d --- /dev/null +++ b/KoiVM/VMIL/ITranslationHandler.cs @@ -0,0 +1,10 @@ +using System; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL { + public interface ITranslationHandler { + IROpCode IRCode { get; } + void Translate(IRInstruction instr, ILTranslator tr); + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Transforms/BlockKeyTransform.cs b/KoiVM/VMIL/Transforms/BlockKeyTransform.cs new file mode 100644 index 0000000..116ac8e --- /dev/null +++ b/KoiVM/VMIL/Transforms/BlockKeyTransform.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using dnlib.DotNet.Emit; +using KoiVM.AST.IL; +using KoiVM.CFG; +using KoiVM.RT; +using KoiVM.VM; + +namespace KoiVM.VMIL.Transforms { + public class BlockKeyTransform : IPostTransform { + struct BlockKey { + public uint Entry; + public uint Exit; + } + + class FinallyInfo { + public HashSet FinallyEnds = new HashSet(); + public HashSet TryEndNexts = new HashSet(); + } + + class EHMap { + public HashSet Starts = new HashSet(); + public Dictionary Finally = new Dictionary(); + } + + VMRuntime runtime; + VMMethodInfo methodInfo; + Dictionary Keys; + + public void Initialize(ILPostTransformer tr) { + runtime = tr.Runtime; + methodInfo = tr.Runtime.Descriptor.Data.LookupInfo(tr.Method); + ComputeBlockKeys(tr.RootScope); + } + + void ComputeBlockKeys(ScopeBlock rootScope) { + var blocks = rootScope.GetBasicBlocks().OfType().ToList(); + uint id = 1; + Keys = blocks.ToDictionary( + block => block, + block => new BlockKey { Entry = id++, Exit = id++ }); + var ehMap = MapEHs(rootScope); + + bool updated; + do { + updated = false; + + BlockKey key; + + key = Keys[blocks[0]]; + key.Entry = 0xfffffffe; + Keys[blocks[0]] = key; + + key = Keys[blocks[blocks.Count - 1]]; + key.Exit = 0xfffffffd; + Keys[blocks[blocks.Count - 1]] = key; + + // Update the state ids with the maximum id + foreach (var block in blocks) { + key = Keys[block]; + if (block.Sources.Count > 0) { + uint newEntry = block.Sources.Select(b => Keys[(ILBlock)b].Exit).Max(); + if (key.Entry != newEntry) { + key.Entry = newEntry; + updated = true; + } + } + if (block.Targets.Count > 0) { + uint newExit = block.Targets.Select(b => Keys[(ILBlock)b].Entry).Max(); + if (key.Exit != newExit) { + key.Exit = newExit; + updated = true; + } + } + Keys[block] = key; + } + + // Match finally enter = finally exit = try end exit + // Match filter start = 0xffffffff + MatchHandlers(ehMap, ref updated); + } while (updated); + + // Replace id with actual values + var idMap = new Dictionary(); + idMap[0xffffffff] = 0; + idMap[0xfffffffe] = methodInfo.EntryKey; + idMap[0xfffffffd] = methodInfo.ExitKey; + foreach (var block in blocks) { + var key = Keys[block]; + + uint entryId = key.Entry; + if (!idMap.TryGetValue(entryId, out key.Entry)) + key.Entry = idMap[entryId] = (byte)runtime.Descriptor.Random.Next(); + + uint exitId = key.Exit; + if (!idMap.TryGetValue(exitId, out key.Exit)) + key.Exit = idMap[exitId] = (byte)runtime.Descriptor.Random.Next(); + + Keys[block] = key; + } + } + + EHMap MapEHs(ScopeBlock rootScope) { + EHMap map = new EHMap(); + MapEHsInternal(rootScope, map); + return map; + } + + void MapEHsInternal(ScopeBlock scope, EHMap map) { + if (scope.Type == ScopeType.Filter) { + map.Starts.Add((ILBlock)scope.GetBasicBlocks().First()); + } + else if (scope.Type != ScopeType.None) { + if (scope.ExceptionHandler.HandlerType == ExceptionHandlerType.Finally) { + FinallyInfo info; + if (!map.Finally.TryGetValue(scope.ExceptionHandler, out info)) + map.Finally[scope.ExceptionHandler] = info = new FinallyInfo(); + + if (scope.Type == ScopeType.Try) { + // Try End Next + var scopeBlocks = new HashSet(scope.GetBasicBlocks()); + foreach (ILBlock block in scopeBlocks) { + if ((block.Flags & BlockFlags.ExitEHLeave) != 0 && + (block.Targets.Count == 0 || + block.Targets.Any(target => !scopeBlocks.Contains(target)))) { + foreach (var target in block.Targets) + info.TryEndNexts.Add((ILBlock)target); + } + } + } + else if (scope.Type == ScopeType.Handler) { + // Finally End + IEnumerable candidates; + if (scope.Children.Count > 0) { + // Only ScopeType None can endfinally + candidates = scope.Children + .Where(s => s.Type == ScopeType.None) + .SelectMany(s => s.GetBasicBlocks()); + } + else { + candidates = scope.Content; + } + foreach (ILBlock block in candidates) { + if ((block.Flags & BlockFlags.ExitEHReturn) != 0 && + block.Targets.Count == 0) { + info.FinallyEnds.Add(block); + } + } + } + } + if (scope.Type == ScopeType.Handler) + map.Starts.Add((ILBlock)scope.GetBasicBlocks().First()); + } + foreach (var child in scope.Children) + MapEHsInternal(child, map); + } + + void MatchHandlers(EHMap map, ref bool updated) { + // handler start = 0xffffffff + // finally end = next block of try end + foreach (var start in map.Starts) { + var key = Keys[start]; + if (key.Entry != 0xffffffff) { + key.Entry = 0xffffffff; + Keys[start] = key; + updated = true; + } + } + foreach (var info in map.Finally.Values) { + uint maxEnd = info.FinallyEnds.Max(block => Keys[block].Exit); + uint maxEntry = info.TryEndNexts.Max(block => Keys[block].Entry); + uint maxId = Math.Max(maxEnd, maxEntry); + + foreach (var block in info.FinallyEnds) { + var key = Keys[block]; + if (key.Exit != maxId) { + key.Exit = maxId; + Keys[block] = key; + updated = true; + } + } + + foreach (var block in info.TryEndNexts) { + var key = Keys[block]; + if (key.Entry != maxId) { + key.Entry = maxId; + Keys[block] = key; + updated = true; + } + } + } + } + + public void Transform(ILPostTransformer tr) { + var key = Keys[tr.Block]; + methodInfo.BlockKeys[tr.Block] = new VMBlockKey { + EntryKey = (byte)key.Entry, + ExitKey = (byte)key.Exit + }; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Transforms/EntryExitTransform.cs b/KoiVM/VMIL/Transforms/EntryExitTransform.cs new file mode 100644 index 0000000..a132994 --- /dev/null +++ b/KoiVM/VMIL/Transforms/EntryExitTransform.cs @@ -0,0 +1,23 @@ +using System; +using KoiVM.AST.IL; + +namespace KoiVM.VMIL.Transforms { + public class EntryExitTransform : ITransform { + public void Initialize(ILTransformer tr) { + } + + public void Transform(ILTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(ILInstrList instrs, ILInstruction instr, ref int index, ILTransformer tr) { + if (instr.OpCode == ILOpCode.__ENTRY) { + instrs.RemoveAt(index); + index--; + } + else if (instr.OpCode == ILOpCode.__EXIT) { + instrs[index] = new ILInstruction(ILOpCode.RET, null, instr); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Transforms/FixMethodRefTransform.cs b/KoiVM/VMIL/Transforms/FixMethodRefTransform.cs new file mode 100644 index 0000000..fe5d797 --- /dev/null +++ b/KoiVM/VMIL/Transforms/FixMethodRefTransform.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using KoiVM.AST.IL; +using KoiVM.VM; + +namespace KoiVM.VMIL.Transforms { + public class FixMethodRefTransform : IPostTransform { + HashSet saveRegs; + + public void Initialize(ILPostTransformer tr) { + saveRegs = tr.Runtime.Descriptor.Data.LookupInfo(tr.Method).UsedRegister; + } + + public void Transform(ILPostTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(ILInstrList instrs, ILInstruction instr, ref int index, ILPostTransformer tr) { + var rel = instr.Operand as ILRelReference; + if (rel == null) + return; + + var methodRef = rel.Target as ILMethodTarget; + if (methodRef == null) + return; + + methodRef.Resolve(tr.Runtime); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Transforms/ReferenceOffsetTransform.cs b/KoiVM/VMIL/Transforms/ReferenceOffsetTransform.cs new file mode 100644 index 0000000..963837a --- /dev/null +++ b/KoiVM/VMIL/Transforms/ReferenceOffsetTransform.cs @@ -0,0 +1,27 @@ +using System; +using KoiVM.AST.IL; + +namespace KoiVM.VMIL.Transforms { + public class ReferenceOffsetTransform : ITransform { + public void Initialize(ILTransformer tr) { + } + + public void Transform(ILTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(ILInstrList instrs, ILInstruction instr, ref int index, ILTransformer tr) { + if (instr.OpCode == ILOpCode.PUSHI_DWORD && instr.Operand is IHasOffset) { + var relBase = new ILInstruction(ILOpCode.PUSHR_QWORD, ILRegister.IP, instr); + instr.OpCode = ILOpCode.PUSHI_DWORD; + instr.Operand = new ILRelReference((IHasOffset)instr.Operand, relBase); + + instrs.Replace(index, new[] { + relBase, + instr, + new ILInstruction(ILOpCode.ADD_QWORD, null, instr) + }); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Transforms/SaveInfoTransform.cs b/KoiVM/VMIL/Transforms/SaveInfoTransform.cs new file mode 100644 index 0000000..2bdade3 --- /dev/null +++ b/KoiVM/VMIL/Transforms/SaveInfoTransform.cs @@ -0,0 +1,27 @@ +using System; +using KoiVM.AST.IL; +using KoiVM.VM; + +namespace KoiVM.VMIL.Transforms { + public class SaveInfoTransform : ITransform { + VMMethodInfo methodInfo; + + public void Initialize(ILTransformer tr) { + methodInfo = tr.VM.Data.LookupInfo(tr.Method); + methodInfo.RootScope = tr.RootScope; + tr.VM.Data.SetInfo(tr.Method, methodInfo); + } + + public void Transform(ILTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(ILInstrList instrs, ILInstruction instr, ref int index, ILTransformer tr) { + if (instr.Operand is ILRegister) { + var reg = ((ILRegister)instr.Operand).Register; + if (reg.IsGPR()) + methodInfo.UsedRegister.Add(reg); + } + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Transforms/SaveRegistersTransform.cs b/KoiVM/VMIL/Transforms/SaveRegistersTransform.cs new file mode 100644 index 0000000..32a17ce --- /dev/null +++ b/KoiVM/VMIL/Transforms/SaveRegistersTransform.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VM; + +namespace KoiVM.VMIL.Transforms { + public class SaveRegistersTransform : IPostTransform { + HashSet saveRegs; + + public void Initialize(ILPostTransformer tr) { + saveRegs = tr.Runtime.Descriptor.Data.LookupInfo(tr.Method).UsedRegister; + } + + public void Transform(ILPostTransformer tr) { + tr.Instructions.VisitInstrs(VisitInstr, tr); + } + + void VisitInstr(ILInstrList instrs, ILInstruction instr, ref int index, ILPostTransformer tr) { + if (instr.OpCode != ILOpCode.__BEGINCALL && instr.OpCode != ILOpCode.__ENDCALL) + return; + + var callInfo = (InstrCallInfo)instr.Annotation; + if (callInfo.IsECall) { + instrs.RemoveAt(index); + index--; + return; + } + + var saving = new HashSet(saveRegs); + var retVar = (IRVariable)callInfo.ReturnValue; + // R0 = return register, need to save if retVar register is not R0 + Debug.Assert(!(retVar == null ^ (callInfo.ReturnRegister == null ^ callInfo.ReturnSlot == null))); + if (retVar != null) { + if (callInfo.ReturnSlot == null) { + var retReg = callInfo.ReturnRegister.Register; + saving.Remove(retReg); + if (retReg != VMRegisters.R0) + saving.Add(VMRegisters.R0); + } + else + saving.Add(VMRegisters.R0); + } + else + saving.Add(VMRegisters.R0); + + if (instr.OpCode == ILOpCode.__BEGINCALL) { + instrs.Replace(index, saving + .Select(reg => new ILInstruction(ILOpCode.PUSHR_OBJECT, ILRegister.LookupRegister(reg), instr))); + } + else { + instrs.Replace(index, saving + .Select(reg => new ILInstruction(ILOpCode.POP, ILRegister.LookupRegister(reg), instr)) + .Reverse()); + } + index--; + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/ArithmeticLogicHandler.cs b/KoiVM/VMIL/Translation/ArithmeticLogicHandler.cs new file mode 100644 index 0000000..102d316 --- /dev/null +++ b/KoiVM/VMIL/Translation/ArithmeticLogicHandler.cs @@ -0,0 +1,315 @@ +using System; +using System.Diagnostics; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class NorHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.NOR; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferIntegerOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.NOR_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new ILInstruction(ILOpCode.NOR_QWORD)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class ShlHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.SHL; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferShiftOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.SHL_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new ILInstruction(ILOpCode.SHL_QWORD)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class ShrHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.SHR; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferShiftOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.SHR_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new ILInstruction(ILOpCode.SHR_QWORD)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class AddHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.ADD; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferBinaryOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + case ASTType.ByRef: + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_QWORD)); + break; + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_R32)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_R64)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class SubHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.SUB; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferBinaryOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.SUB_R32)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.SUB_R64)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class MulHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.MUL; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferBinaryOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.MUL_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + case ASTType.ByRef: + tr.Instructions.Add(new ILInstruction(ILOpCode.MUL_QWORD)); + break; + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.MUL_R32)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.MUL_R64)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class DivHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.DIV; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferBinaryOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.DIV_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + case ASTType.ByRef: + tr.Instructions.Add(new ILInstruction(ILOpCode.DIV_QWORD)); + break; + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.DIV_R32)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.DIV_R64)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class RemHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.REM; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + var type = TypeInference.InferBinaryOp(instr.Operand1.Type, instr.Operand2.Type); + switch (type) { + case ASTType.I4: + tr.Instructions.Add(new ILInstruction(ILOpCode.REM_DWORD)); + break; + case ASTType.I8: + case ASTType.Ptr: + tr.Instructions.Add(new ILInstruction(ILOpCode.REM_QWORD)); + break; + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.REM_R32)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.REM_R64)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class SxHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.SX; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + switch (instr.Operand1.Type) { + case ASTType.I4: + if (instr.Operand1 is IRVariable) { + var rawType = ((IRVariable)instr.Operand1).RawType.ElementType; + if (rawType == ElementType.I2) + tr.Instructions.Add(new ILInstruction(ILOpCode.SX_WORD)); + } + tr.Instructions.Add(new ILInstruction(ILOpCode.SX_BYTE)); + break; + case ASTType.I8: + tr.Instructions.Add(new ILInstruction(ILOpCode.SX_DWORD)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } + + public class FConvHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.FCONV; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + switch (instr.Operand2.Type) { + case ASTType.R4: + Debug.Assert(instr.Operand1.Type == ASTType.R8); + tr.Instructions.Add(new ILInstruction(ILOpCode.FCONV_R32_R64)); + break; + + case ASTType.R8: + Debug.Assert(instr.Operand1.Type == ASTType.R4); + tr.Instructions.Add(new ILInstruction(ILOpCode.FCONV_R64_R32)); + break; + + default: + Debug.Assert(instr.Operand2.Type == ASTType.I8); + switch (instr.Operand1.Type) { + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.FCONV_R32)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.FCONV_R64)); + break; + default: + throw new NotSupportedException(); + } + break; + } + tr.PopOperand(instr.Operand1); + } + } + + public class IConvHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.ICONV; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + Debug.Assert(instr.Operand1.Type == ASTType.I8); + switch (instr.Operand2.Type) { + case ASTType.R4: + tr.Instructions.Add(new ILInstruction(ILOpCode.FCONV_R32_R64)); + tr.Instructions.Add(new ILInstruction(ILOpCode.ICONV_R64)); + break; + case ASTType.R8: + tr.Instructions.Add(new ILInstruction(ILOpCode.ICONV_R64)); + break; + case ASTType.Ptr: + tr.Instructions.Add(new ILInstruction(ILOpCode.ICONV_PTR)); + break; + default: + throw new NotSupportedException(); + } + tr.PopOperand(instr.Operand1); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/BranchHandlers.cs b/KoiVM/VMIL/Translation/BranchHandlers.cs new file mode 100644 index 0000000..944814a --- /dev/null +++ b/KoiVM/VMIL/Translation/BranchHandlers.cs @@ -0,0 +1,100 @@ +using System; +using System.Diagnostics; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class CmpHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.CMP; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.PushOperand(instr.Operand2); + + if (instr.Operand1.Type == ASTType.O || instr.Operand2.Type == ASTType.O) + tr.Instructions.Add(new ILInstruction(ILOpCode.CMP)); + + else if (instr.Operand1.Type == ASTType.I8 || instr.Operand2.Type == ASTType.I8 || + instr.Operand1.Type == ASTType.Ptr || instr.Operand2.Type == ASTType.Ptr) + tr.Instructions.Add(new ILInstruction(ILOpCode.CMP_QWORD)); + + else if (instr.Operand1.Type == ASTType.R8 || instr.Operand2.Type == ASTType.R8) + tr.Instructions.Add(new ILInstruction(ILOpCode.CMP_R64)); + + else if (instr.Operand1.Type == ASTType.R4 || instr.Operand2.Type == ASTType.R4) + tr.Instructions.Add(new ILInstruction(ILOpCode.CMP_R32)); + + else + tr.Instructions.Add(new ILInstruction(ILOpCode.CMP_DWORD)); + } + } + + public class JmpHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.JMP; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.JMP) { + Annotation = InstrAnnotation.JUMP + }); + } + } + + public class JzHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.JZ; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.JZ) { + Annotation = InstrAnnotation.JUMP + }); + } + } + + public class JnzHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.JNZ; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.JNZ) { + Annotation = InstrAnnotation.JUMP + }); + } + } + + public class SwtHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.SWT; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + tr.PushOperand(instr.Operand1); + + var lastInstr = tr.Instructions[tr.Instructions.Count - 1]; + Debug.Assert(lastInstr.OpCode == ILOpCode.PUSHI_DWORD && lastInstr.Operand is ILJumpTable); + + var switchInstr = new ILInstruction(ILOpCode.SWT) { + Annotation = InstrAnnotation.JUMP + }; + tr.Instructions.Add(switchInstr); + + var jmpTable = (ILJumpTable)lastInstr.Operand; + jmpTable.Chunk.runtime = tr.Runtime; + jmpTable.RelativeBase = switchInstr; + tr.Runtime.AddChunk(jmpTable.Chunk); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/EHHandlers.cs b/KoiVM/VMIL/Translation/EHHandlers.cs new file mode 100644 index 0000000..47d1d99 --- /dev/null +++ b/KoiVM/VMIL/Translation/EHHandlers.cs @@ -0,0 +1,30 @@ +using System; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class TryHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.TRY; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + if (instr.Operand2 != null) + tr.PushOperand(instr.Operand2); + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.TRY) { Annotation = instr.Annotation }); + } + } + + public class LeaveHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.LEAVE; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.LEAVE) { Annotation = instr.Annotation }); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/InvocationHandlers.cs b/KoiVM/VMIL/Translation/InvocationHandlers.cs new file mode 100644 index 0000000..1ca26c9 --- /dev/null +++ b/KoiVM/VMIL/Translation/InvocationHandlers.cs @@ -0,0 +1,27 @@ +using System; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class CallHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.CALL; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.CALL) { Annotation = instr.Annotation }); + } + } + + public class RetHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.RET; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.Instructions.Add(new ILInstruction(ILOpCode.RET)); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/MemoryHandlers.cs b/KoiVM/VMIL/Translation/MemoryHandlers.cs new file mode 100644 index 0000000..9e2c481 --- /dev/null +++ b/KoiVM/VMIL/Translation/MemoryHandlers.cs @@ -0,0 +1,36 @@ +using System; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class PushHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.PUSH; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + } + } + + public class PopHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.POP; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PopOperand(instr.Operand1); + } + } + + public class MovHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.MOV; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + tr.PopOperand(instr.Operand1); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/MiscHandlers.cs b/KoiVM/VMIL/Translation/MiscHandlers.cs new file mode 100644 index 0000000..8f9eade --- /dev/null +++ b/KoiVM/VMIL/Translation/MiscHandlers.cs @@ -0,0 +1,29 @@ +using System; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class VcallHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.VCALL; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + if (instr.Operand2 != null) + tr.PushOperand(instr.Operand2); + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.VCALL)); + } + } + + public class NopHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.NOP; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.Instructions.Add(new ILInstruction(ILOpCode.NOP)); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/Translation/PseudoHandlers.cs b/KoiVM/VMIL/Translation/PseudoHandlers.cs new file mode 100644 index 0000000..9c3191d --- /dev/null +++ b/KoiVM/VMIL/Translation/PseudoHandlers.cs @@ -0,0 +1,88 @@ +using System; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.AST.IR; +using KoiVM.VMIR; + +namespace KoiVM.VMIL.Translation { + public class EntryHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__ENTRY; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.Instructions.Add(new ILInstruction(ILOpCode.__ENTRY)); + } + } + + public class ExitHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__EXIT; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.Instructions.Add(new ILInstruction(ILOpCode.__EXIT)); + } + } + + public class BeginCallHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__BEGINCALL; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.Instructions.Add(new ILInstruction(ILOpCode.__BEGINCALL) { Annotation = instr.Annotation }); + } + } + + public class EndCallHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__ENDCALL; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.Instructions.Add(new ILInstruction(ILOpCode.__ENDCALL) { Annotation = instr.Annotation }); + } + } + + public class EHRetHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__EHRET; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + if (instr.Operand1 != null) { + tr.PushOperand(instr.Operand1); + tr.Instructions.Add(new ILInstruction(ILOpCode.POP, ILRegister.R0)); + } + tr.Instructions.Add(new ILInstruction(ILOpCode.RET)); + } + } + + public class LdobjHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__LDOBJ; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand1); + var rawType = ((PointerInfo)instr.Annotation).PointerType.ToTypeSig(); + tr.Instructions.Add(new ILInstruction(TranslationHelpers.GetLIND(instr.Operand2.Type, rawType))); + tr.PopOperand(instr.Operand2); + } + } + + public class StobjHandler : ITranslationHandler { + public IROpCode IRCode { + get { return IROpCode.__STOBJ; } + } + + public void Translate(IRInstruction instr, ILTranslator tr) { + tr.PushOperand(instr.Operand2); + tr.PushOperand(instr.Operand1); + var rawType = ((PointerInfo)instr.Annotation).PointerType.ToTypeSig(); + tr.Instructions.Add(new ILInstruction(TranslationHelpers.GetSIND(instr.Operand2.Type, rawType))); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIL/TranslationHelpers.cs b/KoiVM/VMIL/TranslationHelpers.cs new file mode 100644 index 0000000..689b79e --- /dev/null +++ b/KoiVM/VMIL/TranslationHelpers.cs @@ -0,0 +1,248 @@ +using System; +using dnlib.DotNet; +using KoiVM.AST; +using KoiVM.AST.IL; +using KoiVM.AST.IR; + +namespace KoiVM.VMIL { + public static class TranslationHelpers { + public static ILOpCode GetLIND(ASTType type, TypeSig rawType) { + if (rawType != null) { + switch (rawType.ElementType) { + case ElementType.I1: + case ElementType.U1: + case ElementType.Boolean: + return ILOpCode.LIND_BYTE; + + case ElementType.I2: + case ElementType.U2: + case ElementType.Char: + return ILOpCode.LIND_WORD; + + case ElementType.I4: + case ElementType.U4: + case ElementType.R4: + return ILOpCode.LIND_DWORD; + + case ElementType.I8: + case ElementType.U8: + case ElementType.R8: + return ILOpCode.LIND_QWORD; + + case ElementType.Ptr: + case ElementType.I: + case ElementType.U: + return ILOpCode.LIND_PTR; + + default: + return ILOpCode.LIND_OBJECT; + } + } + switch (type) { + case ASTType.I4: + case ASTType.R4: + return ILOpCode.LIND_DWORD; + case ASTType.I8: + case ASTType.R8: + return ILOpCode.LIND_QWORD; + case ASTType.Ptr: + return ILOpCode.LIND_PTR; + default: + return ILOpCode.LIND_OBJECT; + } + } + + public static ILOpCode GetLIND(this IRRegister reg) { + return GetLIND(reg.Type, reg.SourceVariable == null ? null : reg.SourceVariable.RawType); + } + + public static ILOpCode GetLIND(this IRPointer ptr) { + return GetLIND(ptr.Type, ptr.SourceVariable == null ? null : ptr.SourceVariable.RawType); + } + + public static ILOpCode GetSIND(ASTType type, TypeSig rawType) { + if (rawType != null) { + switch (rawType.ElementType) { + case ElementType.I1: + case ElementType.U1: + case ElementType.Boolean: + return ILOpCode.SIND_BYTE; + + case ElementType.I2: + case ElementType.U2: + case ElementType.Char: + return ILOpCode.SIND_WORD; + + case ElementType.I4: + case ElementType.U4: + case ElementType.R4: + return ILOpCode.SIND_DWORD; + + case ElementType.I8: + case ElementType.U8: + case ElementType.R8: + return ILOpCode.SIND_QWORD; + + case ElementType.Ptr: + case ElementType.I: + case ElementType.U: + return ILOpCode.SIND_PTR; + + default: + return ILOpCode.SIND_OBJECT; + } + } + switch (type) { + case ASTType.I4: + case ASTType.R4: + return ILOpCode.SIND_DWORD; + case ASTType.I8: + case ASTType.R8: + return ILOpCode.SIND_QWORD; + case ASTType.Ptr: + return ILOpCode.SIND_PTR; + default: + return ILOpCode.SIND_OBJECT; + } + } + + public static ILOpCode GetSIND(this IRRegister reg) { + return GetSIND(reg.Type, reg.SourceVariable == null ? null : reg.SourceVariable.RawType); + } + + public static ILOpCode GetSIND(this IRPointer ptr) { + return GetSIND(ptr.Type, ptr.SourceVariable == null ? null : ptr.SourceVariable.RawType); + } + + public static ILOpCode GetPUSHR(ASTType type, TypeSig rawType) { + if (rawType != null) { + switch (rawType.ElementType) { + case ElementType.I1: + case ElementType.U1: + case ElementType.Boolean: + return ILOpCode.PUSHR_BYTE; + + case ElementType.I2: + case ElementType.U2: + case ElementType.Char: + return ILOpCode.PUSHR_WORD; + + case ElementType.I4: + case ElementType.U4: + case ElementType.R4: + return ILOpCode.PUSHR_DWORD; + + case ElementType.I8: + case ElementType.U8: + case ElementType.R8: + case ElementType.Ptr: + return ILOpCode.PUSHR_QWORD; + + default: + // ldobj won't use it, so only references, no pointers + return ILOpCode.PUSHR_OBJECT; + } + } + switch (type) { + case ASTType.I4: + case ASTType.R4: + return ILOpCode.PUSHR_DWORD; + case ASTType.I8: + case ASTType.R8: + case ASTType.Ptr: + return ILOpCode.PUSHR_QWORD; + default: + return ILOpCode.PUSHR_OBJECT; + } + } + + public static ILOpCode GetPUSHR(this IRRegister reg) { + return GetPUSHR(reg.Type, reg.SourceVariable == null ? null : reg.SourceVariable.RawType); + } + + public static ILOpCode GetPUSHR(this IRPointer ptr) { + return GetPUSHR(ptr.Type, ptr.SourceVariable == null ? null : ptr.SourceVariable.RawType); + } + + public static ILOpCode GetPUSHI(this ASTType type) { + switch (type) { + case ASTType.I4: + case ASTType.R4: + return ILOpCode.PUSHI_DWORD; + case ASTType.I8: + case ASTType.R8: + case ASTType.Ptr: + return ILOpCode.PUSHI_QWORD; + } + throw new NotSupportedException(); + } + + public static void PushOperand(this ILTranslator tr, IIROperand operand) { + if (operand is IRRegister) { + var reg = ILRegister.LookupRegister(((IRRegister)operand).Register); + tr.Instructions.Add(new ILInstruction(((IRRegister)operand).GetPUSHR(), reg)); + } + else if (operand is IRPointer) { + var pointer = (IRPointer)operand; + var reg = ILRegister.LookupRegister(pointer.Register.Register); + tr.Instructions.Add(new ILInstruction(pointer.Register.GetPUSHR(), reg)); + if (pointer.Offset != 0) { + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, ILImmediate.Create(pointer.Offset, ASTType.I4))); + if (pointer.Register.Type == ASTType.I4) + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_DWORD)); + else + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_QWORD)); + } + tr.Instructions.Add(new ILInstruction(pointer.GetLIND())); + } + else if (operand is IRConstant) { + var constant = (IRConstant)operand; + if (constant.Value == null) + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, ILImmediate.Create(0, ASTType.O))); + else + tr.Instructions.Add(new ILInstruction(constant.Type.Value.GetPUSHI(), + ILImmediate.Create(constant.Value, constant.Type.Value))); + } + else if (operand is IRMetaTarget) { + var method = (MethodDef)((IRMetaTarget)operand).MetadataItem; + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, new ILMethodTarget(method))); + } + else if (operand is IRBlockTarget) { + var target = ((IRBlockTarget)operand).Target; + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, new ILBlockTarget(target))); + } + else if (operand is IRJumpTable) { + var targets = ((IRJumpTable)operand).Targets; + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, new ILJumpTable(targets))); + } + else if (operand is IRDataTarget) { + var target = ((IRDataTarget)operand).Target; + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, new ILDataTarget(target))); + } + else + throw new NotSupportedException(); + } + + public static void PopOperand(this ILTranslator tr, IIROperand operand) { + if (operand is IRRegister) { + var reg = ILRegister.LookupRegister(((IRRegister)operand).Register); + tr.Instructions.Add(new ILInstruction(ILOpCode.POP, reg)); + } + else if (operand is IRPointer) { + var pointer = (IRPointer)operand; + var reg = ILRegister.LookupRegister(pointer.Register.Register); + tr.Instructions.Add(new ILInstruction(pointer.Register.GetPUSHR(), reg)); + if (pointer.Offset != 0) { + tr.Instructions.Add(new ILInstruction(ILOpCode.PUSHI_DWORD, ILImmediate.Create(pointer.Offset, ASTType.I4))); + if (pointer.Register.Type == ASTType.I4) + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_DWORD)); + else + tr.Instructions.Add(new ILInstruction(ILOpCode.ADD_QWORD)); + } + tr.Instructions.Add(new ILInstruction(pointer.GetSIND())); + } + else + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/KoiVM/VMIR/Compiler/IRAnalyzer.cs b/KoiVM/VMIR/Compiler/IRAnalyzer.cs new file mode 100644 index 0000000..6f05bae --- /dev/null +++ b/KoiVM/VMIR/Compiler/IRAnalyzer.cs @@ -0,0 +1,2082 @@ +/* + * IRAnalyzer.cs + * + * THIS FILE HAS BEEN GENERATED AUTOMATICALLY. DO NOT EDIT! + */ + +using PerCederberg.Grammatica.Runtime; + +namespace KoiVM.VMIR.Compiler { + + /** + * A class providing callback methods for the + * parser. + */ + internal abstract class IRAnalyzer : Analyzer { + + /** + *

    ~zl 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 fW6fd|c|DLbu`vEEc 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 z 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𝔚y`Y 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 literal 0 HcmV?d00001 diff --git a/KoiVM.Console/KVM/InitializePhase.cs b/KoiVM.Console/KVM/InitializePhase.cs new file mode 100644 index 0000000..50abafe --- /dev/null +++ b/KoiVM.Console/KVM/InitializePhase.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Writer; +using KoiVM; +using MethodAttributes = dnlib.DotNet.MethodAttributes; +using System.IO; +using KoiVM.RT.Mutation; +using System.Linq; +using System.Runtime.CompilerServices; + +namespace KVM +{ + public class InitializePhase + { + // fish.cs + public static object VirtualizerKey = new object(); + public static object MergeKey = new object(); + public static HashSet methods = new HashSet(); + public static AssemblyDef moduleConvert; + + public void InitializeP(ModuleDef module, List methodName) + { + foreach (var typeDef in module.Types) + { + foreach (MethodDef methodDef in typeDef.Methods) + { + if (methodName.Contains(methodDef.Name)) + { + methods.Add(methodDef); + } + } + } + + var seed = new Random().Next(1, int.MaxValue); + ModuleDef merge = module; + + string rtName = "Runtime"; + + ModuleDefMD rtModule = ModuleDefMD.Load("Runtime.dll"); + + rtModule.Assembly.Name = rtName; + rtModule.Name = rtName + ".dll"; + var vr = new Virtualizer(seed, false); + vr.ExportDbgInfo = false; + vr.DoStackWalk = false; + vr.Initialize(rtModule); + + VirtualizerKey = vr; + MergeKey = merge; + + vr.CommitRuntime(merge); + var ctor = typeof(InternalsVisibleToAttribute).GetConstructor(new[] { typeof(string) }); + + if (methods.Count > 0) + { + var ca = new CustomAttribute((ICustomAttributeType)module.Import(ctor)); + ca.ConstructorArguments.Add(new CAArgument(module.CorLibTypes.String, vr.RuntimeModule.Assembly.Name.String)); + module.Assembly.CustomAttributes.Add(ca); + } + + MarkPhase(module); + } + + public void MarkPhase(ModuleDef module) + { + //string eddyType = "AstroNet"; + var vr = (Virtualizer)VirtualizerKey; + + var refRepl = new Dictionary(); + + var oldType = module.GlobalType; + var newType = new TypeDefUser(oldType.Name); + oldType.Name = "AstroNet"; + oldType.BaseType = module.CorLibTypes.GetTypeRef("System", "Object"); + module.Types.Insert(0, newType); + + var old_cctor = oldType.FindOrCreateStaticConstructor(); + var cctor = newType.FindOrCreateStaticConstructor(); + old_cctor.Name = "AstroNet"; + old_cctor.IsRuntimeSpecialName = false; + old_cctor.IsSpecialName = false; + old_cctor.Access = MethodAttributes.PrivateScope; + cctor.Body = new CilBody(true, new List { + Instruction.Create(OpCodes.Call, old_cctor), + Instruction.Create(OpCodes.Ret) + }, new List(), new List()); + + for (int i = 0; i < oldType.Methods.Count; i++) + { + var nativeMethod = oldType.Methods[i]; + if (nativeMethod.IsNative) + { + var methodStub = new MethodDefUser(nativeMethod.Name, nativeMethod.MethodSig.Clone()); + methodStub.Attributes = MethodAttributes.Assembly | MethodAttributes.Static; + methodStub.Body = new CilBody(); + methodStub.Body.Instructions.Add(new Instruction(OpCodes.Jmp, nativeMethod)); + methodStub.Body.Instructions.Add(new Instruction(OpCodes.Ret)); + + oldType.Methods[i] = methodStub; + newType.Methods.Add(nativeMethod); + refRepl[nativeMethod] = methodStub; + } + } + + methods.Add(old_cctor); + + var toProcess = new Dictionary>(); + foreach (var entry in new Scanner(module, methods).Scan()) + { + + vr.AddMethod(entry.Item1, entry.Item2); + toProcess.AddListEntry(entry.Item1.Module, entry.Item1); + } + + Utils.ModuleWriterListener.OnWriterEvent += new Listener + { + vr = vr, + methods = toProcess, + refRepl = refRepl, + module = module + }.OnWriterEvent; + } + + class Listener + { + public Virtualizer vr; + public Dictionary> methods; + public Dictionary refRepl; + IModuleWriterListener commitListener = null; + public ModuleDef module; + public void OnWriterEvent(object sender, ModuleWriterListenerEventArgs e) + { + var writer = (ModuleWriter)sender; + if (commitListener != null) + commitListener.OnWriterEvent(writer, e.WriterEvent); + + if (e.WriterEvent == ModuleWriterEvent.MDBeginWriteMethodBodies && methods.ContainsKey(writer.Module)) + { + + vr.ProcessMethods(writer.Module); + + foreach (var repl in refRepl) + vr.Runtime.Descriptor.Data.ReplaceReference(repl.Key, repl.Value); + + commitListener = vr.CommitModule((ModuleDefMD)module); + } + } + } + + } + +} \ No newline at end of file diff --git a/KoiVM.Console/KVM/KVMTask.cs b/KoiVM.Console/KVM/KVMTask.cs new file mode 100644 index 0000000..635d80e --- /dev/null +++ b/KoiVM.Console/KVM/KVMTask.cs @@ -0,0 +1,56 @@ +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Writer; +using System.Collections.Generic; +using System.Linq; +using System.IO; + +namespace KVM +{ + public class KVMTask + { + public void Exceute(ModuleDefMD module, string outPath, string snPath, string snPass, List mList) + { + Utils.ModuleWriterListener = new ModuleWriterListener(); + Utils.ModuleWriterOptions = new ModuleWriterOptions(module); + + Utils.ModuleWriterOptions.Listener = Utils.ModuleWriterListener; + Utils.ModuleWriterOptions.Logger = DummyLogger.NoThrowInstance; + + if (File.Exists(snPath)) + { + StrongNameKey signatureKey = Utils.LoadSNKey(snPath, snPass); + Utils.ModuleWriterOptions.InitializeStrongNameSigning(module, signatureKey); + } + + new InitializePhase().InitializeP(module, mList); + + //Astro_Renewed.Protections.LocalToField.Execute(module); + + MemoryStream output = new MemoryStream(); + module.Write(output, Utils.ModuleWriterOptions); + + File.WriteAllBytes(outPath, output.ToArray()); + } + + private void assemblyReferencesAdder(ModuleDef moduleDefMD) + { + var asmResolver = new AssemblyResolver { EnableTypeDefCache = true }; + var modCtx = new ModuleContext(asmResolver); + asmResolver.DefaultModuleContext = modCtx; + var asmRefs = moduleDefMD.GetAssemblyRefs(); + moduleDefMD.Context = modCtx; + foreach (var asmRef in asmRefs) + { + try + { + if (asmRef == null) continue; + var asm = asmResolver.Resolve(asmRef.FullName, moduleDefMD); + if (asm == null) continue; + moduleDefMD.Context.AssemblyResolver.AddToCache(asm); + } + catch{} + } + } + } +} diff --git a/KoiVM.Console/KVM/ModuleWriterListener.cs b/KoiVM.Console/KVM/ModuleWriterListener.cs new file mode 100644 index 0000000..5810321 --- /dev/null +++ b/KoiVM.Console/KVM/ModuleWriterListener.cs @@ -0,0 +1,26 @@ +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using System; + +namespace KVM +{ + public class ModuleWriterListener : IModuleWriterListener + { + void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) + { + //bool flag = evt == ModuleWriterEvent.PESectionsCreated; + //if (flag) + //{ + // // NativeEraserNew.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); // Don't use + // NativeEraser.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); + //} + bool flag2 = this.OnWriterEvent != null; + if (flag2) + { + this.OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); + } + } + + public event EventHandler OnWriterEvent; + } +} diff --git a/KoiVM.Console/KVM/ModuleWriterListenerEventArgs.cs b/KoiVM.Console/KVM/ModuleWriterListenerEventArgs.cs new file mode 100644 index 0000000..d7230c1 --- /dev/null +++ b/KoiVM.Console/KVM/ModuleWriterListenerEventArgs.cs @@ -0,0 +1,15 @@ +using dnlib.DotNet.Writer; +using System; + +namespace KVM +{ + public class ModuleWriterListenerEventArgs : EventArgs + { + public ModuleWriterListenerEventArgs(ModuleWriterEvent evt) + { + this.WriterEvent = evt; + } + + public ModuleWriterEvent WriterEvent { get; private set; } + } +} diff --git a/KoiVM.Console/KVM/NativeEraser.cs b/KoiVM.Console/KVM/NativeEraser.cs new file mode 100644 index 0000000..7ec40e0 --- /dev/null +++ b/KoiVM.Console/KVM/NativeEraser.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.MD; +using dnlib.DotNet.Writer; +using dnlib.IO; +using dnlib.PE; + +namespace KVM +{ + internal class NativeEraser + { + private static void Erase(Tuple section, uint offset, uint len) + { + Array.Clear(section.Item3, (int)(offset - section.Item1), (int)len); + } + + private static void Erase(List> sections, uint beginOffset, uint size) + { + foreach (Tuple sect in sections) + { + if (beginOffset >= sect.Item1 && beginOffset + size < sect.Item2) + { + Erase(sect, beginOffset, size); + break; + } + } + } + + private static void Erase(List> sections, IFileSection s) + { + foreach (Tuple sect in sections) + { + if ((uint)s.StartOffset >= sect.Item1 && (uint)s.EndOffset < sect.Item2) + { + Erase(sect, (uint)s.StartOffset, (uint)(s.EndOffset - s.StartOffset)); + break; + } + } + } + + private static void Erase(List> sections, uint methodOffset) + { + foreach (Tuple sect in sections) + { + if (methodOffset >= sect.Item1) + { + uint f = (uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1))]; + uint size; + switch (f & 7u) + { + case 2u: + case 6u: + size = (f >> 2) + 1u; + break; + case 3u: + { + f |= (uint)((uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1 + 1u))] << 8); + size = (f >> 12) * 4u; + uint codeSize = BitConverter.ToUInt32(sect.Item3, (int)(methodOffset - sect.Item1 + 4u)); + size += codeSize; + break; + } + case 4u: + case 5u: + goto IL_98; + default: + goto IL_98; + } + Erase(sect, methodOffset, size); + continue; + IL_98: + break; + } + } + } + + public static void Erase(NativeModuleWriter writer, ModuleDefMD module) + { + + if (writer == null || module == null) + { + return; + } + List> sections = new List>(); + MemoryStream s = new MemoryStream(); + foreach (NativeModuleWriter.OrigSection origSect in writer.OrigSections) + { + var oldChunk = origSect.Chunk; + ImageSectionHeader sectHdr = origSect.PESection; + s.SetLength(0L); + oldChunk.WriteTo( new BinaryWriter(s)); + byte[] buf = s.ToArray(); + var newChunk = new BinaryReaderChunk(MemoryImageStream.Create(buf), oldChunk.GetVirtualSize()); + newChunk.SetOffset(oldChunk.FileOffset, oldChunk.RVA); + origSect.Chunk = newChunk; + sections.Add(Tuple.Create(sectHdr.PointerToRawData, sectHdr.PointerToRawData + sectHdr.SizeOfRawData, buf)); + } + + var md = module.MetaData; + uint row = md.TablesStream.MethodTable.Rows; + for (uint i = 1u; i <= row; i += 1u) + { + RawMethodRow method = md.TablesStream.ReadMethodRow(i); + + if ((method.ImplFlags & 3) == 0) + { + Erase(sections, (uint)md.PEImage.ToFileOffset((RVA)method.RVA)); + } + } + ImageDataDirectory res = md.ImageCor20Header.Resources; + if (res.Size > 0u) + { + Erase(sections, (uint)res.StartOffset, res.Size); + } + Erase(sections, md.ImageCor20Header); + Erase(sections, md.MetaDataHeader);// md.MetadataHeader); + foreach (DotNetStream stream in md.AllStreams) + { + Erase(sections, stream); + } + } + + } +} diff --git a/KoiVM.Console/KVM/NativeEraserNew.cs b/KoiVM.Console/KVM/NativeEraserNew.cs new file mode 100644 index 0000000..cd3433b --- /dev/null +++ b/KoiVM.Console/KVM/NativeEraserNew.cs @@ -0,0 +1,126 @@ +/*using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.MD; +using dnlib.DotNet.Writer; +using dnlib.IO; +using dnlib.PE;*/ + +namespace KVM +{ + internal class NativeEraserNew + { + /* private static void Erase(Tuple section, uint offset, uint len) + { + Array.Clear(section.Item3, (int)(offset - section.Item1), (int)len); + } + + private static void Erase(List> sections, uint beginOffset, uint size) + { + foreach (Tuple sect in sections) + { + if (beginOffset >= sect.Item1 && beginOffset + size < sect.Item2) + { + Erase(sect, beginOffset, size); + break; + } + } + } + + private static void Erase(List> sections, IFileSection s) + { + foreach (Tuple sect in sections) + { + if ((uint)s.StartOffset >= sect.Item1 && (uint)s.EndOffset < sect.Item2) + { + Erase(sect, (uint)s.StartOffset, (uint)(s.EndOffset - s.StartOffset)); + break; + } + } + } + + private static void Erase(List> sections, uint methodOffset) + { + foreach (Tuple sect in sections) + { + if (methodOffset >= sect.Item1) + { + uint f = (uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1))]; + uint size; + switch (f & 7u) + { + case 2u: + case 6u: + size = (f >> 2) + 1u; + break; + case 3u: + { + f |= (uint)((uint)sect.Item3[(int)((UIntPtr)(methodOffset - sect.Item1 + 1u))] << 8); + size = (f >> 12) * 4u; + uint codeSize = BitConverter.ToUInt32(sect.Item3, (int)(methodOffset - sect.Item1 + 4u)); + size += codeSize; + break; + } + case 4u: + case 5u: + goto IL_98; + default: + goto IL_98; + } + Erase(sect, methodOffset, size); + continue; + IL_98: + break; + } + } + } + + public static void Erase(NativeModuleWriter writer, ModuleDefMD module) + { + + if (writer == null || module == null) + { + return; + } + List> sections = new List>(); + MemoryStream s = new MemoryStream(); + foreach (NativeModuleWriter.OrigSection origSect in writer.OrigSections) + { + var oldChunk = origSect.Chunk; + ImageSectionHeader sectHdr = origSect.PESection; + s.SetLength(0L); + oldChunk.WriteTo(new DataWriter(s)); + byte[] buf = s.ToArray(); + var newChunk = new DataReaderChunk(ByteArrayDataReaderFactory.CreateReader(buf), oldChunk.GetVirtualSize()); + newChunk.SetOffset(oldChunk.FileOffset, oldChunk.RVA); + origSect.Chunk = newChunk; + sections.Add(Tuple.Create(sectHdr.PointerToRawData, sectHdr.PointerToRawData + sectHdr.SizeOfRawData, buf)); + } + + var md = module.Metadata; + uint row = md.TablesStream.MethodTable.Rows; + for (uint i = 1u; i <= row; i += 1u) + { + RawMethodRow method; + md.TablesStream.TryReadMethodRow(i, out method); + + if ((method.ImplFlags & 3) == 0) + { + Erase(sections, (uint)md.PEImage.ToFileOffset((RVA)method.RVA)); + } + } + ImageDataDirectory res = md.ImageCor20Header.Resources; + if (res.Size > 0u) + { + Erase(sections, (uint)res.StartOffset, res.Size); + } + Erase(sections, md.ImageCor20Header); + Erase(sections, md.MetadataHeader); + foreach (DotNetStream stream in md.AllStreams) + { + Erase(sections, stream); + } + }*/ + } +} diff --git a/KoiVM.Console/KVM/SafeAnalyzer.cs b/KoiVM.Console/KVM/SafeAnalyzer.cs new file mode 100644 index 0000000..c585207 --- /dev/null +++ b/KoiVM.Console/KVM/SafeAnalyzer.cs @@ -0,0 +1,33 @@ +using dnlib.DotNet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace KoiVM +{ + public class SafeAnalyzer + { + public static bool CanObfuscate(MethodDef item) + { + if (item.IsRuntimeSpecialName) + return false; + if (item.IsConstructor || item.IsStaticConstructor) + return false; + if (item.DeclaringType.IsForwarder) + return false; + if (!item.HasBody) + return false; + if (!item.Body.HasInstructions) + return false; + if (item.FullName.Contains(".My")) //VB.NET + return false; + if (item.DeclaringType.IsGlobalModuleType) + return false; + if (item.FullName.Contains("")) + return false; + return true; + } + } +} diff --git a/KoiVM.Console/KVM/Utils.cs b/KoiVM.Console/KVM/Utils.cs new file mode 100644 index 0000000..8cc549f --- /dev/null +++ b/KoiVM.Console/KVM/Utils.cs @@ -0,0 +1,65 @@ +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace KVM +{ + public static class Utils + { + public static ModuleWriterOptions ModuleWriterOptions; + + public static ModuleWriterListener ModuleWriterListener; + + /* public static string GetMemberName(Expression> memberExpression) + { + MemberExpression expressionBody = (MemberExpression)memberExpression.Body; + return expressionBody.Member.Name; + } + public static string GetMethodInfo(Expression> expression) + { + var member = expression.Body as MethodCallExpression; + + if (member != null) + return member.Method.Name; + + throw new ArgumentException("Expression is not a method", "expression"); + }*/ + public static void AddListEntry(this IDictionary> self, TKey key, TValue value) + { + bool flag = key == null; + bool flag3 = flag; + if (flag3) + { + throw new ArgumentNullException("key"); + } + List list; + bool flag2 = !self.TryGetValue(key, out list); + bool flag4 = flag2; + if (flag4) + { + list = (self[key] = new List()); + } + list.Add(value); + } + + public static StrongNameKey LoadSNKey(string path, string pass) + { + if (pass != null) //pfx + { + var cert = new X509Certificate2(); + cert.Import(path, pass, X509KeyStorageFlags.Exportable); + + var rsa = cert.PrivateKey as RSACryptoServiceProvider; + if (rsa == null) + throw new ArgumentException("RSA key does not present in the certificate.", "path"); + + return new StrongNameKey(rsa.ExportCspBlob(true)); + } + return new StrongNameKey(path); + } + } +} diff --git a/KoiVM.Console/KoiVM.Console.csproj b/KoiVM.Console/KoiVM.Console.csproj new file mode 100644 index 0000000..4f4942a --- /dev/null +++ b/KoiVM.Console/KoiVM.Console.csproj @@ -0,0 +1,75 @@ + + + + + Debug + AnyCPU + {7B4CC52C-6682-40DF-BE9E-0177DC358DF5} + Library + Properties + KoiVM.Console + KoiVM.Console + v4.7.2 + 512 + + + + AnyCPU + true + full + false + ..\bin\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + ..\Release\ + TRACE + prompt + 4 + true + false + + + + + + + ..\References\dnlibOld.dll + + + + + + + + + + + + + + + + + + + + {9e333771-bc67-4120-9c67-d15311c0f67c} + KoiVM + + + + + \ No newline at end of file diff --git a/KoiVM.Console/Properties/AssemblyInfo.cs b/KoiVM.Console/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..018b9b3 --- /dev/null +++ b/KoiVM.Console/Properties/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System; +using System.Reflection; + +[assembly: AssemblyTitle("KoiVM.Console")] +[assembly: AssemblyDescription("KoiVM Console")] diff --git a/KoiVM.Console/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/KoiVM.Console/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/KoiVM.Console/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/KoiVM.Console/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/KoiVM.Console/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/KoiVM.Console/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/KoiVM.Console/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/KoiVM.Console/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..566d75143fdbbd3bde3fd468a9d3685fd6ed39fd GIT binary patch literal 150 zcmeZu3JP{+WMpJuU|`H~wu%WT%1nTg8KxQfo9vf73lZv)?q4Xe1K(2Os*T=WZVgcY`}hYFRP% zHrGD$3dVQ2v@^0+lVUx)mP&4e(p-v_>3KU%f2m}~_l&P#MSyP<^HRwzzwB}6Eu0kP z0f?1ydZsd0S*T1;yK`wa!v+X)@e@ej``mL0Z(SHrvi`GT^*Sg!&(yl8`$j*+!4H|| z$s=%AwT4>RJ6St6AZS+l9`?>iQQ_4b_h8&%!sRYA(CSIGdaB}kUQV$Z97%Q1YAUia zwvAnA%Sq2gd!JBck*O+}_OOCq)?hYKiGI$jLMq5Yg`q3fg*G_9&g>eBU)|iPp{~*O z0l!|w<16*&Mek&1&Jsk?@$0x;$5Z!xp4N2-@9hU-dJ&_iU^sDdij zMxAs9#L+MVAq^!25zzXtbWUiMEX(o zMWay*KPV%8e-0E*w1FCiC$6t!DB$cjAV6`)euvKbFuk*LLl@i;+syM}i*fbgb-Qc9 zC@!k0WKBC#dA!`&W3&Hzi!Cg$IcIKudTC}B(u+&Gshj3;OQ#x!A9lOz)?2PF8tsK> z7*W*TO<^d%TuRxuwSQI6tqb<*N)Gu`>5%U zXm+`jheKqbkX#d0E&!>9sFqx5P)#x*v!#r5v99@JEC2q-wM?;4TGd9$O)#aml5cMy zV-Z?FDoTxvw1})J57>0rrpO(NWIN2+hxlh?*$9e97boAk2{eqb64+ym zdL-NSB?I%UQBu(C^*NSfHO)P13`;{;o3>}tGt*1)FYtF{C_$d5k2OxhKH{S0S`V-s zvt7@#CV~Qk z`0Yys+7BD(9T&e5T8s|v9^L5Cjjmp-yUo^vSKS^aG-`TaPxIelaF5>im|DP=zhmuF z?`p!KmrbDD;wKXyVZ?p67r)DQtDW7!!T48r>b0H((N@Z~TF+7Z6w1k)AXXe;e2s-z z4l|`uV#on)K0lc#QRXYP38HZHB#1}Te64R#Oq^z}P2HYZFR*p=^am~sCF>}Qw~m|V z%zBCSlc&Y&^O7fL)+=o94mJN4HQhVSvm@f)l({^!Qdsq-OB69de48#I)^{kvSv1Q= r)w`j@LykGjMY@^@_&mbg34(wkgr5GtdS}{y{lBDlrnU3fyTktiOtjUg literal 0 HcmV?d00001 diff --git a/KoiVM.Console/obj/Debug/KoiVM.Console.csproj.AssemblyReference.cache b/KoiVM.Console/obj/Debug/KoiVM.Console.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..5e88fb594cb7ffc50e34d3b328ac8711e7d0fa36 GIT binary patch literal 669 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 XL)Sm;>%!n~#&@6lryYhr)!F|y!$4@A literal 0 HcmV?d00001 diff --git a/KoiVM.Console/obj/Debug/KoiVM.Console.pdb b/KoiVM.Console/obj/Debug/KoiVM.Console.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8f1b48bb1cc8cbe41b85950149f2f8afd61289fc GIT binary patch literal 28160 zcmeHP3wV`9dY=Cf4n(;H2neDc5Rgkax!<@+$VCDKkOWqjsGOYqNe($VC!TWxrn_bT zU=+7r3SR5=akbk=E%fPDwpw+oZIOy~cdc%%t?st^xZ2&eq89h@*;?uQ&gJCKG2ArK z4avad{b%NznQvyk`R1FM|NJ$fU@RJsHYI%J+2sot`f6&ce8v8poUvz3uc#Gp9{FDs z<1xo#gb+mvhX0-cJ@DMIVKY|ZU^-~PK7SH_naQl@Fs z&qRqgFU?PlN~R4z44xk7YyNXVbnAbH*`ib&Jgpq&^msimJpRY)nV}K?NyDWV9~$*) z#-3X7-1>(--#b{j=I&p;`%1>1i&gmS`>+3IM$@YqKUyHfC!?!>H2&rJH$0g!Y31%4 zcZ|F4u6b&#j)~!d^g%@ngU0nW0s~-R5qQKKbqc;a% zEBkBw55M`bXfE>K;n~u;=*neVp854TJD2-c{mIpLefZ-${O`TrGWdFCXmH$L9z|eQ4C4vCj;R-W+_b?62{k`tYkay=MR5 zjU_kjyYbTWi5-9Ni@Ux%Av-wkjmnnRzn%Dx&knwx85$h-*Z5y=?ezWqvE?HhuFLYi zv^ekE&(3HnkNw%g-G^&_STn)%*5RSin}e^F{Wbm#8Fz2mx#xeU1m3Y;y63Lk;0qfL zJn`<9XKtP_zWFzy2adE4zMdHx9QW7w?|bu}G*9}&xr@f!yv6yqL#0<;nR)oNZBNbp z$rGP_`qvLG^$(5S9K5YuJ4*3xaPYQdnDf)=fzOV7c7zAHqrLc3vABMtz1@z*ZC_=i zITW$&SSZq5-xy7-tE}@?g~E2czC7B9I33uqasBGb^19mkvUnmEU1uli*F-~`Yy9QW zNIV+0>(^|qsjrTN5}`mi^n3P(mO$M02jfCCF0PO1itOGMMeKyHNmdk86{$dbEV|7O zCgSx0Rs^E@)@W#Zn?I;4YTe#eA4*o#ZYmm(2BA@Pfp{w$G9c|hTN1kb0pY(U+Sn1c zzYz;1?AY2+JYh%d*nl;rO;)x;Ru*t~;*E%3=-INH0 z2d+&Wru2U2J=(CXzQS(kXs-7|sZ_-RZT606tTk&h)J`ZGS+>2vU+mBGm&N0DTSK_B zERl$X8afj8z_gXzG%9YORGO09Pzk!Y321Hty}0T3zS$6qw%f5p2x``}zdF(s9T3Td zMm2Sr)`fIk)3Fr1jrYFjCgURLAzlW#TpkvT%kXNzU&7yt=VS1%xYFH^TwAumhv0KY z3UMF2abeUk-UNp6Yw3Y=-_Egaz#uINK6%@>zW2`-$Ln+)&Bk%?%;#LJa#9}V;gMzk zbj*K$pNGGc6UqS7Y(*yjQXUNLZ9i3Nbla^_2TFShkJ@>3@w~&@|fwW9>({i2|+J#N! zkC2x0gtSa^(<16?ah%#m;rZ$h+f2v)A9h2d2RP(KVnGI5yA|_-?hOUHA&m;aBa#TU+2Fga9b1xEtsUDQ3fkDe2(b%vWi@u9CED0yqWJ3E zE%B!&XZd9E`fy{G&zL)T{v7_x@|Aal6CE*oS;X#0!~)?g--eEca45LO?yQTp+L2|2 zId*ALesM`dkzHI|T3QMorVF1Ow{#&Sk}qXxtFc*%@ED9u9`F@ChRnk;bLWZK?O{aW zRd28Kt3_Jc;fsHL=<&;6tA1uqy65RXJ+PJOHKIb6m4-6qxXV03oDEF#iV^1kt*M?W zkMoSTtIO)@lIdRI*Yb5x%a?o2p9uL{hDAimmp_<@#suh3Qa^~(;K!hR$|w2$2+yCw zD;czsGCT=!AHdUHk0pxr>;{eo-T*}X;{79^IhnxkB20aKBk&R(Ujw`e;dQ`UfC1nh zV1q`8k<8BnPR4fv_W~c%;r%+D7hty`{$GH%1OF9x2XHK;HACdXXCX$2Oi_*J9r8H? z5}JwGnJH$71tM3*oev3}Cbo!+#C#df6l*{~QLr5L!EAWdpH|YgVw*WObl1u{OQp_d zA25w>f&$beL;?IN9Ug`=y9YRr&HUV_o0?Q62xE?U_re~Ka-!#_(ficZq&4X$)z5lO z;C#(Hl{t>GDVJ0m%6r9PtxNt3adfmljT;MIA2Pf)+li}styW6EnfzH=@Hq#J8;AUl zn*8y;^K*`IZm2d}vi;1@ex$yoLzxcwf{vAX<}4uF0X^xYLx-kgwHk|=N;Gp;@ogpB zfq5oY4bgkk8~{)?xckTC!i6{f9nJs_eLJH*#!f=W#6DX>E3_ z+16=P3+}X7VjWK61nhNR2F0LvnmRH@G{#)nkM8vCF;yQ_XRmz9n(MJee}+n%KtpDc zU-C#j=`JhL*=|?ZO;WZRLH{y*9%!<39`Xmh+AB|+G{c#z$A+bBQXh{-W9otHPzmcK z|6_peI)j0pd{>@qT>?LxGiF`Vwy!1m>uRyO9<{oDY<2zC+I6pW?bF`z)_CtGYm>*> z@9CazbvH=+I!~`*KVyf%b)Zb+@aW}SBCnz*5Nnl}CaMn;XiGctklxU+JtRd`QU=U; zunc#6%x>C9Q=hVd_+DwzaAO_1UZ!#U-T5N+4w=TjXWQLr$ahsx4>ZeVlicYhjd`g^ z+-Zp@4m`1+;)aUj^$031Kmk8TcrOUaKifwcapwzZ`WwIu&nlik_-;)<3-nwU-SiRc z_qN+=H-;ox*OSPbg}iqn{8u_JdBj@XE3cBR+C)bK;tUV zy~@B#Xh< zJ>9~)`!Q?xW30#6bS3O`xC<1>zi7I59{!MD;a4McI(shUOYXVWqVMP|{4;AnHo_}( zJnRmK^-KdYipc#R_goZMhI!r$@0<&Scen>3E&!5_bBp0ZAkrNE{`frLYMsu#+4%@# ztIu{iobNv16~LLmD}l^UxnX%78n**yA)dP}^07 zbyg|D>w$}bLEsYLoxr8QM}fih+81yI?SlfiQ?YNou;l>5UBSb@2ufSV3Z z)&3GCz-5AJ8n`4f-Y+FiCds_BfzB;Buc_#Hh<~8aNt#8v|Yl zgg$m=1DQV?$b3sQE(K!#T%Q1b8|g~c@-Tiz4odM%x!4F#xu}FMgP#vy0MEGP@MVxP z%t|;V55lYo5zDzXtwy#bFr$_v-wYGC;Rkf&4ojy8Z_v^;%KZ*vJ$#Q$!PqS73P$d^Cq?_6b#_*S*`0Vf0WD4Y6=H1MO7MyG&L<>r?FezX?za?QPNhR ze7VzDW}Z&t*rcWvAdc(%y3@2%Q4Y^&tru@x!Y$={GKLSsBLqpkEfw(`0hn^M_bY8PBfsMxHU%DWA znh&(~K+bcGWLhj9ki3z zc}E+?OYn3)%x#Y8OyJqTSwPx#7XnE~oyf9jA7lct-Z(zsJRocUX&+E;z=m-+W~4_q zOM3xpy0jOtE79g+R6wnpN6o;N6*vFnD*UrP&_vEbWrzKkl~-_+&tgD1RgyLmx)y^11tJi^a$yXA`as(?^Kyi9=I0ngFguW zCj7ALzaF5DY0&!Lr~8)UY#heI+iLWGuiGtkxazO&^L4V6n?j{0SQqCV%Qt0ynYDtt zgnWX%q`olv^OW@k@>9mBcc_b@Gdv7iUE4fe_b9zceQ^!E;@Oh?BPiuG%m+Bw1#&)t z5veaG0;w-JPgve0gvsP&Aan-gUfHNqfNGu;Vh*_HdL6>!dd-Pj_4sgp9K|zju`la5 zCPwdf>+*NI3Ps;~F9DHEs=OwM+ew?rX6>gPOL{}o*LZ%B`&{=rf82ZHl)Ky1dtW0T z7}unHL^~4g9SOxhbebpt|K|XA>o)TIK+8fhPdwC&BLrN|$`wz^1m&yhRMsPuZRCr3 z7V-H(_Ng9I?mLV_KJQP=7?_u}Hrh>g%#Psr1Xh_HBQ3{- z@A7ahW`2{0=Ne2$5y>_M;%yskyrYX3-J~7D@pY%;z0L9jgr0p!mfUGFZ&O^>_YyL4 zjo$#8ky=kM59s^Iqj;p;J_wIBLX6XSxc1{QHBWNwXCIxC%>#b8{-Z3e{~jNntx1+` zIsfGCDzNzf6;IcFo?RF8%inL+4_QMX4XEJPWu?}-gvk<=mNSlW3&jzjnl5VXIuLI^F z{z_mj(AMeL+fI!GGP3-}IQCp8es=V59~7R6{24pJyo&J2d`W$D^-hd_dzg z9Zz{;zW>v>A7wGTU#CB>ag&bk)ZzV_zD>vfQipSO`gJ<~c^!YV#(+*=rqe&xVSuc6 zuPY3a<2x#8T7L>&dD$^`wav=CRLA zeH87^(UbQyo;XJR?N*$mz%fYYIzJm8dPm;j*8#V}Q}<%26W#E8;Hfhnfjyb_rM78 z#W(dvz9^3)j69a~$Rp!DqG!|SruP_n7!-50JaX^i5y#))nEZ-P&lwut!|n_B0O$CQ z^jr&FkM(iJEz`uL#B^w?7obbpxwav`0=mvP?hB^L!28dcIQ4Zn_xIsU3URVn>Q!N% z)Pe3a+|l9JqAtzLA8v|*f~xY;qS7iudE)Z1tJ3_1!86<8b}V22U{mB*<`?Hx5e;^<;cbifg1o%^{DS<3#zldW!qPkwl z`R#$xx}nrd%tIU{Iku2v1ms{OY)-yyV*Yu=Z$bAk@)f~1pv>3d8Ao>ue82xr^Gp4P zwcoip!LLU9y)LNIzJAa@AocX6UX!Yizlj}?T9d!49+1-eYSVxw#bg)P2sr6j>m%8 zEp`Bx4-MgHuvJCK&vj%sensE+kUR`vm99^540KhvaKTqO)X(?aAIkVT>h1OQih*Vz z`KgJ4tmsR9=V2fjJHcld&W7Td3{RE4bE`4vlo^HVW|%=dE>h-P8m21EEL<~7)9(Qw zY0{CI<#Yjg1nPl_gzGHP3LFRI#Rp&epd0?AyXuD__4iz~)(1ZxMm@KDQ?WVFTR((w zCJrg%c}okPkLTwh%?CdNWu!r{u7SiI!1Hs+=fLP+1>xj5!a<~QKf?VM_kG+WQ;2z| zh`U1G6UwuBZqO<2Je%YmXCgcWo09?TNr9zsQ?M!26le-FCqO1V&nR#zAkX`GR>4Wa zcFut3Jr(aXxmWYS&xD@^e + + + + + \ No newline at end of file diff --git a/KoiVM.GUI/Form1.Designer.cs b/KoiVM.GUI/Form1.Designer.cs new file mode 100644 index 0000000..5d932fd --- /dev/null +++ b/KoiVM.GUI/Form1.Designer.cs @@ -0,0 +1,165 @@ +namespace AstroNet +{ + partial class Form1 + { + ///

    u+H!}w-kLJ1v*ln6PkVR_ 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

    rL{RDBD(pWzrS{|27##z%4u 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

    + /// Clones the specified origin TypeDef. + /// + /// The origin TypeDef. + /// The cloned TypeDef. + static TypeDefUser Clone(TypeDef origin) + { + var ret = new TypeDefUser(origin.Namespace, origin.Name); + ret.Attributes = origin.Attributes; + + if (origin.ClassLayout != null) + ret.ClassLayout = new ClassLayoutUser(origin.ClassLayout.PackingSize, origin.ClassSize); + + foreach (GenericParam genericParam in origin.GenericParameters) + ret.GenericParameters.Add(new GenericParamUser(genericParam.Number, genericParam.Flags, "-")); + + return ret; + } + + /// + /// Clones the specified origin MethodDef. + /// + /// The origin MethodDef. + /// The cloned MethodDef. + static MethodDefUser Clone(MethodDef origin) + { + var ret = new MethodDefUser(origin.Name, null, origin.ImplAttributes, origin.Attributes); + + foreach (GenericParam genericParam in origin.GenericParameters) + ret.GenericParameters.Add(new GenericParamUser(genericParam.Number, genericParam.Flags, "-")); + + return ret; + } + + /// + /// Clones the specified origin FieldDef. + /// + /// The origin FieldDef. + /// The cloned FieldDef. + static FieldDefUser Clone(FieldDef origin) + { + var ret = new FieldDefUser(origin.Name, null, origin.Attributes); + return ret; + } + + /// + /// Populates the context mappings. + /// + /// The origin TypeDef. + /// The injection context. + /// The new TypeDef. + static TypeDef PopulateContext(TypeDef typeDef, InjectContext ctx) + { + TypeDef ret; + IDnlibDef existing; + if (!ctx.Map.TryGetValue(typeDef, out existing)) + { + ret = Clone(typeDef); + ctx.Map[typeDef] = ret; + } + else + ret = (TypeDef)existing; + + foreach (TypeDef nestedType in typeDef.NestedTypes) + ret.NestedTypes.Add(PopulateContext(nestedType, ctx)); + + foreach (MethodDef method in typeDef.Methods) + ret.Methods.Add((MethodDef)(ctx.Map[method] = Clone(method))); + + foreach (FieldDef field in typeDef.Fields) + ret.Fields.Add((FieldDef)(ctx.Map[field] = Clone(field))); + + return ret; + } + + /// + /// Copies the information from the origin type to injected type. + /// + /// The origin TypeDef. + /// The injection context. + static void CopyTypeDef(TypeDef typeDef, InjectContext ctx) + { + var newTypeDef = (TypeDef)ctx.Map[typeDef]; + + newTypeDef.BaseType = (ITypeDefOrRef)ctx.Importer.Import(typeDef.BaseType); + + foreach (InterfaceImpl iface in typeDef.Interfaces) + newTypeDef.Interfaces.Add(new InterfaceImplUser((ITypeDefOrRef)ctx.Importer.Import(iface.Interface))); + } + + /// + /// Copies the information from the origin method to injected method. + /// + /// The origin MethodDef. + /// The injection context. + static void CopyMethodDef(MethodDef methodDef, InjectContext ctx) + { + var newMethodDef = (MethodDef)ctx.Map[methodDef]; + + newMethodDef.Signature = ctx.Importer.Import(methodDef.Signature); + newMethodDef.Parameters.UpdateParameterTypes(); + + if (methodDef.ImplMap != null) + newMethodDef.ImplMap = new ImplMapUser(new ModuleRefUser(ctx.TargetModule, methodDef.ImplMap.Module.Name), methodDef.ImplMap.Name, methodDef.ImplMap.Attributes); + + foreach (CustomAttribute ca in methodDef.CustomAttributes) + newMethodDef.CustomAttributes.Add(new CustomAttribute((ICustomAttributeType)ctx.Importer.Import(ca.Constructor))); + + if (methodDef.HasBody) + { + newMethodDef.Body = new CilBody(methodDef.Body.InitLocals, new List(), new List(), new List()); + newMethodDef.Body.MaxStack = methodDef.Body.MaxStack; + + var bodyMap = new Dictionary(); + + foreach (Local local in methodDef.Body.Variables) + { + var newLocal = new Local(ctx.Importer.Import(local.Type)); + newMethodDef.Body.Variables.Add(newLocal); + newLocal.Name = local.Name; + newLocal.Attributes = local.Attributes; + + bodyMap[local] = newLocal; + } + + foreach (Instruction instr in methodDef.Body.Instructions) + { + var newInstr = new Instruction(instr.OpCode, instr.Operand); + newInstr.SequencePoint = instr.SequencePoint; + + if (newInstr.Operand is IType) + newInstr.Operand = ctx.Importer.Import((IType)newInstr.Operand); + + else if (newInstr.Operand is IMethod) + newInstr.Operand = ctx.Importer.Import((IMethod)newInstr.Operand); + + else if (newInstr.Operand is IField) + newInstr.Operand = ctx.Importer.Import((IField)newInstr.Operand); + + newMethodDef.Body.Instructions.Add(newInstr); + bodyMap[instr] = newInstr; + } + + foreach (Instruction instr in newMethodDef.Body.Instructions) + { + if (instr.Operand != null && bodyMap.ContainsKey(instr.Operand)) + instr.Operand = bodyMap[instr.Operand]; + + else if (instr.Operand is Instruction[]) + instr.Operand = ((Instruction[])instr.Operand).Select(target => (Instruction)bodyMap[target]).ToArray(); + } + + foreach (ExceptionHandler eh in methodDef.Body.ExceptionHandlers) + newMethodDef.Body.ExceptionHandlers.Add(new ExceptionHandler(eh.HandlerType) + { + CatchType = eh.CatchType == null ? null : (ITypeDefOrRef)ctx.Importer.Import(eh.CatchType), + TryStart = (Instruction)bodyMap[eh.TryStart], + TryEnd = (Instruction)bodyMap[eh.TryEnd], + HandlerStart = (Instruction)bodyMap[eh.HandlerStart], + HandlerEnd = (Instruction)bodyMap[eh.HandlerEnd], + FilterStart = eh.FilterStart == null ? null : (Instruction)bodyMap[eh.FilterStart] + }); + + newMethodDef.Body.SimplifyMacros(newMethodDef.Parameters); + } + } + + /// + /// Copies the information from the origin field to injected field. + /// + /// The origin FieldDef. + /// The injection context. + static void CopyFieldDef(FieldDef fieldDef, InjectContext ctx) + { + var newFieldDef = (FieldDef)ctx.Map[fieldDef]; + + newFieldDef.Signature = ctx.Importer.Import(fieldDef.Signature); + } + + /// + /// Copies the information to the injected definitions. + /// + /// The origin TypeDef. + /// The injection context. + /// if set to true, copy information of . + static void Copy(TypeDef typeDef, InjectContext ctx, bool copySelf) + { + if (copySelf) + CopyTypeDef(typeDef, ctx); + + foreach (TypeDef nestedType in typeDef.NestedTypes) + Copy(nestedType, ctx, true); + + foreach (MethodDef method in typeDef.Methods) + CopyMethodDef(method, ctx); + + foreach (FieldDef field in typeDef.Fields) + CopyFieldDef(field, ctx); + } + + /// + /// Injects the specified TypeDef to another module. + /// + /// The source TypeDef. + /// The target module. + /// The injected TypeDef. + public static TypeDef Inject(TypeDef typeDef, ModuleDef target) + { + var ctx = new InjectContext(typeDef.Module, target); + PopulateContext(typeDef, ctx); + Copy(typeDef, ctx, true); + return (TypeDef)ctx.Map[typeDef]; + } + + /// + /// Injects the specified MethodDef to another module. + /// + /// The source MethodDef. + /// The target module. + /// The injected MethodDef. + public static MethodDef Inject(MethodDef methodDef, ModuleDef target) + { + var ctx = new InjectContext(methodDef.Module, target); + ctx.Map[methodDef] = Clone(methodDef); + CopyMethodDef(methodDef, ctx); + return (MethodDef)ctx.Map[methodDef]; + } + + /// + /// Injects the members of specified TypeDef to another module. + /// + /// The source TypeDef. + /// The new type. + /// The target module. + /// Injected members. + public static IEnumerable Inject(TypeDef typeDef, TypeDef newType, ModuleDef target) + { + var ctx = new InjectContext(typeDef.Module, target); + ctx.Map[typeDef] = newType; + PopulateContext(typeDef, ctx); + Copy(typeDef, ctx, false); + return ctx.Map.Values.Except(new[] { newType }); + } + + /// + /// Context of the injection process. + /// + class InjectContext : ImportResolver + { + /// + /// The mapping of origin definitions to injected definitions. + /// + public readonly Dictionary Map = new Dictionary(); + + /// + /// The module which source type originated from. + /// + public readonly ModuleDef OriginModule; + + /// + /// The module which source type is being injected to. + /// + public readonly ModuleDef TargetModule; + + /// + /// The importer. + /// + readonly Importer importer; + + /// + /// Initializes a new instance of the class. + /// + /// The origin module. + /// The target module. + public InjectContext(ModuleDef module, ModuleDef target) + { + OriginModule = module; + TargetModule = target; + importer = new Importer(target, ImporterOptions.TryToUseTypeDefs); + importer.Resolver = this; + } + + /// + /// Gets the importer. + /// + /// The importer. + public Importer Importer + { + get { return importer; } + } + + /// + public override TypeDef Resolve(TypeDef typeDef) + { + if (Map.ContainsKey(typeDef)) + return (TypeDef)Map[typeDef]; + return null; + } + + /// + public override MethodDef Resolve(MethodDef methodDef) + { + if (Map.ContainsKey(methodDef)) + return (MethodDef)Map[methodDef]; + return null; + } + + /// + public override FieldDef Resolve(FieldDef fieldDef) + { + if (Map.ContainsKey(fieldDef)) + return (FieldDef)Map[fieldDef]; + return null; + } + } +} + diff --git a/VM.Core/Injection/InjectInitialise.cs b/VM.Core/Injection/InjectInitialise.cs new file mode 100644 index 0000000..634b868 --- /dev/null +++ b/VM.Core/Injection/InjectInitialise.cs @@ -0,0 +1,200 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using dnlib.PE; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Core.Injection +{ + class InjectInitialise + { + public static MemberRef conversionInit; + public static MemberRef convertBack; + + public static void initaliseMethod() + { + + byte[] conversionPlain = System.IO.File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Runtime.dll")); + conversionAssembly = Assembly.Load(conversionPlain).ManifestModule; + + conversionDef = ModuleDefMD.Load(conversionPlain); + + } + public static void injectIntoCctor(ModuleDefMD moduleDefMD, string ResName) + { + + //var conversionTypes = conversionDef.Types; + + foreach (TypeDef t in conversionDef.Types) + { + foreach (MethodDef m in t.Methods) + { + if (m.Name == "Initalize") + { + conversionInit = (MemberRef)moduleDefMD.Import(m); + } + if (m.Name == "Runner") + { + convertBack = (MemberRef)moduleDefMD.Import(m); + } + } + } + + //conversionInit = Protector.moduleDefMD.Import(conversionTypes[33].Methods[2]); + var a = typeof(Resource); + var asm = ModuleDefMD.Load(typeof(Resource).Assembly.Location); + var tester2 = asm.GetTypes(); + var abc = InjectHelper.Inject(tester2.ToArray()[13], moduleDefMD.GlobalType, moduleDefMD); + foreach (MethodDef md in moduleDefMD.GlobalType.Methods) + { + if (md.Name == ".ctor") + { + moduleDefMD.GlobalType.Remove(md); + //Now we go out of this mess + break; + } + } + if (moduleDefMD.GlobalType.FindOrCreateStaticConstructor().Body == null) + { + var cil = new CilBody(); + + + cil.Instructions.Add(new Instruction(OpCodes.Call, moduleDefMD.Types[0].Methods[0])); + + cil.Instructions.Add(new Instruction(OpCodes.Ret)); + moduleDefMD.GlobalType.FindOrCreateStaticConstructor().Body = cil; + } + else + { + var vody = moduleDefMD.GlobalType.FindOrCreateStaticConstructor().Body; + //vody.Instructions.Insert(0, new Instruction(OpCodes.Call, Protector.moduleDefMD.Types[0].Methods[3])); + vody.Instructions.Insert(0, new Instruction(OpCodes.Call, moduleDefMD.Types[0].Methods.Where(i => i.Name == "setup").First())); + + if ((moduleDefMD.Characteristics & Characteristics.Dll) != 0) + { + + vody.Instructions.Insert(1, new Instruction(OpCodes.Ldstr, "TestResc")); + + vody.Instructions.Insert(2, new Instruction(OpCodes.Call, InjectInitialise.conversionInit)); + + + } + + + } + } + public static void InjectMethod(ModuleDefMD moduleDefMD ,MethodDef meth, int pos, int id, int size) + { + Console.WriteLine("started"); + var containsOut = false; + meth.Body.Instructions.Clear(); + var rrr = meth.Parameters.Where(i => i.Type.FullName.EndsWith("&")); + if (rrr.Count() != 0) + containsOut = true; + + var rrg = moduleDefMD.CorLibTypes.Object.ToSZArraySig(); + var loc = new Local(moduleDefMD.CorLibTypes.Object); + var loc2 = new Local(new SZArraySig(moduleDefMD.CorLibTypes.Object)); + var cli = new CilBody(); + foreach (var bodyVariable in meth.Body.Variables) + cli.Variables.Add(bodyVariable); + cli.Variables.Add(loc); + cli.Variables.Add(loc2); + var outParams = new List(); + var testerDictionary = new Dictionary(); + if (containsOut) + foreach (var parameter in rrr) + { + var locf = new Local(parameter.Type.Next); + testerDictionary.Add(parameter, locf); + cli.Variables.Add(locf); + } + + + + var outp = 0; + cli.Instructions.Add(new Instruction(OpCodes.Ldc_I4, meth.Parameters.Count)); + cli.Instructions.Add(new Instruction(OpCodes.Newarr, moduleDefMD.CorLibTypes.Object.ToTypeDefOrRef())); + for (var i = 0; i < meth.Parameters.Count; i++) + { + var par = meth.Parameters[i]; + cli.Instructions.Add(new Instruction(OpCodes.Dup)); + cli.Instructions.Add(new Instruction(OpCodes.Ldc_I4, i)); + if (containsOut) + if (rrr.Contains(meth.Parameters[i])) + { + cli.Instructions.Add(new Instruction(OpCodes.Ldloc, testerDictionary[meth.Parameters[i]])); + outp++; + } + else + { + cli.Instructions.Add(new Instruction(OpCodes.Ldarg, meth.Parameters[i])); + } + else + cli.Instructions.Add(new Instruction(OpCodes.Ldarg, meth.Parameters[i])); + + if (true) + { + cli.Instructions.Add(par.Type.FullName.EndsWith("&") + ? new Instruction(OpCodes.Box, par.Type.Next.ToTypeDefOrRef()) + : new Instruction(OpCodes.Box, par.Type.ToTypeDefOrRef())); + cli.Instructions.Add(new Instruction(OpCodes.Stelem_Ref)); + } + } + + + cli.Instructions.Add(new Instruction(OpCodes.Stloc, loc2)); + + cli.Instructions.Add(new Instruction(OpCodes.Ldc_I4, pos)); + + + cli.Instructions.Add(new Instruction(OpCodes.Ldc_I4, size)); + cli.Instructions.Add(new Instruction(OpCodes.Ldc_I4, id)); + + cli.Instructions.Add(new Instruction(OpCodes.Ldloc, loc2)); + + + cli.Instructions.Add(new Instruction(OpCodes.Call, convertBack)); + if (meth.HasReturnType) + cli.Instructions.Add(new Instruction(OpCodes.Unbox_Any, meth.ReturnType.ToTypeDefOrRef())); + else + cli.Instructions.Add(new Instruction(OpCodes.Stloc, loc)); + if (containsOut) + { + foreach (var parameter in rrr) + { + /*10 0012 ldloc.1 + 11 0013 ldc.i4.0 + 12 0014 ldelem.ref + 13 0015 castclass [mscorlib]System.String + 14 001A stloc.0 + */ + cli.Instructions.Add(new Instruction(OpCodes.Ldarg, parameter)); + cli.Instructions.Add(new Instruction(OpCodes.Ldloc, loc2)); + cli.Instructions.Add(new Instruction(OpCodes.Ldc_I4, meth.Parameters.IndexOf(parameter))); + cli.Instructions.Add(new Instruction(OpCodes.Ldelem_Ref)); + cli.Instructions.Add(new Instruction(OpCodes.Unbox_Any, parameter.Type.Next.ToTypeDefOrRef())); + cli.Instructions.Add(new Instruction(OpCodes.Stind_Ref)); + + + } + cli.Instructions.Add(new Instruction(OpCodes.Ret)); + } + else + cli.Instructions.Add(new Instruction(OpCodes.Ret)); + // module.EntryPoint.Body.Instructions.Insert(0, new Instruction(OpCodes.Ldstr, "Tester")); + // module.EntryPoint.Body.Instructions.Insert(1, new Instruction(OpCodes.Call, init)); + // module.EntryPoint.Body.Instructions.Insert(1, new Instruction(OpCodes.Stloc, loc)); + meth.Body = cli; + meth.Body.UpdateInstructionOffsets(); + meth.Body.MaxStack += 10; + } + + public static System.Reflection.Module conversionAssembly { get; set; } + + public static ModuleDefMD conversionDef { get; set; } + } +} diff --git a/VM.Core/Injection/InjectMethods.cs b/VM.Core/Injection/InjectMethods.cs new file mode 100644 index 0000000..4f2bb28 --- /dev/null +++ b/VM.Core/Injection/InjectMethods.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using dnlib.DotNet; + +namespace Core.Injection +{ + class InjectMethods + { + public static void methodInjector(ModuleDefMD moduleDefMD) + { + int pos = 0; + foreach (Protection.MethodData methodData in Protection.MethodProccesor.AllMethods) + { + methodData.position = pos; + var cipherLen = (methodData.DecryptedBytes.Length / 16 + 1) * 16; + methodData.cipherSize = cipherLen; + Console.WriteLine("injecting"); + Injection.InjectInitialise.InjectMethod(moduleDefMD, methodData.Method, methodData.position, methodData.ID, methodData.cipherSize); + + + pos += cipherLen; + + } + } + } +} diff --git a/VM.Core/Injection/Resource.cs b/VM.Core/Injection/Resource.cs new file mode 100644 index 0000000..88dbaff --- /dev/null +++ b/VM.Core/Injection/Resource.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Core.Injection +{ + class Resource + { + private static byte[] array; + + public static void setup() + { + if (Debugger.IsAttached) Environment.Exit(0); + + using (Stream stream = Assembly.GetCallingAssembly().GetManifestResourceStream("ASTRO_COOL")) + using (StreamReader reader = new StreamReader(stream)) + { + + array = new byte[stream.Length]; + stream.Read(array, 0, array.Length); + + + } + AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly; + } + public static Assembly ResolveAssembly(Object sender, ResolveEventArgs e) + { + + return e.Name.Contains("Runtime") ? Assembly.Load(array) : null; + + } + } +} diff --git a/VM.Core/Properties/AssemblyInfo.cs b/VM.Core/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..993da1d --- /dev/null +++ b/VM.Core/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Core")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Core")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4412d7b9-710c-4433-944b-7ce491edd989")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/VM.Core/Properties/Resources.Designer.cs b/VM.Core/Properties/Resources.Designer.cs new file mode 100644 index 0000000..5667d24 --- /dev/null +++ b/VM.Core/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Core.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Core.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] ConversionBack { + get { + object obj = ResourceManager.GetObject("ConversionBack", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] NativeEncoderx64 { + get { + object obj = ResourceManager.GetObject("NativeEncoderx64", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] NativeEncoderx86 { + get { + object obj = ResourceManager.GetObject("NativeEncoderx86", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] XorMethod { + get { + object obj = ResourceManager.GetObject("XorMethod", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/VM.Core/Properties/Resources.resx b/VM.Core/Properties/Resources.resx new file mode 100644 index 0000000..986a5b3 --- /dev/null +++ b/VM.Core/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\ConversionBack.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\NativeEncoderx64.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\NativeEncoderx86.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\XorMethod.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/VM.Core/Protection/ConvertToBytes.cs b/VM.Core/Protection/ConvertToBytes.cs new file mode 100644 index 0000000..8afac2e --- /dev/null +++ b/VM.Core/Protection/ConvertToBytes.cs @@ -0,0 +1,400 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +namespace Core.Protection +{ + internal class ConvertToBytes + { + private BinaryWriter _binWriter; + public byte[] ConvertedBytes; + private readonly MethodDef _methods; + public bool Successful; + + public ConvertToBytes(MethodDef methodDef) + { + _methods = methodDef; + ConvertedBytes = null; + Successful = false; + } + [Obfuscation(Feature = "virtualization", Exclude = false)] + public void ConversionMethod(ModuleDefMD moduleDefMD) + { + _binWriter = new BinaryWriter(new MemoryStream()); //create a binary writer + ExceptionStarter(moduleDefMD);//Process Method Exception handlers. + _binWriter.Write(_methods.Body.Instructions + .Count); //write the amount of instructions so the conversion method knows how many instructions to look for + foreach (var ins in _methods.Body.Instructions) //loop all instructions in method + { + OpcodeWriter(ins.OpCode); //write the byte of the opcode to resolve to later + var opType = ins.OpCode.OperandType; //get the opcode operand type + //148 021A call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + if (ins.Operand != null && (ins.Operand.ToString().Contains("StackTrace") || ins.Operand.ToString().Contains("Assembly") || ins.Operand.ToString().Contains("GetMethodFromHandle"))) + { + throw new Exception(); + } + switch (opType) + { + case OperandType.InlineNone: + InlineNone(ins); + continue; + case OperandType.InlineMethod: + InlineMethod(ins); + continue; + case OperandType.InlineString: + InlineString(ins); + continue; + case OperandType.InlineI: + InlineI(ins); + continue; + case OperandType.ShortInlineVar: + ShortInlineVar(ins); + continue; + case OperandType.InlineField: + InlineField(ins); + continue; + case OperandType.InlineType: + InlineType(ins); + continue; + case OperandType.ShortInlineBrTarget: + ShortInlineBrTarget(_methods.Body.Instructions, ins); + continue; + case OperandType.ShortInlineI: + ShortInlineI(ins); + continue; + case OperandType.InlineSwitch: + InlineSwitch(_methods.Body.Instructions, ins); + continue; + case OperandType.InlineBrTarget: + InlineBrTarget(_methods.Body.Instructions, ins); + continue; + case OperandType.InlineTok: + InlineTok(ins); + continue; + case OperandType.InlineVar: + InlineVar(ins); + continue; + case OperandType.ShortInlineR: + ShortInlineR(ins); + break; + case OperandType.InlineR: + InlineR(ins); + break; + case OperandType.InlineI8: + InlineI8(ins); + break; + default: + throw new Exception(string.Format("OperandType {0} Not Supported", opType)); + } + } + Successful = true; + var buffer = new byte[_binWriter.BaseStream.Length]; + _binWriter.BaseStream.Position = 0; + _binWriter.BaseStream.Read(buffer, 0, buffer.Length); + ConvertedBytes = buffer; + } + + private void OpcodeWriter(OpCode opcode) + { + _binWriter.Write((short)opcode.Value); //write its code in byte format + } + #region ExceptionHandlerCode + [Obfuscation(Feature = "virtualization", Exclude = false)] + private void ExceptionStarter(ModuleDefMD moduleDefMD) + { + if (_methods.MDToken.ToInt32() == 100663324) + { + + } + var allInstructions = _methods.Body.Instructions; + _binWriter.Write(_methods.Body.ExceptionHandlers.Count);//we write the amount of exception handlers in the method + foreach (ExceptionHandler bodyExceptionHandler in _methods.Body.ExceptionHandlers) + { + //just pass all the fields to a variable for ease of access + var catchType = bodyExceptionHandler.CatchType; + var filterStart = bodyExceptionHandler.FilterStart; + var handlerEnd = bodyExceptionHandler.HandlerEnd; + var handlerStart = bodyExceptionHandler.HandlerStart; + var handlerType = bodyExceptionHandler.HandlerType; + var tryEnd = bodyExceptionHandler.TryEnd; + var tryStart = bodyExceptionHandler.TryStart; + //catchType + var catchResolveTypeDef = catchType.ResolveTypeDef(); + var imported = moduleDefMD.Import(catchResolveTypeDef).ResolveTypeDef(); + //catchType may be null so we need to account for this + if (catchType == null) + { + //-1 is appropriate since we can use this to detect a empty catch type + _binWriter.Write(-1); + } + + else + { + if (imported.Module != _methods.Module) + _binWriter.Write(catchType.MDToken.ToInt32()); + else + _binWriter.Write(imported.MDToken.ToInt32()); + } + //we get the index of the exceptionHandler information and write its instruction index so we can use this to start and end exception handlers using dynamic methods + //filterStart + var filterStartIndex = allInstructions.IndexOf(filterStart); + if (filterStartIndex == -1) + _binWriter.Write(-1); + else + _binWriter.Write(filterStartIndex); + //handlerEnd + var handlerendIndex = allInstructions.IndexOf(handlerEnd); + if (handlerendIndex == -1) + _binWriter.Write(-1); + else + _binWriter.Write(handlerendIndex); + //handlerStart + var handlerStartIndex = allInstructions.IndexOf(handlerStart); + if (handlerStartIndex == -1) + _binWriter.Write(-1); + else + _binWriter.Write(handlerStartIndex); + //handlerType + //there are many different handler types however catch and finally are the most common the others you will rarely see + switch (handlerType) + { + case ExceptionHandlerType.Catch: + _binWriter.Write((byte)1); + break; + case ExceptionHandlerType.Duplicated: + _binWriter.Write((byte)2); + break; + case ExceptionHandlerType.Fault: + _binWriter.Write((byte)3); + break; + case ExceptionHandlerType.Filter: + _binWriter.Write((byte)4); + break; + case ExceptionHandlerType.Finally: + _binWriter.Write((byte)5); + break; + } + //tryEnd + var tryEndIndex = allInstructions.IndexOf(tryEnd); + if (tryEndIndex == -1) + _binWriter.Write(-1); + else + _binWriter.Write(tryEndIndex); + //tryStart + var tryStartIndex = allInstructions.IndexOf(tryStart); + if (tryStartIndex == -1) + _binWriter.Write(-1); + else + _binWriter.Write(tryStartIndex); + } + } + #endregion + #region operandTypeConversions + + private void InlineNone(Instruction instruction) + { + _binWriter.Write((byte)0); //write 0 so when converting back i know that this refers to a inline none operand type + } + + private void InlineMethod(Instruction instruction) + { + _binWriter.Write((byte)1); //write 1 so when converting back i know its a inline method + if (instruction.Operand is MethodSpec) + { + var methodSpec = instruction.Operand as MethodSpec; //cast the operand to a methoddef(if included in current module) or methodref (if in an external module) + if (methodSpec == null) + throw new Exception("Check the instruction. This should not happen"); + var mdToken = methodSpec.MDToken.ToInt32(); + _binWriter.Write(mdToken); + } + else + { + var methodDeforRef = instruction.Operand as IMethodDefOrRef; //cast the operand to a methoddef(if included in current module) or methodref (if in an external module) + if (methodDeforRef == null) + throw new Exception("Check the instruction. This should not happen"); + var mdToken = methodDeforRef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + } + + } + + private void InlineString(Instruction instruction) + { + _binWriter.Write((byte)2); //write 2 so when converting back i know its a inline string + var operand = instruction.Operand.ToString(); //get the instructions operand + _binWriter.Write(operand); //write string into binaryWriter. + } + + private void InlineI(Instruction instruction) + { + _binWriter.Write((byte)3); //write 3 so when converting back i know its a inlineI + var operand = instruction.GetLdcI4Value(); //get the instructions operand as an integer since inlineI is ints + _binWriter.Write(operand); //write string into binaryWriter. + } + + private void ShortInlineVar(Instruction instruction) + { + _binWriter.Write((byte)4); //write 4 so when converting back i know its a shortInlineVar + if (instruction.Operand is Local) + { + var loc = instruction.Operand as Local; //cast it to a local(variable) + _binWriter.Write(loc.Index); //write its index so can refer to it in conversion back + _binWriter.Write((byte)0); + } + else if (instruction.Operand is Parameter) + { + var par = instruction.Operand as Parameter; //cast it to a local(variable) + _binWriter.Write(par.Index); //write its index so can refer to it in conversion back + _binWriter.Write((byte)1); + } + } + + private void InlineField(Instruction instruction) + { + _binWriter.Write((byte)5); //write 5 so when converting back i know its a inline field + if (instruction.Operand is MemberRef) + { + var memberRef = instruction.Operand as MemberRef; //cast the operand to a fielddef + if (memberRef == null) + throw new Exception("Check the instruction. This should not happen"); + var mdToken = memberRef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + } + else + { + var fieldDef = instruction.Operand as FieldDef; //cast the operand to a fielddef + if (fieldDef == null) + throw new Exception("Check the instruction. This should not happen"); + var mdToken = fieldDef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + } + + } + + private void InlineType(Instruction instruction) + { + _binWriter.Write((byte)6); //write 6 so when converting back i know its a inline type + var typeDeforRef = instruction.Operand as ITypeDefOrRef; //cast the operand to a typeDef or typeRef + if (typeDeforRef == null) + throw new Exception("Check the instruction. This should not happen"); + var mdToken = typeDeforRef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + } + + private void ShortInlineBrTarget(IList allInstructions, Instruction instruction) + { + _binWriter.Write((byte)7); //write 7 so i know its shortinlinebrtarger when converting back + var index = allInstructions + .IndexOf((Instruction)instruction.Operand); //get the index of the instruction in all instructions so i can use this to mark the instruction as a branch location + _binWriter.Write(index); + } + + private void ShortInlineI(Instruction instruction) + { + _binWriter.Write((byte)8); //write 8 so when converting back i know its a shortInlineI + var operand = instruction.GetLdcI4Value(); //get the instructions operand as an integer since inlineI is ints + _binWriter.Write((byte)operand); //write string into binaryWriter. + } + + private void InlineSwitch(IList allInstructions, Instruction instruction) + { + _binWriter.Write((byte)9); //write 9 so i know its inlineSwitch when converting back + var allLocations = instruction.Operand as Instruction[]; + _binWriter.Write(allLocations.Count()); + foreach (var switchLocation in allLocations) + { + var index = allInstructions + .IndexOf(switchLocation); //get the index of the instruction in all instructions so i can use this to mark the instruction as a branch location + _binWriter.Write(index); + } + } + + private void InlineBrTarget(IList allInstructions, Instruction instruction) + { + _binWriter.Write((byte)10); //write 10 so i know its inlinebrTarget when converting back + var index = allInstructions + .IndexOf((Instruction)instruction.Operand); //get the index of the instruction in all instructions so i can use this to mark the instruction as a branch location + _binWriter.Write(index); + } + + private void InlineTok(Instruction instruction) + { + _binWriter.Write((byte)11); //write 11 so when converting back i know its a inlineTok + //inlineTok can be a field method or a type so we need to check which first + if (instruction.Operand is FieldDef) + { + + var fieldDef = instruction.Operand as FieldDef; //cast the operand to a typeDef or typeRef + var mdToken = fieldDef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + _binWriter.Write((byte)0);//says its fielddef + } + else if (instruction.Operand is ITypeDefOrRef) + { + + var typeDeforRef = instruction.Operand as ITypeDefOrRef; //cast the operand to a typeDef or typeRef + var mdToken = typeDeforRef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + _binWriter.Write((byte)1);//says its type + } + else if (instruction.Operand is IMethodDefOrRef) + { + + var methoDefOrRef = instruction.Operand as IMethodDefOrRef; //cast the operand to a typeDef or typeRef + var mdToken = methoDefOrRef.MDToken.ToInt32(); + _binWriter.Write(mdToken); + _binWriter.Write((byte)2);//says its method + } + else + { + throw new Exception("Check the instruction. This should not happen"); + } + } + private void InlineVar(Instruction instruction) + { + _binWriter.Write((byte)12); //write 12 so when converting back i know its a InlineVar + if (instruction.Operand is Local) + { + var loc = instruction.Operand as Local; //cast it to a local(variable) + _binWriter.Write(loc.Index); //write its index so can refer to it in conversion back + _binWriter.Write((byte)0); + } + else if (instruction.Operand is Parameter) + { + var par = instruction.Operand as Parameter; //cast it to a local(variable) + _binWriter.Write(par.Index); //write its index so can refer to it in conversion back + _binWriter.Write((byte)1); + } + else + { + _binWriter.Write(0); //write its index so can refer to it in conversion back + _binWriter.Write((byte)0); + } + + } + private void ShortInlineR(Instruction instruction) + { + _binWriter.Write((byte)13); //write 8 so when converting back i know its a shortInlineI + var operand = instruction.Operand; //get the instructions operand as an integer since inlineI is ints + _binWriter.Write((float)operand); //write string into binaryWriter. + } + private void InlineR(Instruction instruction) + { + _binWriter.Write((byte)14); //write 8 so when converting back i know its a shortInlineI + var operand = instruction.Operand; //get the instructions operand as an integer since inlineI is ints + _binWriter.Write((double)operand); //write string into binaryWriter. + } + private void InlineI8(Instruction instruction) + { + _binWriter.Write((byte)15); //write 8 so when converting back i know its a shortInlineI + var operand = instruction.Operand; //get the instructions operand as an integer since inlineI is ints + _binWriter.Write((long)operand); //write string into binaryWriter. + } + + #endregion + } +} \ No newline at end of file diff --git a/VM.Core/Protection/MethodData.cs b/VM.Core/Protection/MethodData.cs new file mode 100644 index 0000000..c7f8189 --- /dev/null +++ b/VM.Core/Protection/MethodData.cs @@ -0,0 +1,26 @@ +using dnlib.DotNet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Core.Protection +{ + public class MethodData + { + public MethodDef Method;//the methoddef + public byte[] DecryptedBytes;//the decrypted bytes + public byte[] EncryptedBytes;//the encrypted bytes + public bool Converted = false;//check to see if ive done conversion + public bool Encrypted = false;//check to see if ive encrypted + public int ID;//method ID + public int size;//byte array size + public int cipherSize; + public int position; + public MethodData(MethodDef methods) + { + Method = methods; + } + } +} diff --git a/VM.Core/Protection/MethodProccesor.cs b/VM.Core/Protection/MethodProccesor.cs new file mode 100644 index 0000000..3270610 --- /dev/null +++ b/VM.Core/Protection/MethodProccesor.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using dnlib.PE; +using Core.Injection; + +namespace Core.Protection +{ + internal class MethodProccesor + { + public static List AllMethods = new List(); + public static void ModuleProcessor(ModuleDefMD moduleDefMD) + { + + Injection.InjectInitialise.initaliseMethod(); + + int value = 0; + foreach (var typeDef in moduleDefMD.GetTypes()) + { + if (typeDef == moduleDefMD.GlobalType) continue; + + if (typeDef.HasGenericParameters) continue; + + // if (!typeDef.FullName.Contains("MainWindow")) continue; + if (typeDef.CustomAttributes.Count(i => i.TypeFullName.Contains("CompilerGenerated")) != 0) continue; + if (typeDef.IsValueType) continue; + foreach (var method in typeDef.Methods) + { + //if (method.MDToken.ToInt32() != 0x0600017E) continue; + // if (Protector.moduleDefMD.EntryPoint != method) continue; + if (method.IsConstructor) continue; + if (!CanBeProtected(method)) continue;//check to see if we can protect the method + if (!method.HasBody) continue; + if (typeDef.IsGlobalModuleType && method.IsConstructor) continue; + if (method.HasGenericParameters) continue; + if (method.CustomAttributes.Count(i => i.TypeFullName.Contains("CompilerGenerated")) != 0) continue; + if (method.ReturnType == null) continue; + if (method + .ReturnType.IsGenericParameter) continue; + + if (method.Parameters.Count(i => i.Type.FullName.EndsWith("&") && i.ParamDef.IsOut == false) != 0) continue; + if (method.CustomAttributes.Count(i => i.NamedArguments.Count == 2 && + i.NamedArguments[0].Value.ToString().Contains("Encrypt") && + i.NamedArguments[1].Name.Contains("Exclude") && i.NamedArguments[1].Value + .ToString().ToLower().Contains("true")) != 0) continue; + MethodData methodData = new MethodData(method);//create instance of custom class + + method.Body.SimplifyMacros(method.Parameters); + method.Body.SimplifyBranches(); + var convertor = new ConvertToBytes(method); + try + { + convertor.ConversionMethod(moduleDefMD);//we convert our method to byte array + + if (!convertor.Successful) continue;//only carry on if the conversion was successful + methodData.Converted = true;//set conversion to true + methodData.DecryptedBytes = convertor.ConvertedBytes;//set methodData bytes to the coverted bytes + methodData.ID = value;//set the methodID + AllMethods.Add(methodData); + value++;//increase value which is methodID + } + catch + { + + } + + + + + } + } + + + + Injection.InjectInitialise.injectIntoCctor(moduleDefMD, "AstroNet_");//inject the setup methods into the module cctor which is the very first method that is executed in the .net module + Injection.InjectMethods.methodInjector(moduleDefMD);//inject the methods to remove the old code and add the call to the decryption + //if ((Protector.moduleDefMD.Characteristics & Characteristics.Dll) == 0) + //{ + // var vody = Protector.moduleDefMD.EntryPoint.Body; + // vody.Instructions.Insert(0, new Instruction(OpCodes.Ldstr, "TestResc")); + // vody.Instructions.Insert(1, new Instruction(OpCodes.Call, InjectInitialise.conversionInit)); + //} + if ((moduleDefMD.Characteristics & Characteristics.Dll) == 0) + { + bool set = false; + var vody = moduleDefMD.GlobalType.FindOrCreateStaticConstructor().Body; + for (int i = 1; i < vody.Instructions.Count; i++) + { + if (vody.Instructions[i].OpCode == OpCodes.Call) + { + MethodDef method = (MethodDef)vody.Instructions[i].Operand; + method.Body.Instructions.Insert(0, new Instruction(OpCodes.Ldstr, "AstroNet_")); + + method.Body.Instructions.Insert(1, new Instruction(OpCodes.Call, InjectInitialise.conversionInit)); + set = true; + break; + } + } + if (set == false) + { + var vody2 = moduleDefMD.EntryPoint.Body; + vody2.Instructions.Insert(0, new Instruction(OpCodes.Ldstr, "AstroNet_")); + + vody2.Instructions.Insert(1, new Instruction(OpCodes.Call, InjectInitialise.conversionInit)); + } + } + + ByteEncryption.Process.processConvertedMethods(moduleDefMD, AllMethods); + List allBytes = new List(); + foreach (var meth in AllMethods) + { + allBytes.AddRange(meth.EncryptedBytes);//add all bytes of all methods into one byte array + } + byte[] bytesName = Encoding.ASCII.GetBytes(Protector.name); + bytesName = ByteEncryption.ByteEncryption.Encrypt(new byte[] { 0xDD, 0xFF, 0x15, 0x53, 0xa2, 0x65, 0x90, 0x12, 0x00, 0xaa, 12, 54, 66, 34, 23, 65 }, bytesName); + allBytes.AddRange(bytesName); + byte[] tester2 = exclusiveOR(allBytes.ToArray()); + // byte[] decrypted = exclusiveOR(tester2, File.ReadAllBytes(Protector.path2)); + + EmbeddedResource emb = new EmbeddedResource("AstroNet_", tester2);//create an embededd resource which we add to module later + + moduleDefMD.Resources.Add(emb);//add to module + + } + public static byte[] exclusiveOR(byte[] arr1) + { + + Random rand = new Random(23546654); + + byte[] result = new byte[arr1.Length]; + for (int i = 0; i < arr1.Length; i++) + { + result[i] = (byte)(arr1[i] ^ rand.Next(0, 250)); + } + + + return result; + } + + private static bool CanBeProtected(MethodDef method) + { + //if method has body we can protect + //if its a globalModuleType we have possible issues since reflection has fail safes meaning we cant resolve to this module + return method.HasBody || !method.DeclaringType.IsGlobalModuleType; + } + } +} \ No newline at end of file diff --git a/VM.Core/Protector.cs b/VM.Core/Protector.cs new file mode 100644 index 0000000..aa561b2 --- /dev/null +++ b/VM.Core/Protector.cs @@ -0,0 +1,66 @@ +using System; +using System.Linq; +using System.Reflection; +using System.IO; +using dnlib.DotNet; +using dnlib.DotNet.Writer; +using Core.Properties; + +namespace Core +{ + public class Protector + { + public static string path2; + + public static string name { get; private set; } + + public static void Protect(ModuleDefMD moduleDefMD) + { + Console.WriteLine("Hi"); + + name = "AstroNet"; //Key + + asmRefAdder(moduleDefMD); //this will resolve references (dlls) such as mscorlib and any dlls the unprotected binary may use. this will be to make sure resolving methods/types/fields in another assembly can be correctly identified + Console.WriteLine("processing"); + Protection.MethodProccesor.ModuleProcessor(moduleDefMD); //this will process the module + Console.WriteLine("Passed processing"); + var nativePath = Resources.NativeEncoderx86; + EmbeddedResource emv = new EmbeddedResource("ASTRO", (nativePath)); + moduleDefMD.Resources.Add(emv); + EmbeddedResource emv64 = new EmbeddedResource("ASTR0", (Resources.NativeEncoderx64)); + moduleDefMD.Resources.Add(emv64); + + byte[] cleanConversion = File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Runtime.dll")); + + EmbeddedResource embc = new EmbeddedResource("ASTRO_COOL", cleanConversion); //Full + moduleDefMD.Resources.Add(embc); + + EmbeddedResource emb = new EmbeddedResource("AstroNet", Resources.XorMethod); //XorMethod + moduleDefMD.Resources.Add(emb); + } + + + private static void asmRefAdder(ModuleDefMD moduleDefMD) + { + var asmResolver = new AssemblyResolver { EnableTypeDefCache = true }; + var modCtx = new ModuleContext(asmResolver); + asmResolver.DefaultModuleContext = modCtx; + var asmRefs = moduleDefMD.GetAssemblyRefs().ToList(); + moduleDefMD.Context = modCtx; + foreach (var asmRef in asmRefs) + { + try + { + if (asmRef == null) + continue; + var asm = asmResolver.Resolve(asmRef.FullName, moduleDefMD); + if (asm == null) + continue; + moduleDefMD.Context.AssemblyResolver.AddToCache(asm); + + } + catch { } + } + } + } +} diff --git a/VM.Core/Resources/ConversionBack.dll b/VM.Core/Resources/ConversionBack.dll new file mode 100644 index 0000000000000000000000000000000000000000..3225d4bf6deb51e5ef9792e7c173d694a00bd60c GIT binary patch literal 175104 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%0D%}C=IhzovTC4ZGaw6%*o8;>@%*2ZqW?SjYnynK7 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 literal 0 HcmV?d00001 diff --git a/VM.Core/Resources/NativeEncoderx64.dll b/VM.Core/Resources/NativeEncoderx64.dll new file mode 100644 index 0000000000000000000000000000000000000000..d43fdf5083d0b006a42e906976704e474f5e8b7d GIT binary patch literal 39936 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 C5~wWz literal 0 HcmV?d00001 diff --git a/VM.Core/Resources/NativeEncoderx86.dll b/VM.Core/Resources/NativeEncoderx86.dll new file mode 100644 index 0000000000000000000000000000000000000000..213bb7ded798a7d93519b65fc66216e5d07bad7d GIT binary patch literal 41472 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 I0{=+hFDRh`rvLx| literal 0 HcmV?d00001 diff --git a/VM.Core/Resources/XorMethod.bin b/VM.Core/Resources/XorMethod.bin new file mode 100644 index 0000000000000000000000000000000000000000..682baa0b3394accc50d2120af273d3a256cf8c1e GIT binary patch literal 158 zcmWe*m-9|%6h9@vz{bG<1k50Ug_W0s5lFLxI2=qsf+q_|h;f1hIYE4|GBAse6Uc?A zWd8+ZNt_27#V;Tz29{+9=@0@NfzZdoD$D^gfD=TB=zv%tWgIL(f@dm-3u65TVgPln B2c-Z2 literal 0 HcmV?d00001 diff --git a/VM.Core/VM.Core.csproj b/VM.Core/VM.Core.csproj new file mode 100644 index 0000000..52dd09e --- /dev/null +++ b/VM.Core/VM.Core.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {4412D7B9-710C-4433-944B-7CE491EDD989} + Library + Properties + Core + Core + v4.7.2 + 512 + + + + true + full + true + ..\Bin\ + DEBUG + prompt + 4 + x86 + true + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\References\dnlibOld.dll + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + + + + + {520b7746-86a7-4021-87b4-507236a14cae} + Runtime + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VM.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/VM.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/VM.Core/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/VM.Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/VM.Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/VM.Core/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/VM.Core/obj/Debug/Core.Properties.Resources.resources b/VM.Core/obj/Debug/Core.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..d7c236ebdb3fa275416a37a331a67956b4486343 GIT binary patch literal 257032 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%0D5_xsH? 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%0A`AZyXEx25Pos;e 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%0AEnu4S=(;2i$-(`GBo>sLVFN=PjTK+zo)^$ExiD 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

    {Oj#tK7^??C8pJU}wwh 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 literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/Core.csproj.CopyComplete b/VM.Core/obj/Debug/Core.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/VM.Core/obj/Debug/Core.csproj.CoreCompileInputs.cache b/VM.Core/obj/Debug/Core.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..4ca324f --- /dev/null +++ b/VM.Core/obj/Debug/Core.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +843a60fb1ed72f6544452ce5049e612fd70af422 diff --git a/VM.Core/obj/Debug/Core.csproj.FileListAbsolute.txt b/VM.Core/obj/Debug/Core.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..4d7a387 --- /dev/null +++ b/VM.Core/obj/Debug/Core.csproj.FileListAbsolute.txt @@ -0,0 +1,25 @@ +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Bin\Core.dll +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Bin\Core.pdb +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Core\obj\Debug\Core.csprojResolveAssemblyReference.cache +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Core\obj\Debug\Core.dll +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Core\obj\Debug\Core.pdb +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Core\obj\Debug\Core.Properties.Resources.resources +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Core\obj\Debug\Core.csproj.GenerateResource.Cache +C:\Users\4355678931\Desktop\CawkVM\Bin\Core.dll +C:\Users\4355678931\Desktop\CawkVM\Bin\Core.pdb +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.csprojAssemblyReference.cache +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.Properties.Resources.resources +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.csproj.GenerateResource.cache +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.csproj.CoreCompileInputs.cache +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.csproj.CopyComplete +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.dll +C:\Users\4355678931\Desktop\CawkVM\Core\obj\Debug\Core.pdb +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Bin\Core.dll +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Bin\Core.pdb +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.csproj.AssemblyReference.cache +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.Properties.Resources.resources +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.csproj.GenerateResource.cache +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.csproj.CopyComplete +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.dll +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Core\obj\Debug\Core.pdb diff --git a/VM.Core/obj/Debug/Core.csproj.GenerateResource.cache b/VM.Core/obj/Debug/Core.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..50712ec4a114f3471be1a61440a1ad571e2c4681 GIT binary patch literal 1145 zcma)5!EO^V5ZyG{Z8k~81_@ON4iN$gk!Y2ur1TOYC8bc&phBvuhYI9fPgE<;I@sPQ z;li~CzJib98#wR}FtfBJYEu*+#@_K8Kfm!?C+9fMZyYq!sH|c5*cY)@Mh$J)O@-v) z5i=tb_LPQ3?HIHXD(SS^VJmEg%|@-4N}FovB#>IoWTSSNMpDFYVSc1WkaVKv*04Q% zF>JMXyUDhgOJq-%b9?~v8j@X@K*Ax31(*VYeGTShPe?G;iPDxu5)MS9na2Iih#CA! zM!*TND>TGb>3MBnnFUI95m5hRKno_t7vL8P3Wc2WX!$J``Kci*!qy1u=PA&wORh`n z6^f}L6}})k|8Ouj7RK0fDNzqL+=OqKIm@(XG%nWUh$iFna8aPte+$u;~g`Zfnz4?l%!t(Zvb=Jg*}SsMoGe!#Vo2B+9$d>yW^7+^ zF%-b>UE711FxGe|Y9p6D@dlFkB=7Ur^Y7n&{y5K7DMj4g9SqMFREOa|;io;7O#l9- zT^5f*E~OVBzHuA=9kXHzuaX#_UeC6lXBE}eD|WWCio00xY!z CrcjCi literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/Core.csprojAssemblyReference.cache b/VM.Core/obj/Debug/Core.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..17fc0184e624fe2e9dcf1d0db7fe7e4d9841425a GIT binary patch literal 6052 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 literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/Core.dll b/VM.Core/obj/Debug/Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..b5d3ea181c3f109637c6b2c524d0ed9ab098fc4c GIT binary patch literal 313344 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

    {mCM!**iqi@>nfw-l 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 F{|EN>q|X2V literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/CoreCompileInputs.cache b/VM.Core/obj/Debug/CoreCompileInputs.cache new file mode 100644 index 0000000..3dbe4c1 --- /dev/null +++ b/VM.Core/obj/Debug/CoreCompileInputs.cache @@ -0,0 +1 @@ +01785de8d7886110443c35c94100e8fb8fb1f4d3 diff --git a/VM.Core/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/VM.Core/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..eed1e757f470934aa6daffa31caaea7ac2cad57e GIT binary patch literal 723 zcmaKqQE$^Q5XZf=>Dnwq{Qx`!iHD(8R-#fENYykVs!e0lMyv4>A-VBov+Bf??QE3K z!MEV6@XnXu1Ms%_x^94|=7+y?_T}z(cP49ukQ=vf#}#@`J|Br(E29ca-_=5LI$>sJ zXsR^yqBGD&sA`xDXhLHe_oB3xw$?DLpthRHUUX7VrN|FqK2bBMhSRuT42su9lJG&y z`pm~<&sOIc&y9t0Y?%f0>J&o4!fHIdyK)p#LT(*`q5I5SST>b_)SZTtCd#9(>&_wg zpco&q+$z1ktf!r-@{(!LT@0Ek4kub&2@blA2V?OSnyw<#I%Bd1Lr9}Re1D_8D%Zh% ztmiA35B`h)>vU%qiwy#V?=(?-Ctdu)i&o3YEPb0fq;t*6Xym$LqOC7GuU=#yp#Tk4 z4$+=5P`b{8$sU@UjhsJRD?Q8T@%zai>*^(qvnAdqQE_!`=t$|(P%dQ`(=Ymu-SSbk zA42}~CjOe&Hc~BSg}9+)#vUmy3IRN1cWCot2NQC*go-<4M;e-(Sqpkm(Gy))R+O+D p$!2lSj=vGl^VYmgoHY49|NZmZkNqGBT5V?rSPbpQ{p3xsaSH+z+@t^i literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/VM.Core/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..88245119fbb9a2965810100f538b516782a22713 GIT binary patch literal 7254 zcmeHMS#ujj5SDywEISTX2u@-rL4g1Xh((HTSLGp=kkiVs%s9t z%`aDR|3dreSt%dw)aKkW^IU;zq~f3_8lGXQ1WdWRo6PL$iQ2h_v4)aW^blEfQ$dYu zqmH^05@?tKa^VyzI_->8D3j;9)}`QkpdMb{oaegXvm*jLKd}{P)6I#SO1hx6RL^ns z+@MVua;+)g6$4>-9a>Y)YifE)-w8Anp$ZBFs#;aDj!NI5rW>l=8oI?Aum&wF78^u4 z5Rb<#e4~sF{4rcQ(gx}np18lRp@6erfB?l^`z1Q-ZT8KZ4-CN*vBmrVHW^oMpLT|p zjN+n}PSv$5mCq~PGdBC5kJ!Qjn{(&pvr99xkXc;XPJd_}S9GaS_+h)ZZoT5_;_-fn zMiE7w(-ejBD;`rlK0y5djUtBn0otn{&h0qy;KU$`(Zmql4wFDS5KCM`fgd9z5+p`R zjG-8{uA_`u<0$gS#TIi~E+LUVU<#ZL*>&uVLb<~s)BCgbg8ekzrl2jlSvWkgZlI>$ z^UF>V_K|=>svv4y05T0xb3AEKODg2DPELB**7~wpeDy;iS1vivwNY{djI*_lYz0>! zEAN~6!SAurBzc_P)+7o0fQ!0k-NySN+w*v37(`D^-r~q8>U334rV8I&mK{y8NS_tcCNI`R3n7@6yaDTaP3?mgh?Sx zu?JpT;lgQUN}=9|sMm{R`JE(4L5TDjBJD?slxK$7BuZeq)qoKD^Qf&1u_^i$j2zQU(o`$|%dL8Wo)F^Zoe zdGaPHg$Xg9;LXq~mbK%Q&V)J6>BYn;zq!zwq=bjABqcqxUh5kacaC$H*4a<2H1^&+ z{+w*dF@_ Dvd?WW literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/VM.Core/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..f390903071402d00c3f0f88ed5de80f2587065ce GIT binary patch literal 3584 zcmeHJO=uit7=C85f7!ON*=n$w=p<<*Y3!0VFf&-?AHX>AEsJb3Wio#%W1 zzwdp&pP8AXucHM(g3pyJzyYQ5Bb!I-|(y|CznRxR)=fnBvq zw&(egRa90`_bkV=CJ)YARlltAn>J;)#i0*P0n>(wm*;lb&C$L`kF~)V0@7ZHe1OfGrcUN9t=Z!Qnb@ZVV=sxR{MY)J6%pIze&Aq(yfKae8*i*xUuprFt1L3) z_g}^5BefinpKc{kcXh7hbhCgH`9QgTDW1a^#gf}!CPZ<8(tp(YrLJr;Hxo&m?gnaU zz|hj0hkML^rp<-h4s01Rv6~?ns~x9^iCcd+vZ;G}5Rj>T%~Z^O=AZRxpA9zWo87WCxMj-UD-0nC)AJTF^~B_i;P=DM|(RF}}9+S*vU|6*20a z8wQbX#JkRZ{wD3~H);RodiI6+M+!zk^E48cxZU16pw4-5*L|P?n2qknk=xF-%GSfL#xOb> z>wQZ@Cwjei>87`u>|?njgl9N#duUpCu?5Z=LW_2X5t=E?XoPXXyanfJlEqgjQ2ql> z5Z{N`d}01*q_E38L%PTO&B)>{oF?9CoTl7|Xdl)1jk#G5GpNUCRBAKMnjf0ooQJ_h z|JgW9d<{?FkR?Vh-hPx(4IIX6V#1vYIX^v}h&D$*({ zdUDo|oFz5om3Zj~%cCPV5I!)9Ju`l}?y84S4NHFDIz?^vxF5`@XwffYuI@!nRV}R4 z)PCD5y9)bMB;3P+UyUWgYPX5H8`T4aki$3WK!tuiD5)ktRdymjC)+-ei%=+HpPz5(qO87O0zl^)4XpGHb z`QDsz?PX1cYx=kXVn$Wbah+&oO}k{f^*DLoTT(&DFa^7G67wrzq^fyw^F8H7tg~`) zDDZ14h#VE>=i;?huy~u$9A3PbTUohoO;St zB}o+VY8>#M^7YC!C&LgntJ?ICvQGMqEM$F1>Rhj|q& zIVH8GZzhe#0`eA>!i3xbfy%E{M|Ro4;?tb1p5AyEs%p_)k-a@U!TTwI;^{oZ-bame zfQToWJCD*i-TSChTGBMS#K*&uwhU=0Tmd%qCxPx+QsOWADQZg8m$mIOM&+cfYw-YW zu;p?31el>$ghlNSj7%T-?Cr{?*)x~VCBOXX_)kb!hLLHpU?fSjwov~yT&6lwOmp)*%%9paxe|rrS)Ah zZeTdx$;~Yi<`;b54fA{l`d-Cdk<(vpDhqYT<#m(UIm)*ve~tGa7_afJ0y^Vw9$Cs! zp)H}VZ_RI`hUQ7`k4e{^u^q2*Qz@m7iD<9%F^2xiygtf*Tw*oe@%#0+#(#XS|4;8< GufQK{jRJ1~ literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/VM.Core.csproj.AssemblyReference.cache b/VM.Core/obj/Debug/VM.Core.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..ff5029b09fd6fe5af70f2cc2d667381dcb80e7b1 GIT binary patch literal 526 zcmbu6PfEi;6vp$U)FOBQcR4`GRN9S&2sTX@inS!A3z<#-Jj>9@3`{1Ky3ws`Pv9xM zgcoojc$4}PQwi9e-#}*a4SetSG1t8)4gkP$9Ekc|9^o2Iif*WuLLnNVmVBY@FdVxB zAu;8FUXWM*jG~*%Fc`=DBDF>j(ej>9Jj#?633>}Di{RJK_w9@RXwaC$@-CnEM+L+q z*|jI4p&f4TXl9o&*6*@CWUNZYs$^_O#&%?k$XJD}7~sHpX*Jym^%h$BEw5NjH^`*T z4EhQ)Yo@a4jmfL#-dAVFa^`Sw>w+B8s w>3lu^+LTm}H>t(spE*V1(Yix@+O78K8Njhe?>I2i1n;$374h|wW=jI+8$=y=6aWAK literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Debug/VM.Core.csproj.CopyComplete b/VM.Core/obj/Debug/VM.Core.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/VM.Core/obj/Debug/VM.Core.csproj.CoreCompileInputs.cache b/VM.Core/obj/Debug/VM.Core.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..3c1ed00 --- /dev/null +++ b/VM.Core/obj/Debug/VM.Core.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +365b563b77f6dbefb0a6239d8321952302d31b04 diff --git a/VM.Core/obj/Debug/VM.Core.csproj.FileListAbsolute.txt b/VM.Core/obj/Debug/VM.Core.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..6af82fe --- /dev/null +++ b/VM.Core/obj/Debug/VM.Core.csproj.FileListAbsolute.txt @@ -0,0 +1,9 @@ +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Core.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Core.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\VM.Core.csproj.AssemblyReference.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\Core.Properties.Resources.resources +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\VM.Core.csproj.GenerateResource.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\VM.Core.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\VM.Core.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\Core.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Core\obj\Debug\Core.pdb diff --git a/VM.Core/obj/Debug/VM.Core.csproj.GenerateResource.cache b/VM.Core/obj/Debug/VM.Core.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..50712ec4a114f3471be1a61440a1ad571e2c4681 GIT binary patch literal 1145 zcma)5!EO^V5ZyG{Z8k~81_@ON4iN$gk!Y2ur1TOYC8bc&phBvuhYI9fPgE<;I@sPQ z;li~CzJib98#wR}FtfBJYEu*+#@_K8Kfm!?C+9fMZyYq!sH|c5*cY)@Mh$J)O@-v) z5i=tb_LPQ3?HIHXD(SS^VJmEg%|@-4N}FovB#>IoWTSSNMpDFYVSc1WkaVKv*04Q% zF>JMXyUDhgOJq-%b9?~v8j@X@K*Ax31(*VYeGTShPe?G;iPDxu5)MS9na2Iih#CA! zM!*TND>TGb>3MBnnFUI95m5hRKno_t7vL8P3Wc2WX!$J``Kci*!qy1u=PA&wORh`n z6^f}L6}})k|8Ouj7RK0fDNzqL+=OqKIm@(XG%nWUh$iFna8aPte+$u;~g`Zfnz4?l%!t(Zvb=Jg*}SsMoGe!#Vo2B+9$d>yW^7+^ zF%-b>UE711FxGe|Y9p6D@dlFkB=7Ur^Y7n&{y5K7DMj4g9SqMFREOa|;io;7O#l9- zT^5f*E~OVBzHuA=9kXHzuaX#_UeC6lXBE}eD|WWCio00xY!z CrcjCi literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Release/CoreCompileInputs.cache b/VM.Core/obj/Release/CoreCompileInputs.cache new file mode 100644 index 0000000..ca91a48 --- /dev/null +++ b/VM.Core/obj/Release/CoreCompileInputs.cache @@ -0,0 +1 @@ +2aa128dee006d6d0d584625ceb23ac2f9031c769 diff --git a/VM.Core/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/VM.Core/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..266e2b4c91013527193b3816859a0202557adfa9 GIT binary patch literal 7056 zcmeHMZByGu5VmColE$_w8Y!D?YSV{U;|Tm;W^Ggg*988aVxI+XA{fKW^3Wz3DR;&JB{G&aQ^ z1kWqksp?F1uA0laGg&sp`U!IW14v6D_gunT4Kzqm|5dVj9i&xcay6)jTHVLR_nGI3 z18`p`1%AbAEFWqJXjf_&XXiyw<+T;=!I;AWm%B_uYbN!o$!h3%E0XzeAmmcN z?C!a-72&yP??dX`WU>ajy{r^g6zFwSq8{^FAS4u^%Fq?7fzr6Y)7_mY{^9ybC+be7 z-s4xRcyOuz>?+ekJC(k$%>tL;XdyYMk-DpyECG|w?grDlYNU3dW2i1g6+J{&jY_C- zrDfxEK?)7iKrWm>MQ5FH24(ER(3%MN9>_;mcNe&-d#pi#7Z)}IZSrK{h7=AcCFBd- zJ=bUxhFo(AxWzEg+=u3pi<(Znq{c%9MW}*=09CC>;iJ-bsOgSu^+s+ndW>GfNF;hu z_9T-@1HUK}J%9F>8cKtY;feRx(G+mjO9()6$9j#Z{+ zq$Lk(8PivekRGp`p0VlweZ=PG*o-qXn_HNghV1-8Idk1UZs=Cy@I$$?ZoT2^lF4p} z#t}vB(-epD8y-^~K0w_7jU$G-0oth-XE{kcIMs_{Fx5xReiBFr5~*7#@MnNTio_s^ zAryngZIlUP7{$_2vB{hkOGu;-m;}2`c5Q2Yd9%$SGyC|4&$I|=lWZ;@9vgR1k9HPq zWGqtI;JS_9o%gmYoY03rD|XBSeRkr^W>CeH7)Mf+*TMjFRQXxwa@Von>Q*xMJ4e@-o5 zanHDmtwHLurm|DHh13`LcVaM2?xn9WM#4Jaf$tjku-#|5o@b0lEjWZU-2rljL9~DC z6FowD%}}NGgJq;R;=a>2zr&g8c6neR^*uiIT34Eq0IFRZPf!#)|J+Sef)N2c#YW!> z7M+unY(yEz*_|XQ`?%DbrgVg^G^Hf8S>s0(<45@`tKi2*21iGae&KP!LDALwSNCD_U;h^BK5W|M`ts1f;xIRV literal 0 HcmV?d00001 diff --git a/VM.Core/obj/Release/TempPE/Properties.Resources.Designer.cs.dll b/VM.Core/obj/Release/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..fb223c14227544dba9a50a723f38ce03f9088de4 GIT binary patch literal 3584 zcmeHJO>7ip7=CBEf89c9x7diZI&G#Gp zQPT2;Z9Be}6PjDGHPhBc4`sEIQxN+4^~o(^=&3QHNkyfBcYmL&j&_wgwFaf1C<%!g zNcZ=m*YFJEA!?E|bUbfv)t=_Tgg$jN{3@IBzt)E=i_ot35FHB0)p3|;-RhdPr5aJ< zHj4!K1Gn+IFP41pll1`TZqF5*Y#PzL?h4DvhjSQ)m~*>pLJ+4R{a3Ar>x#y6Qz=Sk zJBZ40B1KB?A0AhGkTw=>D^W|oO1lvPv6|@&FtYJ4B^i67lUy+6?~sbxgZz^Y?2}#t zpdr4(c7gS}K1v`A;wS_qr;a$lNV1P&TRTZzVPnB zjQNPVxuK8ZLA-nHv-fFVxljAI*RoG%pGhlW#d&EL2lak^pnqUH7Y}P<0T+-~*BPQ8 z(ErSI)^|<2=&{8|QKApgcg<#LE*9+XuJPH4QOGRt5hUN0wwxRrqrqJ{{Lp*#y!Gf0 zWq?|P_1+NZSTFZ3+~ii{eav?R^9V=S9+GCBZHX=@OtW^I;;AvpNF-%m-9Q&%lB91b z4f!uL5B!+e<{R~z5~CgJdC;BepGuP6p|ik^%2~)AV(qgMzgL^&Fnw~2pi)hALH$(i zz&sQz`mf3?@Eko)QyLq+^6*haRcKCf=M%bm4BW+#^C<`J%aB{4BDk+Z?nR}9oUVtQ zLd{qT++N9XB~B{!bX4Ve@Ti-BN$LeQ(RL}>EztnB(mqL>bd0u;NmtZ9 znt-Gqcv(%u>nXZHI(GZZz!rKPxS2kn5$d8(fPM5EZ~!?T)@J%`e ztSB!5qr~`##C<>&zdHFu;SqtJPkbC0qk3Q*f$JUZG6uPI%R)0rgHnH| z>>5vnTT%GO4;sF?D8}qOE`4`tXmAzbt|8i!aS9bnJWVAp@3@wklV(R8HzWK7r$Eyc z+c!&MX1Od57a*K^`^nsK`}{Md2QF>{(B^t0_5r&Ec+b zYl>iO6w9%vg=H*B%B$(a3a}YeIny%z<(hWUuqt8lj=d;c4`I?q{v>6WJztb`c5`fD z`>3<9Xv%fU!u3tz>C<6hJbhGnW)X?&c~37`7C-;UFdT!bCC(Ujb=YxSIEH1OmdR9w z)8d3B@|-Azt1)4paOBEWCxZ|Ms#^8nvW_}I7Q8;B=dpNI?Wk!KZO8M?yjK;4#gb{W zLsqzpW?t0v)ubs{K-{8S7!NzZ6?&~Yyvq*dUchYS^!9n4DCMkW-rEBsxSw1SIGt1I z9V&x%$;XMt&VzJX_6}7b%}biv*~g|uY3ad|xilHjpCsxy2#Wn#KL$-6`hv7wq9HzM zYg+7r4YeGBk4qVN`LrPYiLyJD#`k|bmwD^bu5&+ayYUr8G(}0&X{1C!G&e^zRcUOL z^tO1sPEB>Ex^Z)+b~f*hXq4I;V|{9GB(9`-qj9yZJqk%%W2#qek0w4pJ@?$E!K<&; z#ZujPdT|w`x*2+L!N37zdo+?@A)prkCnfwYdX%s38MXDWYm{+>#+LG;%o}57fe)qv zySThdh7}qJcXD-$c>0XvSe}k|pko)UWj_6dsxn#xmuPyxM z;iVj6T4U<&MlCC2n09be2_cUOYj1WVhWyIBH_8Jp(SmpU0r{=*fY0^+ J>HX&w_#3&a0*wFw literal 0 HcmV?d00001 diff --git a/VM.Runtime/ConvertBack.cs b/VM.Runtime/ConvertBack.cs new file mode 100644 index 0000000..7bcd4e9 --- /dev/null +++ b/VM.Runtime/ConvertBack.cs @@ -0,0 +1,557 @@ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Reflection.Emit; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +//use FrameWork 2.0 for compatibility on older files +namespace ConversionBack +{ + public class ConvertBack + { + public static object locker2 = new object(); + public static object Runner(int position, int size, int ID, object[] parameters) + { + + DynamicMethod value; + parameters = parameters; + if (cache.TryGetValue(ID, out value))//Check cache to see if method has already been created + { + return value.Invoke(null, parameters);//if it has directly invoke the method instead of converting it to dynamicmethod + } + else + { + MethodBase callingMethod = new StackTrace().GetFrame(1).GetMethod();//get calling method, using this can prevent invocation and dynamic unpacking + var grabbedBytes = byteArrayGrabber(Initialize.byteArrayResource, position, size); + var decryptionKey = MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(callingMethod.Name)); + var ab = callingMethod.GetMethodBody().GetILAsByteArray(); + Initialize.bc(grabbedBytes, grabbedBytes.Length, ab, ab.Length); + var decrypted = Decrypt(decryptionKey, grabbedBytes); + return ConversionBack(decrypted, ID, parameters, callingMethod);//if not convert the method to a dynamic method + } + } + + + public static object ConversionBack(byte[] bytes, int ID, object[] parameters, MethodBase callingMethod) + { + + + MethodBody methodBody = callingMethod.GetMethodBody();//get calling methods body + BinaryReader binaryReader = new BinaryReader(new MemoryStream(bytes));//cast byte[] Position + + + var methodParameters = callingMethod.GetParameters();//get its parameters + var allLocals = new List(); + var _allExceptionHandlerses = new List(); + Type[] parametersArray; + int start = 0; + if (callingMethod.IsStatic)//check if the method is static or not + { + parametersArray = new Type[methodParameters.Length];//if method is static set the parameters to the amount in calling method + } + else + { + parametersArray = new Type[methodParameters.Length + 1];//if its not static this means there is an additional hidden parameter (this.) this is always used as the first parameter so we need to account for this + parametersArray[0] = callingMethod.DeclaringType; + start = 1; + } + for (var i = 0; i < methodParameters.Length; i++) + { + var parameterInfo = methodParameters[i]; + parametersArray[start + i] = parameterInfo.ParameterType;//set parameter types + } + DynamicMethod dynamicMethod = new DynamicMethod("", callingMethod.MemberType == MemberTypes.Constructor ? null : ((MethodInfo)callingMethod).ReturnParameter.ParameterType, parametersArray, Initialize.callingModule, true);//create the dynamic method + ILGenerator ilGenerator = dynamicMethod.GetILGenerator();//get ilgenerator + var locs = methodBody.LocalVariables; + var locals = new Type[locs.Count]; + foreach (var localVariableInfo in locs) + allLocals.Add(ilGenerator.DeclareLocal(localVariableInfo.LocalType));//declare the local for use of stloc,ldloc/ldloca + var exceptionHandlersCount = binaryReader.ReadInt32();//read amount of exception handlers + processExceptionHandler(binaryReader, exceptionHandlersCount, callingMethod, _allExceptionHandlerses);//convert exception handlers + var sortedExceptionHandlers = fixAndSortExceptionHandlers(_allExceptionHandlerses);//we need to sort the exception handlers incase there is multiple handlers that start at the same instruction + var instructionCount = binaryReader.ReadInt32();//read the amount of instructions + var _allLabelsDictionary = new Dictionary(); + + for (var u = 0; u < instructionCount; u++) + { + var label = ilGenerator.DefineLabel();//we need to label each instruction to use with branches + + _allLabelsDictionary.Add(u, label); + } + + + for (var i = 0; i < instructionCount; i++) + { + checkAndSetExceptionHandler(sortedExceptionHandlers, i, ilGenerator);//we check the instruction against our exception handlers to determine if we need to start/end any handlers + var opcode = binaryReader.ReadInt16();//read opcode short this will relate to the correct opcode + OpCode opc; + if (opcode >= 0 && opcode < Initialize.oneByteOpCodes.Length) + { + opc = Initialize.oneByteOpCodes[opcode];//we check against one byte opcodes + } + else + { + var b2 = (byte)(opcode | 0xFE00); + opc = Initialize.twoByteOpCodes[b2];//check against two byte opcodes + } + + ilGenerator.MarkLabel(_allLabelsDictionary[i]);//we now need to mark the label in the ilgenerator + var operandType = binaryReader.ReadByte();//we get the operand type + + HandleOpType(operandType, opc, ilGenerator, binaryReader, _allLabelsDictionary, allLocals);//we process the instruction with ilgenerator + } + lock (locker)//we lock threads here to prevent exceptions of item already exists + { + if (!cache.ContainsKey(ID)) + { + cache.Add(ID, dynamicMethod);//add to cache if first time creating method + } + } + + return dynamicMethod.Invoke(null, parameters);//invoke the dynamic method which is the users original method and return the result + } + public static object locker = new object(); + public static Dictionary cache = new Dictionary(); + + ///

    + /// We handle operand type and convert this to a real instruction + /// + /// + /// + /// + /// + /// + /// + private static void HandleOpType(int opType, OpCode opcode, ILGenerator ilGenerator, BinaryReader binaryReader, Dictionary _allLabelsDictionary, List allLocals) + { + switch (opType)//we switch on operand type + { + case 0: + InlineNoneEmitter(ilGenerator, opcode, binaryReader); + break; + case 1: + InlineMethodEmitter(ilGenerator, opcode, binaryReader); + break; + case 2: + InlineStringEmitter(ilGenerator, opcode, binaryReader); + break; + case 3: + InlineIEmitter(ilGenerator, opcode, binaryReader); + break; + + case 5: + InlineFieldEmitter(ilGenerator, opcode, binaryReader); + break; + case 6: + InlineTypeEmitter(ilGenerator, opcode, binaryReader); + break; + case 7: + ShortInlineBrTargetEmitter(ilGenerator, opcode, binaryReader, _allLabelsDictionary); + break; + case 8: + ShortInlineIEmitter(ilGenerator, opcode, binaryReader); + break; + case 9: + InlineSwitchEmitter(ilGenerator, opcode, binaryReader, _allLabelsDictionary); + break; + case 10: + InlineBrTargetEmitter(ilGenerator, opcode, binaryReader, _allLabelsDictionary); + break; + case 11: + InlineTokEmitter(ilGenerator, opcode, binaryReader); + break; + case 12: + case 4: + InlineVarEmitter(ilGenerator, opcode, binaryReader, allLocals); + break; + case 13: + ShortInlineREmitter(ilGenerator, opcode, binaryReader); + break; + case 14: + InlineREmitter(ilGenerator, opcode, binaryReader); + break; + case 15: + InlineI8Emitter(ilGenerator, opcode, binaryReader); + break; + default: + throw new Exception("Operand Type Unknown " + opType); + } + } + /// + /// this operand type does nothing it is for opcodes that have no operands + /// + /// + /// + /// + private static void InlineNoneEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + ilGenerator.Emit(opcode); + } + + /// + /// this is for calling of methods where it will resolve the metadata token that relates to the method + /// + /// + /// + /// + private static void InlineMethodEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + var mdtoken = binaryReader.ReadInt32(); + var resolvedMethodBase = Initialize.callingModule.ResolveMethod(mdtoken); + if (resolvedMethodBase is MethodInfo) + ilGenerator.Emit(opcode, (MethodInfo)resolvedMethodBase); + else if (resolvedMethodBase is ConstructorInfo) + ilGenerator.Emit(opcode, (ConstructorInfo)resolvedMethodBase); + else + throw new Exception("Check resolvedMethodBase Type"); + } + /// + /// This is for operands that handle variables and parameters we need to emit the label that it relates to which we defined earlier + /// + /// + /// + /// + /// + private static void InlineVarEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader, List allLocals) + { + var index = binaryReader.ReadInt32(); + var parOrloc = binaryReader.ReadByte(); + if (parOrloc == 0) + { + var label = allLocals[index]; + ilGenerator.Emit(opcode, label); + } + else + { + ilGenerator.Emit(opcode, index); + } + + } + + /// + /// read the string from the byte[] and emit the opcode with this string + /// + /// + /// + /// + private static void InlineStringEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + var readString = binaryReader.ReadString(); + ilGenerator.Emit(opcode, readString); + } + private static void InlineIEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + var readInt32 = binaryReader.ReadInt32(); + + ilGenerator.Emit(opcode, readInt32); + } + + private static void InlineFieldEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + int mdtoken = binaryReader.ReadInt32(); + FieldInfo fieldInfo = Initialize.callingModule.ResolveField(mdtoken); + ilGenerator.Emit(opcode, fieldInfo); + } + + private static void InlineTypeEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + int mdtoken = binaryReader.ReadInt32(); + Type type = Initialize.callingModule.ResolveType(mdtoken); + ilGenerator.Emit(opcode, type); + } + + private static void ShortInlineBrTargetEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader, Dictionary _allLabelsDictionary) + { + int index = binaryReader.ReadInt32(); + var location = _allLabelsDictionary[index]; + ilGenerator.Emit(opcode, location); + } + + private static void ShortInlineIEmitter(ILGenerator ilGenerator, OpCode opCode, BinaryReader binaryReader) + { + byte b = binaryReader.ReadByte(); + ilGenerator.Emit(opCode, b); + } + private static void ShortInlineREmitter(ILGenerator ilGenerator, OpCode opCode, BinaryReader binaryReader) + { + var value = binaryReader.ReadBytes(4); + var myFloat = BitConverter.ToSingle(value, 0); + ilGenerator.Emit(opCode, myFloat); + } + private static void InlineREmitter(ILGenerator ilGenerator, OpCode opCode, BinaryReader binaryReader) + { + var value = binaryReader.ReadDouble(); + + ilGenerator.Emit(opCode, value); + } + private static void InlineI8Emitter(ILGenerator ilGenerator, OpCode opCode, BinaryReader binaryReader) + { + var value = binaryReader.ReadInt64(); + + ilGenerator.Emit(opCode, value); + } + + private static void InlineSwitchEmitter(ILGenerator ilGenerator, OpCode opCode, BinaryReader binaryReader, Dictionary _allLabelsDictionary) + { + int count = binaryReader.ReadInt32(); + Label[] allLabels = new Label[count]; + for (int i = 0; i < count; i++) + { + allLabels[i] = _allLabelsDictionary[binaryReader.ReadInt32()]; + + } + ilGenerator.Emit(opCode, allLabels); + } + private static void InlineBrTargetEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader, Dictionary _allLabelsDictionary) + { + int index = binaryReader.ReadInt32(); + var location = _allLabelsDictionary[index]; + ilGenerator.Emit(opcode, location); + } + + private static void InlineTokEmitter(ILGenerator ilGenerator, OpCode opcode, BinaryReader binaryReader) + { + int mdtoken = binaryReader.ReadInt32(); + byte type = binaryReader.ReadByte(); + if (type == 0) + { + var fieldinfo = Initialize.callingModule.ResolveField(mdtoken); + ilGenerator.Emit(opcode, fieldinfo); + } + else if (type == 1) + { + var typeInfo = Initialize.callingModule.ResolveType(mdtoken); + ilGenerator.Emit(opcode, typeInfo); + } + else if (type == 2) + { + var methodinfo = Initialize.callingModule.ResolveMethod(mdtoken); + if (methodinfo is MethodInfo) + ilGenerator.Emit(opcode, (MethodInfo)methodinfo); + else if (methodinfo is ConstructorInfo) + ilGenerator.Emit(opcode, (ConstructorInfo)methodinfo); + } + } + + public static void checkAndSetExceptionHandler(List sorted, int i, ILGenerator ilGenerator) + { + foreach (var allExceptionHandlerse in sorted) + if (allExceptionHandlerse.HandlerType == 1) + { + if (allExceptionHandlerse.TryStart == i) + { + ilGenerator.BeginExceptionBlock(); + + } + if (allExceptionHandlerse.HandlerEnd == i) + { + ilGenerator.EndExceptionBlock(); + } + if (allExceptionHandlerse.HandlerStart.Contains(i)) + { + var indes = allExceptionHandlerse.HandlerStart.IndexOf(i); + ilGenerator.BeginCatchBlock(allExceptionHandlerse.CatchType[indes]); + } + } + else if (allExceptionHandlerse.HandlerType == 5) + { + if (allExceptionHandlerse.TryStart == i) + ilGenerator.BeginExceptionBlock(); + else if (allExceptionHandlerse.HandlerEnd == i) + ilGenerator.EndExceptionBlock(); + else if (allExceptionHandlerse.TryEnd == i) + ilGenerator.BeginFinallyBlock(); + } + } + + public static void processExceptionHandler(BinaryReader bin, int count, MethodBase method, List _allExceptionHandlerses) + { + for (var i = 0; i < count; i++) + { + //catchType + var expExceptionHandlers = new ExceptionHandlerClass(); + var catchTypeMdToken = bin.ReadInt32(); + if (catchTypeMdToken == -1) + { + expExceptionHandlers.CatchType = null; + } + else + { + var catchType = method.Module.ResolveType(catchTypeMdToken); + expExceptionHandlers.CatchType = catchType; + } + + //filterStart + var filterStartIndex = bin.ReadInt32(); + expExceptionHandlers.FilterStart = filterStartIndex; + //handlerEnd + var handlerEnd = bin.ReadInt32(); + expExceptionHandlers.HandlerEnd = handlerEnd; + //handlerStart + var handlerStart = bin.ReadInt32(); + expExceptionHandlers.HandlerStart = handlerStart; + //handlerType + var handlerType = bin.ReadByte(); + switch (handlerType) + { + case 1: + expExceptionHandlers.HandlerType = 1; + break; + case 2: + expExceptionHandlers.HandlerType = 2; + break; + case 3: + expExceptionHandlers.HandlerType = 3; + break; + case 4: + expExceptionHandlers.HandlerType = 4; + break; + case 5: + expExceptionHandlers.HandlerType = 5; + break; + default: + throw new Exception("Out of Range"); + } + //tryEnd + var tryEnd = bin.ReadInt32(); + expExceptionHandlers.TryEnd = tryEnd; + //tryStart + var tryStart = bin.ReadInt32(); + expExceptionHandlers.TryStart = tryStart; + _allExceptionHandlerses.Add(expExceptionHandlers); + } + } + + public static List fixAndSortExceptionHandlers(List expHandlers) + { + var multiExp = new List(); + var exceptionDictionary = new Dictionary(); + foreach (var handler in expHandlers) + if (handler.HandlerType == 5) + { + exceptionDictionary.Add(handler, handler.TryStart); + } + else + { + if (exceptionDictionary.ContainsValue(handler.TryStart)) + if (handler.CatchType != null) + exceptionDictionary.Add(handler, handler.TryStart); + else + multiExp.Add(handler); + + else + exceptionDictionary.Add(handler, handler.TryStart); + } + var sorted = new List(); + foreach (var keyValuePair in exceptionDictionary) + { + if (keyValuePair.Key.HandlerType == 5) + { + var fixedExceptionHandlers = new FixedExceptionHandlersClass(); + fixedExceptionHandlers.TryStart = keyValuePair.Key.TryStart; + fixedExceptionHandlers.TryEnd = keyValuePair.Key.TryEnd; + fixedExceptionHandlers.FilterStart = keyValuePair.Key.FilterStart; + fixedExceptionHandlers.HandlerEnd = keyValuePair.Key.HandlerEnd; + + fixedExceptionHandlers.HandlerType = keyValuePair.Key.HandlerType; + + fixedExceptionHandlers.HandlerStart.Add(keyValuePair.Key.HandlerStart); + fixedExceptionHandlers.CatchType.Add(keyValuePair.Key.CatchType); + + sorted.Add(fixedExceptionHandlers); + continue; + } + var rrr = WhereAlternate(multiExp, keyValuePair.Value); + if (rrr.Count == 0) + { + var fixedExceptionHandlers = new FixedExceptionHandlersClass(); + fixedExceptionHandlers.TryStart = keyValuePair.Key.TryStart; + fixedExceptionHandlers.TryEnd = keyValuePair.Key.TryEnd; + fixedExceptionHandlers.FilterStart = keyValuePair.Key.FilterStart; + fixedExceptionHandlers.HandlerEnd = keyValuePair.Key.HandlerEnd; + + fixedExceptionHandlers.HandlerType = keyValuePair.Key.HandlerType; + + fixedExceptionHandlers.HandlerStart.Add(keyValuePair.Key.HandlerStart); + fixedExceptionHandlers.CatchType.Add(keyValuePair.Key.CatchType); + + sorted.Add(fixedExceptionHandlers); + } + else + { + var fixedExceptionHandlers = new FixedExceptionHandlersClass(); + fixedExceptionHandlers.TryStart = keyValuePair.Key.TryStart; + fixedExceptionHandlers.TryEnd = keyValuePair.Key.TryEnd; + fixedExceptionHandlers.FilterStart = keyValuePair.Key.FilterStart; + fixedExceptionHandlers.HandlerEnd = rrr[rrr.Count - 1].HandlerEnd; + + fixedExceptionHandlers.HandlerType = keyValuePair.Key.HandlerType; + fixedExceptionHandlers.HandlerStart.Add(keyValuePair.Key.HandlerStart); + fixedExceptionHandlers.CatchType.Add(keyValuePair.Key.CatchType); + foreach (var exceptionHandlerse in rrr) + { + fixedExceptionHandlers.HandlerStart.Add(exceptionHandlerse.HandlerStart); + fixedExceptionHandlers.CatchType.Add(exceptionHandlerse.CatchType); + } + sorted.Add(fixedExceptionHandlers); + } + } + return sorted; + } + + public static List WhereAlternate(List exp, int val) + { + var returnList = new List(); + // var rrr = MultiExp.Where(i => i.tryStart == keyValuePair.Value && i.HandlerType != 5); + foreach (var handlers2 in exp) + if (handlers2.TryStart == val && handlers2.HandlerType != 5) + returnList.Add(handlers2); + return returnList; + } + public static byte[] byteArrayGrabber(byte[] bytes, int skip, int take) + { + byte[] newBarray = new byte[take]; + int y = 0; + for (int i = 0; i < take; i++, y++) + { + byte curByte = bytes[skip + i]; + newBarray[y] = curByte; + } + + return newBarray; + + } + private static byte[] DecryptBytes( + SymmetricAlgorithm alg, + byte[] message) + { + if (message == null || message.Length == 0) + return message; + + if (alg == null) + throw new ArgumentNullException("alg is null"); + + using (var stream = new MemoryStream()) + using (var decryptor = alg.CreateDecryptor()) + using (var encrypt = new CryptoStream(stream, decryptor, CryptoStreamMode.Write)) + { + encrypt.Write(message, 0, message.Length); + encrypt.FlushFinalBlock(); + return stream.ToArray(); + } + } + public static byte[] Decrypt(byte[] key, byte[] message) + { + using (var rijndael = new RijndaelManaged()) + { + rijndael.Key = key; + rijndael.IV = key; + return DecryptBytes(rijndael, message); + } + } + } +} diff --git a/VM.Runtime/Embed.cs b/VM.Runtime/Embed.cs new file mode 100644 index 0000000..a5aea2f --- /dev/null +++ b/VM.Runtime/Embed.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; + +namespace ConversionBack +{ + public class EmbeddedDllClass + { + private static string tempFolder = ""; + + /// + /// Extract DLLs from resources to temporary folder + /// + /// name of DLL file to create (including dll suffix) + /// The resource name (fully qualified) + public static void ExtractEmbeddedDlls(string dllName, byte[] resourceBytes) + { + Assembly assem = Assembly.GetExecutingAssembly(); + string[] names = assem.GetManifestResourceNames(); + AssemblyName an = assem.GetName(); + + // The temporary folder holds one or more of the temporary DLLs + // It is made "unique" to avoid different versions of the DLL or architectures. + tempFolder = String.Format("{0}.{1}.{2}", an.Name, an.ProcessorArchitecture, an.Version); + + string dirName = Path.Combine(Path.GetTempPath(), tempFolder); + if (!Directory.Exists(dirName)) + { + Directory.CreateDirectory(dirName); + } + + // Add the temporary dirName to the PATH environment variable (at the head!) + string path = Environment.GetEnvironmentVariable("PATH"); + string[] pathPieces = path.Split(';'); + bool found = false; + foreach (string pathPiece in pathPieces) + { + if (pathPiece == dirName) + { + found = true; + break; + } + } + if (!found) + { + Environment.SetEnvironmentVariable("PATH", dirName + ";" + path); + } + + // See if the file exists, avoid rewriting it if not necessary + string dllPath = Path.Combine(dirName, dllName); + bool rewrite = true; + if (File.Exists(dllPath)) + { + byte[] existing = File.ReadAllBytes(dllPath); + if (Equality(resourceBytes,existing)) + { + rewrite = false; + } + } + if (rewrite) + { + File.WriteAllBytes(dllPath, resourceBytes); + } + } + public static bool Equality(byte[] a1, byte[] b1) + { + int i; + if (a1.Length == b1.Length) + { + i = 0; + while (i < a1.Length && (a1[i] == b1[i])) //Earlier it was a1[i]!=b1[i] + { + i++; + } + if (i == a1.Length) + { + return true; + } + } + + return false; + } + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr LoadLibraryEx(string dllToLoad, IntPtr hFile, uint flags); + + + /// + /// managed wrapper around LoadLibrary + /// + /// + static public IntPtr LoadDll(string dllName) + { + if (tempFolder == string.Empty) + { + throw new Exception("Please call ExtractEmbeddedDlls before LoadDll"); + } + IntPtr h = LoadLibraryEx(dllName,IntPtr.Zero,0); + if (h == IntPtr.Zero) + { + Exception e = new Win32Exception(); + throw new DllNotFoundException("Unable to load library: " + dllName + " from " + tempFolder, e); + } + return h; + } + + } +} diff --git a/VM.Runtime/ExceptionHandlers/ExceptionHandlerClass.cs b/VM.Runtime/ExceptionHandlers/ExceptionHandlerClass.cs new file mode 100644 index 0000000..5e97864 --- /dev/null +++ b/VM.Runtime/ExceptionHandlers/ExceptionHandlerClass.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ConversionBack +{ + //Exception handler class from the byte array + public class ExceptionHandlerClass + { + public Type CatchType; + public int FilterStart; + public int HandlerEnd; + public int HandlerStart; + public int HandlerType; + public int TryEnd; + public int TryStart; + } +} diff --git a/VM.Runtime/ExceptionHandlers/FixedExceptionHandlerClass.cs b/VM.Runtime/ExceptionHandlers/FixedExceptionHandlerClass.cs new file mode 100644 index 0000000..e00f2bd --- /dev/null +++ b/VM.Runtime/ExceptionHandlers/FixedExceptionHandlerClass.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ConversionBack +{ + //fixed exception handlers for handlers that start on the same instruction + public class FixedExceptionHandlersClass + { + public List CatchType = new List(); + public int FilterStart; + public int HandlerEnd; + public List HandlerStart = new List(); + public int HandlerType; + public int TryEnd; + public int TryStart; + } +} diff --git a/VM.Runtime/Initialize.cs b/VM.Runtime/Initialize.cs new file mode 100644 index 0000000..9587408 --- /dev/null +++ b/VM.Runtime/Initialize.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection.Emit; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using IL_Emulator_Dynamic; +using VMExample.Instructions; + +namespace ConversionBack +{ + public class Initialize + { + public static OpCode[] oneByteOpCodes; + public static OpCode[] twoByteOpCodes; + public static StackTrace stackTrace; + public static System.Reflection.Module callingModule; + + public static byte[] byteArrayResource; + public static a bc; + + + [DllImport("kernel32.dll", CharSet = CharSet.Ansi, EntryPoint = "GetProcAddress", ExactSpelling = true)] + private static extern IntPtr e(IntPtr intptr, string str); + [DllImport("kernel32.dll", CharSet = CharSet.Auto, EntryPoint = "GetModuleHandle")] + private static extern IntPtr ab(string str); + public delegate void a(byte[] bytes, int len, byte[] key, int keylen); + public static void Initalize(string resName) + { + + callingModule = new StackTrace().GetFrame(1).GetMethod().Module; + + byteArrayResource = extractResource(resName); + byte[] tester = extractResource("AstroNet"); + VMExample.Instructions.All.binr = new BinaryReader(new MemoryStream(tester)); + VMExample.Instructions.All.val = new ValueStack(); + VMExample.Instructions.All.val.parameters = new object[1]; + All.val.parameters[0] = byteArrayResource; + + All.val.locals = new object[10]; + VMExample.Instructions.All.run(); + IntPtr abb; + IntPtr def; + if (IntPtr.Size == 4) + { + byte[] tester2 = extractResource("ASTRO"); + EmbeddedDllClass.ExtractEmbeddedDlls("NativePRo.dll", tester2); + abb = EmbeddedDllClass.LoadDll("NativePRo.dll"); + def = e(abb, "_a@16"); + } + else + { + byte[] tester2 = extractResource("ASTR0"); + EmbeddedDllClass.ExtractEmbeddedDlls("NativePRo.dll", tester2); + abb = EmbeddedDllClass.LoadDll("NativePRo.dll"); + def = e(abb, "a"); + } + + + + //a(x,x,x,x) 0000000010001070 1 + + bc = (a)Marshal.GetDelegateForFunctionPointer(def, typeof(a)); + byteArrayResource = (byte[])All.val.locals[1]; + //process all opcodes into fields so that they relate to the way i process them in the conversion to method + var array = new OpCode[256]; + var array2 = new OpCode[256]; + oneByteOpCodes = array; + twoByteOpCodes = array2; + var typeFromHandle = typeof(OpCode); + var typeFromHandle2 = typeof(OpCodes); + foreach (var fieldInfo in typeFromHandle2.GetFields()) + if (fieldInfo.FieldType == typeFromHandle) + { + var opCode = (OpCode)fieldInfo.GetValue(null); + var num = (ushort)opCode.Value; + if (opCode.Size == 1) + { + var b = (byte)num; + oneByteOpCodes[b] = opCode; + } + else + { + var b2 = (byte)(num | 65024); + twoByteOpCodes[b2] = opCode; + } + } + } + + + private static byte[] extractResource(string resourceName) + { + using (Stream stream = callingModule.Assembly.GetManifestResourceStream(resourceName)) + using (StreamReader reader = new StreamReader(stream)) + { + byte[] array = new byte[stream.Length]; + stream.Read(array, 0, array.Length); + return array; + + } + } + } +} diff --git a/VM.Runtime/OpCodes/Add.cs b/VM.Runtime/OpCodes/Add.cs new file mode 100644 index 0000000..f271b56 --- /dev/null +++ b/VM.Runtime/OpCodes/Add.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + + +namespace VMExample.Instructions +{ + class Add:Base + { + public override void emu() + { + var val2 = All.val.valueStack.Pop(); + var val1 = All.val.valueStack.Pop(); + All.val.valueStack.Push((int)val1 + (int)val2); + } + } +} diff --git a/VM.Runtime/OpCodes/All.cs b/VM.Runtime/OpCodes/All.cs new file mode 100644 index 0000000..7c773da --- /dev/null +++ b/VM.Runtime/OpCodes/All.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Runtime.Remoting.Messaging; +using System.Text; +using System.Windows.Forms; +using IL_Emulator_Dynamic; + + +namespace VMExample.Instructions +{ + public class All + { + public static Module mod = typeof(Console).Assembly.ManifestModule; + public static Base[] tester2 = + { + new Ldstr(), + new Call(), + new Pop(), + new Ldarg(), + new Ldlen(), + new ConvI4(), new Ceq(), new Ldc(), new Stloc(), new Ldloc(), new Brfalse(), new Ldnull(), new Br(), new NewArr(), + new LdelemU1(), new Xor(), new ConvU1(), new StelemI1(), new Add(), new Clt(), new Brtrue(), new Rem(), + new Nop(), new NewObj(), new Callvirt(), + };[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)] + public static extern bool VirtualProtect( + IntPtr lpAddress, + IntPtr dwSize, + uint flNewProtect, + out uint lpflOldProtect + ); + [DllImport("kernel32.dll")] + public static extern IntPtr LoadLibrary(string dllToLoad); + + [DllImport("kernel32.dll")] + public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); + [Obfuscation(Feature = "virtualization", Exclude = false)] + public static BinaryReader binr; + public static ValueStack val; + public static bool tester() + { + return false; + } + public static void run() + { + var loadLibrary = LoadLibrary("kernel32.dll"); + var isDebuggerAddress = GetProcAddress(loadLibrary, "IsDebuggerPresent"); + var abcFunctionPointer = typeof(All).GetMethod("tester").MethodHandle.GetFunctionPointer(); + + var success = VirtualProtect(isDebuggerAddress, (IntPtr)5, 0x40, out var lpflOldProtect); + if (IntPtr.Size == 4) + { + Marshal.WriteByte(isDebuggerAddress, 0, 0xe9); + Marshal.WriteInt32(isDebuggerAddress, 1, (abcFunctionPointer.ToInt32() - isDebuggerAddress.ToInt32() - 5)); + Marshal.WriteByte(isDebuggerAddress, 5, 0xc3); + } + else + { + Marshal.WriteByte(isDebuggerAddress, 0, 0x49); + Marshal.WriteByte(isDebuggerAddress, 1, 0xbb); + Marshal.WriteInt64(isDebuggerAddress, 2, (abcFunctionPointer.ToInt64())); + Marshal.WriteByte(isDebuggerAddress,10, 0x41); + Marshal.WriteByte(isDebuggerAddress, 11, 0xff); + Marshal.WriteByte(isDebuggerAddress, 12, 0xe3); + + } + //MessageBox.Show( + // "This has been protected by a trial version of NetProtector\r\nif you have purchased this application and it has this warning please contact me cawkre@gmail.com"); + success = VirtualProtect(isDebuggerAddress, (IntPtr)5, lpflOldProtect, out lpflOldProtect); + + while (true) + { + var a = binr.ReadByte(); + if (a == 255) + return; + tester2[a].emu(); + } + } + } +} diff --git a/VM.Runtime/OpCodes/Base.cs b/VM.Runtime/OpCodes/Base.cs new file mode 100644 index 0000000..a293441 --- /dev/null +++ b/VM.Runtime/OpCodes/Base.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + + +namespace VMExample.Instructions +{ + public abstract class Base + { + public abstract void emu(); + } +} diff --git a/VM.Runtime/OpCodes/Br.cs b/VM.Runtime/OpCodes/Br.cs new file mode 100644 index 0000000..817d52d --- /dev/null +++ b/VM.Runtime/OpCodes/Br.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Br : Base + { + public override void emu() + { + var a = All.binr.ReadInt32(); + All.binr.BaseStream.Position = a; + } + } +} diff --git a/VM.Runtime/OpCodes/Brfalse.cs b/VM.Runtime/OpCodes/Brfalse.cs new file mode 100644 index 0000000..13fcb78 --- /dev/null +++ b/VM.Runtime/OpCodes/Brfalse.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + + +namespace VMExample.Instructions +{ + class Brfalse : Base + { + public override void emu() + { + var pos = All.binr.ReadInt32(); + var val = All.val.valueStack.Pop(); + if ((int)val == 0) + All.binr.BaseStream.Position = pos; + else + { + return; + } + } + } +} diff --git a/VM.Runtime/OpCodes/Brtrue.cs b/VM.Runtime/OpCodes/Brtrue.cs new file mode 100644 index 0000000..78c9a68 --- /dev/null +++ b/VM.Runtime/OpCodes/Brtrue.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Brtrue : Base + { + public override void emu() + { + var pos = All.binr.ReadInt32(); + var val = All.val.valueStack.Pop(); + if ((int)val != 0) + All.binr.BaseStream.Position = pos; + else + { + return; + } + } + } +} diff --git a/VM.Runtime/OpCodes/Call.cs b/VM.Runtime/OpCodes/Call.cs new file mode 100644 index 0000000..473b584 --- /dev/null +++ b/VM.Runtime/OpCodes/Call.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; + +using System.Reflection; +using System.Text; + + +namespace VMExample.Instructions +{ + class Call : Base + { + public override void emu() + { + var mdtoken = All.binr.ReadInt32(); + MethodBase metho = All.mod.ResolveMethod(mdtoken); + if (metho.IsStatic) + { + object[] typ = new Object[metho.GetParameters().Length]; + for (int i = 0; i < typ.Length; i++) + { + typ[i] = All.val.valueStack.Pop(); + } + if (!((MethodInfo) metho).ReturnType.ToString().Contains("System.Void")) + { + All.val.valueStack.Push(metho.Invoke(null, typ)); + } + else + { + metho.Invoke(null, typ); + } + } + + } + } +} diff --git a/VM.Runtime/OpCodes/Callvirt.cs b/VM.Runtime/OpCodes/Callvirt.cs new file mode 100644 index 0000000..d4bcd64 --- /dev/null +++ b/VM.Runtime/OpCodes/Callvirt.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +using System.Reflection; + + +namespace VMExample.Instructions +{ + class Callvirt : Base + { + public static Dictionary cache = new Dictionary(); + public override void emu() + { + var mdtoken = All.binr.ReadInt32(); + + + + var typ = new object[2]; + for (int i = typ.Length; i > 0; i--) + { + typ[i-1] = All.val.valueStack.Pop(); + + } + + + var type =(Random) All.val.valueStack.Pop(); + + var a =type.Next(0, 250); + All.val.valueStack.Push(a); + } + } +} diff --git a/VM.Runtime/OpCodes/Ceq.cs b/VM.Runtime/OpCodes/Ceq.cs new file mode 100644 index 0000000..c550b73 --- /dev/null +++ b/VM.Runtime/OpCodes/Ceq.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Ceq : Base + { + public override void emu() + { + var val1 = All.val.valueStack.Pop(); + var val2 = All.val.valueStack.Pop(); + All.val.valueStack.Push(val1 == val2 ? 1 : 0); + } + } +} diff --git a/VM.Runtime/OpCodes/Clt.cs b/VM.Runtime/OpCodes/Clt.cs new file mode 100644 index 0000000..f1aff5c --- /dev/null +++ b/VM.Runtime/OpCodes/Clt.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Clt : Base + { + public override void emu() + { + var value2 = All.val.valueStack.Pop(); + var value1 = All.val.valueStack.Pop(); + if ((int)value1 < (int)value2) + { + + All.val.valueStack.Push(1); + } + else + { + All.val.valueStack.Push(0); + } + } + } +} diff --git a/VM.Runtime/OpCodes/ConvI4.cs b/VM.Runtime/OpCodes/ConvI4.cs new file mode 100644 index 0000000..4d41cfe --- /dev/null +++ b/VM.Runtime/OpCodes/ConvI4.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class ConvI4 : Base + { + public override void emu() + { + var val = All.val.valueStack.Pop(); + All.val.valueStack.Push((int)val); + } + } +} diff --git a/VM.Runtime/OpCodes/ConvU1.cs b/VM.Runtime/OpCodes/ConvU1.cs new file mode 100644 index 0000000..5c69faf --- /dev/null +++ b/VM.Runtime/OpCodes/ConvU1.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class ConvU1 : Base + { + public override void emu() + { + var val = All.val.valueStack.Pop(); + byte bt = Convert.ToByte( val); + All.val.valueStack.Push((int)bt); + } + } +} diff --git a/VM.Runtime/OpCodes/Ldarg.cs b/VM.Runtime/OpCodes/Ldarg.cs new file mode 100644 index 0000000..1dac193 --- /dev/null +++ b/VM.Runtime/OpCodes/Ldarg.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Ldarg : Base + { + public override void emu() + { + var index = All.binr.ReadInt32(); + + All.val.valueStack.Push(All.val.parameters[index]); + } + } +} diff --git a/VM.Runtime/OpCodes/Ldc.cs b/VM.Runtime/OpCodes/Ldc.cs new file mode 100644 index 0000000..cbb361f --- /dev/null +++ b/VM.Runtime/OpCodes/Ldc.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Ldc : Base + { + public override void emu() + { + var val =All.binr.ReadInt32(); + All.val.valueStack.Push(val); + } + } +} diff --git a/VM.Runtime/OpCodes/LdelemU1.cs b/VM.Runtime/OpCodes/LdelemU1.cs new file mode 100644 index 0000000..c4b6152 --- /dev/null +++ b/VM.Runtime/OpCodes/LdelemU1.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class LdelemU1 : Base + { + public override void emu() + { + var value = All.val.valueStack.Pop(); + var array =(byte[]) All.val.valueStack.Pop(); + All.val.valueStack.Push(array[(int)value]); + } + } +} diff --git a/VM.Runtime/OpCodes/Ldlen.cs b/VM.Runtime/OpCodes/Ldlen.cs new file mode 100644 index 0000000..1410201 --- /dev/null +++ b/VM.Runtime/OpCodes/Ldlen.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Ldlen : Base + { + public override void emu() + { + byte[] dy2n =(byte[]) All.val.valueStack.Pop(); + All.val.valueStack.Push(dy2n.Length); + } + } +} diff --git a/VM.Runtime/OpCodes/Ldloc.cs b/VM.Runtime/OpCodes/Ldloc.cs new file mode 100644 index 0000000..716f169 --- /dev/null +++ b/VM.Runtime/OpCodes/Ldloc.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Ldloc : Base + { + public override void emu() + { + + var index = All.binr.ReadInt32(); + All.val.valueStack.Push(All.val.locals[index]) ; + } + } +} diff --git a/VM.Runtime/OpCodes/Ldnull.cs b/VM.Runtime/OpCodes/Ldnull.cs new file mode 100644 index 0000000..e8e24a5 --- /dev/null +++ b/VM.Runtime/OpCodes/Ldnull.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Ldnull : Base + { + public override void emu() + { + All.val.valueStack.Push(null); + } + } +} diff --git a/VM.Runtime/OpCodes/Ldstr.cs b/VM.Runtime/OpCodes/Ldstr.cs new file mode 100644 index 0000000..8caec77 --- /dev/null +++ b/VM.Runtime/OpCodes/Ldstr.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + +using IL_Emulator_Dynamic; + +namespace VMExample.Instructions +{ + class Ldstr : Base + { + public override void emu() + { + string str = All.binr.ReadString(); + All.val.valueStack.Push(str); + } + } +} diff --git a/VM.Runtime/OpCodes/NewArr.cs b/VM.Runtime/OpCodes/NewArr.cs new file mode 100644 index 0000000..8417643 --- /dev/null +++ b/VM.Runtime/OpCodes/NewArr.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class NewArr : Base + { + public override void emu() + { + var amunt = All.val.valueStack.Pop(); + All.val.valueStack.Push(new byte[(int)amunt]); + } + } +} diff --git a/VM.Runtime/OpCodes/NewObj.cs b/VM.Runtime/OpCodes/NewObj.cs new file mode 100644 index 0000000..77d2df2 --- /dev/null +++ b/VM.Runtime/OpCodes/NewObj.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; + +using System.Reflection; + + +namespace VMExample.Instructions +{ + class NewObj : Base + { + public override void emu() + { + var mdtoken = All.binr.ReadInt32(); + ConstructorInfo metho = (ConstructorInfo) typeof(Random).GetConstructor(new Type[]{typeof(int)}); + + object[] typ = new Object[metho.GetParameters().Length]; + for (int i = 0; i < typ.Length; i++) + { + typ[i] = All.val.valueStack.Pop(); + + } + var a = Activator.CreateInstance(metho.DeclaringType, typ); + All.val.valueStack.Push(a); + + + + } + } +} diff --git a/VM.Runtime/OpCodes/Nop.cs b/VM.Runtime/OpCodes/Nop.cs new file mode 100644 index 0000000..c252ed2 --- /dev/null +++ b/VM.Runtime/OpCodes/Nop.cs @@ -0,0 +1,10 @@ +namespace VMExample.Instructions +{ + class Nop : Base + { + public override void emu() + { + + } + } +} diff --git a/VM.Runtime/OpCodes/Pop.cs b/VM.Runtime/OpCodes/Pop.cs new file mode 100644 index 0000000..db92306 --- /dev/null +++ b/VM.Runtime/OpCodes/Pop.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Pop : Base + { + public override void emu() + { + dynamic var =All.val.valueStack.Pop(); + } + } +} diff --git a/VM.Runtime/OpCodes/Rem.cs b/VM.Runtime/OpCodes/Rem.cs new file mode 100644 index 0000000..cd4a0c0 --- /dev/null +++ b/VM.Runtime/OpCodes/Rem.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Rem : Base + { + public override void emu() + { + var val2 =(int) All.val.valueStack.Pop(); + var val1 =(int) All.val.valueStack.Pop(); + var a = (int)val1 % val2; + All.val.valueStack.Push(a); + } + } +} diff --git a/VM.Runtime/OpCodes/StelemI1.cs b/VM.Runtime/OpCodes/StelemI1.cs new file mode 100644 index 0000000..a5f2ff3 --- /dev/null +++ b/VM.Runtime/OpCodes/StelemI1.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class StelemI1 : Base + { + public override void emu() + { + var value = All.val.valueStack.Pop(); + var index = All.val.valueStack.Pop(); + var array =(byte[]) All.val.valueStack.Pop(); + array[Convert.ToInt32(index)] =Convert.ToByte(Convert.ToInt32( value)); + } + } +} diff --git a/VM.Runtime/OpCodes/Stloc.cs b/VM.Runtime/OpCodes/Stloc.cs new file mode 100644 index 0000000..e17b398 --- /dev/null +++ b/VM.Runtime/OpCodes/Stloc.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Stloc : Base + { + public override void emu() + { + var val = All.val.valueStack.Pop(); + var index = All.binr.ReadInt32(); + All.val.locals[index] = val; + } + } +} diff --git a/VM.Runtime/OpCodes/ValueStack.cs b/VM.Runtime/OpCodes/ValueStack.cs new file mode 100644 index 0000000..3870001 --- /dev/null +++ b/VM.Runtime/OpCodes/ValueStack.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +using System.Reflection; +using System.Text; + + + +namespace IL_Emulator_Dynamic +{ + public class ValueStack + { + public StackvalueStack = new Stack(); + public object[] locals; + public Dictionary fields = new Dictionary(); + public object[] parameters; + } +} diff --git a/VM.Runtime/OpCodes/Xor.cs b/VM.Runtime/OpCodes/Xor.cs new file mode 100644 index 0000000..614a05d --- /dev/null +++ b/VM.Runtime/OpCodes/Xor.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +using System.Text; + + +namespace VMExample.Instructions +{ + class Xor : Base + { + public override void emu() + { + var val2 = All.val.valueStack.Pop(); + var val1 = All.val.valueStack.Pop(); + var a = Convert.ToByte(val1) ^ (int)val2; + All.val.valueStack.Push(a); + } + } +} diff --git a/VM.Runtime/Properties/AssemblyInfo.cs b/VM.Runtime/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0ac7426 --- /dev/null +++ b/VM.Runtime/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Runtime")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Runtime")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("520b7746-86a7-4021-87b4-507236a14cae")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/VM.Runtime/VM.Runtime.csproj b/VM.Runtime/VM.Runtime.csproj new file mode 100644 index 0000000..eab647d --- /dev/null +++ b/VM.Runtime/VM.Runtime.csproj @@ -0,0 +1,79 @@ + + + + + Debug + AnyCPU + {520B7746-86A7-4021-87B4-507236A14CAE} + Library + Properties + Runtime + Runtime + v4.7.2 + 512 + + + + true + full + true + ..\Bin\ + DEBUG + prompt + 4 + true + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VM.Runtime/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/VM.Runtime/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/VM.Runtime/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/VM.Runtime/obj/Debug/CoreCompileInputs.cache b/VM.Runtime/obj/Debug/CoreCompileInputs.cache new file mode 100644 index 0000000..44bebb9 --- /dev/null +++ b/VM.Runtime/obj/Debug/CoreCompileInputs.cache @@ -0,0 +1 @@ +93636441b298961b14ad4b7c6f21ee15e12282de diff --git a/VM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/VM.Runtime/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..98b909c8f9ec33fb1fc2f0f224c097ed6ec2dd13 GIT binary patch literal 6410 zcmeHLTT>f16t=-^FoYCSN(dzBW}3E1#h5|GPX-P!+MCkD;tGf$s=ho zF2h5ANq<47Ke0V$ec>9~2k#6ImdD5Pk#uf4l0GRGkHupDK*3)u4~KxbJIs+niJG?d znF@$k(t*o_l@q=%_;!9PZSGU4nBW`PWh;Z9w3!P$9Z0&tX`m(X(&k=J^_cS$ZI#6_ z~;~)ZtyRUGClB9>1$@@nWT;ul2J9;a5a%7N~CkNNA!`JtY2e{H>9XRgwU%gN$X5$ z*}52z1jjVR5YB<1%fYy$W#(Gbj^ON=$``k@^Gr27(n5vT2X+!|zCCbH3Wq8s5=Sm!>|}b#;{?;V#7d( z;_P5ZK!XI0B8LVE+OLDN5=R`I90oF$Oki~c3BZ9^@&OR|8AXyrGKORv z$e8gEXv~-Zl0PeUkkfhzfOL~cYWKjdZS8KAdl)i(vS_VXZ_`}}+JT!}r{~5akn~49 zzit=l2_R5vZt*(f6rcvL+pf?c#tgx%of9tbI)CI_St2 z)lYVwR)acF1#q+skf}(O@J@R8_yQkU4sniX@(Xlp63El5mUpiKZ4ZnT^q9sTX3se@ z^v#$;0i9l7LOtOt<{8sa8v|~}TF5M9*OFhs|JYax!;W8L28q>V+;@$~P)}H{=NYqM zjh@mJ&J50pf!6_&Tektq)dA7B!(hHTU0r?+q3eJ>vlCzd!I!3@XX({RvD?PlT{sqM zo&z;*Bx-tiQPNP;eAJrqM3Yd{Q_yr6rB66z&p?SErIHVfyP~PAf{?xn{dx{6ohViQ z=6k3pfjh(CJR6*6eZ9H$8xDrs=^@;heKm5Z*za`o5Dyf%yF$y~iQe{e^F}+kuHxg> zXK&U~Zb{)8jL&(73FOyEHr*7$u29Dds3Z#T6c5em-QcDWq+v-RPzy1`H&B^9%ia1mcy7Fe)~T}}7}xk3gwI6Vuz1dmZ-GB|R=)k= zt95RC2krgAe&2(niL)YUBEZ9^v2)`Uu-^9p4ZdUCP9dg4lxw^O63wI;Z$NYzN2!JgK8D6NeD3&;^fsQ>@~ literal 0 HcmV?d00001 diff --git a/VM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache b/VM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..e99506a --- /dev/null +++ b/VM.Runtime/obj/Debug/Runtime.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +30d6132fb1155f3f8cb70eebf3c2192c01b86188 diff --git a/VM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt b/VM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..e7ebf88 --- /dev/null +++ b/VM.Runtime/obj/Debug/Runtime.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Bin\Runtime.dll +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Bin\Runtime.pdb +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Runtime\obj\Debug\Runtime.csprojResolveAssemblyReference.cache +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Runtime\obj\Debug\Runtime.dll +c:\users\eddy^cz\documents\visual studio 2017\Projects\VM\Runtime\obj\Debug\Runtime.pdb +C:\Users\4355678931\Desktop\CawkVM\Bin\Runtime.dll +C:\Users\4355678931\Desktop\CawkVM\Bin\Runtime.pdb +C:\Users\4355678931\Desktop\CawkVM\Runtime\obj\Debug\Runtime.csproj.CoreCompileInputs.cache +C:\Users\4355678931\Desktop\CawkVM\Runtime\obj\Debug\Runtime.dll +C:\Users\4355678931\Desktop\CawkVM\Runtime\obj\Debug\Runtime.pdb +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Bin\Runtime.dll +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Bin\Runtime.pdb +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Runtime\obj\Debug\Runtime.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Runtime\obj\Debug\Runtime.dll +C:\Users\akibu\Desktop\CawkVM-Virtualization-master\Runtime\obj\Debug\Runtime.pdb diff --git a/VM.Runtime/obj/Debug/Runtime.csprojResolveAssemblyReference.cache b/VM.Runtime/obj/Debug/Runtime.csprojResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..76cdb4999127656696458945ac57bd74cbd6d86c GIT binary patch literal 1113 zcmbVL(Q4Z;6m^`$jUA`Wy24)ekip&>jMEZQ%0gk;Ld(|Dk zHzdcTiibVhe8y;|G^8UD_){PfS3altvn+E`G*IZ?NoL>$nyTQ*QZ_$PJ8 z5WKg7&>@MnkUNX})CMBGBNAj2MF)bywG{V^f~?_(5&H}kb0g*45T1jwta90^R_nD* zXI(6{o^SAc@t6M3cPD2Ky7JJQTS2HAXyObf4(|2`r<3E!;%RHPgBj(U^D$*+he0p;95>65J_FuG=F3)VXHaJcMFERfHM(wBm=gaP%5 zQjkV`c4cbgQ@DeSLKZVnzKV&~ATd_$$~@C7g+&uKl4U6|%(88}WH+$4t%E0DKi+;j x_dL&Onx(g@v{%9lpy74Wqaq0}SS0NiNtl2l>2Z;S37V6BeE+iabWkAGe*;kUIB);} literal 0 HcmV?d00001 diff --git a/VM.Runtime/obj/Debug/Runtime.dll b/VM.Runtime/obj/Debug/Runtime.dll new file mode 100644 index 0000000000000000000000000000000000000000..aebf725034fd380eb45462af734019b5fe32d648 GIT binary patch literal 22016 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 A&Hw-a literal 0 HcmV?d00001 diff --git a/VM.Runtime/obj/Debug/VM.Runtime.csproj.CoreCompileInputs.cache b/VM.Runtime/obj/Debug/VM.Runtime.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..3d35682 --- /dev/null +++ b/VM.Runtime/obj/Debug/VM.Runtime.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +34fc5bef0e97fa88670fafbc49b7b2bdf1cb3939 diff --git a/VM.Runtime/obj/Debug/VM.Runtime.csproj.FileListAbsolute.txt b/VM.Runtime/obj/Debug/VM.Runtime.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..80aaa06 --- /dev/null +++ b/VM.Runtime/obj/Debug/VM.Runtime.csproj.FileListAbsolute.txt @@ -0,0 +1,5 @@ +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Runtime.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Runtime.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Runtime\obj\Debug\VM.Runtime.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Runtime\obj\Debug\Runtime.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\VM.Runtime\obj\Debug\Runtime.pdb diff --git a/VM.Runtime/obj/Release/CoreCompileInputs.cache b/VM.Runtime/obj/Release/CoreCompileInputs.cache new file mode 100644 index 0000000..44bebb9 --- /dev/null +++ b/VM.Runtime/obj/Release/CoreCompileInputs.cache @@ -0,0 +1 @@ +93636441b298961b14ad4b7c6f21ee15e12282de diff --git a/VM.Runtime/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/VM.Runtime/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..3b008eae3f3644a504f7c3ac4f1d558b6a50aabb GIT binary patch literal 5918 zcmeHLZBH9V5VpZwun8%qDIw6LZkxWSvQ9R{H9_S=f^myl5V9>&iF3*NZfrK(-CDbQ z7zgoN`U|T5#CGQV28578jl>5Z@_3oud3JVocKzH$qLE1CAAIPWp8I1coGorkp+sGq zyIcj#E$hJH!dw@gC;ZLAMmn_%QgPw0WpieR{?e)Sz}10-H6H>knVU}S1T~l2ze2kr z4#8imWtQu?dcK~`I=Kv6W)n2!$_Hk86>!&~`8ItGQZ!#n)@*__OH6M1%|NTiX#AMD zu4sYtQYr9iZhPZcgHK+mX&k*S{5o$GxeIeP^BwLm4ZV@1Rg3k&b&HaD&=T^n*HvLP z?0a~wuP9sx*ZY)|6($>?`)1{!ra*5ahS(G`bwjJ1MfP(KU_Vi1J@b) zh+huz;xM4&h<0!|X z(WrqRl##JNC(3Q5!Nc^#{k1hEocS~OAh~V+hQWH1-P^lj2%d;t<_56CxO}tJA6nLu z`;BzUQ?`&UuMN)F^Z$Ir@_ClCb3bNZEI)_L%8P3HDnIV1tG5w{>Ttt)$Kj&UQHtJ1 z7WGflZGhkLoEq{08YSp$%zkE2M$W7M1=fpj1ezlQ?9CP~CeBuGr5 zNEr7~MvQ3`uTDx`=CoQyBHdyVtUlSb%IaUtM3dUUT0O zEj0)$Ib!w0Y7OSHdZa3ZTtNG^>)ChdT!Cp8LM$T0%8ejsO`oH6@kZ9&C7VSdJr#QL z1hIa)5!UaXO9(NF>F7Ql-N!?H^B6Xr32%sfeB<-f#J=M1U~>PcQ-Z*rzhk4Qp=#Uy-#n$p{XS1g68#9H`aL$TyCosDK)ZWk Y{0WAh@xMm*#K(%XqkE!XJgZLq3k15BZ2$lO literal 0 HcmV?d00001 diff --git a/dnlib/DotNet/AccessChecker.cs b/dnlib/DotNet/AccessChecker.cs new file mode 100644 index 0000000..3f3758b --- /dev/null +++ b/dnlib/DotNet/AccessChecker.cs @@ -0,0 +1,610 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet { + /// + /// Checks whether a type has access to some other target type, method or field + /// according to the target's visibility. + /// + public struct AccessChecker { + TypeDef userType; + List userTypeEnclosingTypes; + bool enclosingTypesInitialized; + Dictionary baseTypes; + bool baseTypesInitialized; + + [Flags] + enum CheckTypeAccess { + /// + /// Can't access the type + /// + None = 0, + + /// + /// Normal access to the type and its members. Type + member must be public, internal + /// or protected (for sub classes) to access the member. + /// + Normal = 1, + + /// + /// Full access to the type, even if the type is private. If clear, the type + /// must be public, internal or protected (for sub classes). + /// + FullTypeAccess = 2, + + /// + /// Full access to the type's members (types, fields, methods), even if the + /// members are private. If clear, the members must be public, internal + /// or protected (for sub classes) + /// + FullMemberAccess = 4, + + /// + /// Full access to the type and its members + /// + Full = Normal | FullTypeAccess | FullMemberAccess, + } + + /// + /// Gets/sets the user type which is accessing the target type, field or method + /// + public TypeDef UserType { + get { return userType; } + set { + if (userType == value) + return; + userType = value; + enclosingTypesInitialized = false; + baseTypesInitialized = false; + if (userTypeEnclosingTypes != null) + userTypeEnclosingTypes.Clear(); + if (baseTypes != null) + baseTypes.Clear(); + } + } + + /// + /// Constructor + /// + /// The type accessing the target type, field or method + public AccessChecker(TypeDef userType) { + this.userType = userType; + this.userTypeEnclosingTypes = null; + this.baseTypes = null; + this.enclosingTypesInitialized = false; + this.baseTypesInitialized = false; + } + + /// + /// Checks whether it can access a method or a field + /// + /// Operand + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(object op) { + var md = op as MethodDef; + if (md != null) + return CanAccess(md); + + var mr = op as MemberRef; + if (mr != null) + return CanAccess(mr); + + var fd = op as FieldDef; + if (fd != null) + return CanAccess(fd); + + var ms = op as MethodSpec; + if (ms != null) + return CanAccess(ms); + + var tr = op as TypeRef; + if (tr != null) + return CanAccess(tr.Resolve()); + + var td = op as TypeDef; + if (td != null) + return CanAccess(td); + + var ts = op as TypeSpec; + if (ts != null) + return CanAccess(ts); + + return null; + } + + /// + /// Checks whether it can access a + /// + /// The type + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(TypeRef tr) { + if (tr == null) + return null; + return CanAccess(tr.Resolve()); + } + + /// + /// Checks whether it can access a + /// + /// The type + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(TypeDef td) { + var access = GetTypeAccess(td, null); + if (access == null) + return null; + return (access.Value & CheckTypeAccess.Normal) != 0; + } + + /// + /// Returns the access we have to . If is + /// enclosing this type, we have private access to it and all its members. If its + /// declaring type encloses us, we have private access to it, but only normal access + /// to its members. Else, we only have normal access to it and its members. If we inherit + /// it, we have protected access to it and its members. + /// + /// The type + /// Generic instance of or null if none + CheckTypeAccess? GetTypeAccess(TypeDef td, GenericInstSig git) { + if (td == null) + return null; + if (userType == td) + return CheckTypeAccess.Full; + + // If this is our nested type, we have private access to it itself, but normal + // access to its members. + if (td.DeclaringType == userType) + return CheckTypeAccess.Normal | CheckTypeAccess.FullTypeAccess; + + // If we're not a nested type, td can't be our enclosing type + if (userType.DeclaringType == null) + return GetTypeAccess2(td, git); + + // Can't be an enclosing type if they're not in the same module + if (userType.Module != td.Module) + return GetTypeAccess2(td, git); + + var tdEncTypes = GetEnclosingTypes(td, true); + var ourEncTypes = InitializeOurEnclosingTypes(); + int maxChecks = Math.Min(tdEncTypes.Count, ourEncTypes.Count); + int commonIndex; + for (commonIndex = 0; commonIndex < maxChecks; commonIndex++) { + if (tdEncTypes[commonIndex] != ourEncTypes[commonIndex]) + break; + } + + // If td encloses us, then we have access to td and all its members even if + // they're private. + if (commonIndex == tdEncTypes.Count) + return CheckTypeAccess.Full; + + // If there are no common enclosing types, only check the visibility. + if (commonIndex == 0) + return GetTypeAccess2(td, git); + + // If td's declaring type encloses this, then we have full access to td even if + // it's private, but only normal access to its members. + if (commonIndex + 1 == tdEncTypes.Count) + return CheckTypeAccess.Normal | CheckTypeAccess.FullTypeAccess; + + // Normal visibility checks starting from type after common enclosing type. + // Note that we have full access to it so we don't need to check its access, + // so start from the next one. + for (int i = commonIndex + 1; i < tdEncTypes.Count; i++) { + if (!IsVisible(tdEncTypes[i], null)) + return CheckTypeAccess.None; + } + return CheckTypeAccess.Normal; + } + + CheckTypeAccess GetTypeAccess2(TypeDef td, GenericInstSig git) { + while (td != null) { + var declType = td.DeclaringType; + if (userType != declType && !IsVisible(td, git)) + return CheckTypeAccess.None; + td = declType; + git = null; + } + return CheckTypeAccess.Normal; + } + + /// + /// Checks whether is visible to us without checking whether they + /// have any common enclosing types. + /// + /// Type + /// Generic instance of or null if none + bool IsVisible(TypeDef td, GenericInstSig git) { + if (td == null) + return false; + if (td == userType) + return true; + + switch (td.Visibility) { + case TypeAttributes.NotPublic: + return IsSameAssemblyOrFriendAssembly(td.Module); + + case TypeAttributes.Public: + return true; + + case TypeAttributes.NestedPublic: + return true; + + case TypeAttributes.NestedPrivate: + return false; + + case TypeAttributes.NestedFamily: + return CheckFamily(td, git); + + case TypeAttributes.NestedAssembly: + return IsSameAssemblyOrFriendAssembly(td.Module); + + case TypeAttributes.NestedFamANDAssem: + return IsSameAssemblyOrFriendAssembly(td.Module) && + CheckFamily(td, git); + + case TypeAttributes.NestedFamORAssem: + return IsSameAssemblyOrFriendAssembly(td.Module) || + CheckFamily(td, git); + + default: + return false; + } + } + + bool IsSameAssemblyOrFriendAssembly(ModuleDef module) { + if (module == null) + return false; + var userModule = userType.Module; + if (userModule == null) + return false; + if (userModule == module) + return true; + var userAsm = userModule.Assembly; + var modAsm = module.Assembly; + if (IsSameAssembly(userAsm, modAsm)) + return true; + if (userAsm != null && userAsm.IsFriendAssemblyOf(modAsm)) + return true; + + return false; + } + + static bool IsSameAssembly(IAssembly asm1, IAssembly asm2) { + if (asm1 == null || asm2 == null) + return false; + if (asm1 == asm2) + return true; + return new AssemblyNameComparer(AssemblyNameComparerFlags.All).Equals(asm1, asm2); + } + + /// + /// Checks whether has access to . + /// is Family, FamANDAssem, or FamORAssem. + /// + /// Type + /// Generic instance of or null if none + bool CheckFamily(TypeDef td, GenericInstSig git) { + if (td == null) + return false; + InitializeBaseTypes(); + + if (baseTypes.ContainsKey(git == null ? (IType)td : git)) + return true; + + // td is Family, FamANDAssem, or FamORAssem. If we derive from its enclosing type, + // we have access to it. + var td2 = td.DeclaringType; + if (td2 != null && baseTypes.ContainsKey(td2)) + return true; + + // If one of our enclosing types derive from it, we also have access to it + var userDeclType = userType.DeclaringType; + if (userDeclType != null) + return new AccessChecker(userDeclType).CheckFamily(td, git); + + return false; + } + + void InitializeBaseTypes() { + if (baseTypesInitialized) + return; + if (baseTypes == null) + baseTypes = new Dictionary(TypeEqualityComparer.Instance); + baseTypesInitialized = true; + + ITypeDefOrRef baseType = userType; + while (baseType != null) { + baseTypes[baseType] = true; + baseType = baseType.GetBaseType(); + } + } + + List InitializeOurEnclosingTypes() { + if (!enclosingTypesInitialized) { + userTypeEnclosingTypes = GetEnclosingTypes(userType, true); + enclosingTypesInitialized = true; + } + return userTypeEnclosingTypes; + } + + /// + /// Returns a list of all enclosing types, in order of non-enclosed to most enclosed type + /// + /// Type + /// true if should be included + /// A list of all enclosing types + static List GetEnclosingTypes(TypeDef td, bool includeInput) { + var list = new List(); + if (includeInput && td != null) + list.Add(td); + while (td != null) { + var dt = td.DeclaringType; + if (dt == null) + break; + if (list.Contains(dt)) + break; + list.Add(dt); + td = dt; + } + list.Reverse(); + return list; + } + + /// + /// Checks whether it can access a + /// + /// The field + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(FieldDef fd) { + return CanAccess(fd, null); + } + + bool? CanAccess(FieldDef fd, GenericInstSig git) { + if (fd == null) + return null; + var access = GetTypeAccess(fd.DeclaringType, git); + if (access == null) + return null; + var acc = access.Value; + if ((acc & CheckTypeAccess.Normal) == 0) + return false; + if ((acc & CheckTypeAccess.FullMemberAccess) != 0) + return true; + + return IsVisible(fd, git); + } + + bool IsVisible(FieldDef fd, GenericInstSig git) { + if (fd == null) + return false; + var fdDeclaringType = fd.DeclaringType; + if (fdDeclaringType == null) + return false; + if (userType == fdDeclaringType) + return true; + + switch (fd.Access) { + case FieldAttributes.PrivateScope: + // Private scope aka compiler controlled fields/methods can only be accessed + // by a Field/Method token. This means they must be in the same module. + return userType.Module == fdDeclaringType.Module; + + case FieldAttributes.Private: + return false; + + case FieldAttributes.FamANDAssem: + return IsSameAssemblyOrFriendAssembly(fdDeclaringType.Module) && + CheckFamily(fdDeclaringType, git); + + case FieldAttributes.Assembly: + return IsSameAssemblyOrFriendAssembly(fdDeclaringType.Module); + + case FieldAttributes.Family: + return CheckFamily(fdDeclaringType, git); + + case FieldAttributes.FamORAssem: + return IsSameAssemblyOrFriendAssembly(fdDeclaringType.Module) || + CheckFamily(fdDeclaringType, git); + + case FieldAttributes.Public: + return true; + + default: + return false; + } + } + + /// + /// Checks whether it can access a + /// + /// The method + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(MethodDef md) { + return CanAccess(md, (GenericInstSig)null); + } + + bool? CanAccess(MethodDef md, GenericInstSig git) { + if (md == null) + return null; + var access = GetTypeAccess(md.DeclaringType, git); + if (access == null) + return null; + var acc = access.Value; + if ((acc & CheckTypeAccess.Normal) == 0) + return false; + if ((acc & CheckTypeAccess.FullMemberAccess) != 0) + return true; + + return IsVisible(md, git); + } + + bool IsVisible(MethodDef md, GenericInstSig git) { + if (md == null) + return false; + var mdDeclaringType = md.DeclaringType; + if (mdDeclaringType == null) + return false; + if (userType == mdDeclaringType) + return true; + + switch (md.Access) { + case MethodAttributes.PrivateScope: + // Private scope aka compiler controlled fields/methods can only be accessed + // by a Field/Method token. This means they must be in the same module. + return userType.Module == mdDeclaringType.Module; + + case MethodAttributes.Private: + return false; + + case MethodAttributes.FamANDAssem: + return IsSameAssemblyOrFriendAssembly(mdDeclaringType.Module) && + CheckFamily(mdDeclaringType, git); + + case MethodAttributes.Assembly: + return IsSameAssemblyOrFriendAssembly(mdDeclaringType.Module); + + case MethodAttributes.Family: + return CheckFamily(mdDeclaringType, git); + + case MethodAttributes.FamORAssem: + return IsSameAssemblyOrFriendAssembly(mdDeclaringType.Module) || + CheckFamily(mdDeclaringType, git); + + case MethodAttributes.Public: + return true; + + default: + return false; + } + } + + /// + /// Checks whether it can access a + /// + /// The member reference + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(MemberRef mr) { + if (mr == null) + return null; + + var parent = mr.Class; + + var td = parent as TypeDef; + if (td != null) + return CanAccess(td, mr); + + var tr = parent as TypeRef; + if (tr != null) + return CanAccess(tr.Resolve(), mr); + + var ts = parent as TypeSpec; + if (ts != null) + return CanAccess(ts.ResolveTypeDef(), ts.TryGetGenericInstSig(), mr); + + var md = parent as MethodDef; + if (md != null) + return CanAccess(md, mr); + + var mod = parent as ModuleRef; + if (mod != null) + return CanAccess(mod, mr); + + return null; + } + + bool? CanAccess(TypeDef td, MemberRef mr) { + return CanAccess(td, null, mr); + } + + bool? CanAccess(TypeDef td, GenericInstSig git, MemberRef mr) { + if (mr == null || td == null) + return null; + + if (mr.MethodSig != null) { + var md = td.FindMethodCheckBaseType(mr.Name, mr.MethodSig); + if (md == null) { + // Assume that it's an array type if it's one of these methods + if (mr.Name == "Get" || mr.Name == "Set" || mr.Name == "Address" || mr.Name == MethodDef.InstanceConstructorName) + return true; + return null; + } + return CanAccess(md, git); + } + + if (mr.FieldSig != null) + return CanAccess(td.FindFieldCheckBaseType(mr.Name, mr.FieldSig), git); + + return null; + } + + bool? CanAccess(MethodDef md, MemberRef mr) { + if (mr == null || md == null) + return null; + return CanAccess(md); + } + + bool? CanAccess(ModuleRef mod, MemberRef mr) { + if (mr == null || mod == null || mod.Module == null) + return null; + + var userModule = userType.Module; + if (userModule == null) + return null; + var userAsm = userModule.Assembly; + if (!IsSameAssembly(userAsm, mod.Module.Assembly)) + return false; + if (userAsm == null) + return false; + var otherMod = userAsm.FindModule(mod.Name); + if (otherMod == null) + return false; + return CanAccess(otherMod.GlobalType, mr); + } + + /// + /// Checks whether it can access a + /// + /// The type spec + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(TypeSpec ts) { + return CanAccess(ts.ResolveTypeDef()); + } + + /// + /// Checks whether it can access a + /// + /// The method spec + /// true if it has access to it, false if not, and null + /// if we can't determine it (eg. we couldn't resolve a type or input was null) + public bool? CanAccess(MethodSpec ms) { + if (ms == null) + return null; + + var mdr = ms.Method; + + var md = mdr as MethodDef; + if (md != null) + return CanAccess(md); + + var mr = mdr as MemberRef; + if (mr != null) + return CanAccess(mr); + + return null; + } + + /// + public override string ToString() { + return string.Format("{0}", userType); + } + } +} diff --git a/dnlib/DotNet/AllTypesHelper.cs b/dnlib/DotNet/AllTypesHelper.cs new file mode 100644 index 0000000..1d0429b --- /dev/null +++ b/dnlib/DotNet/AllTypesHelper.cs @@ -0,0 +1,36 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Returns types without getting stuck in an infinite loop + /// + public struct AllTypesHelper { + /// + /// Gets a list of all types and nested types + /// + /// A list of types + public static IEnumerable Types(IEnumerable types) { + var visited = new Dictionary(); + var stack = new Stack>(); + if (types != null) + stack.Push(types.GetSafeEnumerable().GetEnumerator()); + while (stack.Count > 0) { + var enumerator = stack.Pop(); + while (enumerator.MoveNext()) { + var type = enumerator.Current; + if (visited.ContainsKey(type)) + continue; + visited[type] = true; + yield return type; + if (type.NestedTypes.Count > 0) { + stack.Push(enumerator); + enumerator = type.NestedTypes.GetSafeEnumerable().GetEnumerator(); + } + } + } + } + } +} diff --git a/dnlib/DotNet/AssemblyAttributes.cs b/dnlib/DotNet/AssemblyAttributes.cs new file mode 100644 index 0000000..7d2b2db --- /dev/null +++ b/dnlib/DotNet/AssemblyAttributes.cs @@ -0,0 +1,56 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Assembly flags from Assembly.Flags column. + /// + /// See CorHdr.h/CorAssemblyFlags + [Flags] + public enum AssemblyAttributes : uint { + /// No flags set + None = 0, + + /// The assembly ref holds the full (unhashed) public key. + PublicKey = 1, + + /// Processor Architecture unspecified + PA_None = 0x0000, + /// Processor Architecture: neutral (PE32) + PA_MSIL = 0x0010, + /// Processor Architecture: x86 (PE32) + PA_x86 = 0x0020, + /// Processor Architecture: Itanium (PE32+) + PA_IA64 = 0x0030, + /// Processor Architecture: AMD X64 (PE32+) + PA_AMD64 = 0x0040, + /// Processor Architecture: ARM (PE32) + PA_ARM = 0x0050, + /// applies to any platform but cannot run on any (e.g. reference assembly), should not have "specified" set + PA_NoPlatform = 0x0070, + /// Propagate PA flags to AssemblyRef record + PA_Specified = 0x0080, + /// Bits describing the processor architecture + PA_Mask = 0x0070, + /// Bits describing the PA incl. Specified + PA_FullMask = 0x00F0, + /// NOT A FLAG, shift count in PA flags <--> index conversion + PA_Shift = 0x0004, + + /// From "DebuggableAttribute". + EnableJITcompileTracking = 0x8000, + /// From "DebuggableAttribute". + DisableJITcompileOptimizer = 0x4000, + + /// The assembly can be retargeted (at runtime) to an assembly from a different publisher. + Retargetable = 0x0100, + + /// + ContentType_Default = 0x0000, + /// + ContentType_WindowsRuntime = 0x0200, + /// Bits describing ContentType + ContentType_Mask = 0x0E00, + } +} diff --git a/dnlib/DotNet/AssemblyDef.cs b/dnlib/DotNet/AssemblyDef.cs new file mode 100644 index 0000000..bf76363 --- /dev/null +++ b/dnlib/DotNet/AssemblyDef.cs @@ -0,0 +1,1008 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Reflection; +using System.Threading; +using dnlib.Utils; +using dnlib.DotNet.MD; +using dnlib.DotNet.Writer; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Assembly table + /// + public abstract class AssemblyDef : IHasCustomAttribute, IHasDeclSecurity, IAssembly, IListListener, ITypeDefFinder, IDnlibDef { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.Assembly, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 14; } + } + + /// + public int HasDeclSecurityTag { + get { return 2; } + } + + /// + /// From column Assembly.HashAlgId + /// + public AssemblyHashAlgorithm HashAlgorithm { + get { return hashAlgorithm; } + set { hashAlgorithm = value; } + } + /// + protected AssemblyHashAlgorithm hashAlgorithm; + + /// + /// From columns Assembly.MajorVersion, Assembly.MinorVersion, Assembly.BuildNumber, + /// Assembly.RevisionNumber. + /// + /// If is null + public Version Version { + get { return version; } + set { + if (value == null) + throw new ArgumentNullException("value"); + version = value; + } + } + /// + protected Version version; + + /// + /// From column Assembly.Flags + /// + public AssemblyAttributes Attributes { + get { return (AssemblyAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column Assembly.PublicKey + /// + /// An empty is created if the caller writes null + public PublicKey PublicKey { + get { return publicKey; } + set { publicKey = value ?? new PublicKey(); } + } + /// + protected PublicKey publicKey; + + /// + /// Gets the public key token which is calculated from + /// + public PublicKeyToken PublicKeyToken { + get { return publicKey.Token; } + } + + /// + /// From column Assembly.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column Assembly.Locale + /// + public UTF8String Culture { + get { return culture; } + set { culture = value; } + } + /// Name + protected UTF8String culture; + + /// + public ThreadSafe.IList DeclSecurities { + get { + if (declSecurities == null) + InitializeDeclSecurities(); + return declSecurities; + } + } + /// + protected ThreadSafe.IList declSecurities; + /// Initializes + protected virtual void InitializeDeclSecurities() { + Interlocked.CompareExchange(ref declSecurities, ThreadSafeListCreator.Create(), null); + } + + /// + public PublicKeyBase PublicKeyOrToken { + get { return publicKey; } + } + + /// + public string FullName { + get { return GetFullNameWithPublicKeyToken(); } + } + + /// + public string FullNameToken { + get { return GetFullNameWithPublicKeyToken(); } + } + + /// + /// Gets all modules. The first module is always the . + /// + public ThreadSafe.IList Modules { + get { + if (modules == null) + InitializeModules(); + return modules; + } + } + /// + protected LazyList modules; + /// Initializes + protected virtual void InitializeModules() { + Interlocked.CompareExchange(ref modules, new LazyList(this), null); + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public bool HasDeclSecurities { + get { return DeclSecurities.Count > 0; } + } + + /// + /// true if is not empty + /// + public bool HasModules { + get { return Modules.Count > 0; } + } + + /// + /// Gets the manifest (main) module. This is always the first module in . + /// null is returned if is empty. + /// + public ModuleDef ManifestModule { + get { return Modules.Get(0, null); } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(AssemblyAttributes andMask, AssemblyAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, AssemblyAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool HasPublicKey { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PublicKey) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.PublicKey); } + } + + /// + /// Gets/sets the processor architecture + /// + public AssemblyAttributes ProcessorArchitecture { + get { return (AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask; } + set { ModifyAttributes(~AssemblyAttributes.PA_Mask, value & AssemblyAttributes.PA_Mask); } + } + + /// + /// Gets/sets the processor architecture + /// + public AssemblyAttributes ProcessorArchitectureFull { + get { return (AssemblyAttributes)attributes & AssemblyAttributes.PA_FullMask; } + set { ModifyAttributes(~AssemblyAttributes.PA_FullMask, value & AssemblyAttributes.PA_FullMask); } + } + + /// + /// true if unspecified processor architecture + /// + public bool IsProcessorArchitectureNone { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_None; } + } + + /// + /// true if neutral (PE32) architecture + /// + public bool IsProcessorArchitectureMSIL { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_MSIL; } + } + + /// + /// true if x86 (PE32) architecture + /// + public bool IsProcessorArchitectureX86 { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_x86; } + } + + /// + /// true if IA-64 (PE32+) architecture + /// + public bool IsProcessorArchitectureIA64 { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_IA64; } + } + + /// + /// true if x64 (PE32+) architecture + /// + public bool IsProcessorArchitectureX64 { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_AMD64; } + } + + /// + /// true if ARM (PE32) architecture + /// + public bool IsProcessorArchitectureARM { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_ARM; } + } + + /// + /// true if eg. reference assembly (not runnable) + /// + public bool IsProcessorArchitectureNoPlatform { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_NoPlatform; } + } + + /// + /// Gets/sets the bit + /// + public bool IsProcessorArchitectureSpecified { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Specified) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.PA_Specified); } + } + + /// + /// Gets/sets the bit + /// + public bool EnableJITcompileTracking { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.EnableJITcompileTracking) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.EnableJITcompileTracking); } + } + + /// + /// Gets/sets the bit + /// + public bool DisableJITcompileOptimizer { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.DisableJITcompileOptimizer) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.DisableJITcompileOptimizer); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRetargetable { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.Retargetable) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.Retargetable); } + } + + /// + /// Gets/sets the content type + /// + public AssemblyAttributes ContentType { + get { return (AssemblyAttributes)attributes & AssemblyAttributes.ContentType_Mask; } + set { ModifyAttributes(~AssemblyAttributes.ContentType_Mask, value & AssemblyAttributes.ContentType_Mask); } + } + + /// + /// true if content type is Default + /// + public bool IsContentTypeDefault { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_Default; } + } + + /// + /// true if content type is WindowsRuntime + /// + public bool IsContentTypeWindowsRuntime { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_WindowsRuntime; } + } + + /// + /// Finds a module in this assembly + /// + /// Name of module + /// A instance or null if it wasn't found. + public ModuleDef FindModule(UTF8String name) { + foreach (var module in Modules.GetSafeEnumerable()) { + if (module == null) + continue; + if (UTF8String.CaseInsensitiveEquals(module.Name, name)) + return module; + } + return null; + } + + /// + /// Creates an instance from a file + /// + /// File name of an existing .NET assembly + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(string fileName) { + return Load(fileName, (ModuleCreationOptions)null); + } + + /// + /// Creates an instance from a file + /// + /// File name of an existing .NET assembly + /// Module context or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(string fileName, ModuleContext context) { + return Load(fileName, new ModuleCreationOptions(context)); + } + + /// + /// Creates an instance from a file + /// + /// File name of an existing .NET assembly + /// Module creation options or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(string fileName, ModuleCreationOptions options) { + if (fileName == null) + throw new ArgumentNullException("fileName"); + ModuleDef module = null; + try { + module = ModuleDefMD.Load(fileName, options); + var asm = module.Assembly; + if (asm == null) + throw new BadImageFormatException(string.Format("{0} is only a .NET module, not a .NET assembly. Use ModuleDef.Load().", fileName)); + return asm; + } + catch { + if (module != null) + module.Dispose(); + throw; + } + } + + /// + /// Creates an instance from a byte[] + /// + /// Contents of a .NET assembly + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(byte[] data) { + return Load(data, (ModuleCreationOptions)null); + } + + /// + /// Creates an instance from a byte[] + /// + /// Contents of a .NET assembly + /// Module context or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(byte[] data, ModuleContext context) { + return Load(data, new ModuleCreationOptions(context)); + } + + /// + /// Creates an instance from a byte[] + /// + /// Contents of a .NET assembly + /// Module creation options or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(byte[] data, ModuleCreationOptions options) { + if (data == null) + throw new ArgumentNullException("data"); + ModuleDef module = null; + try { + module = ModuleDefMD.Load(data, options); + var asm = module.Assembly; + if (asm == null) + throw new BadImageFormatException(string.Format("{0} is only a .NET module, not a .NET assembly. Use ModuleDef.Load().", module.ToString())); + return asm; + } + catch { + if (module != null) + module.Dispose(); + throw; + } + } + + /// + /// Creates an instance from a memory location + /// + /// Address of a .NET assembly + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(IntPtr addr) { + return Load(addr, (ModuleCreationOptions)null); + } + + /// + /// Creates an instance from a memory location + /// + /// Address of a .NET assembly + /// Module context or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(IntPtr addr, ModuleContext context) { + return Load(addr, new ModuleCreationOptions(context)); + } + + /// + /// Creates an instance from a memory location + /// + /// Address of a .NET assembly + /// Module creation options or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(IntPtr addr, ModuleCreationOptions options) { + if (addr == IntPtr.Zero) + throw new ArgumentNullException("addr"); + ModuleDef module = null; + try { + module = ModuleDefMD.Load(addr, options); + var asm = module.Assembly; + if (asm == null) + throw new BadImageFormatException(string.Format("{0} (addr: {1:X8}) is only a .NET module, not a .NET assembly. Use ModuleDef.Load().", module.ToString(), addr.ToInt64())); + return asm; + } + catch { + if (module != null) + module.Dispose(); + throw; + } + } + + /// + /// Creates an instance from a stream + /// + /// This will read all bytes from the stream and call . + /// It's better to use one of the other Load() methods. + /// The stream + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(Stream stream) { + return Load(stream, (ModuleCreationOptions)null); + } + + /// + /// Creates an instance from a stream + /// + /// This will read all bytes from the stream and call . + /// It's better to use one of the other Load() methods. + /// The stream + /// Module context or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(Stream stream, ModuleContext context) { + return Load(stream, new ModuleCreationOptions(context)); + } + + /// + /// Creates an instance from a stream + /// + /// This will read all bytes from the stream and call . + /// It's better to use one of the other Load() methods. + /// The stream + /// Module creation options or null + /// A new instance + /// If is null + /// If it's not a .NET assembly (eg. not a .NET file or only a .NET module) + public static AssemblyDef Load(Stream stream, ModuleCreationOptions options) { + if (stream == null) + throw new ArgumentNullException("stream"); + ModuleDef module = null; + try { + module = ModuleDefMD.Load(stream, options); + var asm = module.Assembly; + if (asm == null) + throw new BadImageFormatException(string.Format("{0} is only a .NET module, not a .NET assembly. Use ModuleDef.Load().", module.ToString())); + return asm; + } + catch { + if (module != null) + module.Dispose(); + throw; + } + } + + /// + /// Gets the assembly name with the public key + /// + public string GetFullNameWithPublicKey() { + return GetFullName(publicKey); + } + + /// + /// Gets the assembly name with the public key token + /// + public string GetFullNameWithPublicKeyToken() { + return GetFullName(publicKey.Token); + } + + string GetFullName(PublicKeyBase pkBase) { + return Utils.GetAssemblyNameString(name, version, culture, pkBase, Attributes); + } + + /// + /// Finds a . For speed, enable + /// if possible (read the documentation first). + /// + /// Full name of the type (no assembly information) + /// true if it's a reflection name, and nested + /// type names are separated by a + character. If false, nested type names + /// are separated by a / character. + /// An existing or null if it wasn't found. + public TypeDef Find(string fullName, bool isReflectionName) { + foreach (var module in Modules.GetSafeEnumerable()) { + if (module == null) + continue; + var type = module.Find(fullName, isReflectionName); + if (type != null) + return type; + } + return null; + } + + /// + /// Finds a . Its scope (i.e., module or assembly) is ignored when + /// looking up the type. For speed, enable + /// if possible (read the documentation first). + /// + /// The type ref + /// An existing or null if it wasn't found. + public TypeDef Find(TypeRef typeRef) { + foreach (var module in Modules.GetSafeEnumerable()) { + if (module == null) + continue; + var type = module.Find(typeRef); + if (type != null) + return type; + } + return null; + } + + /// + /// Writes the assembly to a file on disk. If the file exists, it will be truncated. + /// + /// Filename + public void Write(string filename) { + Write(filename, null); + } + + /// + /// Writes the assembly to a file on disk. If the file exists, it will be truncated. + /// + /// Filename + /// Writer options + public void Write(string filename, ModuleWriterOptions options) { + ManifestModule.Write(filename, options); + } + + /// + /// Writes the assembly to a stream. + /// + /// Destination stream + public void Write(Stream dest) { + Write(dest, null); + } + + /// + /// Writes the assembly to a stream. + /// + /// Destination stream + /// Writer options + public void Write(Stream dest, ModuleWriterOptions options) { + ManifestModule.Write(dest, options); + } + + /// + /// Checks whether this assembly is a friend assembly of + /// + /// Target assembly + public bool IsFriendAssemblyOf(AssemblyDef targetAsm) { + if (targetAsm == null) + return false; + if (this == targetAsm) + return true; + + // Both must be unsigned or both must be signed according to the + // InternalsVisibleToAttribute documentation. + if (PublicKeyBase.IsNullOrEmpty2(publicKey) != PublicKeyBase.IsNullOrEmpty2(targetAsm.PublicKey)) + return false; + + foreach (var ca in targetAsm.CustomAttributes.FindAll("System.Runtime.CompilerServices.InternalsVisibleToAttribute")) { + if (ca.ConstructorArguments.Count != 1) + continue; + var arg = ca.ConstructorArguments.Get(0, default(CAArgument)); + if (arg.Type.GetElementType() != ElementType.String) + continue; + var asmName = arg.Value as UTF8String; + if (UTF8String.IsNull(asmName)) + continue; + + var asmInfo = new AssemblyNameInfo(asmName); + if (asmInfo.Name != name) + continue; + if (!PublicKeyBase.IsNullOrEmpty2(publicKey)) { + if (!PublicKey.Equals(asmInfo.PublicKeyOrToken as PublicKey)) + continue; + } + else if (!PublicKeyBase.IsNullOrEmpty2(asmInfo.PublicKeyOrToken)) + continue; + + return true; + } + + return false; + } + + /// + /// Adds or updates an existing System.Reflection.AssemblySignatureKeyAttribute + /// attribute. This attribute is used in enhanced strong naming with key migration. + /// See http://msdn.microsoft.com/en-us/library/hh415055.aspx + /// + /// Identity public key + /// Identity strong name key pair + /// Signature public key + public void UpdateOrCreateAssemblySignatureKeyAttribute(StrongNamePublicKey identityPubKey, StrongNameKey identityKey, StrongNamePublicKey signaturePubKey) { + var manifestModule = ManifestModule; + if (manifestModule == null) + return; + + // Remove all existing attributes + var ca = CustomAttributes.ExecuteLocked(null, (tsList, arg) => { + CustomAttribute foundCa = null; + for (int i = 0; i < tsList.Count_NoLock(); i++) { + var caTmp = tsList.Get_NoLock(i); + if (caTmp.TypeFullName != "System.Reflection.AssemblySignatureKeyAttribute") + continue; + tsList.RemoveAt_NoLock(i); + i--; + if (foundCa == null) + foundCa = caTmp; + } + return foundCa; + }); + + if (IsValidAssemblySignatureKeyAttribute(ca)) + ca.NamedArguments.Clear(); + else + ca = CreateAssemblySignatureKeyAttribute(); + + var counterSig = StrongNameKey.CreateCounterSignatureAsString(identityPubKey, identityKey, signaturePubKey); + ca.ConstructorArguments[0] = new CAArgument(manifestModule.CorLibTypes.String, new UTF8String(signaturePubKey.ToString())); + ca.ConstructorArguments[1] = new CAArgument(manifestModule.CorLibTypes.String, new UTF8String(counterSig)); + CustomAttributes.Add(ca); + } + + bool IsValidAssemblySignatureKeyAttribute(CustomAttribute ca) { +#if THREAD_SAFE + return false; +#else + if (ca == null) + return false; + var ctor = ca.Constructor; + if (ctor == null) + return false; + var sig = ctor.MethodSig; + if (sig == null || sig.Params.Count != 2) + return false; + if (sig.Params[0].GetElementType() != ElementType.String) + return false; + if (sig.Params[1].GetElementType() != ElementType.String) + return false; + if (ca.ConstructorArguments.Count != 2) + return false; + return true; +#endif + } + + CustomAttribute CreateAssemblySignatureKeyAttribute() { + var manifestModule = ManifestModule; + var owner = manifestModule.UpdateRowId(new TypeRefUser(manifestModule, "System.Reflection", "AssemblySignatureKeyAttribute", manifestModule.CorLibTypes.AssemblyRef)); + var methodSig = MethodSig.CreateInstance(manifestModule.CorLibTypes.Void, manifestModule.CorLibTypes.String, manifestModule.CorLibTypes.String); + var ctor = manifestModule.UpdateRowId(new MemberRefUser(manifestModule, MethodDef.InstanceConstructorName, methodSig, owner)); + var ca = new CustomAttribute(ctor); + ca.ConstructorArguments.Add(new CAArgument(manifestModule.CorLibTypes.String, UTF8String.Empty)); + ca.ConstructorArguments.Add(new CAArgument(manifestModule.CorLibTypes.String, UTF8String.Empty)); + return ca; + } + + /// + void IListListener.OnLazyAdd(int index, ref ModuleDef module) { + if (module == null) + return; +#if DEBUG + if (module.Assembly == null) + throw new InvalidOperationException("Module.Assembly == null"); +#endif + } + + /// + void IListListener.OnAdd(int index, ModuleDef module) { + if (module == null) + return; + if (module.Assembly != null) + throw new InvalidOperationException("Module already has an assembly. Remove it from that assembly before adding it to this assembly."); + module.Assembly = this; + } + + /// + void IListListener.OnRemove(int index, ModuleDef module) { + if (module != null) + module.Assembly = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var module in Modules.GetEnumerable_NoLock()) { + if (module != null) + module.Assembly = null; + } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// An Assembly row created by the user and not present in the original .NET file + /// + public class AssemblyDefUser : AssemblyDef { + /// + /// Default constructor + /// + public AssemblyDefUser() + : this(UTF8String.Empty, new Version(0, 0, 0, 0)) { + } + + /// + /// Constructor + /// + /// Simple name + /// If any of the args is invalid + public AssemblyDefUser(UTF8String name) + : this(name, new Version(0, 0, 0, 0), new PublicKey()) { + } + + /// + /// Constructor + /// + /// Simple name + /// Version + /// If any of the args is invalid + public AssemblyDefUser(UTF8String name, Version version) + : this(name, version, new PublicKey()) { + } + + /// + /// Constructor + /// + /// Simple name + /// Version + /// Public key + /// If any of the args is invalid + public AssemblyDefUser(UTF8String name, Version version, PublicKey publicKey) + : this(name, version, publicKey, UTF8String.Empty) { + } + + /// + /// Constructor + /// + /// Simple name + /// Version + /// Public key + /// Locale + /// If any of the args is invalid + public AssemblyDefUser(UTF8String name, Version version, PublicKey publicKey, UTF8String locale) { + if ((object)name == null) + throw new ArgumentNullException("name"); + if (version == null) + throw new ArgumentNullException("version"); + if ((object)locale == null) + throw new ArgumentNullException("locale"); + this.modules = new LazyList(this); + this.name = name; + this.version = version; + this.publicKey = publicKey ?? new PublicKey(); + this.culture = locale; + this.attributes = (int)AssemblyAttributes.None; + } + + /// + /// Constructor + /// + /// Assembly name info + /// If is null + public AssemblyDefUser(AssemblyName asmName) + : this(new AssemblyNameInfo(asmName)) { + this.hashAlgorithm = (AssemblyHashAlgorithm)asmName.HashAlgorithm; + this.attributes = (int)asmName.Flags; + } + + /// + /// Constructor + /// + /// Assembly name info + /// If is null + public AssemblyDefUser(IAssembly asmName) { + if (asmName == null) + throw new ArgumentNullException("asmName"); + this.modules = new LazyList(this); + this.name = asmName.Name; + this.version = asmName.Version ?? new Version(0, 0, 0, 0); + this.publicKey = asmName.PublicKeyOrToken as PublicKey ?? new PublicKey(); + this.culture = asmName.Culture; + this.attributes = (int)AssemblyAttributes.None; + this.hashAlgorithm = AssemblyHashAlgorithm.SHA1; + } + } + + /// + /// Created from a row in the Assembly table + /// + sealed class AssemblyDefMD : AssemblyDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeDeclSecurities() { + var list = readerModule.MetaData.GetDeclSecurityRidList(Table.Assembly, origRid); + var tmp = new LazyList((int)list.Length, list, (list2, index) => readerModule.ResolveDeclSecurity(((RidList)list2)[index])); + Interlocked.CompareExchange(ref declSecurities, tmp, null); + } + + /// + protected override void InitializeModules() { + var list = readerModule.GetModuleRidList(); + var tmp = new LazyList((int)list.Length + 1, this, list, (list2, index) => { + ModuleDef module; + if (index == 0) + module = readerModule; + else + module = readerModule.ReadModule(((RidList)list2)[index - 1], this); + if (module == null) + module = new ModuleDefUser("INVALID", Guid.NewGuid()); + module.Assembly = this; + return module; + }); + Interlocked.CompareExchange(ref modules, tmp, null); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Assembly, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this Assembly row + /// Row ID + /// If is null + /// If is invalid + public AssemblyDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.AssemblyTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Assembly rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + if (rid != 1) + this.modules = new LazyList(this); + uint publicKey, name; + uint culture = readerModule.TablesStream.ReadAssemblyRow(origRid, out this.hashAlgorithm, out this.version, out this.attributes, out publicKey, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.culture = readerModule.StringsStream.ReadNoNull(culture); + this.publicKey = new PublicKey(readerModule.BlobStream.Read(publicKey)); + } + } +} diff --git a/dnlib/DotNet/AssemblyHash.cs b/dnlib/DotNet/AssemblyHash.cs new file mode 100644 index 0000000..9f01522 --- /dev/null +++ b/dnlib/DotNet/AssemblyHash.cs @@ -0,0 +1,137 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Security.Cryptography; + +namespace dnlib.DotNet { + /// + /// Hashes some data according to a + /// + struct AssemblyHash : IDisposable { + readonly HashAlgorithm hasher; + + /// + /// Constructor + /// + /// If is an unsupported hash algorithm, then + /// will be used as the hash algorithm. + /// The algorithm to use + public AssemblyHash(AssemblyHashAlgorithm hashAlgo) { + switch (hashAlgo) { + case AssemblyHashAlgorithm.MD5: + hasher = MD5.Create(); + break; + + case AssemblyHashAlgorithm.None: + case AssemblyHashAlgorithm.MD2: + case AssemblyHashAlgorithm.MD4: + case AssemblyHashAlgorithm.SHA1: + case AssemblyHashAlgorithm.MAC: + case AssemblyHashAlgorithm.SSL3_SHAMD5: + case AssemblyHashAlgorithm.HMAC: + case AssemblyHashAlgorithm.TLS1PRF: + case AssemblyHashAlgorithm.HASH_REPLACE_OWF: + default: + hasher = SHA1.Create(); + break; + + case AssemblyHashAlgorithm.SHA_256: + hasher = SHA256.Create(); + break; + + case AssemblyHashAlgorithm.SHA_384: + hasher = SHA384.Create(); + break; + + case AssemblyHashAlgorithm.SHA_512: + hasher = SHA512.Create(); + break; + } + } + + /// + public void Dispose() { + if (hasher != null) + ((IDisposable)hasher).Dispose(); + } + + /// + /// Hash data + /// + /// If is an unsupported hash algorithm, then + /// will be used as the hash algorithm. + /// The data + /// The algorithm to use + /// Hashed data or null if was null + public static byte[] Hash(byte[] data, AssemblyHashAlgorithm hashAlgo) { + if (data == null) + return null; + + using (var asmHash = new AssemblyHash(hashAlgo)) { + asmHash.Hash(data); + return asmHash.ComputeHash(); + } + } + + /// + /// Hash data + /// + /// Data + public void Hash(byte[] data) { + Hash(data, 0, data.Length); + } + + /// + /// Hash data + /// + /// Data + /// Offset + /// Length + public void Hash(byte[] data, int offset, int length) { + if (hasher.TransformBlock(data, offset, length, data, offset) != length) + throw new IOException("Could not calculate hash"); + } + + /// + /// Hash stream data + /// + /// Stream + /// Number of bytes to hash + /// Temp buffer + public void Hash(Stream stream, uint length, byte[] buffer) { + while (length > 0) { + int len = length > (uint)buffer.Length ? buffer.Length : (int)length; + if (stream.Read(buffer, 0, len) != len) + throw new IOException("Could not read data"); + Hash(buffer, 0, len); + length -= (uint)len; + } + } + + /// + /// Computes the hash + /// + public byte[] ComputeHash() { + hasher.TransformFinalBlock(new byte[0], 0, 0); + return hasher.Hash; + } + + /// + /// Creates a public key token from the hash of some + /// + /// A public key is hashed, and the last 8 bytes of the hash, in reverse + /// order, is used as the public key token + /// The data + /// A new instance + public static PublicKeyToken CreatePublicKeyToken(byte[] publicKeyData) { + if (publicKeyData == null) + return new PublicKeyToken(); + var hash = Hash(publicKeyData, AssemblyHashAlgorithm.SHA1); + byte[] pkt = new byte[8]; + for (int i = 0; i < pkt.Length && i < hash.Length; i++) + pkt[i] = hash[hash.Length - i - 1]; + return new PublicKeyToken(pkt); + } + } +} diff --git a/dnlib/DotNet/AssemblyHashAlgorithm.cs b/dnlib/DotNet/AssemblyHashAlgorithm.cs new file mode 100644 index 0000000..b1b0285 --- /dev/null +++ b/dnlib/DotNet/AssemblyHashAlgorithm.cs @@ -0,0 +1,55 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Any ALG_CLASS_HASH type in WinCrypt.h can be used by Microsoft's CLI implementation + /// + public enum AssemblyHashAlgorithm : uint { + /// + None = 0, + /// + MD2 = 0x8001, + /// + MD4 = 0x8002, + /// This is a reserved value in the CLI + MD5 = 0x8003, + /// The only algorithm supported by the CLI + SHA1 = 0x8004, + /// + MAC = 0x8005, + /// + SSL3_SHAMD5 = 0x8008, + /// + HMAC = 0x8009, + /// + TLS1PRF = 0x800A, + /// + HASH_REPLACE_OWF = 0x800B, + /// + SHA_256 = 0x800C, + /// + SHA_384 = 0x800D, + /// + SHA_512 = 0x800E, + } + + public static partial class Extensions { + internal static string GetName(this AssemblyHashAlgorithm hashAlg) { + switch (hashAlg) { + case AssemblyHashAlgorithm.MD2: return null; + case AssemblyHashAlgorithm.MD4: return null; + case AssemblyHashAlgorithm.MD5: return "MD5"; + case AssemblyHashAlgorithm.SHA1: return "SHA1"; + case AssemblyHashAlgorithm.MAC: return null; + case AssemblyHashAlgorithm.SSL3_SHAMD5: return null; + case AssemblyHashAlgorithm.HMAC: return null; + case AssemblyHashAlgorithm.TLS1PRF: return null; + case AssemblyHashAlgorithm.HASH_REPLACE_OWF: return null; + case AssemblyHashAlgorithm.SHA_256: return "SHA256"; + case AssemblyHashAlgorithm.SHA_384: return "SHA384"; + case AssemblyHashAlgorithm.SHA_512: return "SHA512"; + default: return null; + } + } + } +} diff --git a/dnlib/DotNet/AssemblyNameComparer.cs b/dnlib/DotNet/AssemblyNameComparer.cs new file mode 100644 index 0000000..ed6f653 --- /dev/null +++ b/dnlib/DotNet/AssemblyNameComparer.cs @@ -0,0 +1,273 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet { + /// + /// Flags used by + /// + [Flags] + public enum AssemblyNameComparerFlags { + /// + /// Compare assembly simple name + /// + Name = 1, + + /// + /// Compare assembly version + /// + Version = 2, + + /// + /// Compare assembly public key token + /// + PublicKeyToken = 4, + + /// + /// Compare assembly culture + /// + Culture = 8, + + /// + /// Compare content type + /// + ContentType = 0x10, + + /// + /// Compare assembly simple name, version, public key token, locale and content type + /// + All = Name | Version | PublicKeyToken | Culture | ContentType, + } + + /// + /// Compares two assembly names + /// + public struct AssemblyNameComparer : IEqualityComparer { + /// + /// Compares the name, version, public key token, culture and content type + /// + public static AssemblyNameComparer CompareAll = new AssemblyNameComparer(AssemblyNameComparerFlags.All); + + /// + /// Compares only the name and the public key token + /// + public static AssemblyNameComparer NameAndPublicKeyTokenOnly = new AssemblyNameComparer(AssemblyNameComparerFlags.Name | AssemblyNameComparerFlags.PublicKeyToken); + + /// + /// Compares only the name + /// + public static AssemblyNameComparer NameOnly = new AssemblyNameComparer(AssemblyNameComparerFlags.Name); + + readonly AssemblyNameComparerFlags flags; + + /// + /// Gets the bit + /// + public bool CompareName { + get { return (flags & AssemblyNameComparerFlags.Name) != 0; } + } + + /// + /// Gets the bit + /// + public bool CompareVersion { + get { return (flags & AssemblyNameComparerFlags.Version) != 0; } + } + + /// + /// Gets the bit + /// + public bool ComparePublicKeyToken { + get { return (flags & AssemblyNameComparerFlags.PublicKeyToken) != 0; } + } + + /// + /// Gets the bit + /// + public bool CompareCulture { + get { return (flags & AssemblyNameComparerFlags.Culture) != 0; } + } + + /// + /// Gets the bit + /// + public bool CompareContentType { + get { return (flags & AssemblyNameComparerFlags.ContentType) != 0; } + } + + /// + /// Constructor + /// + /// Comparison flags + public AssemblyNameComparer(AssemblyNameComparerFlags flags) { + this.flags = flags; + } + + /// + /// Compares two assembly names + /// + /// First + /// Second + /// < 0 if a < b, 0 if a == b, > 0 if a > b + public int CompareTo(IAssembly a, IAssembly b) { + if (a == b) + return 0; + if (a == null) + return -1; + if (b == null) + return 1; + + int v; + + if (CompareName && (v = UTF8String.CaseInsensitiveCompareTo(a.Name, b.Name)) != 0) + return v; + if (CompareVersion && (v = Utils.CompareTo(a.Version, b.Version)) != 0) + return v; + if (ComparePublicKeyToken && (v = PublicKeyBase.TokenCompareTo(a.PublicKeyOrToken, b.PublicKeyOrToken)) != 0) + return v; + if (CompareCulture && (v = Utils.LocaleCompareTo(a.Culture, b.Culture)) != 0) + return v; + if (CompareContentType && (v = a.ContentType.CompareTo(b.ContentType)) != 0) + return v; + + return 0; + } + + /// + /// Compares two assembly names + /// + /// First + /// Second + /// true if equal, false otherwise + public bool Equals(IAssembly a, IAssembly b) { + return CompareTo(a, b) == 0; + } + + /// + /// Figures out which of two assembly names is closer to another assembly name + /// + /// Requested assembly name + /// First + /// Second + /// -1 if both are equally close, 0 if is closest, 1 if + /// is closest + public int CompareClosest(IAssembly requested, IAssembly a, IAssembly b) { + if (a == b) + return 0; + if (a == null) + return !CompareName ? 1 : UTF8String.CaseInsensitiveEquals(requested.Name, b.Name) ? 1 : 0; + if (b == null) + return !CompareName ? 0 : UTF8String.CaseInsensitiveEquals(requested.Name, a.Name) ? 0 : 1; + + // Compare the most important parts first: + // 1. Assembly simple name + // 2. Public key token + // 3. Version + // 4. Locale + // 5. Content type + + if (CompareName) { + // If the name only matches one of a or b, return that one. + bool na = UTF8String.CaseInsensitiveEquals(requested.Name, a.Name); + bool nb = UTF8String.CaseInsensitiveEquals(requested.Name, b.Name); + if (na && !nb) + return 0; + if (!na && nb) + return 1; + if (!na && !nb) + return -1; + } + + if (ComparePublicKeyToken) { + bool pa, pb; + if (PublicKeyBase.IsNullOrEmpty2(requested.PublicKeyOrToken)) { + // If one of them has a pkt but the other one hasn't, return the one with + // no pkt. + pa = PublicKeyBase.IsNullOrEmpty2(a.PublicKeyOrToken); + pb = PublicKeyBase.IsNullOrEmpty2(b.PublicKeyOrToken); + } + else { + // If one of them has the correct pkt, but the other one has an incorrect + // pkt, return the one with the correct pkt. + pa = PublicKeyBase.TokenEquals(requested.PublicKeyOrToken, a.PublicKeyOrToken); + pb = PublicKeyBase.TokenEquals(requested.PublicKeyOrToken, b.PublicKeyOrToken); + } + if (pa && !pb) + return 0; + if (!pa && pb) + return 1; + } + + if (CompareVersion && !Utils.Equals(a.Version, b.Version)) { + var rv = Utils.CreateVersionWithNoUndefinedValues(requested.Version); + if (rv == new Version(0, 0, 0, 0)) + rv = new Version(ushort.MaxValue, ushort.MaxValue, ushort.MaxValue, ushort.MaxValue); + int va = Utils.CompareTo(a.Version, rv); + int vb = Utils.CompareTo(b.Version, rv); + if (va == 0) + return 0; // vb != 0 so return 0 + if (vb == 0) + return 1; // va != 0 so return 1 + if (va > 0 && vb < 0) + return 0; + if (va < 0 && vb > 0) + return 1; + // Now either both a and b's version > req version or both are < req version + if (va > 0) { + // a.Version and b.Version > req.Version. Pick the one that is closest. + return Utils.CompareTo(a.Version, b.Version) < 0 ? 0 : 1; + } + else { + // a.Version and b.Version < req.Version. Pick the one that is closest. + return Utils.CompareTo(a.Version, b.Version) > 0 ? 0 : 1; + } + } + + if (CompareCulture) { + bool la = Utils.LocaleEquals(requested.Culture, a.Culture); + bool lb = Utils.LocaleEquals(requested.Culture, b.Culture); + if (la && !lb) + return 0; + if (!la && lb) + return 1; + } + + if (CompareContentType) { + bool ca = requested.ContentType == a.ContentType; + bool cb = requested.ContentType == b.ContentType; + if (ca && !cb) + return 0; + if (!ca && cb) + return 1; + } + + return -1; + } + + /// + /// Gets the hash code of an assembly name + /// + /// Assembly name + /// The hash code + public int GetHashCode(IAssembly a) { + if (a == null) + return 0; + + int hash = 0; + + if (CompareName) + hash += UTF8String.GetHashCode(a.Name); + if (CompareVersion) + hash += Utils.CreateVersionWithNoUndefinedValues(a.Version).GetHashCode(); + if (ComparePublicKeyToken) + hash += PublicKeyBase.GetHashCodeToken(a.PublicKeyOrToken); + if (CompareCulture) + hash += Utils.GetHashCodeLocale(a.Culture); + if (CompareContentType) + hash += (int)a.ContentType; + + return hash; + } + } +} diff --git a/dnlib/DotNet/AssemblyNameInfo.cs b/dnlib/DotNet/AssemblyNameInfo.cs new file mode 100644 index 0000000..1d1512e --- /dev/null +++ b/dnlib/DotNet/AssemblyNameInfo.cs @@ -0,0 +1,304 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Reflection; + +namespace dnlib.DotNet { + /// + /// Stores assembly name information + /// + public sealed class AssemblyNameInfo : IAssembly { + AssemblyHashAlgorithm hashAlgId; + Version version; + AssemblyAttributes flags; + PublicKeyBase publicKeyOrToken; + UTF8String name; + UTF8String culture; + + /// + /// Gets/sets the + /// + public AssemblyHashAlgorithm HashAlgId { + get { return hashAlgId; } + set { hashAlgId = value; } + } + + /// + /// Gets/sets the or null if none specified + /// + public Version Version { + get { return version; } + set { version = value; } + } + + /// + /// Gets/sets the + /// + [Obsolete("Use Attributes property instead", false)] + public AssemblyAttributes Flags { + get { return flags; } + set { flags = value; } + } + + /// + /// Gets/sets the + /// + public AssemblyAttributes Attributes { + get { return flags; } + set { flags = value; } + } + + /// + /// Gets/sets the public key or token + /// + public PublicKeyBase PublicKeyOrToken { + get { return publicKeyOrToken; } + set { publicKeyOrToken = value; } + } + + /// + /// Gets/sets the name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + + /// + /// Gets/sets the culture or null if none specified + /// + [Obsolete("Use Culture property instead", false)] + public UTF8String Locale { + get { return Culture; } + set { Culture = value; } + } + + /// + /// Gets/sets the culture or null if none specified + /// + public UTF8String Culture { + get { return culture; } + set { culture = value; } + } + + /// + /// Gets the full name of the assembly + /// + public string FullName { + get { return FullNameToken; } + } + + /// + /// Gets the full name of the assembly but use a public key token + /// + public string FullNameToken { + get { + var pk = publicKeyOrToken; + if (pk is PublicKey) + pk = (pk as PublicKey).Token; + return Utils.GetAssemblyNameString(name, version, culture, pk, flags); + } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(AssemblyAttributes andMask, AssemblyAttributes orMask) { + Attributes = (Attributes & andMask) | orMask; + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, AssemblyAttributes flags) { + if (set) + Attributes |= flags; + else + Attributes &= ~flags; + } + + /// + /// Gets/sets the bit + /// + public bool HasPublicKey { + get { return (Attributes & AssemblyAttributes.PublicKey) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.PublicKey); } + } + + /// + /// Gets/sets the processor architecture + /// + public AssemblyAttributes ProcessorArchitecture { + get { return Attributes & AssemblyAttributes.PA_Mask; } + set { ModifyAttributes(~AssemblyAttributes.PA_Mask, value & AssemblyAttributes.PA_Mask); } + } + + /// + /// Gets/sets the processor architecture + /// + public AssemblyAttributes ProcessorArchitectureFull { + get { return Attributes & AssemblyAttributes.PA_FullMask; } + set { ModifyAttributes(~AssemblyAttributes.PA_FullMask, value & AssemblyAttributes.PA_FullMask); } + } + + /// + /// true if unspecified processor architecture + /// + public bool IsProcessorArchitectureNone { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_None; } + } + + /// + /// true if neutral (PE32) architecture + /// + public bool IsProcessorArchitectureMSIL { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_MSIL; } + } + + /// + /// true if x86 (PE32) architecture + /// + public bool IsProcessorArchitectureX86 { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_x86; } + } + + /// + /// true if IA-64 (PE32+) architecture + /// + public bool IsProcessorArchitectureIA64 { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_IA64; } + } + + /// + /// true if x64 (PE32+) architecture + /// + public bool IsProcessorArchitectureX64 { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_AMD64; } + } + + /// + /// true if ARM (PE32) architecture + /// + public bool IsProcessorArchitectureARM { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_ARM; } + } + + /// + /// true if eg. reference assembly (not runnable) + /// + public bool IsProcessorArchitectureNoPlatform { + get { return (Attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_NoPlatform; } + } + + /// + /// Gets/sets the bit + /// + public bool IsProcessorArchitectureSpecified { + get { return (Attributes & AssemblyAttributes.PA_Specified) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.PA_Specified); } + } + + /// + /// Gets/sets the bit + /// + public bool EnableJITcompileTracking { + get { return (Attributes & AssemblyAttributes.EnableJITcompileTracking) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.EnableJITcompileTracking); } + } + + /// + /// Gets/sets the bit + /// + public bool DisableJITcompileOptimizer { + get { return (Attributes & AssemblyAttributes.DisableJITcompileOptimizer) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.DisableJITcompileOptimizer); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRetargetable { + get { return (Attributes & AssemblyAttributes.Retargetable) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.Retargetable); } + } + + /// + /// Gets/sets the content type + /// + public AssemblyAttributes ContentType { + get { return Attributes & AssemblyAttributes.ContentType_Mask; } + set { ModifyAttributes(~AssemblyAttributes.ContentType_Mask, value & AssemblyAttributes.ContentType_Mask); } + } + + /// + /// true if content type is Default + /// + public bool IsContentTypeDefault { + get { return (Attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_Default; } + } + + /// + /// true if content type is WindowsRuntime + /// + public bool IsContentTypeWindowsRuntime { + get { return (Attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_WindowsRuntime; } + } + + /// + /// Default constructor + /// + public AssemblyNameInfo() { + } + + /// + /// Constructor + /// + /// An assembly name + public AssemblyNameInfo(string asmFullName) + : this(ReflectionTypeNameParser.ParseAssemblyRef(asmFullName)) { + } + + /// + /// Constructor + /// + /// The assembly + public AssemblyNameInfo(IAssembly asm) { + if (asm == null) + return; + var asmDef = asm as AssemblyDef; + this.hashAlgId = asmDef == null ? 0 : asmDef.HashAlgorithm; + this.version = asm.Version ?? new Version(0, 0, 0, 0); + this.flags = asm.Attributes; + this.publicKeyOrToken = asm.PublicKeyOrToken; + this.name = UTF8String.IsNullOrEmpty(asm.Name) ? UTF8String.Empty : asm.Name; + this.culture = UTF8String.IsNullOrEmpty(asm.Culture) ? UTF8String.Empty : asm.Culture; + } + + /// + /// Constructor + /// + /// Assembly name info + public AssemblyNameInfo(AssemblyName asmName) { + if (asmName == null) + return; + this.hashAlgId = (AssemblyHashAlgorithm)asmName.HashAlgorithm; + this.version = asmName.Version ?? new Version(0, 0, 0, 0); + this.flags = (AssemblyAttributes)asmName.Flags; + this.publicKeyOrToken = (PublicKeyBase)PublicKeyBase.CreatePublicKey(asmName.GetPublicKey()) ?? + PublicKeyBase.CreatePublicKeyToken(asmName.GetPublicKeyToken()); + this.name = asmName.Name ?? string.Empty; + this.culture = asmName.CultureInfo != null && asmName.CultureInfo.Name != null ? asmName.CultureInfo.Name : string.Empty; + } + + /// + public override string ToString() { + return FullName; + } + } +} diff --git a/dnlib/DotNet/AssemblyRef.cs b/dnlib/DotNet/AssemblyRef.cs new file mode 100644 index 0000000..d92379f --- /dev/null +++ b/dnlib/DotNet/AssemblyRef.cs @@ -0,0 +1,515 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Reflection; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the AssemblyRef table + /// + public abstract class AssemblyRef : IHasCustomAttribute, IImplementation, IResolutionScope, IAssembly, IScope { + /// + /// An assembly ref that can be used to indicate that it references the current assembly + /// when the current assembly is not known (eg. a type string without any assembly info + /// when it references a type in the current assembly). + /// + public static readonly AssemblyRef CurrentAssembly = new AssemblyRefUser("<<>>"); + + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.AssemblyRef, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 15; } + } + + /// + public int ImplementationTag { + get { return 1; } + } + + /// + public int ResolutionScopeTag { + get { return 2; } + } + + /// + public ScopeType ScopeType { + get { return ScopeType.AssemblyRef; } + } + + /// + public string ScopeName { + get { return FullName; } + } + + /// + /// From columns AssemblyRef.MajorVersion, AssemblyRef.MinorVersion, + /// AssemblyRef.BuildNumber, AssemblyRef.RevisionNumber + /// + /// If is null + public Version Version { + get { return version; } + set { + if (value == null) + throw new ArgumentNullException("value"); + version = value; + } + } + /// + protected Version version; + + /// + /// From column AssemblyRef.Flags + /// + public AssemblyAttributes Attributes { + get { return (AssemblyAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column AssemblyRef.PublicKeyOrToken + /// + /// If is null + public PublicKeyBase PublicKeyOrToken { + get { return publicKeyOrToken; } + set { + if (value == null) + throw new ArgumentNullException("value"); + publicKeyOrToken = value; + } + } + /// + protected PublicKeyBase publicKeyOrToken; + + /// + /// From column AssemblyRef.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column AssemblyRef.Locale + /// + public UTF8String Culture { + get { return culture; } + set { culture = value; } + } + /// Culture + protected UTF8String culture; + + /// + /// From column AssemblyRef.HashValue + /// + public byte[] Hash { + get { return hashValue; } + set { hashValue = value; } + } + /// + protected byte[] hashValue; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public string FullName { + get { return FullNameToken; } + } + + /// + /// Same as , except that it uses the PublicKey if available. + /// + public string RealFullName { + get { return Utils.GetAssemblyNameString(name, version, culture, publicKeyOrToken, Attributes); } + } + + /// + /// Gets the full name of the assembly but use a public key token + /// + public string FullNameToken { + get { return Utils.GetAssemblyNameString(name, version, culture, PublicKeyBase.ToPublicKeyToken(publicKeyOrToken), Attributes); } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(AssemblyAttributes andMask, AssemblyAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, AssemblyAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool HasPublicKey { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PublicKey) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.PublicKey); } + } + + /// + /// Gets/sets the processor architecture + /// + public AssemblyAttributes ProcessorArchitecture { + get { return (AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask; } + set { ModifyAttributes(~AssemblyAttributes.PA_Mask, value & AssemblyAttributes.PA_Mask); } + } + + /// + /// Gets/sets the processor architecture + /// + public AssemblyAttributes ProcessorArchitectureFull { + get { return (AssemblyAttributes)attributes & AssemblyAttributes.PA_FullMask; } + set { ModifyAttributes(~AssemblyAttributes.PA_FullMask, value & AssemblyAttributes.PA_FullMask); } + } + + /// + /// true if unspecified processor architecture + /// + public bool IsProcessorArchitectureNone { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_None; } + } + + /// + /// true if neutral (PE32) architecture + /// + public bool IsProcessorArchitectureMSIL { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_MSIL; } + } + + /// + /// true if x86 (PE32) architecture + /// + public bool IsProcessorArchitectureX86 { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_x86; } + } + + /// + /// true if IA-64 (PE32+) architecture + /// + public bool IsProcessorArchitectureIA64 { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_IA64; } + } + + /// + /// true if x64 (PE32+) architecture + /// + public bool IsProcessorArchitectureX64 { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_AMD64; } + } + + /// + /// true if ARM (PE32) architecture + /// + public bool IsProcessorArchitectureARM { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_ARM; } + } + + /// + /// true if eg. reference assembly (not runnable) + /// + public bool IsProcessorArchitectureNoPlatform { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Mask) == AssemblyAttributes.PA_NoPlatform; } + } + + /// + /// Gets/sets the bit + /// + public bool IsProcessorArchitectureSpecified { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.PA_Specified) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.PA_Specified); } + } + + /// + /// Gets/sets the bit + /// + public bool EnableJITcompileTracking { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.EnableJITcompileTracking) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.EnableJITcompileTracking); } + } + + /// + /// Gets/sets the bit + /// + public bool DisableJITcompileOptimizer { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.DisableJITcompileOptimizer) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.DisableJITcompileOptimizer); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRetargetable { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.Retargetable) != 0; } + set { ModifyAttributes(value, AssemblyAttributes.Retargetable); } + } + + /// + /// Gets/sets the content type + /// + public AssemblyAttributes ContentType { + get { return (AssemblyAttributes)attributes & AssemblyAttributes.ContentType_Mask; } + set { ModifyAttributes(~AssemblyAttributes.ContentType_Mask, value & AssemblyAttributes.ContentType_Mask); } + } + + /// + /// true if content type is Default + /// + public bool IsContentTypeDefault { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_Default; } + } + + /// + /// true if content type is WindowsRuntime + /// + public bool IsContentTypeWindowsRuntime { + get { return ((AssemblyAttributes)attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_WindowsRuntime; } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// An AssemblyRef row created by the user and not present in the original .NET file + /// + public class AssemblyRefUser : AssemblyRef { + /// + /// Creates a reference to CLR 1.0's mscorlib + /// + public static AssemblyRefUser CreateMscorlibReferenceCLR10() { + return new AssemblyRefUser("mscorlib", new Version(1, 0, 3300, 0), new PublicKeyToken("b77a5c561934e089")); + } + + /// + /// Creates a reference to CLR 1.1's mscorlib + /// + public static AssemblyRefUser CreateMscorlibReferenceCLR11() { + return new AssemblyRefUser("mscorlib", new Version(1, 0, 5000, 0), new PublicKeyToken("b77a5c561934e089")); + } + + /// + /// Creates a reference to CLR 2.0's mscorlib + /// + public static AssemblyRefUser CreateMscorlibReferenceCLR20() { + return new AssemblyRefUser("mscorlib", new Version(2, 0, 0, 0), new PublicKeyToken("b77a5c561934e089")); + } + + /// + /// Creates a reference to CLR 4.0's mscorlib + /// + public static AssemblyRefUser CreateMscorlibReferenceCLR40() { + return new AssemblyRefUser("mscorlib", new Version(4, 0, 0, 0), new PublicKeyToken("b77a5c561934e089")); + } + + /// + /// Default constructor + /// + public AssemblyRefUser() + : this(UTF8String.Empty) { + } + + /// + /// Constructor + /// + /// Simple name + /// If any of the args is invalid + public AssemblyRefUser(UTF8String name) + : this(name, new Version(0, 0, 0, 0)) { + } + + /// + /// Constructor + /// + /// Simple name + /// Version + /// If any of the args is invalid + public AssemblyRefUser(UTF8String name, Version version) + : this(name, version, new PublicKey()) { + } + + /// + /// Constructor + /// + /// Simple name + /// Version + /// Public key or public key token + /// If any of the args is invalid + public AssemblyRefUser(UTF8String name, Version version, PublicKeyBase publicKey) + : this(name, version, publicKey, UTF8String.Empty) { + } + + /// + /// Constructor + /// + /// Simple name + /// Version + /// Public key or public key token + /// Locale + /// If any of the args is invalid + public AssemblyRefUser(UTF8String name, Version version, PublicKeyBase publicKey, UTF8String locale) { + if ((object)name == null) + throw new ArgumentNullException("name"); + if (version == null) + throw new ArgumentNullException("version"); + if ((object)locale == null) + throw new ArgumentNullException("locale"); + this.name = name; + this.version = version; + this.publicKeyOrToken = publicKey; + this.culture = locale; + this.attributes = (int)(publicKey is PublicKey ? AssemblyAttributes.PublicKey : AssemblyAttributes.None); + } + + /// + /// Constructor + /// + /// Assembly name info + /// If is null + public AssemblyRefUser(AssemblyName asmName) + : this(new AssemblyNameInfo(asmName)) { + this.attributes = (int)asmName.Flags; + } + + /// + /// Constructor + /// + /// Assembly + public AssemblyRefUser(IAssembly assembly) { + if (assembly == null) + throw new ArgumentNullException("asmName"); + + this.version = assembly.Version ?? new Version(0, 0, 0, 0); + this.publicKeyOrToken = assembly.PublicKeyOrToken; + this.name = UTF8String.IsNullOrEmpty(assembly.Name) ? UTF8String.Empty : assembly.Name; + this.culture = assembly.Culture; + this.attributes = (int)((publicKeyOrToken is PublicKey ? AssemblyAttributes.PublicKey : AssemblyAttributes.None) | assembly.ContentType); + } + } + + /// + /// Created from a row in the AssemblyRef table + /// + sealed class AssemblyRefMD : AssemblyRef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.AssemblyRef, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this AssemblyRef row + /// Row ID + /// If is null + /// If is invalid + public AssemblyRefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.AssemblyRefTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("AssemblyRef rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint publicKeyOrToken, name, culture; + uint hashValue = readerModule.TablesStream.ReadAssemblyRefRow(origRid, out this.version, out this.attributes, out publicKeyOrToken, out name, out culture); + var pkData = readerModule.BlobStream.Read(publicKeyOrToken); + if ((this.attributes & (uint)AssemblyAttributes.PublicKey) != 0) + this.publicKeyOrToken = new PublicKey(pkData); + else + this.publicKeyOrToken = new PublicKeyToken(pkData); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.culture = readerModule.StringsStream.ReadNoNull(culture); + this.hashValue = readerModule.BlobStream.Read(hashValue); + } + } +} diff --git a/dnlib/DotNet/AssemblyResolver.cs b/dnlib/DotNet/AssemblyResolver.cs new file mode 100644 index 0000000..4a1fbc5 --- /dev/null +++ b/dnlib/DotNet/AssemblyResolver.cs @@ -0,0 +1,877 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using System.Xml; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// Resolves assemblies + /// + public class AssemblyResolver : IAssemblyResolver { + static readonly ModuleDef nullModule = new ModuleDefUser(); + + // DLL files are searched before EXE files + static readonly string[] assemblyExtensions = new string[] { ".dll", ".exe" }; + static readonly string[] winMDAssemblyExtensions = new string[] { ".winmd" }; + + static readonly List gacInfos; + static readonly List extraMonoPaths; + static readonly string[] monoVerDirs = new string[] { + "4.5", "4.0", + "3.5", "3.0", "2.0", + "1.1", "1.0", + }; + + ModuleContext defaultModuleContext; + readonly Dictionary> moduleSearchPaths = new Dictionary>(); + readonly Dictionary cachedAssemblies = new Dictionary(StringComparer.Ordinal); + readonly ThreadSafe.IList preSearchPaths = ThreadSafeListCreator.Create(); + readonly ThreadSafe.IList postSearchPaths = ThreadSafeListCreator.Create(); + bool findExactMatch; + bool enableFrameworkRedirect; + bool enableTypeDefCache; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + sealed class GacInfo { + public readonly int version; + public readonly string path; + public readonly string prefix; + public readonly IList subDirs; + + public GacInfo(int version, string prefix, string path, IList subDirs) { + this.version = version; + this.prefix = prefix; + this.path = path; + this.subDirs = subDirs; + } + } + + static AssemblyResolver() { + gacInfos = new List(); + + if (Type.GetType("Mono.Runtime") != null) { + var dirs = new Dictionary(StringComparer.OrdinalIgnoreCase); + extraMonoPaths = new List(); + foreach (var prefix in FindMonoPrefixes()) { + var dir = Path.Combine(Path.Combine(Path.Combine(prefix, "lib"), "mono"), "gac"); + if (dirs.ContainsKey(dir)) + continue; + dirs[dir] = true; + + if (Directory.Exists(dir)) { + gacInfos.Add(new GacInfo(-1, "", Path.GetDirectoryName(dir), new string[] { + Path.GetFileName(dir) + })); + } + + dir = Path.GetDirectoryName(dir); + foreach (var verDir in monoVerDirs) { + var dir2 = Path.Combine(dir, verDir); + if (Directory.Exists(dir2)) + extraMonoPaths.Add(dir2); + } + } + + var paths = Environment.GetEnvironmentVariable("MONO_PATH"); + if (paths != null) { + foreach (var path in paths.Split(Path.PathSeparator)) { + if (path != string.Empty && Directory.Exists(path)) + extraMonoPaths.Add(path); + } + } + } + else { + var windir = Environment.GetEnvironmentVariable("WINDIR"); + if (!string.IsNullOrEmpty(windir)) { + string path; + + // .NET 1.x and 2.x + path = Path.Combine(windir, "assembly"); + if (Directory.Exists(path)) { + gacInfos.Add(new GacInfo(2, "", path, new string[] { + "GAC_32", "GAC_64", "GAC_MSIL", "GAC" + })); + } + + // .NET 4.x + path = Path.Combine(Path.Combine(windir, "Microsoft.NET"), "assembly"); + if (Directory.Exists(path)) { + gacInfos.Add(new GacInfo(4, "v4.0_", path, new string[] { + "GAC_32", "GAC_64", "GAC_MSIL" + })); + } + } + } + } + + static string GetCurrentMonoPrefix() { + var path = typeof(object).Module.FullyQualifiedName; + for (int i = 0; i < 4; i++) + path = Path.GetDirectoryName(path); + return path; + } + + static IEnumerable FindMonoPrefixes() { + yield return GetCurrentMonoPrefix(); + + var prefixes = Environment.GetEnvironmentVariable("MONO_GAC_PREFIX"); + if (!string.IsNullOrEmpty(prefixes)) { + foreach (var prefix in prefixes.Split(Path.PathSeparator)) { + if (prefix != string.Empty) + yield return prefix; + } + } + } + + /// + /// Gets/sets the default + /// + public ModuleContext DefaultModuleContext { + get { return defaultModuleContext; } + set { defaultModuleContext = value; } + } + + /// + /// true if should find an assembly that matches exactly. + /// false if it first tries to match exactly, and if that fails, it picks an + /// assembly that is closest to the requested assembly. + /// + public bool FindExactMatch { + get { return findExactMatch; } + set { findExactMatch = value; } + } + + /// + /// true if resolved .NET framework assemblies can be redirected to the source + /// module's framework assembly version. Eg. if a resolved .NET 3.5 assembly can be + /// redirected to a .NET 4.0 assembly if the source module is a .NET 4.0 assembly. This is + /// ignored if is true. + /// + public bool EnableFrameworkRedirect { + get { return enableFrameworkRedirect; } + set { enableFrameworkRedirect = value; } + } + + /// + /// If true, all modules in newly resolved assemblies will have their + /// property set to true. + /// + public bool EnableTypeDefCache { + get { return enableTypeDefCache; } + set { enableTypeDefCache = value; } + } + + /// + /// Gets paths searched before trying the standard locations + /// + public ThreadSafe.IList PreSearchPaths { + get { return preSearchPaths; } + } + + /// + /// Gets paths searched after trying the standard locations + /// + public ThreadSafe.IList PostSearchPaths { + get { return postSearchPaths; } + } + + /// + /// Default constructor + /// + public AssemblyResolver() + : this(null, true) { + } + + /// + /// Constructor + /// + /// Module context for all resolved assemblies + public AssemblyResolver(ModuleContext defaultModuleContext) + : this(defaultModuleContext, true) { + } + + /// + /// Constructor + /// + /// Module context for all resolved assemblies + /// If true, add other common assembly search + /// paths, not just the module search paths and the GAC. + public AssemblyResolver(ModuleContext defaultModuleContext, bool addOtherSearchPaths) { + this.defaultModuleContext = defaultModuleContext; + this.enableFrameworkRedirect = true; + if (addOtherSearchPaths) + AddOtherSearchPaths(postSearchPaths); + } + + /// + public AssemblyDef Resolve(IAssembly assembly, ModuleDef sourceModule) { + if (assembly == null) + return null; + + if (EnableFrameworkRedirect && !FindExactMatch) + FrameworkRedirect.ApplyFrameworkRedirect(ref assembly, sourceModule); + +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + AssemblyDef resolvedAssembly = Resolve2(assembly, sourceModule); + if (resolvedAssembly == null) { + string asmName = UTF8String.ToSystemStringOrEmpty(assembly.Name); + string asmNameTrimmed = asmName.Trim(); + if (asmName != asmNameTrimmed) { + assembly = new AssemblyNameInfo { + Name = asmNameTrimmed, + Version = assembly.Version, + PublicKeyOrToken = assembly.PublicKeyOrToken, + Culture = assembly.Culture, + }; + resolvedAssembly = Resolve2(assembly, sourceModule); + } + } + + if (resolvedAssembly == null) { + // Make sure we don't search for this assembly again. This speeds up callers who + // keep asking for this assembly when trying to resolve many different TypeRefs + cachedAssemblies[GetAssemblyNameKey(assembly)] = null; + return null; + } + + var key1 = GetAssemblyNameKey(resolvedAssembly); + var key2 = GetAssemblyNameKey(assembly); + AssemblyDef asm1, asm2; + cachedAssemblies.TryGetValue(key1, out asm1); + cachedAssemblies.TryGetValue(key2, out asm2); + + if (asm1 != resolvedAssembly && asm2 != resolvedAssembly) { + // This assembly was just resolved + if (enableTypeDefCache) { + foreach (var module in resolvedAssembly.Modules.GetSafeEnumerable()) { + if (module != null) + module.EnableTypeDefFindCache = true; + } + } + } + + bool inserted = false; + if (!cachedAssemblies.ContainsKey(key1)) { + cachedAssemblies.Add(key1, resolvedAssembly); + inserted = true; + } + if (!cachedAssemblies.ContainsKey(key2)) { + cachedAssemblies.Add(key2, resolvedAssembly); + inserted = true; + } + if (inserted || asm1 == resolvedAssembly || asm2 == resolvedAssembly) + return resolvedAssembly; + + // Dupe assembly. Don't insert it. + var dupeModule = resolvedAssembly.ManifestModule; + if (dupeModule != null) + dupeModule.Dispose(); + return asm1 ?? asm2; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public bool AddToCache(AssemblyDef asm) { + if (asm == null) + return false; + var asmKey = GetAssemblyNameKey(asm); + AssemblyDef cachedAsm; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (cachedAssemblies.TryGetValue(asmKey, out cachedAsm) && cachedAsm != null) + return asm == cachedAsm; + cachedAssemblies[asmKey] = asm; + return true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public bool Remove(AssemblyDef asm) { + if (asm == null) + return false; + var asmKey = GetAssemblyNameKey(asm); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return cachedAssemblies.Remove(asmKey); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public void Clear() { + List asms; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + asms = new List(cachedAssemblies.Values); + cachedAssemblies.Clear(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + foreach (var asm in asms) { + if (asm == null) + continue; + foreach (var mod in asm.Modules.GetSafeEnumerable()) + mod.Dispose(); + } + } + + /// + /// Gets the cached assemblies in this resolver. + /// + /// The cached assemblies. + public IEnumerable GetCachedAssemblies() { + return cachedAssemblies.Values; + } + + static string GetAssemblyNameKey(IAssembly asmName) { + // Make sure the name contains PublicKeyToken= and not PublicKey= + return asmName.FullNameToken.ToUpperInvariant(); + } + + AssemblyDef Resolve2(IAssembly assembly, ModuleDef sourceModule) { + AssemblyDef resolvedAssembly; + + if (cachedAssemblies.TryGetValue(GetAssemblyNameKey(assembly), out resolvedAssembly)) + return resolvedAssembly; + + var moduleContext = defaultModuleContext; + if (moduleContext == null && sourceModule != null) + moduleContext = sourceModule.Context; + + resolvedAssembly = FindExactAssembly(assembly, PreFindAssemblies(assembly, sourceModule, true), moduleContext) ?? + FindExactAssembly(assembly, FindAssemblies(assembly, sourceModule, true), moduleContext) ?? + FindExactAssembly(assembly, PostFindAssemblies(assembly, sourceModule, true), moduleContext); + if (resolvedAssembly != null) + return resolvedAssembly; + + if (!findExactMatch) { + resolvedAssembly = FindClosestAssembly(assembly); + resolvedAssembly = FindClosestAssembly(assembly, resolvedAssembly, PreFindAssemblies(assembly, sourceModule, false), moduleContext); + resolvedAssembly = FindClosestAssembly(assembly, resolvedAssembly, FindAssemblies(assembly, sourceModule, false), moduleContext); + resolvedAssembly = FindClosestAssembly(assembly, resolvedAssembly, PostFindAssemblies(assembly, sourceModule, false), moduleContext); + } + + return resolvedAssembly; + } + + /// + /// Finds an assembly that exactly matches the requested assembly + /// + /// Assembly to find + /// Search paths or null if none + /// Module context + /// An instance or null if an exact match + /// couldn't be found. + AssemblyDef FindExactAssembly(IAssembly assembly, IEnumerable paths, ModuleContext moduleContext) { + if (paths == null) + return null; + var asmComparer = AssemblyNameComparer.CompareAll; + foreach (var path in paths.GetSafeEnumerable()) { + ModuleDefMD mod = null; + try { + mod = ModuleDefMD.Load(path, moduleContext); + var asm = mod.Assembly; + if (asm != null && asmComparer.Equals(assembly, asm)) { + mod = null; + return asm; + } + } + catch { + } + finally { + if (mod != null) + mod.Dispose(); + } + } + return null; + } + + /// + /// Finds the closest assembly from the already cached assemblies + /// + /// Assembly to find + /// The closest or null if none found + AssemblyDef FindClosestAssembly(IAssembly assembly) { + AssemblyDef closest = null; + var asmComparer = AssemblyNameComparer.CompareAll; + foreach (var asm in cachedAssemblies.Values) { + if (asm == null) + continue; + if (asmComparer.CompareClosest(assembly, closest, asm) == 1) + closest = asm; + } + return closest; + } + + AssemblyDef FindClosestAssembly(IAssembly assembly, AssemblyDef closest, IEnumerable paths, ModuleContext moduleContext) { + if (paths == null) + return closest; + var asmComparer = AssemblyNameComparer.CompareAll; + foreach (var path in paths.GetSafeEnumerable()) { + ModuleDefMD mod = null; + try { + mod = ModuleDefMD.Load(path, moduleContext); + var asm = mod.Assembly; + if (asm != null && asmComparer.CompareClosest(assembly, closest, asm) == 1) { + if (!IsCached(closest) && closest != null) { + var closeMod = closest.ManifestModule; + if (closeMod != null) + closeMod.Dispose(); + } + closest = asm; + mod = null; + } + } + catch { + } + finally { + if (mod != null) + mod.Dispose(); + } + } + + return closest; + } + + /// + /// Returns true if is inserted in + /// + /// Assembly to check + bool IsCached(AssemblyDef asm) { + if (asm == null) + return false; + AssemblyDef cachedAsm; + return cachedAssemblies.TryGetValue(GetAssemblyNameKey(asm), out cachedAsm) && + cachedAsm == asm; + } + + IEnumerable FindAssemblies2(IAssembly assembly, IEnumerable paths) { + if (paths != null) { + var asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name); + var exts = assembly.IsContentTypeWindowsRuntime ? winMDAssemblyExtensions : assemblyExtensions; + foreach (var ext in exts) { + foreach (var path in paths.GetSafeEnumerable()) { + var fullPath = Path.Combine(path, asmSimpleName + ext); + if (File.Exists(fullPath)) + yield return fullPath; + } + } + } + } + + /// + /// Called before + /// + /// Assembly to find + /// The module that needs to resolve an assembly or null + /// We're trying to find an exact match + /// null or an enumerable of full paths to try + protected virtual IEnumerable PreFindAssemblies(IAssembly assembly, ModuleDef sourceModule, bool matchExactly) { + foreach (var path in FindAssemblies2(assembly, preSearchPaths)) + yield return path; + } + + /// + /// Called after (if it fails) + /// + /// Assembly to find + /// The module that needs to resolve an assembly or null + /// We're trying to find an exact match + /// null or an enumerable of full paths to try + protected virtual IEnumerable PostFindAssemblies(IAssembly assembly, ModuleDef sourceModule, bool matchExactly) { + foreach (var path in FindAssemblies2(assembly, postSearchPaths)) + yield return path; + } + + /// + /// Called after (if it fails) + /// + /// Assembly to find + /// The module that needs to resolve an assembly or null + /// We're trying to find an exact match + /// null or an enumerable of full paths to try + protected virtual IEnumerable FindAssemblies(IAssembly assembly, ModuleDef sourceModule, bool matchExactly) { + if (assembly.IsContentTypeWindowsRuntime) { + var path = Path.Combine(Path.Combine(Environment.SystemDirectory, "WinMetadata"), assembly.Name + ".winmd"); + if (File.Exists(path)) + yield return path; + } + else { + foreach (var path in FindAssembliesGac(assembly, sourceModule, matchExactly)) + yield return path; + } + foreach (var path in FindAssembliesModuleSearchPaths(assembly, sourceModule, matchExactly)) + yield return path; + } + + IEnumerable FindAssembliesGac(IAssembly assembly, ModuleDef sourceModule, bool matchExactly) { + if (matchExactly) + return FindAssembliesGacExactly(assembly, sourceModule); + return FindAssembliesGacAny(assembly, sourceModule); + } + + IEnumerable GetGacInfos(ModuleDef sourceModule) { + int version = sourceModule == null ? int.MinValue : sourceModule.IsClr40 ? 4 : 2; + // Try the correct GAC first (eg. GAC4 if it's a .NET 4 assembly) + foreach (var gacInfo in gacInfos) { + if (gacInfo.version == version) + yield return gacInfo; + } + foreach (var gacInfo in gacInfos) { + if (gacInfo.version != version) + yield return gacInfo; + } + } + + IEnumerable FindAssembliesGacExactly(IAssembly assembly, ModuleDef sourceModule) { + foreach (var gacInfo in GetGacInfos(sourceModule)) { + foreach (var path in FindAssembliesGacExactly(gacInfo, assembly, sourceModule)) + yield return path; + } + if (extraMonoPaths != null) { + foreach (var path in GetExtraMonoPaths(assembly, sourceModule)) + yield return path; + } + } + + static IEnumerable GetExtraMonoPaths(IAssembly assembly, ModuleDef sourceModule) { + if (extraMonoPaths != null) { + foreach (var dir in extraMonoPaths) { + var file = Path.Combine(dir, assembly.Name + ".dll"); + if (File.Exists(file)) + yield return file; + } + } + } + + IEnumerable FindAssembliesGacExactly(GacInfo gacInfo, IAssembly assembly, ModuleDef sourceModule) { + var pkt = PublicKeyBase.ToPublicKeyToken(assembly.PublicKeyOrToken); + if (gacInfo != null && pkt != null) { + string pktString = pkt.ToString(); + string verString = Utils.CreateVersionWithNoUndefinedValues(assembly.Version).ToString(); + var asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name); + foreach (var subDir in gacInfo.subDirs) { + var baseDir = Path.Combine(gacInfo.path, subDir); + baseDir = Path.Combine(baseDir, asmSimpleName); + baseDir = Path.Combine(baseDir, string.Format("{0}{1}__{2}", gacInfo.prefix, verString, pktString)); + var pathName = Path.Combine(baseDir, asmSimpleName + ".dll"); + if (File.Exists(pathName)) + yield return pathName; + } + } + } + + IEnumerable FindAssembliesGacAny(IAssembly assembly, ModuleDef sourceModule) { + foreach (var gacInfo in GetGacInfos(sourceModule)) { + foreach (var path in FindAssembliesGacAny(gacInfo, assembly, sourceModule)) + yield return path; + } + if (extraMonoPaths != null) { + foreach (var path in GetExtraMonoPaths(assembly, sourceModule)) + yield return path; + } + } + + IEnumerable FindAssembliesGacAny(GacInfo gacInfo, IAssembly assembly, ModuleDef sourceModule) { + if (gacInfo != null) { + var asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name); + foreach (var subDir in gacInfo.subDirs) { + var baseDir = Path.Combine(gacInfo.path, subDir); + baseDir = Path.Combine(baseDir, asmSimpleName); + foreach (var dir in GetDirs(baseDir)) { + var pathName = Path.Combine(dir, asmSimpleName + ".dll"); + if (File.Exists(pathName)) + yield return pathName; + } + } + } + } + + IEnumerable GetDirs(string baseDir) { + var dirs = new List(); + try { + foreach (var di in new DirectoryInfo(baseDir).GetDirectories()) + dirs.Add(di.FullName); + } + catch { + } + return dirs; + } + + IEnumerable FindAssembliesModuleSearchPaths(IAssembly assembly, ModuleDef sourceModule, bool matchExactly) { + string asmSimpleName = UTF8String.ToSystemStringOrEmpty(assembly.Name); + var searchPaths = GetSearchPaths(sourceModule); + var exts = assembly.IsContentTypeWindowsRuntime ? winMDAssemblyExtensions : assemblyExtensions; + foreach (var ext in exts) { + foreach (var path in searchPaths.GetSafeEnumerable()) { + for (int i = 0; i < 2; i++) { + string path2; + if (i == 0) + path2 = Path.Combine(path, asmSimpleName + ext); + else + path2 = Path.Combine(Path.Combine(path, asmSimpleName), asmSimpleName + ext); + if (File.Exists(path2)) + yield return path2; + } + } + } + } + + /// + /// Gets all search paths to use for this module + /// + /// The module or null if unknown + /// A list of all search paths to use for this module + IEnumerable GetSearchPaths(ModuleDef module) { + ModuleDef keyModule = module; + if (keyModule == null) + keyModule = nullModule; + IList searchPaths; + if (moduleSearchPaths.TryGetValue(keyModule, out searchPaths)) + return searchPaths; + moduleSearchPaths[keyModule] = searchPaths = new List(GetModuleSearchPaths(module)); + return searchPaths; + } + + /// + /// Gets all module search paths. This is usually empty unless its assembly has + /// a .config file specifying any additional private search paths in a + /// <probing/> element. + /// + /// The module or null if unknown + /// A list of search paths + protected virtual IEnumerable GetModuleSearchPaths(ModuleDef module) { + return GetModulePrivateSearchPaths(module); + } + + /// + /// Gets all private assembly search paths as found in the module's .config file. + /// + /// The module or null if unknown + /// A list of search paths + protected IEnumerable GetModulePrivateSearchPaths(ModuleDef module) { + if (module == null) + return new string[0]; + var asm = module.Assembly; + if (asm == null) + return new string[0]; + module = asm.ManifestModule; + if (module == null) + return new string[0]; // Should never happen + + string baseDir = null; + try { + var imageName = module.Location; + if (imageName != string.Empty) { + baseDir = Directory.GetParent(imageName).FullName; + var configName = imageName + ".config"; + if (File.Exists(configName)) + return GetPrivatePaths(baseDir, configName); + } + } + catch { + } + if (baseDir != null) + return new List { baseDir }; + return new string[0]; + } + + IEnumerable GetPrivatePaths(string baseDir, string configFileName) { + var searchPaths = new List(); + + try { + var dirName = Path.GetDirectoryName(Path.GetFullPath(configFileName)); + searchPaths.Add(dirName); + + using (var xmlStream = new FileStream(configFileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { + var doc = new XmlDocument(); + doc.Load(XmlReader.Create(xmlStream)); + foreach (var tmp in doc.GetElementsByTagName("probing")) { + var probingElem = tmp as XmlElement; + if (probingElem == null) + continue; + var privatePath = probingElem.GetAttribute("privatePath"); + if (string.IsNullOrEmpty(privatePath)) + continue; + foreach (var tmp2 in privatePath.Split(';')) { + var path = tmp2.Trim(); + if (path == "") + continue; + var newPath = Path.GetFullPath(Path.Combine(dirName, path.Replace('\\', Path.DirectorySeparatorChar))); + if (Directory.Exists(newPath) && newPath.StartsWith(baseDir + Path.DirectorySeparatorChar)) + searchPaths.Add(newPath); + } + } + } + } + catch (ArgumentException) { + } + catch (IOException) { + } + catch (XmlException) { + } + + return searchPaths; + } + + /// + /// Add other common search paths + /// + /// A list that gets updated with the new paths + protected static void AddOtherSearchPaths(IList paths) { + var dirPF = Environment.GetEnvironmentVariable("ProgramFiles"); + AddOtherAssemblySearchPaths(paths, dirPF); + var dirPFx86 = Environment.GetEnvironmentVariable("ProgramFiles(x86)"); + if (!StringComparer.OrdinalIgnoreCase.Equals(dirPF, dirPFx86)) + AddOtherAssemblySearchPaths(paths, dirPFx86); + + var windir = Environment.GetEnvironmentVariable("WINDIR"); + if (!string.IsNullOrEmpty(windir)) { + AddIfExists(paths, windir, @"Microsoft.NET\Framework\v1.1.4322"); + AddIfExists(paths, windir, @"Microsoft.NET\Framework\v1.0.3705"); + } + } + + static void AddOtherAssemblySearchPaths(IList paths, string path) { + if (string.IsNullOrEmpty(path)) + return; + AddSilverlightDirs(paths, Path.Combine(path, @"Microsoft Silverlight")); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v2.0\Libraries\Client"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v2.0\Libraries\Server"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v2.0\Reference Assemblies"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v3.0\Libraries\Client"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v3.0\Libraries\Server"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v4.0\Libraries\Client"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v4.0\Libraries\Server"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v5.0\Libraries\Client"); + AddIfExists(paths, path, @"Microsoft SDKs\Silverlight\v5.0\Libraries\Server"); + AddIfExists(paths, path, @"Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE"); + AddIfExists(paths, path, @"Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETCore\v4.5.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETCore\v4.5"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETMicroFramework\v3.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETMicroFramework\v4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETMicroFramework\v4.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETMicroFramework\v4.2"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETMicroFramework\v4.3"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\.NETPortable\v4.6"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\v3.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\v3.5"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\Silverlight\v3.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\Silverlight\v4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\Silverlight\v5.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\Framework\WindowsPhoneApp\v8.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.3.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.3.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETCore\3.3.1.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETFramework\v2.0\2.3.0.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETPortable\2.3.5.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETPortable\2.3.5.1"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\3.0\Runtime\.NETPortable"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\3.0\Runtime\v2.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\FSharp\3.0\Runtime\v4.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\WindowsPowerShell\v1.0"); + AddIfExists(paths, path, @"Reference Assemblies\Microsoft\WindowsPowerShell\3.0"); + AddIfExists(paths, path, @"Microsoft Visual Studio .NET\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio .NET\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio .NET 2003\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio .NET 2003\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies"); + AddIfExists(paths, path, @"Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v2.0\References\Windows\x86"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v2.0\References\Xbox360"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v3.0\References\Windows\x86"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v3.0\References\Xbox360"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v3.0\References\Zune"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v3.1\References\Windows\x86"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v3.1\References\Xbox360"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v3.1\References\Zune"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86"); + AddIfExists(paths, path, @"Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360"); + AddIfExists(paths, path, @"Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Designtimereferences"); + AddIfExists(paths, path, @"Windows CE Tools\wce500\Windows Mobile 5.0 Smartphone SDK\Designtimereferences"); + AddIfExists(paths, path, @"Windows Mobile 5.0 SDK R2\Managed Libraries"); + AddIfExists(paths, path, @"Windows Mobile 6 SDK\Managed Libraries"); + AddIfExists(paths, path, @"Windows Mobile 6.5.3 DTK\Managed Libraries"); + AddIfExists(paths, path, @"Microsoft SQL Server\90\SDK\Assemblies"); + AddIfExists(paths, path, @"Microsoft SQL Server\100\SDK\Assemblies"); + AddIfExists(paths, path, @"Microsoft SQL Server\110\SDK\Assemblies"); + AddIfExists(paths, path, @"Microsoft SQL Server\120\SDK\Assemblies"); + AddIfExists(paths, path, @"Microsoft ASP.NET\ASP.NET MVC 2\Assemblies"); + AddIfExists(paths, path, @"Microsoft ASP.NET\ASP.NET MVC 3\Assemblies"); + AddIfExists(paths, path, @"Microsoft ASP.NET\ASP.NET MVC 4\Assemblies"); + AddIfExists(paths, path, @"Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies"); + AddIfExists(paths, path, @"Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies"); + AddIfExists(paths, path, @"Microsoft SDKs\F#\3.0\Framework\v4.0"); + } + + static void AddSilverlightDirs(IList paths, string basePath) { + try { + var di = new DirectoryInfo(basePath); + foreach (var dir in di.GetDirectories()) { + if (Regex.IsMatch(dir.Name, @"^\d+(?:\.\d+){3}$")) + AddIfExists(paths, basePath, dir.Name); + } + } + catch { + } + } + + static void AddIfExists(IList paths, string basePath, string extraPath) { + var path = Path.Combine(basePath, extraPath); + if (Directory.Exists(path)) + paths.Add(path); + } + } +} diff --git a/dnlib/DotNet/CallingConvention.cs b/dnlib/DotNet/CallingConvention.cs new file mode 100644 index 0000000..1ff69a4 --- /dev/null +++ b/dnlib/DotNet/CallingConvention.cs @@ -0,0 +1,48 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// See CorHdr.h/CorCallingConvention + /// + [Flags] + public enum CallingConvention : byte { + /// The managed calling convention + Default = 0x0, + /// + C = 0x1, + /// + StdCall = 0x2, + /// + ThisCall = 0x3, + /// + FastCall = 0x4, + /// + VarArg = 0x5, + /// + Field = 0x6, + /// + LocalSig = 0x7, + /// + Property = 0x8, + /// + Unmanaged = 0x9, + /// generic method instantiation + GenericInst = 0xA, + /// used ONLY for 64bit vararg PInvoke calls + NativeVarArg = 0xB, + + /// Calling convention is bottom 4 bits + Mask = 0x0F, + + /// Generic method + Generic = 0x10, + /// Method needs a 'this' parameter + HasThis = 0x20, + /// 'this' parameter is the first arg if set (else it's hidden) + ExplicitThis = 0x40, + /// Used internally by the CLR + ReservedByCLR = 0x80, + } +} diff --git a/dnlib/DotNet/CallingConventionSig.cs b/dnlib/DotNet/CallingConventionSig.cs new file mode 100644 index 0000000..7f825f6 --- /dev/null +++ b/dnlib/DotNet/CallingConventionSig.cs @@ -0,0 +1,1161 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +/* +All signature classes: + +CallingConventionSig + FieldSig + MethodBaseSig + MethodSig + PropertySig + LocalSig + GenericInstMethodSig +*/ + +namespace dnlib.DotNet { + /// + /// Base class for sigs with a calling convention + /// + public abstract class CallingConventionSig : IContainsGenericParameter { + /// + /// The calling convention + /// + protected CallingConvention callingConvention; + + byte[] extraData; + + /// + /// Gets/sets the extra data found after the signature + /// + public byte[] ExtraData { + get { return extraData; } + set { extraData = value; } + } + + /// + /// Returns true if is set + /// + public bool IsDefault { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.Default; } + } + + /// + /// Returns true if is set + /// + public bool IsC { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.C; } + } + + /// + /// Returns true if is set + /// + public bool IsStdCall { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.StdCall; } + } + + /// + /// Returns true if is set + /// + public bool IsThisCall { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.ThisCall; } + } + + /// + /// Returns true if is set + /// + public bool IsFastCall { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.FastCall; } + } + + /// + /// Returns true if is set + /// + public bool IsVarArg { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.VarArg; } + } + + /// + /// Returns true if is set + /// + public bool IsField { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.Field; } + } + + /// + /// Returns true if is set + /// + public bool IsLocalSig { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.LocalSig; } + } + + /// + /// Returns true if is set + /// + public bool IsProperty { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.Property; } + } + + /// + /// Returns true if is set + /// + public bool IsUnmanaged { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.Unmanaged; } + } + + /// + /// Returns true if is set + /// + public bool IsGenericInst { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.GenericInst; } + } + + /// + /// Returns true if is set + /// + public bool IsNativeVarArg { + get { return (callingConvention & CallingConvention.Mask) == CallingConvention.NativeVarArg; } + } + + /// + /// Gets/sets the bit + /// + public bool Generic { + get { return (callingConvention & CallingConvention.Generic) != 0; } + set { + if (value) + callingConvention |= CallingConvention.Generic; + else + callingConvention &= ~CallingConvention.Generic; + } + } + + /// + /// Gets/sets the bit + /// + public bool HasThis { + get { return (callingConvention & CallingConvention.HasThis) != 0; } + set { + if (value) + callingConvention |= CallingConvention.HasThis; + else + callingConvention &= ~CallingConvention.HasThis; + } + } + + /// + /// Gets/sets the bit + /// + public bool ExplicitThis { + get { return (callingConvention & CallingConvention.ExplicitThis) != 0; } + set { + if (value) + callingConvention |= CallingConvention.ExplicitThis; + else + callingConvention &= ~CallingConvention.ExplicitThis; + } + } + + /// + /// Gets/sets the bit + /// + public bool ReservedByCLR { + get { return (callingConvention & CallingConvention.ReservedByCLR) != 0; } + set { + if (value) + callingConvention |= CallingConvention.ReservedByCLR; + else + callingConvention &= ~CallingConvention.ReservedByCLR; + } + } + + /// + /// true if there's an implicit this parameter + /// + public bool ImplicitThis { + get { return HasThis && !ExplicitThis; } + } + + /// + /// true if this contains a + /// or a . + /// + public bool ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + + /// + /// Default constructor + /// + protected CallingConventionSig() { + } + + /// + /// Constructor + /// + /// The calling convention + protected CallingConventionSig(CallingConvention callingConvention) { + this.callingConvention = callingConvention; + } + + /// + /// Gets the calling convention + /// + public CallingConvention GetCallingConvention() { + return callingConvention; + } + } + + /// + /// A field signature + /// + public sealed class FieldSig : CallingConventionSig { + TypeSig type; + + /// + /// Gets/sets the field type + /// + public TypeSig Type { + get { return type; } + set { type = value; } + } + + /// + /// Default constructor + /// + public FieldSig() { + this.callingConvention = CallingConvention.Field; + } + + /// + /// Constructor + /// + /// Field type + public FieldSig(TypeSig type) { + this.callingConvention = CallingConvention.Field; + this.type = type; + } + + /// + /// Constructor + /// + /// Field type + /// The calling convention (must have Field set) + internal FieldSig(CallingConvention callingConvention, TypeSig type) { + this.callingConvention = callingConvention; + this.type = type; + } + + /// + /// Clone this + /// + public FieldSig Clone() { + return new FieldSig(callingConvention, type); + } + + /// + public override string ToString() { + return FullNameCreator.FullName(type == null ? null : type, false); + } + } + + /// + /// Method sig base class + /// + public abstract class MethodBaseSig : CallingConventionSig { + /// + protected TypeSig retType; + /// + protected ThreadSafe.IList parameters; + /// + protected uint genParamCount; + /// + protected ThreadSafe.IList paramsAfterSentinel; + + /// + /// Gets/sets the calling convention + /// + public CallingConvention CallingConvention { + get { return callingConvention; } + set { callingConvention = value; } + } + + /// + /// Gets/sets the return type + /// + public TypeSig RetType { + get { return retType; } + set { retType = value; } + } + + /// + /// Gets the parameters. This is never null + /// + public ThreadSafe.IList Params { + get { return parameters; } + } + + /// + /// Gets/sets the generic param count + /// + public uint GenParamCount { + get { return genParamCount; } + set { genParamCount = value; } + } + + /// + /// Gets the parameters that are present after the sentinel. Note that this is null + /// if there's no sentinel. It can still be empty even if it's not null. + /// + public ThreadSafe.IList ParamsAfterSentinel { + get { return paramsAfterSentinel; } + set { paramsAfterSentinel = value; } + } + } + + /// + /// A method signature + /// + public sealed class MethodSig : MethodBaseSig { + uint origToken; + + /// + /// Gets/sets the original token. It's set when reading calli instruction operands + /// and it's a hint to the module writer if it tries to re-use the same token. + /// + public uint OriginalToken { + get { return origToken; } + set { origToken = value; } + } + + /// + /// Creates a static MethodSig + /// + /// Return type + public static MethodSig CreateStatic(TypeSig retType) { + return new MethodSig(CallingConvention.Default, 0, retType); + } + + /// + /// Creates a static MethodSig + /// + /// Return type + /// Arg type #1 + public static MethodSig CreateStatic(TypeSig retType, TypeSig argType1) { + return new MethodSig(CallingConvention.Default, 0, retType, argType1); + } + + /// + /// Creates a static MethodSig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + public static MethodSig CreateStatic(TypeSig retType, TypeSig argType1, TypeSig argType2) { + return new MethodSig(CallingConvention.Default, 0, retType, argType1, argType2); + } + + /// + /// Creates a static MethodSig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public static MethodSig CreateStatic(TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + return new MethodSig(CallingConvention.Default, 0, retType, argType1, argType2, argType3); + } + + /// + /// Creates a static MethodSig + /// + /// Return type + /// Argument types + public static MethodSig CreateStatic(TypeSig retType, params TypeSig[] argTypes) { + return new MethodSig(CallingConvention.Default, 0, retType, argTypes); + } + + /// + /// Creates an instance MethodSig + /// + /// Return type + public static MethodSig CreateInstance(TypeSig retType) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis, 0, retType); + } + + /// + /// Creates an instance MethodSig + /// + /// Return type + /// Arg type #1 + public static MethodSig CreateInstance(TypeSig retType, TypeSig argType1) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis, 0, retType, argType1); + } + + /// + /// Creates an instance MethodSig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + public static MethodSig CreateInstance(TypeSig retType, TypeSig argType1, TypeSig argType2) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis, 0, retType, argType1, argType2); + } + + /// + /// Creates an instance MethodSig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public static MethodSig CreateInstance(TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis, 0, retType, argType1, argType2, argType3); + } + + /// + /// Creates an instance MethodSig + /// + /// Return type + /// Argument types + public static MethodSig CreateInstance(TypeSig retType, params TypeSig[] argTypes) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis, 0, retType, argTypes); + } + + /// + /// Creates a static generic MethodSig + /// + /// Number of generic parameters + /// Return type + public static MethodSig CreateStaticGeneric(uint genParamCount, TypeSig retType) { + return new MethodSig(CallingConvention.Default | CallingConvention.Generic, genParamCount, retType); + } + + /// + /// Creates a static generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Arg type #1 + public static MethodSig CreateStaticGeneric(uint genParamCount, TypeSig retType, TypeSig argType1) { + return new MethodSig(CallingConvention.Default | CallingConvention.Generic, genParamCount, retType, argType1); + } + + /// + /// Creates a static generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Arg type #1 + /// Arg type #2 + public static MethodSig CreateStaticGeneric(uint genParamCount, TypeSig retType, TypeSig argType1, TypeSig argType2) { + return new MethodSig(CallingConvention.Default | CallingConvention.Generic, genParamCount, retType, argType1, argType2); + } + + /// + /// Creates a static generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public static MethodSig CreateStaticGeneric(uint genParamCount, TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + return new MethodSig(CallingConvention.Default | CallingConvention.Generic, genParamCount, retType, argType1, argType2, argType3); + } + + /// + /// Creates a static generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Argument types + public static MethodSig CreateStaticGeneric(uint genParamCount, TypeSig retType, params TypeSig[] argTypes) { + return new MethodSig(CallingConvention.Default | CallingConvention.Generic, genParamCount, retType, argTypes); + } + + /// + /// Creates an instance generic MethodSig + /// + /// Number of generic parameters + /// Return type + public static MethodSig CreateInstanceGeneric(uint genParamCount, TypeSig retType) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis | CallingConvention.Generic, genParamCount, retType); + } + + /// + /// Creates an instance generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Arg type #1 + public static MethodSig CreateInstanceGeneric(uint genParamCount, TypeSig retType, TypeSig argType1) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis | CallingConvention.Generic, genParamCount, retType, argType1); + } + + /// + /// Creates an instance generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Arg type #1 + /// Arg type #2 + public static MethodSig CreateInstanceGeneric(uint genParamCount, TypeSig retType, TypeSig argType1, TypeSig argType2) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis | CallingConvention.Generic, genParamCount, retType, argType1, argType2); + } + + /// + /// Creates an instance generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public static MethodSig CreateInstanceGeneric(uint genParamCount, TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis | CallingConvention.Generic, genParamCount, retType, argType1, argType2, argType3); + } + + /// + /// Creates an instance generic MethodSig + /// + /// Number of generic parameters + /// Return type + /// Argument types + public static MethodSig CreateInstanceGeneric(uint genParamCount, TypeSig retType, params TypeSig[] argTypes) { + return new MethodSig(CallingConvention.Default | CallingConvention.HasThis | CallingConvention.Generic, genParamCount, retType, argTypes); + } + + /// + /// Default constructor + /// + public MethodSig() { + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention + public MethodSig(CallingConvention callingConvention) { + this.callingConvention = callingConvention; + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + public MethodSig(CallingConvention callingConvention, uint genParamCount) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Arg type #1 + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, TypeSig argType1) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argType1); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Arg type #1 + /// Arg type #2 + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, TypeSig argType1, TypeSig argType2) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argType1, argType2); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argType1, argType2, argType3); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Argument types + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, params TypeSig[] argTypes) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argTypes); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Argument types + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, IList argTypes) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argTypes); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Argument types + /// Parameters after sentinel + public MethodSig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, IList argTypes, IList paramsAfterSentinel) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argTypes); + this.paramsAfterSentinel = paramsAfterSentinel == null ? null : ThreadSafeListCreator.Create(paramsAfterSentinel); + } + + /// + /// Clone this + /// + public MethodSig Clone() { + return new MethodSig(callingConvention, genParamCount, retType, parameters, paramsAfterSentinel); + } + + /// + public override string ToString() { + return FullNameCreator.MethodSigFullName(this); + } + } + + /// + /// A property signature + /// + public sealed class PropertySig : MethodBaseSig { + /// + /// Creates a static PropertySig + /// + /// Return type + public static PropertySig CreateStatic(TypeSig retType) { + return new PropertySig(false, retType); + } + + /// + /// Creates a static PropertySig + /// + /// Return type + /// Arg type #1 + public static PropertySig CreateStatic(TypeSig retType, TypeSig argType1) { + return new PropertySig(false, retType, argType1); + } + + /// + /// Creates a static PropertySig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + public static PropertySig CreateStatic(TypeSig retType, TypeSig argType1, TypeSig argType2) { + return new PropertySig(false, retType, argType1, argType2); + } + + /// + /// Creates a static PropertySig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public static PropertySig CreateStatic(TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + return new PropertySig(false, retType, argType1, argType2, argType3); + } + + /// + /// Creates a static PropertySig + /// + /// Return type + /// Argument types + public static PropertySig CreateStatic(TypeSig retType, params TypeSig[] argTypes) { + return new PropertySig(false, retType, argTypes); + } + + /// + /// Creates an instance PropertySig + /// + /// Return type + public static PropertySig CreateInstance(TypeSig retType) { + return new PropertySig(true, retType); + } + + /// + /// Creates an instance PropertySig + /// + /// Return type + /// Arg type #1 + public static PropertySig CreateInstance(TypeSig retType, TypeSig argType1) { + return new PropertySig(true, retType, argType1); + } + + /// + /// Creates an instance PropertySig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + public static PropertySig CreateInstance(TypeSig retType, TypeSig argType1, TypeSig argType2) { + return new PropertySig(true, retType, argType1, argType2); + } + + /// + /// Creates an instance PropertySig + /// + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public static PropertySig CreateInstance(TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + return new PropertySig(true, retType, argType1, argType2, argType3); + } + + /// + /// Creates an instance PropertySig + /// + /// Return type + /// Argument types + public static PropertySig CreateInstance(TypeSig retType, params TypeSig[] argTypes) { + return new PropertySig(true, retType, argTypes); + } + + /// + /// Default constructor + /// + public PropertySig() { + this.callingConvention = CallingConvention.Property; + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention (must have Property set) + internal PropertySig(CallingConvention callingConvention) { + this.callingConvention = callingConvention; + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// true if instance, false if static + public PropertySig(bool hasThis) { + this.callingConvention = CallingConvention.Property | (hasThis ? CallingConvention.HasThis : 0); + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// true if instance, false if static + /// Return type + public PropertySig(bool hasThis, TypeSig retType) { + this.callingConvention = CallingConvention.Property | (hasThis ? CallingConvention.HasThis : 0); + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// true if instance, false if static + /// Return type + /// Arg type #1 + public PropertySig(bool hasThis, TypeSig retType, TypeSig argType1) { + this.callingConvention = CallingConvention.Property | (hasThis ? CallingConvention.HasThis : 0); + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argType1); + } + + /// + /// Constructor + /// + /// true if instance, false if static + /// Return type + /// Arg type #1 + /// Arg type #2 + public PropertySig(bool hasThis, TypeSig retType, TypeSig argType1, TypeSig argType2) { + this.callingConvention = CallingConvention.Property | (hasThis ? CallingConvention.HasThis : 0); + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argType1, argType2); + } + + /// + /// Constructor + /// + /// true if instance, false if static + /// Return type + /// Arg type #1 + /// Arg type #2 + /// Arg type #3 + public PropertySig(bool hasThis, TypeSig retType, TypeSig argType1, TypeSig argType2, TypeSig argType3) { + this.callingConvention = CallingConvention.Property | (hasThis ? CallingConvention.HasThis : 0); + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argType1, argType2, argType3); + } + + /// + /// Constructor + /// + /// true if instance, false if static + /// Return type + /// Argument types + public PropertySig(bool hasThis, TypeSig retType, params TypeSig[] argTypes) { + this.callingConvention = CallingConvention.Property | (hasThis ? CallingConvention.HasThis : 0); + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argTypes); + } + + /// + /// Constructor + /// + /// Calling convention + /// Number of generic parameters + /// Return type + /// Argument types + /// Parameters after sentinel + internal PropertySig(CallingConvention callingConvention, uint genParamCount, TypeSig retType, IList argTypes, IList paramsAfterSentinel) { + this.callingConvention = callingConvention; + this.genParamCount = genParamCount; + this.retType = retType; + this.parameters = ThreadSafeListCreator.Create(argTypes); + this.paramsAfterSentinel = paramsAfterSentinel == null ? null : ThreadSafeListCreator.Create(paramsAfterSentinel); + } + + /// + /// Clone this + /// + public PropertySig Clone() { + return new PropertySig(callingConvention, genParamCount, retType, parameters, paramsAfterSentinel); + } + + /// + public override string ToString() { + return FullNameCreator.PropertySigFullName(this); + } + } + + /// + /// A local variables signature + /// + public sealed class LocalSig : CallingConventionSig { + readonly ThreadSafe.IList locals; + + /// + /// All local types. This is never null. + /// + public ThreadSafe.IList Locals { + get { return locals; } + } + + /// + /// Default constructor + /// + public LocalSig() { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention (must have LocalSig set) + /// Number of locals + internal LocalSig(CallingConvention callingConvention, uint count) { + this.callingConvention = callingConvention; + this.locals = ThreadSafeListCreator.Create((int)count); + } + + /// + /// Constructor + /// + /// Local type #1 + public LocalSig(TypeSig local1) { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.Create(local1); + } + + /// + /// Constructor + /// + /// Local type #1 + /// Local type #2 + public LocalSig(TypeSig local1, TypeSig local2) { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.Create(local1, local2); + } + + /// + /// Constructor + /// + /// Local type #1 + /// Local type #2 + /// Local type #3 + public LocalSig(TypeSig local1, TypeSig local2, TypeSig local3) { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.Create(local1, local2, local3); + } + + /// + /// Constructor + /// + /// All locals + public LocalSig(params TypeSig[] locals) { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.Create(locals); + } + + /// + /// Constructor + /// + /// All locals + public LocalSig(IList locals) { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.Create(locals); + } + + /// + /// Constructor + /// + /// All locals (this instance now owns it) + /// Dummy + internal LocalSig(IList locals, bool dummy) { + this.callingConvention = CallingConvention.LocalSig; + this.locals = ThreadSafeListCreator.MakeThreadSafe(locals); + } + + /// + /// Clone this + /// + public LocalSig Clone() { + return new LocalSig(locals); + } + } + + /// + /// An instantiated generic method signature + /// + public sealed class GenericInstMethodSig : CallingConventionSig { + readonly ThreadSafe.IList genericArgs; + + /// + /// Gets the generic arguments (must be instantiated types, i.e., closed types) + /// + public ThreadSafe.IList GenericArguments { + get { return genericArgs; } + } + + /// + /// Default constructor + /// + public GenericInstMethodSig() { + this.callingConvention = CallingConvention.GenericInst; + this.genericArgs = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Calling convention (must have GenericInst set) + /// Number of generic args + internal GenericInstMethodSig(CallingConvention callingConvention, uint size) { + this.callingConvention = callingConvention; + this.genericArgs = ThreadSafeListCreator.Create((int)size); + } + + /// + /// Constructor + /// + /// Generic arg #1 + public GenericInstMethodSig(TypeSig arg1) { + this.callingConvention = CallingConvention.GenericInst; + this.genericArgs = ThreadSafeListCreator.Create(arg1); + } + + /// + /// Constructor + /// + /// Generic arg #1 + /// Generic arg #2 + public GenericInstMethodSig(TypeSig arg1, TypeSig arg2) { + this.callingConvention = CallingConvention.GenericInst; + this.genericArgs = ThreadSafeListCreator.Create(arg1, arg2); + } + + /// + /// Constructor + /// + /// Generic arg #1 + /// Generic arg #2 + /// Generic arg #3 + public GenericInstMethodSig(TypeSig arg1, TypeSig arg2, TypeSig arg3) { + this.callingConvention = CallingConvention.GenericInst; + this.genericArgs = ThreadSafeListCreator.Create(arg1, arg2, arg3); + } + + /// + /// Constructor + /// + /// Generic args + public GenericInstMethodSig(params TypeSig[] args) { + this.callingConvention = CallingConvention.GenericInst; + this.genericArgs = ThreadSafeListCreator.Create(args); + } + + /// + /// Constructor + /// + /// Generic args + public GenericInstMethodSig(IList args) { + this.callingConvention = CallingConvention.GenericInst; + this.genericArgs = ThreadSafeListCreator.Create(args); + } + + /// + /// Clone this + /// + public GenericInstMethodSig Clone() { + return new GenericInstMethodSig(genericArgs); + } + } + + public static partial class Extensions { + /// + /// Gets the field type + /// + /// this + /// Field type or null if none + public static TypeSig GetFieldType(this FieldSig sig) { + return sig == null ? null : sig.Type; + } + + /// + /// Gets the return type + /// + /// this + /// Return type or null if none + public static TypeSig GetRetType(this MethodBaseSig sig) { + return sig == null ? null : sig.RetType; + } + + /// + /// Gets the parameters + /// + /// this + /// The parameters + public static IList GetParams(this MethodBaseSig sig) { + return sig == null ? ThreadSafeListCreator.Create() : sig.Params; + } + + /// + /// Gets the parameter count + /// + /// this + /// Parameter count + public static int GetParamCount(this MethodBaseSig sig) { + return sig == null ? 0 : sig.Params.Count; + } + + /// + /// Gets the generic parameter count + /// + /// this + /// Generic parameter count + public static uint GetGenParamCount(this MethodBaseSig sig) { + return sig == null ? 0 : sig.GenParamCount; + } + + /// + /// Gets the parameters after the sentinel + /// + /// this + /// Parameters after sentinel or null if none + public static IList GetParamsAfterSentinel(this MethodBaseSig sig) { + return sig == null ? null : sig.ParamsAfterSentinel; + } + + /// + /// Gets the locals + /// + /// this + /// All locals + public static IList GetLocals(this LocalSig sig) { + return sig == null ? ThreadSafeListCreator.Create() : sig.Locals; + } + + /// + /// Gets the generic arguments + /// + /// this + /// All generic arguments + public static IList GetGenericArguments(this GenericInstMethodSig sig) { + return sig == null ? ThreadSafeListCreator.Create() : sig.GenericArguments; + } + + /// + /// Gets the property + /// + /// this + /// The type's property or + /// false if input isnull + public static bool GetIsDefault(this CallingConventionSig sig) { + return sig == null ? false : sig.IsDefault; + } + } +} diff --git a/dnlib/DotNet/ClassLayout.cs b/dnlib/DotNet/ClassLayout.cs new file mode 100644 index 0000000..8c93448 --- /dev/null +++ b/dnlib/DotNet/ClassLayout.cs @@ -0,0 +1,103 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the ClassLayout table + /// + public abstract class ClassLayout : IMDTokenProvider { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.ClassLayout, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + /// From column ClassLayout.PackingSize + /// + public ushort PackingSize { + get { return packingSize; } + set { packingSize = value; } + } + /// + protected ushort packingSize; + + /// + /// From column ClassLayout.ClassSize + /// + public uint ClassSize { + get { return classSize; } + set { classSize = value; } + } + /// + protected uint classSize; + } + + /// + /// A ClassLayout row created by the user and not present in the original .NET file + /// + public class ClassLayoutUser : ClassLayout { + /// + /// Default constructor + /// + public ClassLayoutUser() { + } + + /// + /// Constructor + /// + /// PackingSize + /// ClassSize + public ClassLayoutUser(ushort packingSize, uint classSize) { + this.packingSize = packingSize; + this.classSize = classSize; + } + } + + /// + /// Created from a row in the ClassLayout table + /// + sealed class ClassLayoutMD : ClassLayout, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + /// Constructor + /// + /// The module which contains this ClassLayout row + /// Row ID + /// If is null + /// If is invalid + public ClassLayoutMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ClassLayoutTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("ClassLayout rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.classSize = readerModule.TablesStream.ReadClassLayoutRow(origRid, out this.packingSize); + } + } +} diff --git a/dnlib/DotNet/Constant.cs b/dnlib/DotNet/Constant.cs new file mode 100644 index 0000000..b9e28e4 --- /dev/null +++ b/dnlib/DotNet/Constant.cs @@ -0,0 +1,210 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Text; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Constant table + /// + public abstract class Constant : IMDTokenProvider { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.Constant, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + /// From column Constant.Type + /// + public ElementType Type { + get { return type; } + set { type = value; } + } + /// + protected ElementType type; + + /// + /// From column Constant.Value + /// + public object Value { + get { return value; } + set { this.value = value; } + } + /// + protected object value; + } + + /// + /// A Constant row created by the user and not present in the original .NET file + /// + public class ConstantUser : Constant { + /// + /// Default constructor + /// + public ConstantUser() { + } + + /// + /// Constructor + /// + /// Value + public ConstantUser(object value) { + this.type = GetElementType(value); + this.value = value; + } + + /// + /// Constructor + /// + /// Value + /// Type + public ConstantUser(object value, ElementType type) { + this.type = type; + this.value = value; + } + + static ElementType GetElementType(object value) { + if (value == null) + return ElementType.Class; + switch (System.Type.GetTypeCode(value.GetType())) { + case TypeCode.Boolean: return ElementType.Boolean; + case TypeCode.Char: return ElementType.Char; + case TypeCode.SByte: return ElementType.I1; + case TypeCode.Byte: return ElementType.U1; + case TypeCode.Int16: return ElementType.I2; + case TypeCode.UInt16: return ElementType.U2; + case TypeCode.Int32: return ElementType.I4; + case TypeCode.UInt32: return ElementType.U4; + case TypeCode.Int64: return ElementType.I8; + case TypeCode.UInt64: return ElementType.U8; + case TypeCode.Single: return ElementType.R4; + case TypeCode.Double: return ElementType.R8; + case TypeCode.String: return ElementType.String; + default: return ElementType.Void; + } + } + } + + /// + /// Created from a row in the Constant table + /// + sealed class ConstantMD : Constant, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + /// Constructor + /// + /// The module which contains this Constant row + /// Row ID + /// If is null + /// If is invalid + public ConstantMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ConstantTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Constant rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint value = readerModule.TablesStream.ReadConstantRow(origRid, out this.type); + this.value = GetValue(this.type, readerModule.BlobStream.ReadNoNull(value)); + } + + static object GetValue(ElementType etype, byte[] data) { + switch (etype) { + case ElementType.Boolean: + if (data == null || data.Length < 1) + return false; + return BitConverter.ToBoolean(data, 0); + + case ElementType.Char: + if (data == null || data.Length < 2) + return (char)0; + return BitConverter.ToChar(data, 0); + + case ElementType.I1: + if (data == null || data.Length < 1) + return (sbyte)0; + return (sbyte)data[0]; + + case ElementType.U1: + if (data == null || data.Length < 1) + return (byte)0; + return data[0]; + + case ElementType.I2: + if (data == null || data.Length < 2) + return (short)0; + return BitConverter.ToInt16(data, 0); + + case ElementType.U2: + if (data == null || data.Length < 2) + return (ushort)0; + return BitConverter.ToUInt16(data, 0); + + case ElementType.I4: + if (data == null || data.Length < 4) + return (int)0; + return BitConverter.ToInt32(data, 0); + + case ElementType.U4: + if (data == null || data.Length < 4) + return (uint)0; + return BitConverter.ToUInt32(data, 0); + + case ElementType.I8: + if (data == null || data.Length < 8) + return (long)0; + return BitConverter.ToInt64(data, 0); + + case ElementType.U8: + if (data == null || data.Length < 8) + return (ulong)0; + return BitConverter.ToUInt64(data, 0); + + case ElementType.R4: + if (data == null || data.Length < 4) + return (float)0; + return BitConverter.ToSingle(data, 0); + + case ElementType.R8: + if (data == null || data.Length < 8) + return (double)0; + return BitConverter.ToDouble(data, 0); + + case ElementType.String: + if (data == null) + return string.Empty; + return Encoding.Unicode.GetString(data, 0, data.Length / 2 * 2); + + case ElementType.Class: + return null; + + default: + return null; + } + } + } +} diff --git a/dnlib/DotNet/CorLibTypes.cs b/dnlib/DotNet/CorLibTypes.cs new file mode 100644 index 0000000..a5fc694 --- /dev/null +++ b/dnlib/DotNet/CorLibTypes.cs @@ -0,0 +1,185 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Default implementation of + /// + public sealed class CorLibTypes : ICorLibTypes { + readonly ModuleDef module; + CorLibTypeSig typeVoid; + CorLibTypeSig typeBoolean; + CorLibTypeSig typeChar; + CorLibTypeSig typeSByte; + CorLibTypeSig typeByte; + CorLibTypeSig typeInt16; + CorLibTypeSig typeUInt16; + CorLibTypeSig typeInt32; + CorLibTypeSig typeUInt32; + CorLibTypeSig typeInt64; + CorLibTypeSig typeUInt64; + CorLibTypeSig typeSingle; + CorLibTypeSig typeDouble; + CorLibTypeSig typeString; + CorLibTypeSig typeTypedReference; + CorLibTypeSig typeIntPtr; + CorLibTypeSig typeUIntPtr; + CorLibTypeSig typeObject; + readonly AssemblyRef corLibAssemblyRef; + + /// + public CorLibTypeSig Void { + get { return typeVoid; } + } + + /// + public CorLibTypeSig Boolean { + get { return typeBoolean; } + } + + /// + public CorLibTypeSig Char { + get { return typeChar; } + } + + /// + public CorLibTypeSig SByte { + get { return typeSByte; } + } + + /// + public CorLibTypeSig Byte { + get { return typeByte; } + } + + /// + public CorLibTypeSig Int16 { + get { return typeInt16; } + } + + /// + public CorLibTypeSig UInt16 { + get { return typeUInt16; } + } + + /// + public CorLibTypeSig Int32 { + get { return typeInt32; } + } + + /// + public CorLibTypeSig UInt32 { + get { return typeUInt32; } + } + + /// + public CorLibTypeSig Int64 { + get { return typeInt64; } + } + + /// + public CorLibTypeSig UInt64 { + get { return typeUInt64; } + } + + /// + public CorLibTypeSig Single { + get { return typeSingle; } + } + + /// + public CorLibTypeSig Double { + get { return typeDouble; } + } + + /// + public CorLibTypeSig String { + get { return typeString; } + } + + /// + public CorLibTypeSig TypedReference { + get { return typeTypedReference; } + } + + /// + public CorLibTypeSig IntPtr { + get { return typeIntPtr; } + } + + /// + public CorLibTypeSig UIntPtr { + get { return typeUIntPtr; } + } + + /// + public CorLibTypeSig Object { + get { return typeObject; } + } + + /// + public AssemblyRef AssemblyRef { + get { return corLibAssemblyRef; } + } + + /// + /// Constructor + /// + /// The owner module + public CorLibTypes(ModuleDef module) + : this(module, null) { + } + + /// + /// Constructor + /// + /// The owner module + /// Corlib assembly reference or null if a default + /// assembly reference should be created + public CorLibTypes(ModuleDef module, AssemblyRef corLibAssemblyRef) { + this.module = module; + this.corLibAssemblyRef = corLibAssemblyRef ?? CreateCorLibAssemblyRef(); + Initialize(); + } + + AssemblyRef CreateCorLibAssemblyRef() { + return module.UpdateRowId(AssemblyRefUser.CreateMscorlibReferenceCLR20()); + } + + void Initialize() { + bool isCorLib = module.Assembly.IsCorLib(); + typeVoid = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Void"), ElementType.Void); + typeBoolean = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Boolean"), ElementType.Boolean); + typeChar = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Char"), ElementType.Char); + typeSByte = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "SByte"), ElementType.I1); + typeByte = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Byte"), ElementType.U1); + typeInt16 = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Int16"), ElementType.I2); + typeUInt16 = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "UInt16"), ElementType.U2); + typeInt32 = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Int32"), ElementType.I4); + typeUInt32 = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "UInt32"), ElementType.U4); + typeInt64 = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Int64"), ElementType.I8); + typeUInt64 = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "UInt64"), ElementType.U8); + typeSingle = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Single"), ElementType.R4); + typeDouble = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Double"), ElementType.R8); + typeString = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "String"), ElementType.String); + typeTypedReference = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "TypedReference"), ElementType.TypedByRef); + typeIntPtr = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "IntPtr"), ElementType.I); + typeUIntPtr = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "UIntPtr"), ElementType.U); + typeObject = new CorLibTypeSig(CreateCorLibTypeRef(isCorLib, "Object"), ElementType.Object); + } + + ITypeDefOrRef CreateCorLibTypeRef(bool isCorLib, string name) { + var tr = new TypeRefUser(module, "System", name, corLibAssemblyRef); + if (isCorLib) { + var td = module.Find(tr); + if (td != null) + return td; + } + return module.UpdateRowId(tr); + } + + /// + public TypeRef GetTypeRef(string @namespace, string name) { + return module.UpdateRowId(new TypeRefUser(module, @namespace, name, corLibAssemblyRef)); + } + } +} diff --git a/dnlib/DotNet/CustomAttribute.cs b/dnlib/DotNet/CustomAttribute.cs new file mode 100644 index 0000000..f3bacf3 --- /dev/null +++ b/dnlib/DotNet/CustomAttribute.cs @@ -0,0 +1,507 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.Threading; +using dnlib.IO; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A custom attribute + /// + public sealed class CustomAttribute : ICustomAttribute { + ICustomAttributeType ctor; + byte[] rawData; + readonly ThreadSafe.IList arguments; + readonly ThreadSafe.IList namedArguments; + IBinaryReader blobReader; + + /// + /// Gets/sets the custom attribute constructor + /// + public ICustomAttributeType Constructor { + get { return ctor; } + set { ctor = value; } + } + + /// + /// Gets the attribute type + /// + public ITypeDefOrRef AttributeType { + get { + var cat = ctor; + return cat == null ? null : cat.DeclaringType; + } + } + + /// + /// Gets the full name of the attribute type + /// + public string TypeFullName { + get { + var mrCtor = ctor as MemberRef; + if (mrCtor != null) + return mrCtor.GetDeclaringTypeFullName() ?? string.Empty; + + var mdCtor = ctor as MethodDef; + if (mdCtor != null) { + var declType = mdCtor.DeclaringType; + if (declType != null) + return declType.FullName; + } + + return string.Empty; + } + } + + /// + /// true if the raw custom attribute blob hasn't been parsed + /// + public bool IsRawBlob { + get { return rawData != null; } + } + + /// + /// Gets the raw custom attribute blob or null if the CA was successfully parsed. + /// + public byte[] RawData { + get { return rawData; } + } + + /// + /// Gets all constructor arguments + /// + public ThreadSafe.IList ConstructorArguments { + get { return arguments; } + } + + /// + /// true if is not empty + /// + public bool HasConstructorArguments { + get { return arguments.Count > 0; } + } + + /// + /// Gets all named arguments (field and property values) + /// + public ThreadSafe.IList NamedArguments { + get { return namedArguments; } + } + + /// + /// true if is not empty + /// + public bool HasNamedArguments { + get { return namedArguments.Count > 0; } + } + + /// + /// Gets all s that are field arguments + /// + public IEnumerable Fields { + get { + foreach (var namedArg in namedArguments.GetSafeEnumerable()) { + if (namedArg.IsField) + yield return namedArg; + } + } + } + + /// + /// Gets all s that are property arguments + /// + public IEnumerable Properties { + get { + foreach (var namedArg in namedArguments.GetSafeEnumerable()) { + if (namedArg.IsProperty) + yield return namedArg; + } + } + } + + /// + /// Constructor + /// + /// Custom attribute constructor + /// Raw custom attribute blob + public CustomAttribute(ICustomAttributeType ctor, byte[] rawData) + : this(ctor, null, null, null) { + this.rawData = rawData; + } + + /// + /// Constructor + /// + /// Custom attribute constructor + public CustomAttribute(ICustomAttributeType ctor) + : this(ctor, null, null, null) { + } + + /// + /// Constructor + /// + /// Custom attribute constructor + /// Constructor arguments or null if none + public CustomAttribute(ICustomAttributeType ctor, IEnumerable arguments) + : this(ctor, arguments, null) { + } + + /// + /// Constructor + /// + /// Custom attribute constructor + /// Named arguments or null if none + public CustomAttribute(ICustomAttributeType ctor, IEnumerable namedArguments) + : this(ctor, null, namedArguments) { + } + + /// + /// Constructor + /// + /// Custom attribute constructor + /// Constructor arguments or null if none + /// Named arguments or null if none + public CustomAttribute(ICustomAttributeType ctor, IEnumerable arguments, IEnumerable namedArguments) + : this(ctor, arguments, namedArguments, null) { + } + + /// + /// Constructor + /// + /// Custom attribute constructor + /// Constructor arguments or null if none + /// Named arguments or null if none + /// A reader that returns the original custom attribute blob data + public CustomAttribute(ICustomAttributeType ctor, IEnumerable arguments, IEnumerable namedArguments, IBinaryReader blobReader) { + this.ctor = ctor; + this.arguments = arguments == null ? ThreadSafeListCreator.Create() : ThreadSafeListCreator.Create(arguments); + this.namedArguments = namedArguments == null ? ThreadSafeListCreator.Create() : ThreadSafeListCreator.Create(namedArguments); + this.blobReader = blobReader; + } + + /// + /// Constructor + /// + /// Custom attribute constructor + /// Constructor arguments. The list is now owned by this instance. + /// Named arguments. The list is now owned by this instance. + /// A reader that returns the original custom attribute blob data + internal CustomAttribute(ICustomAttributeType ctor, List arguments, List namedArguments, IBinaryReader blobReader) { + this.ctor = ctor; + this.arguments = arguments == null ? ThreadSafeListCreator.Create() : ThreadSafeListCreator.MakeThreadSafe(arguments); + this.namedArguments = namedArguments == null ? ThreadSafeListCreator.Create() : ThreadSafeListCreator.MakeThreadSafe(namedArguments); + this.blobReader = blobReader; + } + + /// + /// Gets the field named + /// + /// Name of field + /// A instance or null if not found + public CANamedArgument GetField(string name) { + return GetNamedArgument(name, true); + } + + /// + /// Gets the field named + /// + /// Name of field + /// A instance or null if not found + public CANamedArgument GetField(UTF8String name) { + return GetNamedArgument(name, true); + } + + /// + /// Gets the property named + /// + /// Name of property + /// A instance or null if not found + public CANamedArgument GetProperty(string name) { + return GetNamedArgument(name, false); + } + + /// + /// Gets the property named + /// + /// Name of property + /// A instance or null if not found + public CANamedArgument GetProperty(UTF8String name) { + return GetNamedArgument(name, false); + } + + /// + /// Gets the property/field named + /// + /// Name of property/field + /// true if it's a field, false if it's a property + /// A instance or null if not found + public CANamedArgument GetNamedArgument(string name, bool isField) { + foreach (var namedArg in namedArguments.GetSafeEnumerable()) { + if (namedArg.IsField == isField && UTF8String.ToSystemStringOrEmpty(namedArg.Name) == name) + return namedArg; + } + return null; + } + + /// + /// Gets the property/field named + /// + /// Name of property/field + /// true if it's a field, false if it's a property + /// A instance or null if not found + public CANamedArgument GetNamedArgument(UTF8String name, bool isField) { + foreach (var namedArg in namedArguments.GetSafeEnumerable()) { + if (namedArg.IsField == isField && UTF8String.Equals(namedArg.Name, name)) + return namedArg; + } + return null; + } + + /// + /// Gets the binary custom attribute data that was used to create this instance. + /// + /// Blob of this custom attribute + public byte[] GetBlob() { + if (rawData != null) + return rawData; + if (blob != null) + return blob; +#if THREAD_SAFE + if (blobReader != null) { + lock (this) { +#endif + if (blobReader != null) { + blob = blobReader.ReadAllBytes(); + blobReader.Dispose(); + blobReader = null; + return blob; + } +#if THREAD_SAFE + } + } +#endif + if (blob != null) + return blob; + return blob = new byte[0]; + } + byte[] blob; + + /// + public override string ToString() { + return TypeFullName; + } + } + + /// + /// A custom attribute constructor argument + /// + public struct CAArgument : ICloneable { + TypeSig type; + object value; + + /// + /// Gets/sets the argument type + /// + public TypeSig Type { + get { return type; } + set { type = value; } + } + + /// + /// Gets/sets the argument value + /// + public object Value { + get { return value; } + set { this.value = value; } + } + + /// + /// Constructor + /// + /// Argument type + public CAArgument(TypeSig type) { + this.type = type; + this.value = null; + } + + /// + /// Constructor + /// + /// Argument type + /// Argument value + public CAArgument(TypeSig type, object value) { + this.type = type; + this.value = value; + } + + object ICloneable.Clone() { + return Clone(); + } + + /// + /// Clones this instance and any s and s + /// referenced from this instance. + /// + /// + public CAArgument Clone() { + var value = this.value; + if (value is CAArgument) + value = ((CAArgument)value).Clone(); + else if (value is IList) { + var args = (IList)value; + var newArgs = ThreadSafeListCreator.Create(args.Count); + foreach (var arg in args.GetSafeEnumerable()) + newArgs.Add(arg.Clone()); + value = newArgs; + } + return new CAArgument(type, value); + } + + /// + public override string ToString() { + object v = value; + return string.Format("{0} ({1})", v == null ? "null" : v, type); + } + } + + /// + /// A custom attribute field/property argument + /// + public sealed class CANamedArgument : ICloneable { + bool isField; + TypeSig type; + UTF8String name; + CAArgument argument; + + /// + /// true if it's a field + /// + public bool IsField { + get { return isField; } + set { isField = value; } + } + + /// + /// true if it's a property + /// + public bool IsProperty { + get { return !isField; } + set { isField = !value; } + } + + /// + /// Gets/sets the field/property type + /// + public TypeSig Type { + get { return type; } + set { type = value; } + } + + /// + /// Gets/sets the property/field name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + + /// + /// Gets/sets the argument + /// + public CAArgument Argument { + get { return argument; } + set { argument = value; } + } + + /// + /// Gets/sets the argument type + /// + public TypeSig ArgumentType { + get { return argument.Type; } + set { argument.Type = value; } + } + + /// + /// Gets/sets the argument value + /// + public object Value { + get { return argument.Value; } + set { argument.Value = value; } + } + + /// + /// Default constructor + /// + public CANamedArgument() { + } + + /// + /// Constructor + /// + /// true if field, false if property + public CANamedArgument(bool isField) { + this.isField = isField; + } + + /// + /// Constructor + /// + /// true if field, false if property + /// Field/property type + public CANamedArgument(bool isField, TypeSig type) { + this.isField = isField; + this.type = type; + } + + /// + /// Constructor + /// + /// true if field, false if property + /// Field/property type + /// Name of field/property + public CANamedArgument(bool isField, TypeSig type, UTF8String name) { + this.isField = isField; + this.type = type; + this.name = name; + } + + /// + /// Constructor + /// + /// true if field, false if property + /// Field/property type + /// Name of field/property + /// Field/property argument + public CANamedArgument(bool isField, TypeSig type, UTF8String name, CAArgument argument) { + this.isField = isField; + this.type = type; + this.name = name; + this.argument = argument; + } + + object ICloneable.Clone() { + return Clone(); + } + + /// + /// Clones this instance and any s referenced from this instance. + /// + /// + public CANamedArgument Clone() { + return new CANamedArgument(isField, type, name, argument.Clone()); + } + + /// + public override string ToString() { + object v = Value; + return string.Format("({0}) {1} {2} = {3} ({4})", isField ? "field" : "property", type, name, v == null ? "null" : v, ArgumentType); + } + } +} diff --git a/dnlib/DotNet/CustomAttributeCollection.cs b/dnlib/DotNet/CustomAttributeCollection.cs new file mode 100644 index 0000000..a18c333 --- /dev/null +++ b/dnlib/DotNet/CustomAttributeCollection.cs @@ -0,0 +1,121 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Utils; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Stores s + /// + public class CustomAttributeCollection : LazyList { + /// + /// Default constructor + /// + public CustomAttributeCollection() { + } + + /// + /// Constructor + /// + /// Initial length of the list + /// Context passed to + /// Delegate instance that returns original values + public CustomAttributeCollection(int length, object context, MFunc readOriginalValue) + : base(length, context, readOriginalValue) { + } + + /// + /// Checks whether a custom attribute is present + /// + /// Full name of custom attribute type + /// true if the custom attribute type is present, false otherwise + public bool IsDefined(string fullName) { + return Find(fullName) != null; + } + + /// + /// Removes all custom attributes of a certain type + /// + /// Full name of custom attribute type that should be removed + public void RemoveAll(string fullName) { + this.IterateAllReverse((tsList, index, value) => { + if (value.TypeFullName == fullName) + RemoveAt_NoLock(index); + }); + } + + /// + /// Finds a custom attribute + /// + /// Full name of custom attribute type + /// A or null if it wasn't found + public CustomAttribute Find(string fullName) { + foreach (var ca in this.GetSafeEnumerable()) { + if (ca != null && ca.TypeFullName == fullName) + return ca; + } + + return null; + } + + /// + /// Finds all custom attributes of a certain type + /// + /// Full name of custom attribute type + /// All s of the requested type + public IEnumerable FindAll(string fullName) { + foreach (var ca in this.GetSafeEnumerable()) { + if (ca != null && ca.TypeFullName == fullName) + yield return ca; + } + } + + /// + /// Finds a custom attribute + /// + /// Custom attribute type + /// The first found or null if none found + public CustomAttribute Find(IType attrType) { + return Find(attrType, 0); + } + + /// + /// Finds a custom attribute + /// + /// Custom attribute type + /// Attribute type comparison flags + /// The first found or null if none found + public CustomAttribute Find(IType attrType, SigComparerOptions options) { + var comparer = new SigComparer(options); + foreach (var ca in this.GetSafeEnumerable()) { + if (comparer.Equals(ca.AttributeType, attrType)) + return ca; + } + return null; + } + + /// + /// Finds all custom attributes of a certain type + /// + /// Custom attribute type + /// All s of the requested type + public IEnumerable FindAll(IType attrType) { + return FindAll(attrType, 0); + } + + /// + /// Finds all custom attributes of a certain type + /// + /// Custom attribute type + /// Attribute type comparison flags + /// All s of the requested type + public IEnumerable FindAll(IType attrType, SigComparerOptions options) { + var comparer = new SigComparer(options); + foreach (var ca in this.GetSafeEnumerable()) { + if (comparer.Equals(ca.AttributeType, attrType)) + yield return ca; + } + } + } +} diff --git a/dnlib/DotNet/CustomAttributeReader.cs b/dnlib/DotNet/CustomAttributeReader.cs new file mode 100644 index 0000000..0ea158d --- /dev/null +++ b/dnlib/DotNet/CustomAttributeReader.cs @@ -0,0 +1,623 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Searches for a type according to custom attribute search rules: first try the + /// current assembly, and if that fails, try mscorlib + /// + sealed class CAAssemblyRefFinder : IAssemblyRefFinder { + readonly ModuleDef module; + + /// + /// Constructor + /// + /// The module to search first + public CAAssemblyRefFinder(ModuleDef module) { + this.module = module; + } + + /// + public AssemblyRef FindAssemblyRef(TypeRef nonNestedTypeRef) { + var modAsm = module.Assembly; + if (modAsm != null) { + var type = modAsm.Find(nonNestedTypeRef); + if (type != null) + return module.UpdateRowId(new AssemblyRefUser(modAsm)); + } + else if (module.Find(nonNestedTypeRef) != null) + return AssemblyRef.CurrentAssembly; + + var corLibAsm = module.Context.AssemblyResolver.Resolve(module.CorLibTypes.AssemblyRef, module); + if (corLibAsm != null) { + var type = corLibAsm.Find(nonNestedTypeRef); + if (type != null) + return module.CorLibTypes.AssemblyRef; + } + + if (modAsm != null) + return module.UpdateRowId(new AssemblyRefUser(modAsm)); + return AssemblyRef.CurrentAssembly; + } + } + + /// + /// Thrown by CustomAttributeReader when it fails to parse a custom attribute blob + /// + [Serializable] + public class CABlobParserException : Exception { + /// + /// Default constructor + /// + public CABlobParserException() { + } + + /// + /// Constructor + /// + /// Error message + public CABlobParserException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Error message + /// Other exception + public CABlobParserException(string message, Exception innerException) + : base(message, innerException) { + } + } + + /// + /// Reads custom attributes from the #Blob stream + /// + public struct CustomAttributeReader : IDisposable { + readonly ModuleDef module; + readonly IBinaryReader reader; + readonly GenericParamContext gpContext; + GenericArguments genericArguments; + RecursionCounter recursionCounter; + bool verifyReadAllBytes; + readonly bool ownReader; + + /// + /// Reads a custom attribute + /// + /// Reader module + /// Custom attribute constructor + /// Offset of custom attribute in the #Blob stream + /// A new instance + public static CustomAttribute Read(ModuleDefMD readerModule, ICustomAttributeType ctor, uint offset) { + return Read(readerModule, ctor, offset, new GenericParamContext()); + } + + /// + /// Reads a custom attribute + /// + /// Reader module + /// Custom attribute constructor + /// Offset of custom attribute in the #Blob stream + /// Generic parameter context + /// A new instance + public static CustomAttribute Read(ModuleDefMD readerModule, ICustomAttributeType ctor, uint offset, GenericParamContext gpContext) { + using (var reader = new CustomAttributeReader(readerModule, offset, gpContext)) { + try { + if (ctor == null) + return reader.CreateRaw(ctor); + return reader.Read(ctor); + } + catch (CABlobParserException) { + return reader.CreateRaw(ctor); + } + catch (IOException) { + return reader.CreateRaw(ctor); + } + } + } + + CustomAttribute CreateRaw(ICustomAttributeType ctor) { + return new CustomAttribute(ctor, GetRawBlob()); + } + + /// + /// Reads a custom attribute + /// + /// Owner module + /// CA blob + /// Custom attribute constructor + /// A new instance + public static CustomAttribute Read(ModuleDef module, byte[] caBlob, ICustomAttributeType ctor) { + return Read(module, MemoryImageStream.Create(caBlob), ctor, new GenericParamContext()); + } + + /// + /// Reads a custom attribute + /// + /// Owner module + /// A stream positioned at the the first byte of the CA blob + /// Custom attribute constructor + /// A new instance + public static CustomAttribute Read(ModuleDef module, IBinaryReader stream, ICustomAttributeType ctor) { + return Read(module, stream, ctor, new GenericParamContext()); + } + + /// + /// Reads a custom attribute + /// + /// Owner module + /// CA blob + /// Custom attribute constructor + /// Generic parameter context + /// A new instance + public static CustomAttribute Read(ModuleDef module, byte[] caBlob, ICustomAttributeType ctor, GenericParamContext gpContext) { + return Read(module, MemoryImageStream.Create(caBlob), ctor, gpContext); + } + + /// + /// Reads a custom attribute + /// + /// Owner module + /// A stream positioned at the the first byte of the CA blob + /// Custom attribute constructor + /// Generic parameter context + /// A new instance + public static CustomAttribute Read(ModuleDef module, IBinaryReader stream, ICustomAttributeType ctor, GenericParamContext gpContext) { + using (var reader = new CustomAttributeReader(module, stream, gpContext)) { + try { + if (stream == null || ctor == null) + return reader.CreateRaw(ctor); + return reader.Read(ctor); + } + catch (CABlobParserException) { + return reader.CreateRaw(ctor); + } + catch (IOException) { + return reader.CreateRaw(ctor); + } + } + } + + /// + /// Reads custom attribute named arguments + /// + /// Owner module + /// A stream positioned at the the first byte of the CA blob + /// Number of named arguments to read from + /// Generic parameter context + /// A list of s or null if some error + /// occurred. + internal static List ReadNamedArguments(ModuleDef module, IBinaryReader stream, int numNamedArgs, GenericParamContext gpContext) { + try { + using (var reader = new CustomAttributeReader(module, stream, false, gpContext)) + return reader.ReadNamedArguments(numNamedArgs); + } + catch (CABlobParserException) { + return null; + } + catch (IOException) { + return null; + } + } + + CustomAttributeReader(ModuleDefMD readerModule, uint offset, GenericParamContext gpContext) { + this.module = readerModule; + this.reader = readerModule.BlobStream.CreateStream(offset); + this.ownReader = true; + this.genericArguments = null; + this.recursionCounter = new RecursionCounter(); + this.verifyReadAllBytes = false; + this.gpContext = gpContext; + } + + CustomAttributeReader(ModuleDef module, IBinaryReader reader, GenericParamContext gpContext) { + this.module = module; + this.reader = reader; + this.ownReader = false; + this.genericArguments = null; + this.recursionCounter = new RecursionCounter(); + this.verifyReadAllBytes = false; + this.gpContext = gpContext; + } + + CustomAttributeReader(ModuleDef module, IBinaryReader reader, bool ownRerader, GenericParamContext gpContext) { + this.module = module; + this.reader = reader; + this.ownReader = ownRerader; + this.genericArguments = null; + this.recursionCounter = new RecursionCounter(); + this.verifyReadAllBytes = false; + this.gpContext = gpContext; + } + + byte[] GetRawBlob() { + return reader.ReadAllBytes(); + } + + CustomAttribute Read(ICustomAttributeType ctor) { + var methodSig = ctor == null ? null : ctor.MethodSig; + if (methodSig == null) + throw new CABlobParserException("ctor is null or not a method"); + + var mrCtor = ctor as MemberRef; + if (mrCtor != null) { + var owner = mrCtor.Class as TypeSpec; + if (owner != null) { + var gis = owner.TypeSig as GenericInstSig; + if (gis != null) { + genericArguments = new GenericArguments(); + genericArguments.PushTypeArgs(gis.GenericArguments); + } + } + } + + bool isEmpty = methodSig.Params.Count == 0 && reader.Position == reader.Length; + if (!isEmpty && reader.ReadUInt16() != 1) + throw new CABlobParserException("Invalid CA blob prolog"); + + var ctorArgs = new List(methodSig.Params.Count); + foreach (var arg in methodSig.Params.GetSafeEnumerable()) + ctorArgs.Add(ReadFixedArg(FixTypeSig(arg))); + + // Some tools don't write the next ushort if there are no named arguments. + int numNamedArgs = reader.Position == reader.Length ? 0 : reader.ReadUInt16(); + var namedArgs = ReadNamedArguments(numNamedArgs); + + // verifyReadAllBytes will be set when we guess the underlying type of an enum. + // To make sure we guessed right, verify that we read all bytes. + if (verifyReadAllBytes && reader.Position != reader.Length) + throw new CABlobParserException("Not all CA blob bytes were read"); + + return new CustomAttribute(ctor, ctorArgs, namedArgs, CloneBlobReader(reader)); + } + + static IBinaryReader CloneBlobReader(IBinaryReader reader) { + if (reader == null) + return null; + var imgStream = reader as IImageStream; + if (imgStream != null) + return imgStream.Clone(); + return MemoryImageStream.Create(reader.ReadAllBytes()); + } + + List ReadNamedArguments(int numNamedArgs) { + var namedArgs = new List(numNamedArgs); + for (int i = 0; i < numNamedArgs; i++) { + if (reader.Position == reader.Length) + break; + namedArgs.Add(ReadNamedArgument()); + } + return namedArgs; + } + + TypeSig FixTypeSig(TypeSig type) { + return SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers(); + } + + TypeSig SubstituteGenericParameter(TypeSig type) { + if (genericArguments == null) + return type; + return genericArguments.Resolve(type); + } + + CAArgument ReadFixedArg(TypeSig argType) { + if (!recursionCounter.Increment()) + throw new CABlobParserException("Too much recursion"); + if (argType == null) + throw new CABlobParserException("null argType"); + CAArgument result; + + var arrayType = argType as SZArraySig; + if (arrayType != null) + result = ReadArrayArgument(arrayType); + else + result = ReadElem(argType); + + recursionCounter.Decrement(); + return result; + } + + CAArgument ReadElem(TypeSig argType) { + if (argType == null) + throw new CABlobParserException("null argType"); + TypeSig realArgType; + var value = ReadValue((SerializationType)argType.ElementType, argType, out realArgType); + if (realArgType == null) + throw new CABlobParserException("Invalid arg type"); + + // One example when this is true is when prop/field type is object and + // value type is string[] + if (value is CAArgument) + return (CAArgument)value; + + return new CAArgument(realArgType, value); + } + + object ReadValue(SerializationType etype, TypeSig argType, out TypeSig realArgType) { + if (!recursionCounter.Increment()) + throw new CABlobParserException("Too much recursion"); + + object result; + switch (etype) { + case SerializationType.Boolean: + realArgType = module.CorLibTypes.Boolean; + result = reader.ReadByte() != 0; + break; + + case SerializationType.Char: + realArgType = module.CorLibTypes.Char; + result = (char)reader.ReadUInt16(); + break; + + case SerializationType.I1: + realArgType = module.CorLibTypes.SByte; + result = reader.ReadSByte(); + break; + + case SerializationType.U1: + realArgType = module.CorLibTypes.Byte; + result = reader.ReadByte(); + break; + + case SerializationType.I2: + realArgType = module.CorLibTypes.Int16; + result = reader.ReadInt16(); + break; + + case SerializationType.U2: + realArgType = module.CorLibTypes.UInt16; + result = reader.ReadUInt16(); + break; + + case SerializationType.I4: + realArgType = module.CorLibTypes.Int32; + result = reader.ReadInt32(); + break; + + case SerializationType.U4: + realArgType = module.CorLibTypes.UInt32; + result = reader.ReadUInt32(); + break; + + case SerializationType.I8: + realArgType = module.CorLibTypes.Int64; + result = reader.ReadInt64(); + break; + + case SerializationType.U8: + realArgType = module.CorLibTypes.UInt64; + result = reader.ReadUInt64(); + break; + + case SerializationType.R4: + realArgType = module.CorLibTypes.Single; + result = reader.ReadSingle(); + break; + + case SerializationType.R8: + realArgType = module.CorLibTypes.Double; + result = reader.ReadDouble(); + break; + + case SerializationType.String: + realArgType = module.CorLibTypes.String; + result = ReadUTF8String(); + break; + + // It's ET.ValueType if it's eg. a ctor enum arg type + case (SerializationType)ElementType.ValueType: + if (argType == null) + throw new CABlobParserException("Invalid element type"); + realArgType = argType; + result = ReadEnumValue(GetEnumUnderlyingType(argType)); + break; + + // It's ET.Object if it's a ctor object arg type + case (SerializationType)ElementType.Object: + case SerializationType.TaggedObject: + realArgType = ReadFieldOrPropType(); + var arraySig = realArgType as SZArraySig; + if (arraySig != null) + result = ReadArrayArgument(arraySig); + else { + TypeSig tmpType; + result = ReadValue((SerializationType)realArgType.ElementType, realArgType, out tmpType); + } + break; + + // It's ET.Class if it's eg. a ctor System.Type arg type + case (SerializationType)ElementType.Class: + var tdr = argType as TypeDefOrRefSig; + if (tdr != null && tdr.DefinitionAssembly.IsCorLib() && tdr.Namespace == "System") { + if (tdr.TypeName == "Type") { + result = ReadValue(SerializationType.Type, tdr, out realArgType); + break; + } + if (tdr.TypeName == "String") { + result = ReadValue(SerializationType.String, tdr, out realArgType); + break; + } + if (tdr.TypeName == "Object") { + result = ReadValue(SerializationType.TaggedObject, tdr, out realArgType); + break; + } + } + + // Assume it's an enum that couldn't be resolved + realArgType = argType; + result = ReadEnumValue(null); + break; + + case SerializationType.Type: + realArgType = argType; + result = ReadType(true); + break; + + case SerializationType.Enum: + realArgType = ReadType(false); + result = ReadEnumValue(GetEnumUnderlyingType(realArgType)); + break; + + default: + throw new CABlobParserException("Invalid element type"); + } + + recursionCounter.Decrement(); + return result; + } + + object ReadEnumValue(TypeSig underlyingType) { + if (underlyingType != null) { + if (underlyingType.ElementType < ElementType.Boolean || underlyingType.ElementType > ElementType.U8) + throw new CABlobParserException("Invalid enum underlying type"); + TypeSig realArgType; + return ReadValue((SerializationType)underlyingType.ElementType, underlyingType, out realArgType); + } + + // We couldn't resolve the type ref. It should be an enum, but we don't know for sure. + // Most enums use Int32 as the underlying type. Assume that's true also in this case. + // Since we're guessing, verify that we've read all CA blob bytes. If we haven't, then + // we probably guessed wrong. + verifyReadAllBytes = true; + return reader.ReadInt32(); + } + + TypeSig ReadType(bool canReturnNull) { + var name = ReadUTF8String(); + if (canReturnNull && (object)name == null) + return null; + var asmRefFinder = new CAAssemblyRefFinder(module); + var type = TypeNameParser.ParseAsTypeSigReflection(module, UTF8String.ToSystemStringOrEmpty(name), asmRefFinder, gpContext); + if (type == null) + throw new CABlobParserException("Could not parse type"); + return type; + } + + /// + /// Gets the enum's underlying type + /// + /// An enum type + /// The underlying type or null if we couldn't resolve the type ref + /// If is not an enum or null + static TypeSig GetEnumUnderlyingType(TypeSig type) { + if (type == null) + throw new CABlobParserException("null enum type"); + var td = GetTypeDef(type); + if (td == null) + return null; + if (!td.IsEnum) + throw new CABlobParserException("Not an enum"); + return td.GetEnumUnderlyingType().RemoveModifiers(); + } + + /// + /// Converts to a , possibly resolving + /// a + /// + /// The type + /// A or null if we couldn't resolve the + /// or if is a type spec + static TypeDef GetTypeDef(TypeSig type) { + var tdr = type as TypeDefOrRefSig; + if (tdr != null) { + var td = tdr.TypeDef; + if (td != null) + return td; + + var tr = tdr.TypeRef; + if (tr != null) + return tr.Resolve(); + } + + return null; + } + + CAArgument ReadArrayArgument(SZArraySig arrayType) { + if (!recursionCounter.Increment()) + throw new CABlobParserException("Too much recursion"); + var arg = new CAArgument(arrayType); + + int arrayCount = reader.ReadInt32(); + if (arrayCount == -1) { // -1 if it's null + } + else if (arrayCount < 0) + throw new CABlobParserException("Array is too big"); + else { + var array = ThreadSafeListCreator.Create(arrayCount); + arg.Value = array; + for (int i = 0; i < arrayCount; i++) + array.Add(ReadFixedArg(FixTypeSig(arrayType.Next))); + } + + recursionCounter.Decrement(); + return arg; + } + + CANamedArgument ReadNamedArgument() { + bool isField; + switch ((SerializationType)reader.ReadByte()) { + case SerializationType.Property:isField = false; break; + case SerializationType.Field: isField = true; break; + default: throw new CABlobParserException("Named argument is not a field/property"); + } + + TypeSig fieldPropType = ReadFieldOrPropType(); + var name = ReadUTF8String(); + var argument = ReadFixedArg(fieldPropType); + + return new CANamedArgument(isField, fieldPropType, name, argument); + } + + TypeSig ReadFieldOrPropType() { + if (!recursionCounter.Increment()) + throw new CABlobParserException("Too much recursion"); + TypeSig result; + switch ((SerializationType)reader.ReadByte()) { + case SerializationType.Boolean: result = module.CorLibTypes.Boolean; break; + case SerializationType.Char: result = module.CorLibTypes.Char; break; + case SerializationType.I1: result = module.CorLibTypes.SByte; break; + case SerializationType.U1: result = module.CorLibTypes.Byte; break; + case SerializationType.I2: result = module.CorLibTypes.Int16; break; + case SerializationType.U2: result = module.CorLibTypes.UInt16; break; + case SerializationType.I4: result = module.CorLibTypes.Int32; break; + case SerializationType.U4: result = module.CorLibTypes.UInt32; break; + case SerializationType.I8: result = module.CorLibTypes.Int64; break; + case SerializationType.U8: result = module.CorLibTypes.UInt64; break; + case SerializationType.R4: result = module.CorLibTypes.Single; break; + case SerializationType.R8: result = module.CorLibTypes.Double; break; + case SerializationType.String: result = module.CorLibTypes.String; break; + case SerializationType.SZArray: result = new SZArraySig(ReadFieldOrPropType()); break; + case SerializationType.Type: result = new ClassSig(module.CorLibTypes.GetTypeRef("System", "Type")); break; + case SerializationType.TaggedObject: result = module.CorLibTypes.Object; break; + case SerializationType.Enum: result = ReadType(false); break; + default: throw new CABlobParserException("Invalid type"); + } + recursionCounter.Decrement(); + return result; + } + + UTF8String ReadUTF8String() { + if (reader.ReadByte() == 0xFF) + return null; + reader.Position--; + uint len; + if (!reader.ReadCompressedUInt32(out len)) + throw new CABlobParserException("Could not read compressed UInt32"); + if (len == 0) + return UTF8String.Empty; + return new UTF8String(reader.ReadBytes((int)len)); + } + + /// + public void Dispose() { + if (ownReader && reader != null) + reader.Dispose(); + } + } +} diff --git a/dnlib/DotNet/DeclSecurity.cs b/dnlib/DotNet/DeclSecurity.cs new file mode 100644 index 0000000..9053870 --- /dev/null +++ b/dnlib/DotNet/DeclSecurity.cs @@ -0,0 +1,219 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the DeclSecurity table + /// + [DebuggerDisplay("{Action} Count={SecurityAttributes.Count}")] + public abstract class DeclSecurity : IHasCustomAttribute { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.DeclSecurity, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 8; } + } + + /// + /// From column DeclSecurity.Action + /// + public SecurityAction Action { + get { return action; } + set { action = value; } + } + /// + protected SecurityAction action; + + /// + /// From column DeclSecurity.PermissionSet + /// + public ThreadSafe.IList SecurityAttributes { + get { + if (securityAttributes == null) + InitializeSecurityAttributes(); + return securityAttributes; + } + } + /// + protected ThreadSafe.IList securityAttributes; + /// Initializes + protected virtual void InitializeSecurityAttributes() { + Interlocked.CompareExchange(ref securityAttributes, ThreadSafeListCreator.Create(), null); + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if is not empty + /// + public bool HasSecurityAttributes { + get { return SecurityAttributes.Count > 0; } + } + + /// + /// Gets the blob data or null if there's none + /// + /// Blob data or null + public abstract byte[] GetBlob(); + + /// + /// Returns the .NET 1.x XML string or null if it's not a .NET 1.x format + /// + /// + public string GetNet1xXmlString() { + return GetNet1xXmlStringInternal(SecurityAttributes); + } + + internal static string GetNet1xXmlStringInternal(IList secAttrs) { + if (secAttrs == null || secAttrs.Count != 1) + return null; + var sa = secAttrs[0]; + if (sa == null || sa.TypeFullName != "System.Security.Permissions.PermissionSetAttribute") + return null; + if (sa.NamedArguments.Count != 1) + return null; + var na = sa.NamedArguments[0]; + if (na == null || !na.IsProperty || na.Name != "XML") + return null; + if (na.ArgumentType.GetElementType() != ElementType.String) + return null; + var arg = na.Argument; + if (arg.Type.GetElementType() != ElementType.String) + return null; + var utf8 = arg.Value as UTF8String; + if ((object)utf8 != null) + return utf8; + var s = arg.Value as string; + if (s != null) + return s; + return null; + } + } + + /// + /// A DeclSecurity row created by the user and not present in the original .NET file + /// + public class DeclSecurityUser : DeclSecurity { + /// + /// Default constructor + /// + public DeclSecurityUser() { + } + + /// + /// Constructor + /// + /// The security action + /// The security attributes (now owned by this) + public DeclSecurityUser(SecurityAction action, IList securityAttrs) { + this.action = action; + this.securityAttributes = ThreadSafeListCreator.MakeThreadSafe(securityAttrs); + } + + /// + public override byte[] GetBlob() { + return null; + } + } + + /// + /// Created from a row in the DeclSecurity table + /// + sealed class DeclSecurityMD : DeclSecurity, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + readonly uint permissionSet; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeSecurityAttributes() { + var gpContext = new GenericParamContext(); + var tmp = DeclSecurityReader.Read(readerModule, permissionSet, gpContext); + Interlocked.CompareExchange(ref securityAttributes, tmp, null); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.DeclSecurity, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this DeclSecurity row + /// Row ID + /// If is null + /// If is invalid + public DeclSecurityMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.DeclSecurityTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("DeclSecurity rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.permissionSet = readerModule.TablesStream.ReadDeclSecurityRow(origRid, out this.action); + } + + /// + public override byte[] GetBlob() { + return readerModule.BlobStream.Read(permissionSet); + } + } +} diff --git a/dnlib/DotNet/DeclSecurityReader.cs b/dnlib/DotNet/DeclSecurityReader.cs new file mode 100644 index 0000000..6b9c975 --- /dev/null +++ b/dnlib/DotNet/DeclSecurityReader.cs @@ -0,0 +1,152 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Text; +using dnlib.IO; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// Reads DeclSecurity blobs + /// + public struct DeclSecurityReader : IDisposable { + readonly IBinaryReader reader; + readonly ModuleDef module; + readonly GenericParamContext gpContext; + + /// + /// Reads a DeclSecurity blob + /// + /// Module that will own the returned list + /// #Blob offset of DeclSecurity signature + /// A list of s + public static ThreadSafe.IList Read(ModuleDefMD module, uint sig) { + return Read(module, module.BlobStream.CreateStream(sig), new GenericParamContext()); + } + + /// + /// Reads a DeclSecurity blob + /// + /// Module that will own the returned list + /// #Blob offset of DeclSecurity signature + /// Generic parameter context + /// A list of s + public static ThreadSafe.IList Read(ModuleDefMD module, uint sig, GenericParamContext gpContext) { + return Read(module, module.BlobStream.CreateStream(sig), gpContext); + } + + /// + /// Reads a DeclSecurity blob + /// + /// Module that will own the returned list + /// DeclSecurity blob + /// A list of s + public static ThreadSafe.IList Read(ModuleDef module, byte[] blob) { + return Read(module, MemoryImageStream.Create(blob), new GenericParamContext()); + } + + /// + /// Reads a DeclSecurity blob + /// + /// Module that will own the returned list + /// DeclSecurity blob + /// Generic parameter context/// + /// A list of s + public static ThreadSafe.IList Read(ModuleDef module, byte[] blob, GenericParamContext gpContext) { + return Read(module, MemoryImageStream.Create(blob), gpContext); + } + + /// + /// Reads a DeclSecurity blob + /// + /// Module that will own the returned list + /// DeclSecurity stream that will be owned by us + /// A list of s + public static ThreadSafe.IList Read(ModuleDef module, IBinaryReader signature) { + return Read(module, signature, new GenericParamContext()); + } + + /// + /// Reads a DeclSecurity blob + /// + /// Module that will own the returned list + /// DeclSecurity stream that will be owned by us + /// Generic parameter context + /// A list of s + public static ThreadSafe.IList Read(ModuleDef module, IBinaryReader signature, GenericParamContext gpContext) { + using (var reader = new DeclSecurityReader(module, signature, gpContext)) + return reader.Read(); + } + + DeclSecurityReader(ModuleDef module, IBinaryReader reader, GenericParamContext gpContext) { + this.reader = reader; + this.module = module; + this.gpContext = gpContext; + } + + ThreadSafe.IList Read() { + try { + if (reader.Position >= reader.Length) + return ThreadSafeListCreator.Create(); + + if (reader.ReadByte() == '.') + return ReadBinaryFormat(); + reader.Position--; + return ReadXmlFormat(); + } + catch { + return ThreadSafeListCreator.Create(); + } + } + + /// + /// Reads the new (.NET 2.0+) DeclSecurity blob format + /// + /// + ThreadSafe.IList ReadBinaryFormat() { + int numAttrs = (int)reader.ReadCompressedUInt32(); + var list = ThreadSafeListCreator.Create(numAttrs); + + for (int i = 0; i < numAttrs; i++) { + var name = ReadUTF8String(); + // Use CA search rules. Some tools don't write the fully qualified name. + var attrRef = TypeNameParser.ParseReflection(module, UTF8String.ToSystemStringOrEmpty(name), new CAAssemblyRefFinder(module), gpContext); + int blobLength = (int)reader.ReadCompressedUInt32(); + int numNamedArgs = (int)reader.ReadCompressedUInt32(); + var namedArgs = CustomAttributeReader.ReadNamedArguments(module, reader, numNamedArgs, gpContext); + if (namedArgs == null) + throw new ApplicationException("Could not read named arguments"); + list.Add(new SecurityAttribute(attrRef, namedArgs)); + } + + return list; + } + + /// + /// Reads the old (.NET 1.x) DeclSecurity blob format + /// + /// + ThreadSafe.IList ReadXmlFormat() { + var xml = Encoding.Unicode.GetString(reader.ReadAllBytes()); + var sa = SecurityAttribute.CreateFromXml(module, xml); + return ThreadSafeListCreator.Create(sa); + } + + UTF8String ReadUTF8String() { + uint len = reader.ReadCompressedUInt32(); + return len == 0 ? UTF8String.Empty : new UTF8String(reader.ReadBytes((int)len)); + } + + /// + public void Dispose() { + if (reader != null) + reader.Dispose(); + } + } +} diff --git a/dnlib/DotNet/ElementType.cs b/dnlib/DotNet/ElementType.cs new file mode 100644 index 0000000..341ca74 --- /dev/null +++ b/dnlib/DotNet/ElementType.cs @@ -0,0 +1,218 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// See CorHdr.h/CorElementType + /// + public enum ElementType : byte { + /// + End = 0x00, + /// System.Void + Void = 0x01, + /// System.Boolean + Boolean = 0x02, + /// System.Char + Char = 0x03, + /// System.SByte + I1 = 0x04, + /// System.Byte + U1 = 0x05, + /// System.Int16 + I2 = 0x06, + /// System.UInt16 + U2 = 0x07, + /// System.Int32 + I4 = 0x08, + /// System.UInt32 + U4 = 0x09, + /// System.Int64 + I8 = 0x0A, + /// System.UInt64 + U8 = 0x0B, + /// System.Single + R4 = 0x0C, + /// System.Double + R8 = 0x0D, + /// System.String + String = 0x0E, + /// Pointer type (*) + Ptr = 0x0F, + /// ByRef type (&) + ByRef = 0x10, + /// Value type + ValueType = 0x11, + /// Reference type + Class = 0x12, + /// Type generic parameter + Var = 0x13, + /// Multidimensional array ([*], [,], [,,], ...) + Array = 0x14, + /// Generic instance type + GenericInst = 0x15, + /// Typed byref + TypedByRef = 0x16, + /// Value array (don't use) + ValueArray = 0x17, + /// System.IntPtr + I = 0x18, + /// System.UIntPtr + U = 0x19, + /// native real (don't use) + R = 0x1A, + /// Function pointer + FnPtr = 0x1B, + /// System.Object + Object = 0x1C, + /// Single-dimension, zero lower bound array ([]) + SZArray = 0x1D, + /// Method generic parameter + MVar = 0x1E, + /// Required C modifier + CModReqd = 0x1F, + /// Optional C modifier + CModOpt = 0x20, + /// Used internally by the CLR (don't use) + Internal = 0x21, + /// Module (don't use) + Module = 0x3F, + /// Sentinel (method sigs only) + Sentinel = 0x41, + /// Pinned type (locals only) + Pinned = 0x45, + } + + public static partial class Extensions { + /// + /// Returns true if it's an integer or a floating point type + /// + /// Element type + /// + public static bool IsPrimitive(this ElementType etype) { + switch (etype) { + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.I: + case ElementType.U: + case ElementType.R: + return true; + + default: + return false; + } + } + + /// + /// Returns the size of the element type in bytes or -1 if it's unknown + /// + /// Element type + /// + public static int GetPrimitiveSize(this ElementType etype) { + return GetPrimitiveSize(etype, -1); + } + + /// + /// Returns the size of the element type in bytes or -1 if it's unknown + /// + /// Element type + /// Size of a pointer + /// + public static int GetPrimitiveSize(this ElementType etype, int ptrSize) { + switch (etype) { + case ElementType.Boolean: + case ElementType.I1: + case ElementType.U1: + return 1; + + case ElementType.Char: + case ElementType.I2: + case ElementType.U2: + return 2; + + case ElementType.I4: + case ElementType.U4: + case ElementType.R4: + return 4; + + case ElementType.I8: + case ElementType.U8: + case ElementType.R8: + return 8; + + case ElementType.Ptr: + case ElementType.FnPtr: + case ElementType.I: + case ElementType.U: + return ptrSize; + + default: + return -1; + } + } + + /// + /// Checks whether it's a value type + /// + /// this + /// true if it's a value type, false if it's not a value type or + /// if we couldn't determine whether it's a value type. Eg., it could be a generic + /// instance type. + public static bool IsValueType(this ElementType etype) { + switch (etype) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.ValueType: + case ElementType.TypedByRef: + case ElementType.ValueArray: + case ElementType.I: + case ElementType.U: + case ElementType.R: + return true; + + case ElementType.GenericInst: + // We don't have enough info to determine whether this is a value type + return false; + + case ElementType.End: + case ElementType.String: + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Class: + case ElementType.Var: + case ElementType.Array: + case ElementType.FnPtr: + case ElementType.Object: + case ElementType.SZArray: + case ElementType.MVar: + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Internal: + case ElementType.Module: + case ElementType.Sentinel: + case ElementType.Pinned: + default: + return false; + } + } + } +} diff --git a/dnlib/DotNet/Emit/Code.cs b/dnlib/DotNet/Emit/Code.cs new file mode 100644 index 0000000..59a6fed --- /dev/null +++ b/dnlib/DotNet/Emit/Code.cs @@ -0,0 +1,262 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// A CIL opcode. If the high byte is 0 or if it's , it's a 1-byte opcode, + /// else it's a two-byte opcode and the highest byte is the first byte of the opcode. + /// + public enum Code : ushort { +#pragma warning disable 1591 // disable XML doc warning + UNKNOWN1 = 0x0100, + UNKNOWN2 = 0x0101, + Add = 0x0058, + Add_Ovf = 0x00D6, + Add_Ovf_Un = 0x00D7, + And = 0x005F, + Arglist = 0xFE00, + Beq = 0x003B, + Beq_S = 0x002E, + Bge = 0x003C, + Bge_S = 0x002F, + Bge_Un = 0x0041, + Bge_Un_S = 0x0034, + Bgt = 0x003D, + Bgt_S = 0x0030, + Bgt_Un = 0x0042, + Bgt_Un_S = 0x0035, + Ble = 0x003E, + Ble_S = 0x0031, + Ble_Un = 0x0043, + Ble_Un_S = 0x0036, + Blt = 0x003F, + Blt_S = 0x0032, + Blt_Un = 0x0044, + Blt_Un_S = 0x0037, + Bne_Un = 0x0040, + Bne_Un_S = 0x0033, + Box = 0x008C, + Br = 0x0038, + Br_S = 0x002B, + Break = 0x0001, + Brfalse = 0x0039, + Brfalse_S = 0x002C, + Brtrue = 0x003A, + Brtrue_S = 0x002D, + Call = 0x0028, + Calli = 0x0029, + Callvirt = 0x006F, + Castclass = 0x0074, + Ceq = 0xFE01, + Cgt = 0xFE02, + Cgt_Un = 0xFE03, + Ckfinite = 0x00C3, + Clt = 0xFE04, + Clt_Un = 0xFE05, + Constrained = 0xFE16, + Conv_I = 0x00D3, + Conv_I1 = 0x0067, + Conv_I2 = 0x0068, + Conv_I4 = 0x0069, + Conv_I8 = 0x006A, + Conv_Ovf_I = 0x00D4, + Conv_Ovf_I_Un = 0x008A, + Conv_Ovf_I1 = 0x00B3, + Conv_Ovf_I1_Un = 0x0082, + Conv_Ovf_I2 = 0x00B5, + Conv_Ovf_I2_Un = 0x0083, + Conv_Ovf_I4 = 0x00B7, + Conv_Ovf_I4_Un = 0x0084, + Conv_Ovf_I8 = 0x00B9, + Conv_Ovf_I8_Un = 0x0085, + Conv_Ovf_U = 0x00D5, + Conv_Ovf_U_Un = 0x008B, + Conv_Ovf_U1 = 0x00B4, + Conv_Ovf_U1_Un = 0x0086, + Conv_Ovf_U2 = 0x00B6, + Conv_Ovf_U2_Un = 0x0087, + Conv_Ovf_U4 = 0x00B8, + Conv_Ovf_U4_Un = 0x0088, + Conv_Ovf_U8 = 0x00BA, + Conv_Ovf_U8_Un = 0x0089, + Conv_R_Un = 0x0076, + Conv_R4 = 0x006B, + Conv_R8 = 0x006C, + Conv_U = 0x00E0, + Conv_U1 = 0x00D2, + Conv_U2 = 0x00D1, + Conv_U4 = 0x006D, + Conv_U8 = 0x006E, + Cpblk = 0xFE17, + Cpobj = 0x0070, + Div = 0x005B, + Div_Un = 0x005C, + Dup = 0x0025, + Endfilter = 0xFE11, + Endfinally = 0x00DC, + Initblk = 0xFE18, + Initobj = 0xFE15, + Isinst = 0x0075, + Jmp = 0x0027, + Ldarg = 0xFE09, + Ldarg_0 = 0x0002, + Ldarg_1 = 0x0003, + Ldarg_2 = 0x0004, + Ldarg_3 = 0x0005, + Ldarg_S = 0x000E, + Ldarga = 0xFE0A, + Ldarga_S = 0x000F, + Ldc_I4 = 0x0020, + Ldc_I4_0 = 0x0016, + Ldc_I4_1 = 0x0017, + Ldc_I4_2 = 0x0018, + Ldc_I4_3 = 0x0019, + Ldc_I4_4 = 0x001A, + Ldc_I4_5 = 0x001B, + Ldc_I4_6 = 0x001C, + Ldc_I4_7 = 0x001D, + Ldc_I4_8 = 0x001E, + Ldc_I4_M1 = 0x0015, + Ldc_I4_S = 0x001F, + Ldc_I8 = 0x0021, + Ldc_R4 = 0x0022, + Ldc_R8 = 0x0023, + Ldelem = 0x00A3, + Ldelem_I = 0x0097, + Ldelem_I1 = 0x0090, + Ldelem_I2 = 0x0092, + Ldelem_I4 = 0x0094, + Ldelem_I8 = 0x0096, + Ldelem_R4 = 0x0098, + Ldelem_R8 = 0x0099, + Ldelem_Ref = 0x009A, + Ldelem_U1 = 0x0091, + Ldelem_U2 = 0x0093, + Ldelem_U4 = 0x0095, + Ldelema = 0x008F, + Ldfld = 0x007B, + Ldflda = 0x007C, + Ldftn = 0xFE06, + Ldind_I = 0x004D, + Ldind_I1 = 0x0046, + Ldind_I2 = 0x0048, + Ldind_I4 = 0x004A, + Ldind_I8 = 0x004C, + Ldind_R4 = 0x004E, + Ldind_R8 = 0x004F, + Ldind_Ref = 0x0050, + Ldind_U1 = 0x0047, + Ldind_U2 = 0x0049, + Ldind_U4 = 0x004B, + Ldlen = 0x008E, + Ldloc = 0xFE0C, + Ldloc_0 = 0x0006, + Ldloc_1 = 0x0007, + Ldloc_2 = 0x0008, + Ldloc_3 = 0x0009, + Ldloc_S = 0x0011, + Ldloca = 0xFE0D, + Ldloca_S = 0x0012, + Ldnull = 0x0014, + Ldobj = 0x0071, + Ldsfld = 0x007E, + Ldsflda = 0x007F, + Ldstr = 0x0072, + Ldtoken = 0x00D0, + Ldvirtftn = 0xFE07, + Leave = 0x00DD, + Leave_S = 0x00DE, + Localloc = 0xFE0F, + Mkrefany = 0x00C6, + Mul = 0x005A, + Mul_Ovf = 0x00D8, + Mul_Ovf_Un = 0x00D9, + Neg = 0x0065, + Newarr = 0x008D, + Newobj = 0x0073, +// No = 0xFE19, // Not supported by MS' CLI and must be parsed as an opcode without an operand + Nop = 0x0000, + Not = 0x0066, + Or = 0x0060, + Pop = 0x0026, + Prefix1 = 0x00FE, + Prefix2 = 0x00FD, + Prefix3 = 0x00FC, + Prefix4 = 0x00FB, + Prefix5 = 0x00FA, + Prefix6 = 0x00F9, + Prefix7 = 0x00F8, + Prefixref = 0x00FF, + Readonly = 0xFE1E, + Refanytype = 0xFE1D, + Refanyval = 0x00C2, + Rem = 0x005D, + Rem_Un = 0x005E, + Ret = 0x002A, + Rethrow = 0xFE1A, + Shl = 0x0062, + Shr = 0x0063, + Shr_Un = 0x0064, + Sizeof = 0xFE1C, + Starg = 0xFE0B, + Starg_S = 0x0010, + Stelem = 0x00A4, + Stelem_I = 0x009B, + Stelem_I1 = 0x009C, + Stelem_I2 = 0x009D, + Stelem_I4 = 0x009E, + Stelem_I8 = 0x009F, + Stelem_R4 = 0x00A0, + Stelem_R8 = 0x00A1, + Stelem_Ref = 0x00A2, + Stfld = 0x007D, + Stind_I = 0x00DF, + Stind_I1 = 0x0052, + Stind_I2 = 0x0053, + Stind_I4 = 0x0054, + Stind_I8 = 0x0055, + Stind_R4 = 0x0056, + Stind_R8 = 0x0057, + Stind_Ref = 0x0051, + Stloc = 0xFE0E, + Stloc_0 = 0x000A, + Stloc_1 = 0x000B, + Stloc_2 = 0x000C, + Stloc_3 = 0x000D, + Stloc_S = 0x0013, + Stobj = 0x0081, + Stsfld = 0x0080, + Sub = 0x0059, + Sub_Ovf = 0x00DA, + Sub_Ovf_Un = 0x00DB, + Switch = 0x0045, + Tailcall = 0xFE14, + Throw = 0x007A, + Unaligned = 0xFE12, + Unbox = 0x0079, + Unbox_Any = 0x00A5, + Volatile = 0xFE13, + Xor = 0x0061, +#pragma warning restore + } + + public static partial class Extensions { + /// + /// Converts a to an + /// + /// The code + /// A or null if it's invalid + public static OpCode ToOpCode(this Code code) { + int hi = (ushort)code >> 8; + int lo = (byte)code; + if (hi == 0) + return OpCodes.OneByteOpCodes[lo]; + if (hi == 0xFE) + return OpCodes.TwoByteOpCodes[lo]; + if (code == Code.UNKNOWN1) + return OpCodes.UNKNOWN1; + if (code == Code.UNKNOWN2) + return OpCodes.UNKNOWN2; + return null; + } + } +} diff --git a/dnlib/DotNet/Emit/DynamicMethodBodyReader.cs b/dnlib/DotNet/Emit/DynamicMethodBodyReader.cs new file mode 100644 index 0000000..cbe8435 --- /dev/null +++ b/dnlib/DotNet/Emit/DynamicMethodBodyReader.cs @@ -0,0 +1,498 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using SR = System.Reflection; +using System.Reflection.Emit; +using System.IO; +using dnlib.DotNet.MD; +using dnlib.IO; + +namespace dnlib.DotNet.Emit { + /// + /// Reads code from a DynamicMethod + /// + public class DynamicMethodBodyReader : MethodBodyReaderBase, ISignatureReaderHelper { + static readonly ReflectionFieldInfo rtdmOwnerFieldInfo = new ReflectionFieldInfo("m_owner"); + static readonly ReflectionFieldInfo dmResolverFieldInfo = new ReflectionFieldInfo("m_resolver"); + static readonly ReflectionFieldInfo rslvCodeFieldInfo = new ReflectionFieldInfo("m_code"); + static readonly ReflectionFieldInfo rslvDynamicScopeFieldInfo = new ReflectionFieldInfo("m_scope"); + static readonly ReflectionFieldInfo rslvMethodFieldInfo = new ReflectionFieldInfo("m_method"); + static readonly ReflectionFieldInfo rslvLocalsFieldInfo = new ReflectionFieldInfo("m_localSignature"); + static readonly ReflectionFieldInfo rslvMaxStackFieldInfo = new ReflectionFieldInfo("m_stackSize"); + static readonly ReflectionFieldInfo rslvExceptionsFieldInfo = new ReflectionFieldInfo("m_exceptions"); + static readonly ReflectionFieldInfo rslvExceptionHeaderFieldInfo = new ReflectionFieldInfo("m_exceptionHeader"); + static readonly ReflectionFieldInfo scopeTokensFieldInfo = new ReflectionFieldInfo("m_tokens"); + static readonly ReflectionFieldInfo gfiFieldHandleFieldInfo = new ReflectionFieldInfo("m_field", "m_fieldHandle"); + static readonly ReflectionFieldInfo gfiContextFieldInfo = new ReflectionFieldInfo("m_context"); + static readonly ReflectionFieldInfo gmiMethodHandleFieldInfo = new ReflectionFieldInfo("m_method", "m_methodHandle"); + static readonly ReflectionFieldInfo gmiContextFieldInfo = new ReflectionFieldInfo("m_context"); + static readonly ReflectionFieldInfo ehCatchAddrFieldInfo = new ReflectionFieldInfo("m_catchAddr"); + static readonly ReflectionFieldInfo ehCatchClassFieldInfo = new ReflectionFieldInfo("m_catchClass"); + static readonly ReflectionFieldInfo ehCatchEndAddrFieldInfo = new ReflectionFieldInfo("m_catchEndAddr"); + static readonly ReflectionFieldInfo ehCurrentCatchFieldInfo = new ReflectionFieldInfo("m_currentCatch"); + static readonly ReflectionFieldInfo ehTypeFieldInfo = new ReflectionFieldInfo("m_type"); + static readonly ReflectionFieldInfo ehStartAddrFieldInfo = new ReflectionFieldInfo("m_startAddr"); + static readonly ReflectionFieldInfo ehEndAddrFieldInfo = new ReflectionFieldInfo("m_endAddr"); + static readonly ReflectionFieldInfo ehEndFinallyFieldInfo = new ReflectionFieldInfo("m_endFinally"); + static readonly ReflectionFieldInfo vamMethodFieldInfo = new ReflectionFieldInfo("m_method"); + static readonly ReflectionFieldInfo vamDynamicMethodFieldInfo = new ReflectionFieldInfo("m_dynamicMethod"); + + readonly ModuleDef module; + readonly Importer importer; + readonly GenericParamContext gpContext; + readonly MethodDef method; + readonly int codeSize; + readonly int maxStack; + readonly List tokens; + readonly IList ehInfos; + readonly byte[] ehHeader; + + class ReflectionFieldInfo { + SR.FieldInfo fieldInfo; + readonly string fieldName1; + readonly string fieldName2; + + public ReflectionFieldInfo(string fieldName) { + this.fieldName1 = fieldName; + } + + public ReflectionFieldInfo(string fieldName1, string fieldName2) { + this.fieldName1 = fieldName1; + this.fieldName2 = fieldName2; + } + + public object Read(object instance) { + if (fieldInfo == null) + InitializeField(instance.GetType()); + if (fieldInfo == null) + throw new Exception(string.Format("Couldn't find field '{0}' or '{1}'", fieldName1, fieldName2)); + + return fieldInfo.GetValue(instance); + } + + public bool Exists(object instance) { + InitializeField(instance.GetType()); + return fieldInfo != null; + } + + void InitializeField(Type type) { + if (fieldInfo != null) + return; + + var flags = SR.BindingFlags.Instance | SR.BindingFlags.Public | SR.BindingFlags.NonPublic; + fieldInfo = type.GetField(fieldName1, flags); + if (fieldInfo == null && fieldName2 != null) + fieldInfo = type.GetField(fieldName2, flags); + } + } + + /// + /// Constructor + /// + /// Module that will own the method body + /// This can be one of several supported types: the delegate instance + /// created by DynamicMethod.CreateDelegate(), a DynamicMethod instance, a RTDynamicMethod + /// instance or a DynamicResolver instance. + public DynamicMethodBodyReader(ModuleDef module, object obj) + : this(module, obj, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// Module that will own the method body + /// This can be one of several supported types: the delegate instance + /// created by DynamicMethod.CreateDelegate(), a DynamicMethod instance, a RTDynamicMethod + /// instance or a DynamicResolver instance. + /// Generic parameter context + public DynamicMethodBodyReader(ModuleDef module, object obj, GenericParamContext gpContext) { + this.module = module; + this.importer = new Importer(module, ImporterOptions.TryToUseDefs, gpContext); + this.gpContext = gpContext; + + if (obj == null) + throw new ArgumentNullException("obj"); + + var del = obj as Delegate; + if (del != null) { + obj = del.Method; + if (obj == null) + throw new Exception("Delegate.Method == null"); + } + + if (obj.GetType().ToString() == "System.Reflection.Emit.DynamicMethod+RTDynamicMethod") { + obj = rtdmOwnerFieldInfo.Read(obj) as DynamicMethod; + if (obj == null) + throw new Exception("RTDynamicMethod.m_owner is null or invalid"); + } + + if (obj is DynamicMethod) { + obj = dmResolverFieldInfo.Read(obj); + if (obj == null) + throw new Exception("No resolver found"); + } + + if (obj.GetType().ToString() != "System.Reflection.Emit.DynamicResolver") + throw new Exception("Couldn't find DynamicResolver"); + + var code = rslvCodeFieldInfo.Read(obj) as byte[]; + if (code == null) + throw new Exception("No code"); + codeSize = code.Length; + var delMethod = rslvMethodFieldInfo.Read(obj) as SR.MethodBase; + if (delMethod == null) + throw new Exception("No method"); + maxStack = (int)rslvMaxStackFieldInfo.Read(obj); + + var scope = rslvDynamicScopeFieldInfo.Read(obj); + if (scope == null) + throw new Exception("No scope"); + var tokensList = scopeTokensFieldInfo.Read(scope) as System.Collections.IList; + if (tokensList == null) + throw new Exception("No tokens"); + tokens = new List(tokensList.Count); + for (int i = 0; i < tokensList.Count; i++) + tokens.Add(tokensList[i]); + + ehInfos = (IList)rslvExceptionsFieldInfo.Read(obj); + ehHeader = rslvExceptionHeaderFieldInfo.Read(obj) as byte[]; + + UpdateLocals(rslvLocalsFieldInfo.Read(obj) as byte[]); + this.reader = MemoryImageStream.Create(code); + this.method = CreateMethodDef(delMethod); + this.parameters = this.method.Parameters; + } + + class ExceptionInfo { + public int[] CatchAddr; + public Type[] CatchClass; + public int[] CatchEndAddr; + public int CurrentCatch; + public int[] Type; + public int StartAddr; + public int EndAddr; + public int EndFinally; + } + + static List CreateExceptionInfos(IList ehInfos) { + if (ehInfos == null) + return new List(); + + var infos = new List(ehInfos.Count); + + foreach (var ehInfo in ehInfos) { + var eh = new ExceptionInfo { + CatchAddr = (int[])ehCatchAddrFieldInfo.Read(ehInfo), + CatchClass = (Type[])ehCatchClassFieldInfo.Read(ehInfo), + CatchEndAddr = (int[])ehCatchEndAddrFieldInfo.Read(ehInfo), + CurrentCatch = (int)ehCurrentCatchFieldInfo.Read(ehInfo), + Type = (int[])ehTypeFieldInfo.Read(ehInfo), + StartAddr = (int)ehStartAddrFieldInfo.Read(ehInfo), + EndAddr = (int)ehEndAddrFieldInfo.Read(ehInfo), + EndFinally = (int)ehEndFinallyFieldInfo.Read(ehInfo), + }; + infos.Add(eh); + } + + return infos; + } + + void UpdateLocals(byte[] localsSig) { + if (localsSig == null || localsSig.Length == 0) + return; + + var sig = SignatureReader.ReadSig(this, module.CorLibTypes, localsSig, gpContext) as LocalSig; + if (sig == null) + return; + + foreach (var local in sig.Locals) + locals.Add(new Local(local)); + } + + MethodDef CreateMethodDef(SR.MethodBase delMethod) { + bool isStatic = true; + var method = new MethodDefUser(); + + var retType = GetReturnType(delMethod); + var pms = GetParameters(delMethod); + if (isStatic) + method.Signature = MethodSig.CreateStatic(retType, pms.ToArray()); + else + method.Signature = MethodSig.CreateInstance(retType, pms.ToArray()); + + method.Parameters.UpdateParameterTypes(); + method.ImplAttributes = MethodImplAttributes.IL; + method.Attributes = MethodAttributes.PrivateScope; + if (isStatic) + method.Attributes |= MethodAttributes.Static; + + return module.UpdateRowId(method); + } + + TypeSig GetReturnType(SR.MethodBase mb) { + var mi = mb as SR.MethodInfo; + if (mi != null) + return importer.ImportAsTypeSig(mi.ReturnType); + return module.CorLibTypes.Void; + } + + List GetParameters(SR.MethodBase delMethod) { + var pms = new List(); + foreach (var param in delMethod.GetParameters()) + pms.Add(importer.ImportAsTypeSig(param.ParameterType)); + return pms; + } + + /// + /// Reads the code + /// + /// + public bool Read() { + ReadInstructionsNumBytes((uint)codeSize); + CreateExceptionHandlers(); + + return true; + } + + void CreateExceptionHandlers() { + if (ehHeader != null) { + var reader = new BinaryReader(new MemoryStream(ehHeader)); + byte b = (byte)reader.ReadByte(); + if ((b & 0x40) == 0) { // DynamicResolver only checks bit 6 + // Calculate num ehs exactly the same way that DynamicResolver does + int numHandlers = (ushort)((reader.ReadByte() - 2) / 12); + reader.ReadInt16(); + for (int i = 0; i < numHandlers; i++) { + var eh = new ExceptionHandler(); + eh.HandlerType = (ExceptionHandlerType)reader.ReadInt16(); + int offs = reader.ReadUInt16(); + eh.TryStart = GetInstructionThrow((uint)offs); + eh.TryEnd = GetInstruction((uint)(reader.ReadSByte() + offs)); + offs = reader.ReadUInt16(); + eh.HandlerStart = GetInstructionThrow((uint)offs); + eh.HandlerEnd = GetInstruction((uint)(reader.ReadSByte() + offs)); + + if (eh.HandlerType == ExceptionHandlerType.Catch) + eh.CatchType = ReadToken(reader.ReadUInt32()) as ITypeDefOrRef; + else if (eh.HandlerType == ExceptionHandlerType.Filter) + eh.FilterStart = GetInstruction(reader.ReadUInt32()); + else + reader.ReadUInt32(); + + exceptionHandlers.Add(eh); + } + } + else { + reader.BaseStream.Position--; + int numHandlers = (ushort)(((reader.ReadUInt32() >> 8) - 4) / 24); + for (int i = 0; i < numHandlers; i++) { + var eh = new ExceptionHandler(); + eh.HandlerType = (ExceptionHandlerType)reader.ReadInt32(); + int offs = reader.ReadInt32(); + eh.TryStart = GetInstructionThrow((uint)offs); + eh.TryEnd = GetInstruction((uint)(reader.ReadInt32() + offs)); + offs = reader.ReadInt32(); + eh.HandlerStart = GetInstructionThrow((uint)offs); + eh.HandlerEnd = GetInstruction((uint)(reader.ReadInt32() + offs)); + + if (eh.HandlerType == ExceptionHandlerType.Catch) + eh.CatchType = ReadToken(reader.ReadUInt32()) as ITypeDefOrRef; + else if (eh.HandlerType == ExceptionHandlerType.Filter) + eh.FilterStart = GetInstruction(reader.ReadUInt32()); + else + reader.ReadUInt32(); + + exceptionHandlers.Add(eh); + } + } + } + else if (ehInfos != null) { + foreach (var ehInfo in CreateExceptionInfos(ehInfos)) { + var tryStart = GetInstructionThrow((uint)ehInfo.StartAddr); + var tryEnd = GetInstruction((uint)ehInfo.EndAddr); + var endFinally = ehInfo.EndFinally < 0 ? null : GetInstruction((uint)ehInfo.EndFinally); + for (int i = 0; i < ehInfo.CurrentCatch; i++) { + var eh = new ExceptionHandler(); + eh.HandlerType = (ExceptionHandlerType)ehInfo.Type[i]; + eh.TryStart = tryStart; + eh.TryEnd = eh.HandlerType == ExceptionHandlerType.Finally ? endFinally : tryEnd; + eh.FilterStart = null; // not supported by DynamicMethod.ILGenerator + eh.HandlerStart = GetInstructionThrow((uint)ehInfo.CatchAddr[i]); + eh.HandlerEnd = GetInstruction((uint)ehInfo.CatchEndAddr[i]); + eh.CatchType = importer.Import(ehInfo.CatchClass[i]); + exceptionHandlers.Add(eh); + } + } + } + } + + /// + /// Returns the created method. Must be called after . + /// + /// A new instance + public MethodDef GetMethod() { + bool initLocals = true; + var cilBody = new CilBody(initLocals, instructions, exceptionHandlers, locals); + cilBody.MaxStack = (ushort)Math.Min(maxStack, ushort.MaxValue); + instructions = null; + exceptionHandlers = null; + locals = null; + method.Body = cilBody; + return method; + } + + /// + protected override IField ReadInlineField(Instruction instr) { + return ReadToken(reader.ReadUInt32()) as IField; + } + + /// + protected override IMethod ReadInlineMethod(Instruction instr) { + return ReadToken(reader.ReadUInt32()) as IMethod; + } + + /// + protected override MethodSig ReadInlineSig(Instruction instr) { + return ReadToken(reader.ReadUInt32()) as MethodSig; + } + + /// + protected override string ReadInlineString(Instruction instr) { + return ReadToken(reader.ReadUInt32()) as string ?? string.Empty; + } + + /// + protected override ITokenOperand ReadInlineTok(Instruction instr) { + return ReadToken(reader.ReadUInt32()) as ITokenOperand; + } + + /// + protected override ITypeDefOrRef ReadInlineType(Instruction instr) { + return ReadToken(reader.ReadUInt32()) as ITypeDefOrRef; + } + + object ReadToken(uint token) { + uint rid = token & 0x00FFFFFF; + switch (token >> 24) { + case 0x02: + return ImportType(rid); + + case 0x04: + return ImportField(rid); + + case 0x06: + case 0x0A: + return ImportMethod(rid); + + case 0x11: + return ImportSignature(rid); + + case 0x70: + return Resolve(rid) as string; + + default: + return null; + } + } + + IMethod ImportMethod(uint rid) { + var obj = Resolve(rid); + if (obj == null) + return null; + + if (obj is RuntimeMethodHandle) + return importer.Import(SR.MethodBase.GetMethodFromHandle((RuntimeMethodHandle)obj)); + + if (obj.GetType().ToString() == "System.Reflection.Emit.GenericMethodInfo") { + var context = (RuntimeTypeHandle)gmiContextFieldInfo.Read(obj); + var method = SR.MethodBase.GetMethodFromHandle((RuntimeMethodHandle)gmiMethodHandleFieldInfo.Read(obj), context); + return importer.Import(method); + } + + if (obj.GetType().ToString() == "System.Reflection.Emit.VarArgMethod") { + var method = GetVarArgMethod(obj); + if (!(method is DynamicMethod)) + return importer.Import(method); + obj = method; + } + + var dm = obj as DynamicMethod; + if (dm != null) + throw new Exception("DynamicMethod calls another DynamicMethod"); + + return null; + } + + SR.MethodInfo GetVarArgMethod(object obj) { + if (vamDynamicMethodFieldInfo.Exists(obj)) { + // .NET 4.0+ + var method = vamMethodFieldInfo.Read(obj) as SR.MethodInfo; + var dynMethod = vamDynamicMethodFieldInfo.Read(obj) as DynamicMethod; + return dynMethod ?? method; + } + else { + // .NET 2.0 + // This is either a DynamicMethod or a MethodInfo + return vamMethodFieldInfo.Read(obj) as SR.MethodInfo; + } + } + + IField ImportField(uint rid) { + var obj = Resolve(rid); + if (obj == null) + return null; + + if (obj is RuntimeFieldHandle) + return importer.Import(SR.FieldInfo.GetFieldFromHandle((RuntimeFieldHandle)obj)); + + if (obj.GetType().ToString() == "System.Reflection.Emit.GenericFieldInfo") { + var context = (RuntimeTypeHandle)gfiContextFieldInfo.Read(obj); + var field = SR.FieldInfo.GetFieldFromHandle((RuntimeFieldHandle)gfiFieldHandleFieldInfo.Read(obj), context); + return importer.Import(field); + } + + return null; + } + + ITypeDefOrRef ImportType(uint rid) { + var obj = Resolve(rid); + if (obj is RuntimeTypeHandle) + return importer.Import(Type.GetTypeFromHandle((RuntimeTypeHandle)obj)); + + return null; + } + + CallingConventionSig ImportSignature(uint rid) { + var sig = Resolve(rid) as byte[]; + if (sig == null) + return null; + + return SignatureReader.ReadSig(this, module.CorLibTypes, sig, gpContext); + } + + object Resolve(uint index) { + if (index >= (uint)tokens.Count) + return null; + return tokens[(int)index]; + } + + ITypeDefOrRef ISignatureReaderHelper.ResolveTypeDefOrRef(uint codedToken, GenericParamContext gpContext) { + uint token; + if (!CodedToken.TypeDefOrRef.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.TypeDef: + case Table.TypeRef: + case Table.TypeSpec: + return ImportType(rid); + } + return null; + } + + TypeSig ISignatureReaderHelper.ConvertRTInternalAddress(IntPtr address) { + return importer.ImportAsTypeSig(MethodTableToTypeConverter.Convert(address)); + } + } +} diff --git a/dnlib/DotNet/Emit/ExceptionHandler.cs b/dnlib/DotNet/Emit/ExceptionHandler.cs new file mode 100644 index 0000000..b4ecb1c --- /dev/null +++ b/dnlib/DotNet/Emit/ExceptionHandler.cs @@ -0,0 +1,60 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// A CIL method exception handler + /// + public sealed class ExceptionHandler { + /// + /// First instruction of try block + /// + public Instruction TryStart; + + /// + /// One instruction past the end of try block or null if it ends at the end + /// of the method. + /// + public Instruction TryEnd; + + /// + /// Start of filter handler or null if none. The end of filter handler is + /// always . + /// + public Instruction FilterStart; + + /// + /// First instruction of try handler block + /// + public Instruction HandlerStart; + + /// + /// One instruction past the end of try handler block or null if it ends at the end + /// of the method. + /// + public Instruction HandlerEnd; + + /// + /// The catch type if is + /// + public ITypeDefOrRef CatchType; + + /// + /// Type of exception handler clause + /// + public ExceptionHandlerType HandlerType; + + /// + /// Default constructor + /// + public ExceptionHandler() { + } + + /// + /// Constructor + /// + /// Exception clause type + public ExceptionHandler(ExceptionHandlerType handlerType) { + this.HandlerType = handlerType; + } + } +} diff --git a/dnlib/DotNet/Emit/ExceptionHandlerType.cs b/dnlib/DotNet/Emit/ExceptionHandlerType.cs new file mode 100644 index 0000000..5762214 --- /dev/null +++ b/dnlib/DotNet/Emit/ExceptionHandlerType.cs @@ -0,0 +1,22 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.Emit { + /// + /// Type of exception handler. See CorHdr.h/CorExceptionFlag + /// + [Flags] + public enum ExceptionHandlerType { + /// + Catch = 0x0000, + /// + Filter = 0x0001, + /// + Finally = 0x0002, + /// + Fault = 0x0004, + /// + Duplicated = 0x0008, + } +} diff --git a/dnlib/DotNet/Emit/Extensions.cs b/dnlib/DotNet/Emit/Extensions.cs new file mode 100644 index 0000000..31f88b3 --- /dev/null +++ b/dnlib/DotNet/Emit/Extensions.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// Extension methods + /// + public static partial class Extensions { + } +} diff --git a/dnlib/DotNet/Emit/FlowControl.cs b/dnlib/DotNet/Emit/FlowControl.cs new file mode 100644 index 0000000..a012045 --- /dev/null +++ b/dnlib/DotNet/Emit/FlowControl.cs @@ -0,0 +1,27 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// CIL opcode flow control + /// + public enum FlowControl { + /// + Branch, + /// + Break, + /// + Call, + /// + Cond_Branch, + /// + Meta, + /// + Next, + /// + Phi, + /// + Return, + /// + Throw, + } +} diff --git a/dnlib/DotNet/Emit/Instruction.cs b/dnlib/DotNet/Emit/Instruction.cs new file mode 100644 index 0000000..ba8829c --- /dev/null +++ b/dnlib/DotNet/Emit/Instruction.cs @@ -0,0 +1,828 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.DotNet.Pdb; +using dnlib.Threading; + +namespace dnlib.DotNet.Emit { + /// + /// A CIL instruction (opcode + operand) + /// + public sealed class Instruction { + /// + /// The opcode + /// + public OpCode OpCode; + + /// + /// The opcode operand + /// + public object Operand; + + /// + /// Offset of the instruction in the method body + /// + public uint Offset; + + /// + /// PDB sequence point or null if none + /// + public SequencePoint SequencePoint; + + /// + /// Default constructor + /// + public Instruction() { + } + + /// + /// Constructor + /// + /// Opcode + public Instruction(OpCode opCode) { + this.OpCode = opCode; + } + + /// + /// Constructor + /// + /// Opcode + /// The operand + public Instruction(OpCode opCode, object operand) { + this.OpCode = opCode; + this.Operand = operand; + } + + /// + /// Creates a new instruction with no operand + /// + /// The opcode + /// A new instance + public static Instruction Create(OpCode opCode) { + if (opCode.OperandType != OperandType.InlineNone) + throw new ArgumentException("Must be a no-operand opcode", "opCode"); + return new Instruction(opCode); + } + + /// + /// Creates a new instruction with a operand + /// + /// The opcode + /// The value + /// A new instance + public static Instruction Create(OpCode opCode, byte value) { + if (opCode.Code != Code.Unaligned) + throw new ArgumentException("Opcode does not have a byte operand", "opCode"); + return new Instruction(opCode, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The opcode + /// The value + /// A new instance + public static Instruction Create(OpCode opCode, sbyte value) { + if (opCode.Code != Code.Ldc_I4_S) + throw new ArgumentException("Opcode does not have a sbyte operand", "opCode"); + return new Instruction(opCode, value); + } + + /// + /// Creates a new instruction with an operand + /// + /// The opcode + /// The value + /// A new instance + public static Instruction Create(OpCode opCode, int value) { + if (opCode.OperandType != OperandType.InlineI) + throw new ArgumentException("Opcode does not have an int32 operand", "opCode"); + return new Instruction(opCode, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The opcode + /// The value + /// A new instance + public static Instruction Create(OpCode opCode, long value) { + if (opCode.OperandType != OperandType.InlineI8) + throw new ArgumentException("Opcode does not have an int64 operand", "opCode"); + return new Instruction(opCode, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The opcode + /// The value + /// A new instance + public static Instruction Create(OpCode opCode, float value) { + if (opCode.OperandType != OperandType.ShortInlineR) + throw new ArgumentException("Opcode does not have a real4 operand", "opCode"); + return new Instruction(opCode, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The opcode + /// The value + /// A new instance + public static Instruction Create(OpCode opCode, double value) { + if (opCode.OperandType != OperandType.InlineR) + throw new ArgumentException("Opcode does not have a real8 operand", "opCode"); + return new Instruction(opCode, value); + } + + /// + /// Creates a new instruction with a string operand + /// + /// The opcode + /// The string + /// A new instance + public static Instruction Create(OpCode opCode, string s) { + if (opCode.OperandType != OperandType.InlineString) + throw new ArgumentException("Opcode does not have a string operand", "opCode"); + return new Instruction(opCode, s); + } + + /// + /// Creates a new instruction with an instruction target operand + /// + /// The opcode + /// Target instruction + /// A new instance + public static Instruction Create(OpCode opCode, Instruction target) { + if (opCode.OperandType != OperandType.ShortInlineBrTarget && opCode.OperandType != OperandType.InlineBrTarget) + throw new ArgumentException("Opcode does not have an instruction operand", "opCode"); + return new Instruction(opCode, target); + } + + /// + /// Creates a new instruction with an instruction target list operand + /// + /// The opcode + /// The targets + /// A new instance + public static Instruction Create(OpCode opCode, IList targets) { + if (opCode.OperandType != OperandType.InlineSwitch) + throw new ArgumentException("Opcode does not have a targets array operand", "opCode"); + return new Instruction(opCode, ThreadSafeListCreator.MakeThreadSafe(targets)); + } + + /// + /// Creates a new instruction with a type operand + /// + /// The opcode + /// The type + /// A new instance + public static Instruction Create(OpCode opCode, ITypeDefOrRef type) { + if (opCode.OperandType != OperandType.InlineType && opCode.OperandType != OperandType.InlineTok) + throw new ArgumentException("Opcode does not have a type operand", "opCode"); + return new Instruction(opCode, type); + } + + /// + /// Creates a new instruction with a type operand + /// + /// The opcode + /// The type + /// A new instance + public static Instruction Create(OpCode opCode, CorLibTypeSig type) { + return Create(opCode, type.TypeDefOrRef); + } + + /// + /// Creates a new instruction with a method/field operand + /// + /// The opcode + /// The method/field + /// A new instance + public static Instruction Create(OpCode opCode, MemberRef mr) { + if (opCode.OperandType != OperandType.InlineField && opCode.OperandType != OperandType.InlineMethod && opCode.OperandType != OperandType.InlineTok) + throw new ArgumentException("Opcode does not have a field operand", "opCode"); + return new Instruction(opCode, mr); + } + + /// + /// Creates a new instruction with a field operand + /// + /// The opcode + /// The field + /// A new instance + public static Instruction Create(OpCode opCode, IField field) { + if (opCode.OperandType != OperandType.InlineField && opCode.OperandType != OperandType.InlineTok) + throw new ArgumentException("Opcode does not have a field operand", "opCode"); + return new Instruction(opCode, field); + } + + /// + /// Creates a new instruction with a method operand + /// + /// The opcode + /// The method + /// A new instance + public static Instruction Create(OpCode opCode, IMethod method) { + if (opCode.OperandType != OperandType.InlineMethod && opCode.OperandType != OperandType.InlineTok) + throw new ArgumentException("Opcode does not have a method operand", "opCode"); + return new Instruction(opCode, method); + } + + /// + /// Creates a new instruction with a token operand + /// + /// The opcode + /// The token + /// A new instance + public static Instruction Create(OpCode opCode, ITokenOperand token) { + if (opCode.OperandType != OperandType.InlineTok) + throw new ArgumentException("Opcode does not have a token operand", "opCode"); + return new Instruction(opCode, token); + } + + /// + /// Creates a new instruction with a method signature operand + /// + /// The opcode + /// The method signature + /// A new instance + public static Instruction Create(OpCode opCode, MethodSig methodSig) { + if (opCode.OperandType != OperandType.InlineSig) + throw new ArgumentException("Opcode does not have a method sig operand", "opCode"); + return new Instruction(opCode, methodSig); + } + + /// + /// Creates a new instruction with a method parameter operand + /// + /// The opcode + /// The method parameter + /// A new instance + public static Instruction Create(OpCode opCode, Parameter parameter) { + if (opCode.OperandType != OperandType.ShortInlineVar && opCode.OperandType != OperandType.InlineVar) + throw new ArgumentException("Opcode does not have a method parameter operand", "opCode"); + return new Instruction(opCode, parameter); + } + + /// + /// Creates a new instruction with a method local operand + /// + /// The opcode + /// The method local + /// A new instance + public static Instruction Create(OpCode opCode, Local local) { + if (opCode.OperandType != OperandType.ShortInlineVar && opCode.OperandType != OperandType.InlineVar) + throw new ArgumentException("Opcode does not have a method local operand", "opCode"); + return new Instruction(opCode, local); + } + + /// + /// Creates a ldci4 instruction + /// + /// Operand value + /// A new instance + public static Instruction CreateLdcI4(int value) { + switch (value) { + case -1:return OpCodes.Ldc_I4_M1.ToInstruction(); + case 0: return OpCodes.Ldc_I4_0.ToInstruction(); + case 1: return OpCodes.Ldc_I4_1.ToInstruction(); + case 2: return OpCodes.Ldc_I4_2.ToInstruction(); + case 3: return OpCodes.Ldc_I4_3.ToInstruction(); + case 4: return OpCodes.Ldc_I4_4.ToInstruction(); + case 5: return OpCodes.Ldc_I4_5.ToInstruction(); + case 6: return OpCodes.Ldc_I4_6.ToInstruction(); + case 7: return OpCodes.Ldc_I4_7.ToInstruction(); + case 8: return OpCodes.Ldc_I4_8.ToInstruction(); + } + if (sbyte.MinValue <= value && value <= sbyte.MaxValue) + return new Instruction(OpCodes.Ldc_I4_S, (sbyte)value); + return new Instruction(OpCodes.Ldc_I4, value); + } + + /// + /// Gets the size in bytes of the instruction + /// + /// + public int GetSize() { + var opCode = OpCode; + switch (opCode.OperandType) { + case OperandType.InlineBrTarget: + case OperandType.InlineField: + case OperandType.InlineI: + case OperandType.InlineMethod: + case OperandType.InlineSig: + case OperandType.InlineString: + case OperandType.InlineTok: + case OperandType.InlineType: + case OperandType.ShortInlineR: + return opCode.Size + 4; + + case OperandType.InlineI8: + case OperandType.InlineR: + return opCode.Size + 8; + + case OperandType.InlineNone: + case OperandType.InlinePhi: + default: + return opCode.Size; + + case OperandType.InlineSwitch: + var targets = Operand as IList; + return opCode.Size + 4 + (targets == null ? 0 : targets.Count * 4); + + case OperandType.InlineVar: + return opCode.Size + 2; + + case OperandType.ShortInlineBrTarget: + case OperandType.ShortInlineI: + case OperandType.ShortInlineVar: + return opCode.Size + 1; + } + } + + static bool IsSystemVoid(TypeSig type) { + return type.RemovePinnedAndModifiers().GetElementType() == ElementType.Void; + } + + /// + /// Updates with the new stack size + /// + /// Current stack size + public void UpdateStack(ref int stack) { + UpdateStack(ref stack, false); + } + + /// + /// Updates with the new stack size + /// + /// Current stack size + /// true if the method has a return value, + /// false otherwise + public void UpdateStack(ref int stack, bool methodHasReturnValue) { + int pushes, pops; + CalculateStackUsage(methodHasReturnValue, out pushes, out pops); + if (pops == -1) + stack = 0; + else + stack += pushes - pops; + } + + /// + /// Calculates stack usage + /// + /// Updated with number of stack pushes + /// Updated with number of stack pops or -1 if the stack should + /// be cleared. + public void CalculateStackUsage(out int pushes, out int pops) { + CalculateStackUsage(false, out pushes, out pops); + } + + /// + /// Calculates stack usage + /// + /// true if method has a return value + /// Updated with number of stack pushes + /// Updated with number of stack pops or -1 if the stack should + /// be cleared. + public void CalculateStackUsage(bool methodHasReturnValue, out int pushes, out int pops) { + var opCode = OpCode; + if (opCode.FlowControl == FlowControl.Call) + CalculateStackUsageCall(opCode, out pushes, out pops); + else + CalculateStackUsageNonCall(opCode, methodHasReturnValue, out pushes, out pops); + } + + void CalculateStackUsageCall(OpCode opCode, out int pushes, out int pops) { + pushes = 0; + pops = 0; + + // It doesn't push or pop anything. The stack should be empty when JMP is executed. + if (opCode.Code == Code.Jmp) + return; + + MethodSig sig; + var op = Operand; + var method = op as IMethod; + if (method != null) + sig = method.MethodSig; + else + sig = op as MethodSig; // calli instruction + if (sig == null) + return; + bool implicitThis = sig.ImplicitThis; + if (!IsSystemVoid(sig.RetType) || (opCode.Code == Code.Newobj && sig.HasThis)) + pushes++; + + pops += sig.Params.Count; + var paramsAfterSentinel = sig.ParamsAfterSentinel; + if (paramsAfterSentinel != null) + pops += paramsAfterSentinel.Count; + if (implicitThis && opCode.Code != Code.Newobj) + pops++; + if (opCode.Code == Code.Calli) + pops++; + } + + void CalculateStackUsageNonCall(OpCode opCode, bool hasReturnValue, out int pushes, out int pops) { + StackBehaviour stackBehavior; + + pushes = 0; + pops = 0; + + stackBehavior = opCode.StackBehaviourPush; + switch (stackBehavior) { + case StackBehaviour.Push0: + break; + + case StackBehaviour.Push1: + case StackBehaviour.Pushi: + case StackBehaviour.Pushi8: + case StackBehaviour.Pushr4: + case StackBehaviour.Pushr8: + case StackBehaviour.Pushref: + pushes++; + break; + + case StackBehaviour.Push1_push1: + pushes += 2; + break; + + case StackBehaviour.Varpush: // only call, calli, callvirt which are handled elsewhere + default: + break; + } + + stackBehavior = opCode.StackBehaviourPop; + switch (stackBehavior) { + case StackBehaviour.Pop0: + break; + + case StackBehaviour.Pop1: + case StackBehaviour.Popi: + case StackBehaviour.Popref: + pops++; + break; + + case StackBehaviour.Pop1_pop1: + case StackBehaviour.Popi_pop1: + case StackBehaviour.Popi_popi: + case StackBehaviour.Popi_popi8: + case StackBehaviour.Popi_popr4: + case StackBehaviour.Popi_popr8: + case StackBehaviour.Popref_pop1: + case StackBehaviour.Popref_popi: + pops += 2; + break; + + case StackBehaviour.Popi_popi_popi: + case StackBehaviour.Popref_popi_popi: + case StackBehaviour.Popref_popi_popi8: + case StackBehaviour.Popref_popi_popr4: + case StackBehaviour.Popref_popi_popr8: + case StackBehaviour.Popref_popi_popref: + case StackBehaviour.Popref_popi_pop1: + pops += 3; + break; + + case StackBehaviour.PopAll: + pops = -1; + break; + + case StackBehaviour.Varpop: // call, calli, callvirt, newobj (all handled elsewhere), and ret + if (hasReturnValue) + pops++; + break; + + default: + break; + } + } + + /// + /// Checks whether it's one of the leave instructions + /// + public bool IsLeave() { + return OpCode == OpCodes.Leave || OpCode == OpCodes.Leave_S; + } + + /// + /// Checks whether it's one of the br instructions + /// + public bool IsBr() { + return OpCode == OpCodes.Br || OpCode == OpCodes.Br_S; + } + + /// + /// Checks whether it's one of the brfalse instructions + /// + public bool IsBrfalse() { + return OpCode == OpCodes.Brfalse || OpCode == OpCodes.Brfalse_S; + } + + /// + /// Checks whether it's one of the brtrue instructions + /// + public bool IsBrtrue() { + return OpCode == OpCodes.Brtrue || OpCode == OpCodes.Brtrue_S; + } + + /// + /// Checks whether it's one of the conditional branch instructions (bcc, brtrue, brfalse) + /// + public bool IsConditionalBranch() { + switch (OpCode.Code) { + case Code.Bge: + case Code.Bge_S: + case Code.Bge_Un: + case Code.Bge_Un_S: + case Code.Blt: + case Code.Blt_S: + case Code.Blt_Un: + case Code.Blt_Un_S: + case Code.Bgt: + case Code.Bgt_S: + case Code.Bgt_Un: + case Code.Bgt_Un_S: + case Code.Ble: + case Code.Ble_S: + case Code.Ble_Un: + case Code.Ble_Un_S: + case Code.Brfalse: + case Code.Brfalse_S: + case Code.Brtrue: + case Code.Brtrue_S: + case Code.Beq: + case Code.Beq_S: + case Code.Bne_Un: + case Code.Bne_Un_S: + return true; + + default: + return false; + } + } + + /// + /// Checks whether this is one of the ldc.i4 instructions + /// + public bool IsLdcI4() { + switch (OpCode.Code) { + case Code.Ldc_I4_M1: + case Code.Ldc_I4_0: + case Code.Ldc_I4_1: + case Code.Ldc_I4_2: + case Code.Ldc_I4_3: + case Code.Ldc_I4_4: + case Code.Ldc_I4_5: + case Code.Ldc_I4_6: + case Code.Ldc_I4_7: + case Code.Ldc_I4_8: + case Code.Ldc_I4_S: + case Code.Ldc_I4: + return true; + default: + return false; + } + } + + /// + /// Returns a ldc.i4 instruction's operand + /// + /// The integer value + /// isn't one of the + /// ldc.i4 opcodes + public int GetLdcI4Value() { + switch (OpCode.Code) { + case Code.Ldc_I4_M1:return -1; + case Code.Ldc_I4_0: return 0; + case Code.Ldc_I4_1: return 1; + case Code.Ldc_I4_2: return 2; + case Code.Ldc_I4_3: return 3; + case Code.Ldc_I4_4: return 4; + case Code.Ldc_I4_5: return 5; + case Code.Ldc_I4_6: return 6; + case Code.Ldc_I4_7: return 7; + case Code.Ldc_I4_8: return 8; + case Code.Ldc_I4_S: return (sbyte)Operand; + case Code.Ldc_I4: return (int)Operand; + default: + throw new InvalidOperationException(string.Format("Not a ldc.i4 instruction: {0}", this)); + } + } + + /// + /// Checks whether it's one of the ldarg instructions, but does not check + /// whether it's one of the ldarga instructions. + /// + public bool IsLdarg() { + switch (OpCode.Code) { + case Code.Ldarg: + case Code.Ldarg_S: + case Code.Ldarg_0: + case Code.Ldarg_1: + case Code.Ldarg_2: + case Code.Ldarg_3: + return true; + default: + return false; + } + } + + /// + /// Checks whether it's one of the ldloc instructions, but does not check + /// whether it's one of the ldloca instructions. + /// + public bool IsLdloc() { + switch (OpCode.Code) { + case Code.Ldloc: + case Code.Ldloc_0: + case Code.Ldloc_1: + case Code.Ldloc_2: + case Code.Ldloc_3: + case Code.Ldloc_S: + return true; + default: + return false; + } + } + + /// + /// Checks whether it's one of the starg instructions + /// + public bool IsStarg() { + switch (OpCode.Code) { + case Code.Starg: + case Code.Starg_S: + return true; + default: + return false; + } + } + + /// + /// Checks whether it's one of the stloc instructions + /// + public bool IsStloc() { + switch (OpCode.Code) { + case Code.Stloc: + case Code.Stloc_0: + case Code.Stloc_1: + case Code.Stloc_2: + case Code.Stloc_3: + case Code.Stloc_S: + return true; + default: + return false; + } + } + + /// + /// Returns the local if it's a ldloc or stloc instruction. It does not + /// return the local if it's a ldloca instruction. + /// + /// The locals + /// The local or null if it's not a ldloc or stloc + /// instruction or if the local doesn't exist. + public Local GetLocal(IList locals) { + int index; + var code = OpCode.Code; + switch (code) { + case Code.Ldloc: + case Code.Ldloc_S: + case Code.Stloc: + case Code.Stloc_S: + return Operand as Local; + + case Code.Ldloc_0: + case Code.Ldloc_1: + case Code.Ldloc_2: + case Code.Ldloc_3: + index = code - Code.Ldloc_0; + break; + + case Code.Stloc_0: + case Code.Stloc_1: + case Code.Stloc_2: + case Code.Stloc_3: + index = code - Code.Stloc_0; + break; + + default: + return null; + } + + return locals.Get(index, null); + } + + /// + /// Gets the index of the instruction's parameter operand or -1 if the parameter + /// is missing or if it's not an instruction with a parameter operand. + /// + public int GetParameterIndex() { + switch (OpCode.Code) { + case Code.Ldarg_0: return 0; + case Code.Ldarg_1: return 1; + case Code.Ldarg_2: return 2; + case Code.Ldarg_3: return 3; + + case Code.Starg: + case Code.Starg_S: + case Code.Ldarga: + case Code.Ldarga_S: + case Code.Ldarg: + case Code.Ldarg_S: + var parameter = Operand as Parameter; + if (parameter != null) + return parameter.Index; + break; + } + + return -1; + } + + /// + /// Returns a method parameter + /// + /// All parameters + /// A parameter or null if it doesn't exist + public Parameter GetParameter(IList parameters) { + return parameters.Get(GetParameterIndex(), null); + } + + /// + /// Returns an argument type + /// + /// Method signature + /// Declaring type (only needed if it's an instance method) + /// The type or null if it doesn't exist + public TypeSig GetArgumentType(MethodSig methodSig, ITypeDefOrRef declaringType) { + if (methodSig == null) + return null; + int index = GetParameterIndex(); + if (index == 0 && methodSig.ImplicitThis) + return declaringType.ToTypeSig(); //TODO: Should be ByRef if value type + if (methodSig.ImplicitThis) + index--; + return methodSig.Params.Get(index, null); + } + + /// + /// Clone this instance. The and fields + /// are shared by this instance and the created instance. + /// + public Instruction Clone() { + return new Instruction { + Offset = Offset, + OpCode = OpCode, + Operand = Operand, + SequencePoint = SequencePoint, + }; + } + + /// + public override string ToString() { + return InstructionPrinter.ToString(this); + } + } + + static partial class Extensions { + /// + /// Gets the opcode or if is null + /// + /// this + /// + public static OpCode GetOpCode(this Instruction self) { + return self == null ? OpCodes.UNKNOWN1 : self.OpCode; + } + + /// + /// Gets the operand or null if is null + /// + /// this + /// + public static object GetOperand(this Instruction self) { + return self == null ? null : self.Operand; + } + + /// + /// Gets the offset or 0 if is null + /// + /// this + /// + public static uint GetOffset(this Instruction self) { + return self == null ? 0 : self.Offset; + } + + /// + /// Gets the sequence point or null if is null + /// + /// this + /// + public static dnlib.DotNet.Pdb.SequencePoint GetSequencePoint(this Instruction self) { + return self == null ? null : self.SequencePoint; + } + } +} diff --git a/dnlib/DotNet/Emit/InstructionPrinter.cs b/dnlib/DotNet/Emit/InstructionPrinter.cs new file mode 100644 index 0000000..ddeb722 --- /dev/null +++ b/dnlib/DotNet/Emit/InstructionPrinter.cs @@ -0,0 +1,171 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.Text; +using dnlib.Threading; + +namespace dnlib.DotNet.Emit { + /// + /// Converts instructions to strings + /// + public static class InstructionPrinter { + /// + /// Converts an instruction to a string + /// + /// The instruction + /// The result + public static string ToString(Instruction instr) { + if (instr == null) + return string.Empty; + + var sb = new StringBuilder(); + + sb.Append(string.Format("IL_{0:X4}: ", instr.Offset)); + sb.Append(instr.OpCode.Name); + AddOperandString(sb, instr, " "); + + return sb.ToString(); + } + + /// + /// Gets the instruction's operand as a string + /// + /// The instruction + /// The operand as a string + public static string GetOperandString(Instruction instr) { + var sb = new StringBuilder(); + AddOperandString(sb, instr, string.Empty); + return sb.ToString(); + } + + /// + /// Add an instruction's operand to + /// + /// Place result here + /// The instruction + public static void AddOperandString(StringBuilder sb, Instruction instr) { + AddOperandString(sb, instr, string.Empty); + } + + /// + /// Add an instruction's operand to + /// + /// Place result here + /// The instruction + /// A string that will be added before the operand, if there's + /// an operand. + public static void AddOperandString(StringBuilder sb, Instruction instr, string extra) { + var op = instr.Operand; + switch (instr.OpCode.OperandType) { + case OperandType.InlineBrTarget: + case OperandType.ShortInlineBrTarget: + sb.Append(extra); + AddInstructionTarget(sb, op as Instruction); + break; + + case OperandType.InlineField: + case OperandType.InlineMethod: + case OperandType.InlineTok: + case OperandType.InlineType: + sb.Append(extra); + if (op is IFullName) + sb.Append((op as IFullName).FullName); + else if (op != null) + sb.Append(op.ToString()); + else + sb.Append("null"); + break; + + case OperandType.InlineI: + case OperandType.InlineI8: + case OperandType.InlineR: + case OperandType.ShortInlineI: + case OperandType.ShortInlineR: + sb.Append(string.Format("{0}{1}", extra, op)); + break; + + case OperandType.InlineSig: + sb.Append(extra); + sb.Append(FullNameCreator.MethodFullName(null, (UTF8String)null, op as MethodSig)); + break; + + case OperandType.InlineString: + sb.Append(extra); + EscapeString(sb, op as string, true); + break; + + case OperandType.InlineSwitch: + var targets = op as IList; + if (targets == null) + sb.Append("null"); + else { + sb.Append('('); + for (int i = 0; i < targets.Count; i++) { + if (i != 0) + sb.Append(','); + AddInstructionTarget(sb, targets.Get(i, null)); + } + sb.Append(')'); + } + break; + + case OperandType.InlineVar: + case OperandType.ShortInlineVar: + sb.Append(extra); + if (op == null) + sb.Append("null"); + else + sb.Append(op.ToString()); + break; + + case OperandType.InlineNone: + case OperandType.InlinePhi: + default: + break; + } + } + + static void AddInstructionTarget(StringBuilder sb, Instruction targetInstr) { + if (targetInstr == null) + sb.Append("null"); + else + sb.Append(string.Format("IL_{0:X4}", targetInstr.Offset)); + } + + static void EscapeString(StringBuilder sb, string s, bool addQuotes) { + if (s == null) { + sb.Append("null"); + return; + } + + if (addQuotes) + sb.Append('"'); + + foreach (var c in s) { + if ((int)c < 0x20) { + switch (c) { + case '\a': sb.Append(@"\a"); break; + case '\b': sb.Append(@"\b"); break; + case '\f': sb.Append(@"\f"); break; + case '\n': sb.Append(@"\n"); break; + case '\r': sb.Append(@"\r"); break; + case '\t': sb.Append(@"\t"); break; + case '\v': sb.Append(@"\v"); break; + default: + sb.Append(string.Format(@"\u{0:X4}", (int)c)); + break; + } + } + else if (c == '\\' || c == '"') { + sb.Append('\\'); + sb.Append(c); + } + else + sb.Append(c); + } + + if (addQuotes) + sb.Append('"'); + } + } +} diff --git a/dnlib/DotNet/Emit/InvalidMethodException.cs b/dnlib/DotNet/Emit/InvalidMethodException.cs new file mode 100644 index 0000000..bd90318 --- /dev/null +++ b/dnlib/DotNet/Emit/InvalidMethodException.cs @@ -0,0 +1,34 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.Emit { + /// + /// Thrown when invalid data is detected while parsing a .NET method + /// + [Serializable] + public class InvalidMethodException : Exception { + /// + /// Default constructor + /// + public InvalidMethodException() { + } + + /// + /// Constructor + /// + /// Error message + public InvalidMethodException(string msg) + : base(msg) { + } + + /// + /// Constructor + /// + /// Error message + /// The inner exception or null if none + public InvalidMethodException(string msg, Exception innerException) + : base(msg, innerException) { + } + } +} diff --git a/dnlib/DotNet/Emit/LocalList.cs b/dnlib/DotNet/Emit/LocalList.cs new file mode 100644 index 0000000..1600c66 --- /dev/null +++ b/dnlib/DotNet/Emit/LocalList.cs @@ -0,0 +1,282 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.Utils; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet.Emit { + /// + /// A collection of s + /// + [DebuggerDisplay("Count = {Count}")] + public sealed class LocalList : IListListener, ThreadSafe.IList { + readonly LazyList locals; + + /// + /// Gets the number of locals + /// + public int Count { + get { return locals.Count; } + } + + /// + /// Gets the list of locals + /// + public ThreadSafe.IList Locals { + get { return locals; } + } + + /// + /// Gets the N'th local + /// + /// The local index + public Local this[int index] { + get { return locals[index]; } + set { locals[index] = value; } + } + + /// + /// Default constructor + /// + public LocalList() { + this.locals = new LazyList(this); + } + + /// + /// Constructor + /// + /// All locals that will be owned by this instance + public LocalList(IEnumerable locals) { + this.locals = new LazyList(this); + foreach (var local in locals.GetSafeEnumerable()) + this.locals.Add(local); + } + + /// + /// Adds a new local and then returns it + /// + /// The local that should be added to the list + /// The input is always returned + public Local Add(Local local) { + locals.Add(local); + return local; + } + + /// + void IListListener.OnLazyAdd(int index, ref Local value) { + } + + /// + void IListListener.OnAdd(int index, Local value) { + value.Index = index; + } + + /// + void IListListener.OnRemove(int index, Local value) { + value.Index = -1; + } + + /// + void IListListener.OnResize(int index) { + for (int i = index; i < locals.Count_NoLock(); i++) + locals.Get_NoLock(i).Index = i; + } + + /// + void IListListener.OnClear() { + foreach (var local in locals.GetEnumerable_NoLock()) + local.Index = -1; + } + + /// + public int IndexOf(Local item) { + return locals.IndexOf(item); + } + + /// + public void Insert(int index, Local item) { + locals.Insert(index, item); + } + + /// + public void RemoveAt(int index) { + locals.RemoveAt(index); + } + + void ICollection.Add(Local item) { + locals.Add(item); + } + + /// + public void Clear() { + locals.Clear(); + } + + /// + public bool Contains(Local item) { + return locals.Contains(item); + } + + /// + public void CopyTo(Local[] array, int arrayIndex) { + locals.CopyTo(array, arrayIndex); + } + + /// + public bool IsReadOnly { + get { return false; } + } + + /// + public bool Remove(Local item) { + return locals.Remove(item); + } + + /// + public IEnumerator GetEnumerator() { + return locals.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { + return ((IEnumerable)this).GetEnumerator(); + } + +#if THREAD_SAFE + /// + public int IndexOf_NoLock(Local item) { + return locals.IndexOf_NoLock(item); + } + + /// + public void Insert_NoLock(int index, Local item) { + locals.Insert_NoLock(index, item); + } + + /// + public void RemoveAt_NoLock(int index) { + locals.RemoveAt_NoLock(index); + } + + /// + public Local Get_NoLock(int index) { + return locals.Get_NoLock(index); + } + + /// + public void Set_NoLock(int index, Local value) { + locals.Set_NoLock(index, value); + } + + /// + public void Add_NoLock(Local item) { + locals.Add_NoLock(item); + } + + /// + public void Clear_NoLock() { + locals.Clear_NoLock(); + } + + /// + public bool Contains_NoLock(Local item) { + return locals.Contains_NoLock(item); + } + + /// + public void CopyTo_NoLock(Local[] array, int arrayIndex) { + locals.CopyTo_NoLock(array, arrayIndex); + } + + /// + public int Count_NoLock { + get { return locals.Count_NoLock; } + } + + /// + public bool IsReadOnly_NoLock { + get { return locals.IsReadOnly_NoLock; } + } + + /// + public bool Remove_NoLock(Local item) { + return locals.Remove_NoLock(item); + } + + /// + public IEnumerator GetEnumerator_NoLock() { + return locals.GetEnumerator_NoLock(); + } + + /// + public TRetType ExecuteLocked(TArgType arg, ExecuteLockedDelegate handler) { + return locals.ExecuteLocked(arg, (tsList, arg2) => handler(this, arg2)); + } +#endif + } + + /// + /// A method local + /// + public sealed class Local : IVariable { + TypeSig typeSig; + int index; + string name; + int pdbAttributes; + + /// + /// Gets/sets the type of the local + /// + public TypeSig Type { + get { return typeSig; } + set { typeSig = value; } + } + + /// + /// Local index + /// + public int Index { + get { return index; } + set { index = value; } + } + + /// + /// Gets/sets the name + /// + public string Name { + get { return name; } + set { name = value; } + } + + /// + /// Gets/sets the PDB attributes. This seems to be a CorSymVarFlag enumeration. + /// It's VAR_IS_COMP_GEN (1) if it's a compiler-generated local. + /// + public int PdbAttributes { + get { return pdbAttributes; } + set { pdbAttributes = value; } + } + + /// + /// Constructor + /// + /// The type + public Local(TypeSig typeSig) { + this.typeSig = typeSig; + } + + /// + public override string ToString() { + var n = name; + if (string.IsNullOrEmpty(n)) + return string.Format("V_{0}", Index); + return n; + } + } +} diff --git a/dnlib/DotNet/Emit/MethodBody.cs b/dnlib/DotNet/Emit/MethodBody.cs new file mode 100644 index 0000000..3792e4c --- /dev/null +++ b/dnlib/DotNet/Emit/MethodBody.cs @@ -0,0 +1,247 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.DotNet.Pdb; +using dnlib.PE; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet.Emit { + /// + /// Method body base class + /// + public abstract class MethodBody { + } + + /// + /// A native method body + /// + public sealed class NativeMethodBody : MethodBody { + RVA rva; + + /// + /// Gets/sets the RVA of the native method body + /// + public RVA RVA { + get { return rva; } + set { rva = value; } + } + + /// + /// Default constructor + /// + public NativeMethodBody() { + } + + /// + /// Constructor + /// + /// RVA of method body + public NativeMethodBody(RVA rva) { + this.rva = rva; + } + } + + /// + /// CIL (managed code) body + /// + public sealed class CilBody : MethodBody { + bool keepOldMaxStack; + bool initLocals; + byte headerSize; + ushort maxStack; + uint localVarSigTok; + readonly ThreadSafe.IList instructions; + readonly ThreadSafe.IList exceptionHandlers; + readonly LocalList localList; + PdbScope pdbScope; + + /// + /// Size of a small header + /// + public const byte SMALL_HEADER_SIZE = 1; + + /// + /// Gets/sets a flag indicating whether the original max stack value should be used. + /// + public bool KeepOldMaxStack { + get { return keepOldMaxStack; } + set { keepOldMaxStack = value; } + } + + /// + /// Gets/sets the init locals flag. This is only valid if the method has any locals. + /// + public bool InitLocals { + get { return initLocals; } + set { initLocals = value; } + } + + /// + /// Gets/sets the size in bytes of the method body header. The instructions immediately follow + /// the header. + /// + public byte HeaderSize { + get { return headerSize; } + set { headerSize = value; } + } + + /// + /// true if it was a small body header ( is 1) + /// + public bool IsSmallHeader { + get { return headerSize == SMALL_HEADER_SIZE; } + } + + /// + /// true if it was a big body header + /// + public bool IsBigHeader { + get { return headerSize != SMALL_HEADER_SIZE; } + } + + /// + /// Gets/sets max stack value from the fat method header. + /// + public ushort MaxStack { + get { return maxStack; } + set { maxStack = value; } + } + + /// + /// Gets/sets the locals metadata token + /// + public uint LocalVarSigTok { + get { return localVarSigTok; } + set { localVarSigTok = value; } + } + + /// + /// true if is not empty + /// + public bool HasInstructions { + get { return instructions.Count > 0; } + } + + /// + /// Gets the instructions + /// + public ThreadSafe.IList Instructions { + get { return instructions; } + } + + /// + /// true if is not empty + /// + public bool HasExceptionHandlers { + get { return exceptionHandlers.Count > 0; } + } + + /// + /// Gets the exception handlers + /// + public ThreadSafe.IList ExceptionHandlers { + get { return exceptionHandlers; } + } + + /// + /// true if is not empty + /// + public bool HasVariables { + get { return localList.Count > 0; } + } + + /// + /// Gets the locals + /// + public LocalList Variables {// Only called Variables for compat w/ older code. Locals is a better and more accurate name + get { return localList; } + } + + /// + /// Gets/sets the PDB scope. This is null if no PDB has been loaded or if there's + /// no PDB scope for this method. + /// + public PdbScope Scope { + get { return pdbScope; } + set { pdbScope = value; } + } + + /// + /// true if is not null + /// + public bool HasScope { + get { return pdbScope != null; } + } + + /// + /// Default constructor + /// + public CilBody() { + this.initLocals = true; + this.instructions = ThreadSafeListCreator.Create(); + this.exceptionHandlers = ThreadSafeListCreator.Create(); + this.localList = new LocalList(); + } + + /// + /// Constructor + /// + /// Init locals flag + /// All instructions. This instance will own the list. + /// All exception handlers. This instance will own the list. + /// All locals. This instance will own the locals in the list. + public CilBody(bool initLocals, IList instructions, IList exceptionHandlers, IList locals) { + this.initLocals = initLocals; + this.instructions = ThreadSafeListCreator.MakeThreadSafe(instructions); + this.exceptionHandlers = ThreadSafeListCreator.MakeThreadSafe(exceptionHandlers); + this.localList = new LocalList(locals); + } + + /// + /// Shorter instructions are converted to the longer form, eg. Ldc_I4_1 is + /// converted to Ldc_I4 with a 1 as the operand. + /// + /// All method parameters, including the hidden 'this' parameter + /// if it's an instance method. Use . + public void SimplifyMacros(IList parameters) { + instructions.SimplifyMacros(localList, parameters); + } + + /// + /// Optimizes instructions by using the shorter form if possible. Eg. Ldc_I4 1 + /// will be replaced with Ldc_I4_1. + /// + public void OptimizeMacros() { + instructions.OptimizeMacros(); + } + + /// + /// Short branch instructions are converted to the long form, eg. Beq_S is + /// converted to Beq. + /// + public void SimplifyBranches() { + instructions.SimplifyBranches(); + } + + /// + /// Optimizes branches by using the smallest possible branch + /// + public void OptimizeBranches() { + instructions.OptimizeBranches(); + } + + /// + /// Updates each instruction's offset + /// + /// Total size in bytes of all instructions + public uint UpdateInstructionOffsets() { + return instructions.UpdateInstructionOffsets(); + } + } +} diff --git a/dnlib/DotNet/Emit/MethodBodyReader.cs b/dnlib/DotNet/Emit/MethodBodyReader.cs new file mode 100644 index 0000000..bb1ebf2 --- /dev/null +++ b/dnlib/DotNet/Emit/MethodBodyReader.cs @@ -0,0 +1,493 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.IO; +using dnlib.IO; + +namespace dnlib.DotNet.Emit { + /// + /// Reads strings from #US heap + /// + public interface IStringResolver { + /// + /// Reads a string from the #US heap + /// + /// String token + /// A string + string ReadUserString(uint token); + } + + /// + /// Resolves instruction operands + /// + public interface IInstructionOperandResolver : ITokenResolver, IStringResolver { + } + + public static partial class Extensions { + /// + /// Resolves a token + /// + /// An object + /// The metadata token + /// A or null if is invalid + public static IMDTokenProvider ResolveToken(this IInstructionOperandResolver self, uint token) { + return self.ResolveToken(token, new GenericParamContext()); + } + } + + /// + /// Reads a .NET method body (header, locals, instructions, exception handlers) + /// + public sealed class MethodBodyReader : MethodBodyReaderBase { + readonly IInstructionOperandResolver opResolver; + bool hasReadHeader; + byte headerSize; + ushort flags; + ushort maxStack; + uint codeSize; + uint localVarSigTok; + IBinaryReader exceptionsReader; + readonly GenericParamContext gpContext; + + /// + /// Creates a CIL method body or returns an empty one if doesn't + /// point to the start of a valid CIL method body. + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Use parameters from this method + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, IBinaryReader reader, MethodDef method) { + return CreateCilBody(opResolver, reader, null, method.Parameters, new GenericParamContext()); + } + + /// + /// Creates a CIL method body or returns an empty one if doesn't + /// point to the start of a valid CIL method body. + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Use parameters from this method + /// Generic parameter context + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, IBinaryReader reader, MethodDef method, GenericParamContext gpContext) { + return CreateCilBody(opResolver, reader, null, method.Parameters, gpContext); + } + + /// + /// Creates a CIL method body or returns an empty one if doesn't + /// point to the start of a valid CIL method body. + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Method parameters + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, IBinaryReader reader, IList parameters) { + return CreateCilBody(opResolver, reader, null, parameters, new GenericParamContext()); + } + + /// + /// Creates a CIL method body or returns an empty one if doesn't + /// point to the start of a valid CIL method body. + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Method parameters + /// Generic parameter context + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, IBinaryReader reader, IList parameters, GenericParamContext gpContext) { + return CreateCilBody(opResolver, reader, null, parameters, gpContext); + } + + /// + /// Creates a CIL method body or returns an empty one if is not + /// a valid CIL method body. + /// + /// The operand resolver + /// All code + /// Exceptions or null if all exception handlers are in + /// + /// Method parameters + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, byte[] code, byte[] exceptions, IList parameters) { + return CreateCilBody(opResolver, MemoryImageStream.Create(code), exceptions == null ? null : MemoryImageStream.Create(exceptions), parameters, new GenericParamContext()); + } + + /// + /// Creates a CIL method body or returns an empty one if is not + /// a valid CIL method body. + /// + /// The operand resolver + /// All code + /// Exceptions or null if all exception handlers are in + /// + /// Method parameters + /// Generic parameter context + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, byte[] code, byte[] exceptions, IList parameters, GenericParamContext gpContext) { + return CreateCilBody(opResolver, MemoryImageStream.Create(code), exceptions == null ? null : MemoryImageStream.Create(exceptions), parameters, gpContext); + } + + /// + /// Creates a CIL method body or returns an empty one if doesn't + /// point to the start of a valid CIL method body. + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Exception handler reader or null if exceptions aren't + /// present or if contains the exception handlers + /// Method parameters + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, IBinaryReader codeReader, IBinaryReader ehReader, IList parameters) { + return CreateCilBody(opResolver, codeReader, ehReader, parameters, new GenericParamContext()); + } + + /// + /// Creates a CIL method body or returns an empty one if doesn't + /// point to the start of a valid CIL method body. + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Exception handler reader or null if exceptions aren't + /// present or if contains the exception handlers + /// Method parameters + /// Generic parameter context + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, IBinaryReader codeReader, IBinaryReader ehReader, IList parameters, GenericParamContext gpContext) { + var mbReader = new MethodBodyReader(opResolver, codeReader, ehReader, parameters, gpContext); + if (!mbReader.Read()) + return new CilBody(); + return mbReader.CreateCilBody(); + } + + /// + /// Creates a CIL method body or returns an empty one if is not + /// a valid CIL method body. + /// + /// The operand resolver + /// All code + /// Exceptions or null if all exception handlers are in + /// + /// Method parameters + /// Method header flags, eg. 2 if tiny method + /// Max stack + /// Code size + /// Local variable signature token or 0 if none + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, byte[] code, byte[] exceptions, IList parameters, ushort flags, ushort maxStack, uint codeSize, uint localVarSigTok) { + return CreateCilBody(opResolver, code, exceptions, parameters, flags, maxStack, codeSize, localVarSigTok, new GenericParamContext()); + } + + /// + /// Creates a CIL method body or returns an empty one if is not + /// a valid CIL method body. + /// + /// The operand resolver + /// All code + /// Exceptions or null if all exception handlers are in + /// + /// Method parameters + /// Method header flags, eg. 2 if tiny method + /// Max stack + /// Code size + /// Local variable signature token or 0 if none + /// Generic parameter context + public static CilBody CreateCilBody(IInstructionOperandResolver opResolver, byte[] code, byte[] exceptions, IList parameters, ushort flags, ushort maxStack, uint codeSize, uint localVarSigTok, GenericParamContext gpContext) { + var codeReader = MemoryImageStream.Create(code); + var ehReader = exceptions == null ? null : MemoryImageStream.Create(exceptions); + var mbReader = new MethodBodyReader(opResolver, codeReader, ehReader, parameters, gpContext); + mbReader.SetHeader(flags, maxStack, codeSize, localVarSigTok); + if (!mbReader.Read()) + return new CilBody(); + return mbReader.CreateCilBody(); + } + + /// + /// Constructor + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Use parameters from this method + public MethodBodyReader(IInstructionOperandResolver opResolver, IBinaryReader reader, MethodDef method) + : this(opResolver, reader, null, method.Parameters, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Use parameters from this method + /// Generic parameter context + public MethodBodyReader(IInstructionOperandResolver opResolver, IBinaryReader reader, MethodDef method, GenericParamContext gpContext) + : this(opResolver, reader, null, method.Parameters, gpContext) { + } + + /// + /// Constructor + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Method parameters + public MethodBodyReader(IInstructionOperandResolver opResolver, IBinaryReader reader, IList parameters) + : this(opResolver, reader, null, parameters, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Method parameters + /// Generic parameter context + public MethodBodyReader(IInstructionOperandResolver opResolver, IBinaryReader reader, IList parameters, GenericParamContext gpContext) + : this(opResolver, reader, null, parameters, gpContext) { + } + + /// + /// Constructor + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Exception handler reader or null if exceptions aren't + /// present or if contains the exception handlers + /// Method parameters + public MethodBodyReader(IInstructionOperandResolver opResolver, IBinaryReader codeReader, IBinaryReader ehReader, IList parameters) + : this(opResolver, codeReader, ehReader, parameters, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// The operand resolver + /// A reader positioned at the start of a .NET method body + /// Exception handler reader or null if exceptions aren't + /// present or if contains the exception handlers + /// Method parameters + /// Generic parameter context + public MethodBodyReader(IInstructionOperandResolver opResolver, IBinaryReader codeReader, IBinaryReader ehReader, IList parameters, GenericParamContext gpContext) + : base(codeReader, parameters) { + this.opResolver = opResolver; + this.exceptionsReader = ehReader; + this.gpContext = gpContext; + } + + /// + /// Initializes the method header + /// + /// Header flags, eg. 2 if it's a tiny method + /// Max stack + /// Code size + /// Local variable signature token + void SetHeader(ushort flags, ushort maxStack, uint codeSize, uint localVarSigTok) { + this.hasReadHeader = true; + this.flags = flags; + this.maxStack = maxStack; + this.codeSize = codeSize; + this.localVarSigTok = localVarSigTok; + } + + /// + /// Reads the method body header, locals, all instructions, and the exception handlers (if any) + /// + /// true if it worked, and false if something failed + public bool Read() { + try { + if (!ReadHeader()) + return false; + SetLocals(ReadLocals()); + ReadInstructions(); + ReadExceptionHandlers(); + return true; + } + catch (InvalidMethodException) { + return false; + } + catch (IOException) { + return false; + } + } + + /// + /// Reads the method header + /// + bool ReadHeader() { + if (hasReadHeader) + return true; + hasReadHeader = true; + + byte b = reader.ReadByte(); + switch (b & 7) { + case 2: + case 6: + // Tiny header. [7:2] = code size, max stack is 8, no locals or exception handlers + flags = 2; + maxStack = 8; + codeSize = (uint)(b >> 2); + localVarSigTok = 0; + headerSize = 1; + break; + + case 3: + // Fat header. Can have locals and exception handlers + flags = (ushort)((reader.ReadByte() << 8) | b); + headerSize = (byte)(flags >> 12); + maxStack = reader.ReadUInt16(); + codeSize = reader.ReadUInt32(); + localVarSigTok = reader.ReadUInt32(); + + // The CLR allows the code to start inside the method header. But if it does, + // the CLR doesn't read any exceptions. + reader.Position += -12 + headerSize * 4; + if (headerSize < 3) + flags &= 0xFFF7; + headerSize *= 4; + break; + + default: + return false; + } + + if (reader.Position + codeSize < reader.Position || reader.Position + codeSize > reader.Length) + return false; + + return true; + } + + /// + /// Reads the locals + /// + /// All locals or null if there are none + IList ReadLocals() { + var standAloneSig = opResolver.ResolveToken(localVarSigTok, gpContext) as StandAloneSig; + if (standAloneSig == null) + return null; + var localSig = standAloneSig.LocalSig; + if (localSig == null) + return null; + return localSig.Locals; + } + + /// + /// Reads all instructions + /// + void ReadInstructions() { + ReadInstructionsNumBytes(codeSize); + } + + /// + protected override IField ReadInlineField(Instruction instr) { + return opResolver.ResolveToken(reader.ReadUInt32(), gpContext) as IField; + } + + /// + protected override IMethod ReadInlineMethod(Instruction instr) { + return opResolver.ResolveToken(reader.ReadUInt32(), gpContext) as IMethod; + } + + /// + protected override MethodSig ReadInlineSig(Instruction instr) { + var standAloneSig = opResolver.ResolveToken(reader.ReadUInt32(), gpContext) as StandAloneSig; + if (standAloneSig == null) + return null; + var sig = standAloneSig.MethodSig; + if (sig != null) + sig.OriginalToken = standAloneSig.MDToken.Raw; + return sig; + } + + /// + protected override string ReadInlineString(Instruction instr) { + return opResolver.ReadUserString(reader.ReadUInt32()) ?? string.Empty; + } + + /// + protected override ITokenOperand ReadInlineTok(Instruction instr) { + return opResolver.ResolveToken(reader.ReadUInt32(), gpContext) as ITokenOperand; + } + + /// + protected override ITypeDefOrRef ReadInlineType(Instruction instr) { + return opResolver.ResolveToken(reader.ReadUInt32(), gpContext) as ITypeDefOrRef; + } + + /// + /// Reads all exception handlers + /// + void ReadExceptionHandlers() { + if ((flags & 8) == 0) + return; + IBinaryReader ehReader; + if (exceptionsReader != null) + ehReader = exceptionsReader; + else { + ehReader = reader; + ehReader.Position = (ehReader.Position + 3) & ~3; + } + // Only read the first one. Any others aren't used. + byte b = ehReader.ReadByte(); + if ((b & 0x3F) != 1) + return; // Not exception handler clauses + if ((b & 0x40) != 0) + ReadFatExceptionHandlers(ehReader); + else + ReadSmallExceptionHandlers(ehReader); + } + + static ushort GetNumberOfExceptionHandlers(uint num) { + // The CLR truncates the count so num handlers is always <= FFFFh. + return (ushort)num; + } + + void ReadFatExceptionHandlers(IBinaryReader ehReader) { + ehReader.Position--; + int num = GetNumberOfExceptionHandlers((ehReader.ReadUInt32() >> 8) / 24); + for (int i = 0; i < num; i++) { + var eh = new ExceptionHandler((ExceptionHandlerType)ehReader.ReadUInt32()); + uint offs = ehReader.ReadUInt32(); + eh.TryStart = GetInstruction(offs); + eh.TryEnd = GetInstruction(offs + ehReader.ReadUInt32()); + offs = ehReader.ReadUInt32(); + eh.HandlerStart = GetInstruction(offs); + eh.HandlerEnd = GetInstruction(offs + ehReader.ReadUInt32()); + if (eh.HandlerType == ExceptionHandlerType.Catch) + eh.CatchType = opResolver.ResolveToken(ehReader.ReadUInt32(), gpContext) as ITypeDefOrRef; + else if (eh.HandlerType == ExceptionHandlerType.Filter) + eh.FilterStart = GetInstruction(ehReader.ReadUInt32()); + else + ehReader.ReadUInt32(); + Add(eh); + } + } + + void ReadSmallExceptionHandlers(IBinaryReader ehReader) { + int num = GetNumberOfExceptionHandlers((uint)ehReader.ReadByte() / 12); + ehReader.Position += 2; + for (int i = 0; i < num; i++) { + var eh = new ExceptionHandler((ExceptionHandlerType)ehReader.ReadUInt16()); + uint offs = ehReader.ReadUInt16(); + eh.TryStart = GetInstruction(offs); + eh.TryEnd = GetInstruction(offs + ehReader.ReadByte()); + offs = ehReader.ReadUInt16(); + eh.HandlerStart = GetInstruction(offs); + eh.HandlerEnd = GetInstruction(offs + ehReader.ReadByte()); + if (eh.HandlerType == ExceptionHandlerType.Catch) + eh.CatchType = opResolver.ResolveToken(ehReader.ReadUInt32(), gpContext) as ITypeDefOrRef; + else if (eh.HandlerType == ExceptionHandlerType.Filter) + eh.FilterStart = GetInstruction(ehReader.ReadUInt32()); + else + ehReader.ReadUInt32(); + Add(eh); + } + } + + /// + /// Creates a CIL body. Must be called after , and can only be + /// called once. + /// + /// A new instance + public CilBody CreateCilBody() { + // Set init locals if it's a tiny method or if the init locals bit is set (fat header) + bool initLocals = flags == 2 || (flags & 0x10) != 0; + var cilBody = new CilBody(initLocals, instructions, exceptionHandlers, locals); + cilBody.HeaderSize = headerSize; + cilBody.MaxStack = maxStack; + cilBody.LocalVarSigTok = localVarSigTok; + instructions = null; + exceptionHandlers = null; + locals = null; + return cilBody; + } + } +} diff --git a/dnlib/DotNet/Emit/MethodBodyReaderBase.cs b/dnlib/DotNet/Emit/MethodBodyReaderBase.cs new file mode 100644 index 0000000..ac7ecec --- /dev/null +++ b/dnlib/DotNet/Emit/MethodBodyReaderBase.cs @@ -0,0 +1,572 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.IO; +using dnlib.Threading; + +namespace dnlib.DotNet.Emit { + /// + /// Method body reader base class + /// + public abstract class MethodBodyReaderBase { + /// The method reader + protected IBinaryReader reader; + /// All parameters + protected IList parameters; + /// All locals + protected IList locals = new List(); + /// All instructions + protected IList instructions; + /// All exception handlers + protected IList exceptionHandlers = new List(); + uint currentOffset; + /// First byte after the end of the code + protected long codeEndOffs; + /// Start offset of method + protected long codeStartOffs; + + /// + /// Gets all parameters + /// + public IList Parameters { + get { return parameters; } + } + + /// + /// Gets all locals + /// + public IList Locals { + get { return locals; } + } + + /// + /// Gets all instructions + /// + public IList Instructions { + get { return instructions; } + } + + /// + /// Gets all exception handlers + /// + public IList ExceptionHandlers { + get { return exceptionHandlers; } + } + + /// + /// Constructor + /// + protected MethodBodyReaderBase() { + } + + /// + /// Constructor + /// + /// The reader + protected MethodBodyReaderBase(IBinaryReader reader) + : this(reader, null) { + } + + /// + /// Constructor + /// + /// The reader + /// Method parameters or null if they're not known yet + protected MethodBodyReaderBase(IBinaryReader reader, IList parameters) { + this.reader = reader; + this.parameters = parameters; + } + + /// + /// Sets new locals + /// + /// A list of types of all locals or null if none + protected void SetLocals(IList newLocals) { + locals.Clear(); + if (newLocals == null) + return; + foreach (var typeSig in newLocals.GetSafeEnumerable()) + locals.Add(new Local(typeSig)); + } + + /// + /// Sets new locals + /// + /// A list of types of all locals or null if none + protected void SetLocals(IList newLocals) { + locals.Clear(); + if (newLocals == null) + return; + foreach (var local in newLocals.GetSafeEnumerable()) + locals.Add(new Local(local.Type)); + } + + /// + /// Reads all instructions + /// + /// Number of instructions to read + protected void ReadInstructions(int numInstrs) { + codeStartOffs = reader.Position; + codeEndOffs = reader.Length; // We don't know the end pos so use the last one + instructions = new List(numInstrs); + currentOffset = 0; + for (int i = 0; i < numInstrs && reader.Position < codeEndOffs; i++) + instructions.Add(ReadOneInstruction()); + FixBranches(); + } + + /// + /// Reads all instructions + /// + /// Size of code + protected void ReadInstructionsNumBytes(uint codeSize) { + codeStartOffs = reader.Position; + codeEndOffs = reader.Position + codeSize; + if (codeEndOffs < codeStartOffs || codeEndOffs > reader.Length) + throw new InvalidMethodException("Invalid code size"); + + instructions = new List(); //TODO: Estimate number of instructions based on codeSize + currentOffset = 0; + while (reader.Position < codeEndOffs) + instructions.Add(ReadOneInstruction()); + reader.Position = codeEndOffs; + FixBranches(); + } + + /// + /// Fixes all branch instructions so their operands are set to an + /// instead of an offset. + /// + void FixBranches() { + foreach (var instr in instructions) { + switch (instr.OpCode.OperandType) { + case OperandType.InlineBrTarget: + case OperandType.ShortInlineBrTarget: + instr.Operand = GetInstruction((uint)instr.Operand); + break; + + case OperandType.InlineSwitch: + var uintTargets = (IList)instr.Operand; + var targets = new Instruction[uintTargets.Count]; + for (int i = 0; i < uintTargets.Count; i++) + targets[i] = GetInstruction(uintTargets[i]); + instr.Operand = targets; + break; + } + } + } + + /// + /// Finds an instruction + /// + /// Offset of instruction + /// The instruction or null if there's no instruction at . + protected Instruction GetInstruction(uint offset) { + // The instructions are sorted and all Offset fields are correct. Do a binary search. + int lo = 0, hi = instructions.Count - 1; + while (lo <= hi && hi != -1) { + int i = (lo + hi) / 2; + var instr = instructions[i]; + if (instr.Offset == offset) + return instr; + if (offset < instr.Offset) + hi = i - 1; + else + lo = i + 1; + } + return null; + } + + /// + /// Finds an instruction and throws if it's not present + /// + /// Offset of instruction + /// The instruction + /// There's no instruction at + /// + protected Instruction GetInstructionThrow(uint offset) { + var instr = GetInstruction(offset); + if (instr != null) + return instr; + throw new InvalidOperationException(string.Format("There's no instruction @ {0:X4}", offset)); + } + + /// + /// Reads the next instruction + /// + Instruction ReadOneInstruction() { + var instr = new Instruction(); + instr.Offset = currentOffset; + instr.OpCode = ReadOpCode(); + instr.Operand = ReadOperand(instr); + + if (instr.OpCode.Code == Code.Switch) { + var targets = (IList)instr.Operand; + currentOffset += (uint)(instr.OpCode.Size + 4 + 4 * targets.Count); + } + else + currentOffset += (uint)instr.GetSize(); + if (currentOffset < instr.Offset) + reader.Position = codeEndOffs; + return instr; + } + + /// + /// Reads the next OpCode from the current position + /// + OpCode ReadOpCode() { + var op = reader.ReadByte(); + if (op != 0xFE) + return OpCodes.OneByteOpCodes[op]; + return OpCodes.TwoByteOpCodes[reader.ReadByte()]; + } + + /// + /// Reads the instruction operand (if any) + /// + /// The instruction + object ReadOperand(Instruction instr) { + switch (instr.OpCode.OperandType) { + case OperandType.InlineBrTarget: return ReadInlineBrTarget(instr); + case OperandType.InlineField: return ReadInlineField(instr); + case OperandType.InlineI: return ReadInlineI(instr); + case OperandType.InlineI8: return ReadInlineI8(instr); + case OperandType.InlineMethod: return ReadInlineMethod(instr); + case OperandType.InlineNone: return ReadInlineNone(instr); + case OperandType.InlinePhi: return ReadInlinePhi(instr); + case OperandType.InlineR: return ReadInlineR(instr); + case OperandType.InlineSig: return ReadInlineSig(instr); + case OperandType.InlineString: return ReadInlineString(instr); + case OperandType.InlineSwitch: return ReadInlineSwitch(instr); + case OperandType.InlineTok: return ReadInlineTok(instr); + case OperandType.InlineType: return ReadInlineType(instr); + case OperandType.InlineVar: return ReadInlineVar(instr); + case OperandType.ShortInlineBrTarget: return ReadShortInlineBrTarget(instr); + case OperandType.ShortInlineI: return ReadShortInlineI(instr); + case OperandType.ShortInlineR: return ReadShortInlineR(instr); + case OperandType.ShortInlineVar: return ReadShortInlineVar(instr); + default: throw new InvalidOperationException("Invalid OpCode.OperandType"); + } + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual uint ReadInlineBrTarget(Instruction instr) { + return instr.Offset + (uint)instr.GetSize() + reader.ReadUInt32(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected abstract IField ReadInlineField(Instruction instr); + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual int ReadInlineI(Instruction instr) { + return reader.ReadInt32(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual long ReadInlineI8(Instruction instr) { + return reader.ReadInt64(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected abstract IMethod ReadInlineMethod(Instruction instr); + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual object ReadInlineNone(Instruction instr) { + return null; + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual object ReadInlinePhi(Instruction instr) { + return null; + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual double ReadInlineR(Instruction instr) { + return reader.ReadDouble(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected abstract MethodSig ReadInlineSig(Instruction instr); + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected abstract string ReadInlineString(Instruction instr); + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual IList ReadInlineSwitch(Instruction instr) { + var num = reader.ReadUInt32(); + long offsetAfterInstr = (long)instr.Offset + (long)instr.OpCode.Size + 4L + (long)num * 4; + if (offsetAfterInstr > uint.MaxValue || codeStartOffs + offsetAfterInstr > codeEndOffs) { + reader.Position = codeEndOffs; + return new uint[0]; + } + + var targets = new uint[num]; + uint offset = (uint)offsetAfterInstr; + for (int i = 0; i < targets.Length; i++) + targets[i] = offset + reader.ReadUInt32(); + return targets; + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected abstract ITokenOperand ReadInlineTok(Instruction instr); + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected abstract ITypeDefOrRef ReadInlineType(Instruction instr); + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual IVariable ReadInlineVar(Instruction instr) { + if (IsArgOperandInstruction(instr)) + return ReadInlineVarArg(instr); + return ReadInlineVarLocal(instr); + } + + /// + /// Reads a (a parameter) operand + /// + /// The current instruction + /// The operand + protected virtual Parameter ReadInlineVarArg(Instruction instr) { + return GetParameter(reader.ReadUInt16()); + } + + /// + /// Reads a (a local) operand + /// + /// The current instruction + /// The operand + protected virtual Local ReadInlineVarLocal(Instruction instr) { + return GetLocal(reader.ReadUInt16()); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual uint ReadShortInlineBrTarget(Instruction instr) { + return instr.Offset + (uint)instr.GetSize() + (uint)reader.ReadSByte(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual object ReadShortInlineI(Instruction instr) { + if (instr.OpCode.Code == Code.Ldc_I4_S) + return reader.ReadSByte(); + return reader.ReadByte(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual float ReadShortInlineR(Instruction instr) { + return reader.ReadSingle(); + } + + /// + /// Reads a operand + /// + /// The current instruction + /// The operand + protected virtual IVariable ReadShortInlineVar(Instruction instr) { + if (IsArgOperandInstruction(instr)) + return ReadShortInlineVarArg(instr); + return ReadShortInlineVarLocal(instr); + } + + /// + /// Reads a (a parameter) operand + /// + /// The current instruction + /// The operand + protected virtual Parameter ReadShortInlineVarArg(Instruction instr) { + return GetParameter(reader.ReadByte()); + } + + /// + /// Reads a (a local) operand + /// + /// The current instruction + /// The operand + protected virtual Local ReadShortInlineVarLocal(Instruction instr) { + return GetLocal(reader.ReadByte()); + } + + /// + /// Returns true if it's one of the ldarg/starg instructions that have an operand + /// + /// The instruction to check + protected static bool IsArgOperandInstruction(Instruction instr) { + switch (instr.OpCode.Code) { + case Code.Ldarg: + case Code.Ldarg_S: + case Code.Ldarga: + case Code.Ldarga_S: + case Code.Starg: + case Code.Starg_S: + return true; + default: + return false; + } + } + + /// + /// Returns a parameter + /// + /// A parameter index + /// A or null if is invalid + protected Parameter GetParameter(int index) { + return parameters.Get(index, null); + } + + /// + /// Returns a local + /// + /// A local index + /// A or null if is invalid + protected Local GetLocal(int index) { + return locals.Get(index, null); + } + + /// + /// Add an exception handler if it appears valid + /// + /// The exception handler + /// true if it was added, false otherwise + protected bool Add(ExceptionHandler eh) { + uint tryStart = GetOffset(eh.TryStart); + uint tryEnd = GetOffset(eh.TryEnd); + if (tryEnd <= tryStart) + return false; + + uint handlerStart = GetOffset(eh.HandlerStart); + uint handlerEnd = GetOffset(eh.HandlerEnd); + if (handlerEnd <= handlerStart) + return false; + + if (eh.HandlerType == ExceptionHandlerType.Filter) { + if (eh.FilterStart == null) + return false; + if (eh.FilterStart.Offset >= handlerStart) + return false; + } + + if (handlerStart <= tryStart && tryStart < handlerEnd) + return false; + if (handlerStart < tryEnd && tryEnd <= handlerEnd) + return false; + + if (tryStart <= handlerStart && handlerStart < tryEnd) + return false; + if (tryStart < handlerEnd && handlerEnd <= tryEnd) + return false; + + // It's probably valid, so let's add it. + exceptionHandlers.Add(eh); + return true; + } + + /// + /// Gets the offset of an instruction + /// + /// The instruction or null if the offset is the first offset + /// at the end of the method. + /// The instruction offset + uint GetOffset(Instruction instr) { + if (instr != null) + return instr.Offset; + if (instructions.Count == 0) + return 0; + return instructions[instructions.Count - 1].Offset; + } + + /// + /// Restores a 's body with the parsed method instructions + /// and exception handlers + /// + /// The method that gets updated with the instructions, locals, and + /// exception handlers. + public virtual void RestoreMethod(MethodDef method) { + var body = method.Body; + + body.Variables.Clear(); + if (locals != null) { + foreach (var local in locals) + body.Variables.Add(local); + } + + body.Instructions.Clear(); + if (instructions != null) { + foreach (var instr in instructions) + body.Instructions.Add(instr); + } + + body.ExceptionHandlers.Clear(); + if (exceptionHandlers != null) { + foreach (var eh in exceptionHandlers) + body.ExceptionHandlers.Add(eh); + } + } + } +} diff --git a/dnlib/DotNet/Emit/MethodTableToTypeConverter.cs b/dnlib/DotNet/Emit/MethodTableToTypeConverter.cs new file mode 100644 index 0000000..a805e49 --- /dev/null +++ b/dnlib/DotNet/Emit/MethodTableToTypeConverter.cs @@ -0,0 +1,151 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using SR = System.Reflection; +using dnlib.Threading; + +namespace dnlib.DotNet.Emit { + /// + /// Converts a type address to a . The address can be found in + /// RuntimeTypeHandle.Value and it's the same address you use with the WinDbg SOS command + /// !dumpmt. + /// + static class MethodTableToTypeConverter { + const string METHOD_NAME = "m"; + static readonly MethodInfo setMethodBodyMethodInfo = typeof(MethodBuilder).GetMethod("SetMethodBody", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo localSignatureFieldInfo = typeof(ILGenerator).GetField("m_localSignature", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo sigDoneFieldInfo = typeof(SignatureHelper).GetField("m_sigDone", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo currSigFieldInfo = typeof(SignatureHelper).GetField("m_currSig", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo signatureFieldInfo = typeof(SignatureHelper).GetField("m_signature", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo ptrFieldInfo = typeof(RuntimeTypeHandle).GetField("m_ptr", BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); + static readonly Dictionary addrToType = new Dictionary(); + static ModuleBuilder moduleBuilder; + static int numNewTypes; +#if THREAD_SAFE + static readonly Lock theLock = Lock.Create(); +#endif + + static MethodTableToTypeConverter() { + if (ptrFieldInfo == null) { + var asmb = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("DynAsm"), AssemblyBuilderAccess.Run); + moduleBuilder = asmb.DefineDynamicModule("DynMod"); + } + } + + /// + /// Converts to a . + /// + /// Address of type + /// The or null + public static Type Convert(IntPtr address) { + Type type; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (addrToType.TryGetValue(address, out type)) + return type; + + type = GetTypeNET20(address) ?? GetTypeUsingTypeBuilder(address); + addrToType[address] = type; + return type; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + static Type GetTypeUsingTypeBuilder(IntPtr address) { + if (moduleBuilder == null) + return null; + + var tb = moduleBuilder.DefineType(GetNextTypeName()); + var mb = tb.DefineMethod(METHOD_NAME, SR.MethodAttributes.Static, typeof(void), new Type[0]); + + try { + if (setMethodBodyMethodInfo != null) + return GetTypeNET45(tb, mb, address); + else + return GetTypeNET40(tb, mb, address); + } + catch { + moduleBuilder = null; + return null; + } + } + + // .NET 4.5 and later have the documented SetMethodBody() method. + static Type GetTypeNET45(TypeBuilder tb, MethodBuilder mb, IntPtr address) { + byte[] code = new byte[1] { 0x2A }; + int maxStack = 8; + byte[] locals = GetLocalSignature(address); + setMethodBodyMethodInfo.Invoke(mb, new object[5] { code, maxStack, locals, null, null }); + + var createdMethod = tb.CreateType().GetMethod(METHOD_NAME, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); + return createdMethod.GetMethodBody().LocalVariables[0].LocalType; + } + + // This code works with .NET 4.0+ but will throw an exception if .NET 2.0 is used + // ("operation could destabilize the runtime") + static Type GetTypeNET40(TypeBuilder tb, MethodBuilder mb, IntPtr address) { + var ilg = mb.GetILGenerator(); + ilg.Emit(SR.Emit.OpCodes.Ret); + + // We need at least one local to make sure the SignatureHelper from ILGenerator is used. + ilg.DeclareLocal(typeof(int)); + + var locals = GetLocalSignature(address); + var sigHelper = (SignatureHelper)localSignatureFieldInfo.GetValue(ilg); + sigDoneFieldInfo.SetValue(sigHelper, true); + currSigFieldInfo.SetValue(sigHelper, locals.Length); + signatureFieldInfo.SetValue(sigHelper, locals); + + var createdMethod = tb.CreateType().GetMethod(METHOD_NAME, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); + return createdMethod.GetMethodBody().LocalVariables[0].LocalType; + } + + // .NET 2.0 - 3.5 + static Type GetTypeNET20(IntPtr address) { + if (ptrFieldInfo == null) + return null; + object th = new RuntimeTypeHandle(); + ptrFieldInfo.SetValue(th, address); + return Type.GetTypeFromHandle((RuntimeTypeHandle)th); + } + + static string GetNextTypeName() { + return string.Format("Type{0}", numNewTypes++); + } + + static byte[] GetLocalSignature(IntPtr mtAddr) { + ulong mtValue = (ulong)mtAddr.ToInt64(); + if (IntPtr.Size == 4) { + return new byte[] { + 0x07, + 0x01, + (byte)ElementType.Internal, + (byte)mtValue, + (byte)(mtValue >> 8), + (byte)(mtValue >> 16), + (byte)(mtValue >> 24), + }; + } + else { + return new byte[] { + 0x07, + 0x01, + (byte)ElementType.Internal, + (byte)mtValue, + (byte)(mtValue >> 8), + (byte)(mtValue >> 16), + (byte)(mtValue >> 24), + (byte)(mtValue >> 32), + (byte)(mtValue >> 40), + (byte)(mtValue >> 48), + (byte)(mtValue >> 56), + }; + } + } + } +} diff --git a/dnlib/DotNet/Emit/MethodUtils.cs b/dnlib/DotNet/Emit/MethodUtils.cs new file mode 100644 index 0000000..a02f354 --- /dev/null +++ b/dnlib/DotNet/Emit/MethodUtils.cs @@ -0,0 +1,505 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Threading; + +namespace dnlib.DotNet.Emit { + /// + /// Instruction utility methods + /// + public static class MethodUtils { + /// + /// Shorter instructions are converted to the longer form, eg. Ldc_I4_1 is + /// converted to Ldc_I4 with a 1 as the operand. + /// + /// All instructions + /// All locals + /// All method parameters, including the hidden 'this' parameter + /// if it's an instance method. Use . + public static void SimplifyMacros(this IList instructions, IList locals, IList parameters) { + foreach (var instr in instructions.GetSafeEnumerable()) { + switch (instr.OpCode.Code) { + case Code.Beq_S: + instr.OpCode = OpCodes.Beq; + break; + + case Code.Bge_S: + instr.OpCode = OpCodes.Bge; + break; + + case Code.Bge_Un_S: + instr.OpCode = OpCodes.Bge_Un; + break; + + case Code.Bgt_S: + instr.OpCode = OpCodes.Bgt; + break; + + case Code.Bgt_Un_S: + instr.OpCode = OpCodes.Bgt_Un; + break; + + case Code.Ble_S: + instr.OpCode = OpCodes.Ble; + break; + + case Code.Ble_Un_S: + instr.OpCode = OpCodes.Ble_Un; + break; + + case Code.Blt_S: + instr.OpCode = OpCodes.Blt; + break; + + case Code.Blt_Un_S: + instr.OpCode = OpCodes.Blt_Un; + break; + + case Code.Bne_Un_S: + instr.OpCode = OpCodes.Bne_Un; + break; + + case Code.Br_S: + instr.OpCode = OpCodes.Br; + break; + + case Code.Brfalse_S: + instr.OpCode = OpCodes.Brfalse; + break; + + case Code.Brtrue_S: + instr.OpCode = OpCodes.Brtrue; + break; + + case Code.Ldarg_0: + instr.OpCode = OpCodes.Ldarg; + instr.Operand = ReadList(parameters, 0); + break; + + case Code.Ldarg_1: + instr.OpCode = OpCodes.Ldarg; + instr.Operand = ReadList(parameters, 1); + break; + + case Code.Ldarg_2: + instr.OpCode = OpCodes.Ldarg; + instr.Operand = ReadList(parameters, 2); + break; + + case Code.Ldarg_3: + instr.OpCode = OpCodes.Ldarg; + instr.Operand = ReadList(parameters, 3); + break; + + case Code.Ldarg_S: + instr.OpCode = OpCodes.Ldarg; + break; + + case Code.Ldarga_S: + instr.OpCode = OpCodes.Ldarga; + break; + + case Code.Ldc_I4_0: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 0; + break; + + case Code.Ldc_I4_1: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 1; + break; + + case Code.Ldc_I4_2: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 2; + break; + + case Code.Ldc_I4_3: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 3; + break; + + case Code.Ldc_I4_4: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 4; + break; + + case Code.Ldc_I4_5: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 5; + break; + + case Code.Ldc_I4_6: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 6; + break; + + case Code.Ldc_I4_7: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 7; + break; + + case Code.Ldc_I4_8: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = 8; + break; + + case Code.Ldc_I4_M1: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = -1; + break; + + case Code.Ldc_I4_S: + instr.OpCode = OpCodes.Ldc_I4; + instr.Operand = (int)(sbyte)instr.Operand; + break; + + case Code.Ldloc_0: + instr.OpCode = OpCodes.Ldloc; + instr.Operand = ReadList(locals, 0); + break; + + case Code.Ldloc_1: + instr.OpCode = OpCodes.Ldloc; + instr.Operand = ReadList(locals, 1); + break; + + case Code.Ldloc_2: + instr.OpCode = OpCodes.Ldloc; + instr.Operand = ReadList(locals, 2); + break; + + case Code.Ldloc_3: + instr.OpCode = OpCodes.Ldloc; + instr.Operand = ReadList(locals, 3); + break; + + case Code.Ldloc_S: + instr.OpCode = OpCodes.Ldloc; + break; + + case Code.Ldloca_S: + instr.OpCode = OpCodes.Ldloca; + break; + + case Code.Leave_S: + instr.OpCode = OpCodes.Leave; + break; + + case Code.Starg_S: + instr.OpCode = OpCodes.Starg; + break; + + case Code.Stloc_0: + instr.OpCode = OpCodes.Stloc; + instr.Operand = ReadList(locals, 0); + break; + + case Code.Stloc_1: + instr.OpCode = OpCodes.Stloc; + instr.Operand = ReadList(locals, 1); + break; + + case Code.Stloc_2: + instr.OpCode = OpCodes.Stloc; + instr.Operand = ReadList(locals, 2); + break; + + case Code.Stloc_3: + instr.OpCode = OpCodes.Stloc; + instr.Operand = ReadList(locals, 3); + break; + + case Code.Stloc_S: + instr.OpCode = OpCodes.Stloc; + break; + } + } + } + + static T ReadList(IList list, int index) { + if (list == null) + return default(T); + return list.Get(index, default(T)); + } + + /// + /// Optimizes instructions by using the shorter form if possible. Eg. Ldc_I4 1 + /// will be replaced with Ldc_I4_1. + /// + /// All instructions + public static void OptimizeMacros(this IList instructions) { + foreach (var instr in instructions.GetSafeEnumerable()) { + Parameter arg; + Local local; + switch (instr.OpCode.Code) { + case Code.Ldarg: + case Code.Ldarg_S: + arg = instr.Operand as Parameter; + if (arg == null) + break; + if (arg.Index == 0) { + instr.OpCode = OpCodes.Ldarg_0; + instr.Operand = null; + } + else if (arg.Index == 1) { + instr.OpCode = OpCodes.Ldarg_1; + instr.Operand = null; + } + else if (arg.Index == 2) { + instr.OpCode = OpCodes.Ldarg_2; + instr.Operand = null; + } + else if (arg.Index == 3) { + instr.OpCode = OpCodes.Ldarg_3; + instr.Operand = null; + } + else if (byte.MinValue <= arg.Index && arg.Index <= byte.MaxValue) + instr.OpCode = OpCodes.Ldarg_S; + break; + + case Code.Ldarga: + arg = instr.Operand as Parameter; + if (arg == null) + break; + if (byte.MinValue <= arg.Index && arg.Index <= byte.MaxValue) + instr.OpCode = OpCodes.Ldarga_S; + break; + + case Code.Ldc_I4: + case Code.Ldc_I4_S: + int i4; + if (instr.Operand is int) + i4 = (int)instr.Operand; + else if (instr.Operand is sbyte) + i4 = (sbyte)instr.Operand; + else + break; + switch (i4) { + case 0: + instr.OpCode = OpCodes.Ldc_I4_0; + instr.Operand = null; + break; + + case 1: + instr.OpCode = OpCodes.Ldc_I4_1; + instr.Operand = null; + break; + + case 2: + instr.OpCode = OpCodes.Ldc_I4_2; + instr.Operand = null; + break; + + case 3: + instr.OpCode = OpCodes.Ldc_I4_3; + instr.Operand = null; + break; + + case 4: + instr.OpCode = OpCodes.Ldc_I4_4; + instr.Operand = null; + break; + + case 5: + instr.OpCode = OpCodes.Ldc_I4_5; + instr.Operand = null; + break; + + case 6: + instr.OpCode = OpCodes.Ldc_I4_6; + instr.Operand = null; + break; + + case 7: + instr.OpCode = OpCodes.Ldc_I4_7; + instr.Operand = null; + break; + + case 8: + instr.OpCode = OpCodes.Ldc_I4_8; + instr.Operand = null; + break; + + case -1: + instr.OpCode = OpCodes.Ldc_I4_M1; + instr.Operand = null; + break; + + default: + if (sbyte.MinValue <= i4 && i4 <= sbyte.MaxValue) { + instr.OpCode = OpCodes.Ldc_I4_S; + instr.Operand = (sbyte)i4; + } + break; + } + break; + + case Code.Ldloc: + case Code.Ldloc_S: + local = instr.Operand as Local; + if (local == null) + break; + if (local.Index == 0) { + instr.OpCode = OpCodes.Ldloc_0; + instr.Operand = null; + } + else if (local.Index == 1) { + instr.OpCode = OpCodes.Ldloc_1; + instr.Operand = null; + } + else if (local.Index == 2) { + instr.OpCode = OpCodes.Ldloc_2; + instr.Operand = null; + } + else if (local.Index == 3) { + instr.OpCode = OpCodes.Ldloc_3; + instr.Operand = null; + } + else if (byte.MinValue <= local.Index && local.Index <= byte.MaxValue) + instr.OpCode = OpCodes.Ldloc_S; + break; + + case Code.Ldloca: + local = instr.Operand as Local; + if (local == null) + break; + if (byte.MinValue <= local.Index && local.Index <= byte.MaxValue) + instr.OpCode = OpCodes.Ldloca_S; + break; + + case Code.Starg: + arg = instr.Operand as Parameter; + if (arg == null) + break; + if (byte.MinValue <= arg.Index && arg.Index <= byte.MaxValue) + instr.OpCode = OpCodes.Starg_S; + break; + + case Code.Stloc: + case Code.Stloc_S: + local = instr.Operand as Local; + if (local == null) + break; + if (local.Index == 0) { + instr.OpCode = OpCodes.Stloc_0; + instr.Operand = null; + } + else if (local.Index == 1) { + instr.OpCode = OpCodes.Stloc_1; + instr.Operand = null; + } + else if (local.Index == 2) { + instr.OpCode = OpCodes.Stloc_2; + instr.Operand = null; + } + else if (local.Index == 3) { + instr.OpCode = OpCodes.Stloc_3; + instr.Operand = null; + } + else if (byte.MinValue <= local.Index && local.Index <= byte.MaxValue) + instr.OpCode = OpCodes.Stloc_S; + break; + } + } + + OptimizeBranches(instructions); + } + + /// + /// Short branch instructions are converted to the long form, eg. Beq_S is + /// converted to Beq. + /// + /// All instructions + public static void SimplifyBranches(this IList instructions) { + foreach (var instr in instructions.GetSafeEnumerable()) { + switch (instr.OpCode.Code) { + case Code.Beq_S: instr.OpCode = OpCodes.Beq; break; + case Code.Bge_S: instr.OpCode = OpCodes.Bge; break; + case Code.Bgt_S: instr.OpCode = OpCodes.Bgt; break; + case Code.Ble_S: instr.OpCode = OpCodes.Ble; break; + case Code.Blt_S: instr.OpCode = OpCodes.Blt; break; + case Code.Bne_Un_S: instr.OpCode = OpCodes.Bne_Un; break; + case Code.Bge_Un_S: instr.OpCode = OpCodes.Bge_Un; break; + case Code.Bgt_Un_S: instr.OpCode = OpCodes.Bgt_Un; break; + case Code.Ble_Un_S: instr.OpCode = OpCodes.Ble_Un; break; + case Code.Blt_Un_S: instr.OpCode = OpCodes.Blt_Un; break; + case Code.Br_S: instr.OpCode = OpCodes.Br; break; + case Code.Brfalse_S:instr.OpCode = OpCodes.Brfalse; break; + case Code.Brtrue_S: instr.OpCode = OpCodes.Brtrue; break; + case Code.Leave_S: instr.OpCode = OpCodes.Leave; break; + } + } + } + + /// + /// Optimizes branches by using the smallest possible branch + /// + /// All instructions + public static void OptimizeBranches(this IList instructions) { + while (true) { + UpdateInstructionOffsets(instructions); + + bool modified = false; + foreach (var instr in instructions.GetSafeEnumerable()) { + OpCode shortOpCode; + switch (instr.OpCode.Code) { + case Code.Beq: shortOpCode = OpCodes.Beq_S; break; + case Code.Bge: shortOpCode = OpCodes.Bge_S; break; + case Code.Bge_Un: shortOpCode = OpCodes.Bge_Un_S; break; + case Code.Bgt: shortOpCode = OpCodes.Bgt_S; break; + case Code.Bgt_Un: shortOpCode = OpCodes.Bgt_Un_S; break; + case Code.Ble: shortOpCode = OpCodes.Ble_S; break; + case Code.Ble_Un: shortOpCode = OpCodes.Ble_Un_S; break; + case Code.Blt: shortOpCode = OpCodes.Blt_S; break; + case Code.Blt_Un: shortOpCode = OpCodes.Blt_Un_S; break; + case Code.Bne_Un: shortOpCode = OpCodes.Bne_Un_S; break; + case Code.Br: shortOpCode = OpCodes.Br_S; break; + case Code.Brfalse: shortOpCode = OpCodes.Brfalse_S; break; + case Code.Brtrue: shortOpCode = OpCodes.Brtrue_S; break; + case Code.Leave: shortOpCode = OpCodes.Leave_S; break; + default: continue; + } + var targetInstr = instr.Operand as Instruction; + if (targetInstr == null) + continue; + + int afterShortInstr; + if (targetInstr.Offset >= instr.Offset) { + // Target is >= this instruction so use the offset after + // current instruction + afterShortInstr = (int)instr.Offset + instr.GetSize(); + } + else { + // Target is < this instruction so use the offset after + // the short instruction + const int operandSize = 1; + afterShortInstr = (int)instr.Offset + shortOpCode.Size + operandSize; + } + + int displ = (int)targetInstr.Offset - afterShortInstr; + if (sbyte.MinValue <= displ && displ <= sbyte.MaxValue) { + instr.OpCode = shortOpCode; + modified = true; + } + } + if (!modified) + break; + } + } + + /// + /// Updates each instruction's offset + /// + /// All instructions + /// Total size in bytes of all instructions + public static uint UpdateInstructionOffsets(this IList instructions) { + uint offset = 0; + foreach (var instr in instructions.GetSafeEnumerable()) { + instr.Offset = offset; + offset += (uint)instr.GetSize(); + } + return offset; + } + } +} diff --git a/dnlib/DotNet/Emit/OpCode.cs b/dnlib/DotNet/Emit/OpCode.cs new file mode 100644 index 0000000..f72769e --- /dev/null +++ b/dnlib/DotNet/Emit/OpCode.cs @@ -0,0 +1,249 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Threading; + +namespace dnlib.DotNet.Emit { + /// + /// A CIL opcode + /// + public sealed class OpCode { + /// + /// The opcode name + /// + public readonly string Name; + + /// + /// The opcode as a enum + /// + public readonly Code Code; + + /// + /// Operand type + /// + public readonly OperandType OperandType; + + /// + /// Flow control info + /// + public readonly FlowControl FlowControl; + + /// + /// Opcode type + /// + public readonly OpCodeType OpCodeType; + + /// + /// Push stack behavior + /// + public readonly StackBehaviour StackBehaviourPush; // UK spelling for compatibility with Reflection + + /// + /// Pop stack behavior + /// + public readonly StackBehaviour StackBehaviourPop; // UK spelling for compatibility with Reflection + + /// + /// Gets the value which is compatible with + /// + public short Value { + get { return (short)Code; } + } + + /// + /// Gets the size of the opcode. It's either 1 or 2 bytes. + /// + public int Size { + get { return Code < (Code)0x100 || Code == Code.UNKNOWN1 ? 1 : 2; } + } + + internal OpCode(string name, Code code, OperandType operandType, FlowControl flowControl, OpCodeType opCodeType, StackBehaviour push, StackBehaviour pop) { + this.Name = name; + this.Code = code; + this.OperandType = operandType; + this.FlowControl = flowControl; + this.OpCodeType = opCodeType; + this.StackBehaviourPush = push; + this.StackBehaviourPop = pop; + if (((ushort)code >> 8) == 0) + OpCodes.OneByteOpCodes[(byte)code] = this; + else if (((ushort)code >> 8) == 0xFE) + OpCodes.TwoByteOpCodes[(byte)code] = this; + } + + /// + /// Creates a new instruction with no operand + /// + /// A new instance + public Instruction ToInstruction() { + return Instruction.Create(this); + } + + /// + /// Creates a new instruction with a operand + /// + /// The value + /// A new instance + public Instruction ToInstruction(byte value) { + return Instruction.Create(this, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The value + /// A new instance + public Instruction ToInstruction(sbyte value) { + return Instruction.Create(this, value); + } + + /// + /// Creates a new instruction with an operand + /// + /// The value + /// A new instance + public Instruction ToInstruction(int value) { + return Instruction.Create(this, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The value + /// A new instance + public Instruction ToInstruction(long value) { + return Instruction.Create(this, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The value + /// A new instance + public Instruction ToInstruction(float value) { + return Instruction.Create(this, value); + } + + /// + /// Creates a new instruction with a operand + /// + /// The value + /// A new instance + public Instruction ToInstruction(double value) { + return Instruction.Create(this, value); + } + + /// + /// Creates a new instruction with a string operand + /// + /// The string + /// A new instance + public Instruction ToInstruction(string s) { + return Instruction.Create(this, s); + } + + /// + /// Creates a new instruction with an instruction target operand + /// + /// Target instruction + /// A new instance + public Instruction ToInstruction(Instruction target) { + return Instruction.Create(this, target); + } + + /// + /// Creates a new instruction with an instruction target list operand + /// + /// The targets + /// A new instance + public Instruction ToInstruction(IList targets) { + return Instruction.Create(this, ThreadSafeListCreator.MakeThreadSafe(targets)); + } + + /// + /// Creates a new instruction with a type operand + /// + /// The type + /// A new instance + public Instruction ToInstruction(ITypeDefOrRef type) { + return Instruction.Create(this, type); + } + + /// + /// Creates a new instruction with a type operand + /// + /// The type + /// A new instance + public Instruction ToInstruction(CorLibTypeSig type) { + return Instruction.Create(this, type.TypeDefOrRef); + } + + /// + /// Creates a new instruction with a method/field operand + /// + /// The method/field + /// A new instance + public Instruction ToInstruction(MemberRef mr) { + return Instruction.Create(this, mr); + } + + /// + /// Creates a new instruction with a field operand + /// + /// The field + /// A new instance + public Instruction ToInstruction(IField field) { + return Instruction.Create(this, field); + } + + /// + /// Creates a new instruction with a method operand + /// + /// The method + /// A new instance + public Instruction ToInstruction(IMethod method) { + return Instruction.Create(this, method); + } + + /// + /// Creates a new instruction with a token operand + /// + /// The token + /// A new instance + public Instruction ToInstruction(ITokenOperand token) { + return Instruction.Create(this, token); + } + + /// + /// Creates a new instruction with a method signature operand + /// + /// The method signature + /// A new instance + public Instruction ToInstruction(MethodSig methodSig) { + return Instruction.Create(this, methodSig); + } + + /// + /// Creates a new instruction with a method parameter operand + /// + /// The method parameter + /// A new instance + public Instruction ToInstruction(Parameter parameter) { + return Instruction.Create(this, parameter); + } + + /// + /// Creates a new instruction with a method local operand + /// + /// The method local + /// A new instance + public Instruction ToInstruction(Local local) { + return Instruction.Create(this, local); + } + + /// + public override string ToString() { + return Name; + } + } +} diff --git a/dnlib/DotNet/Emit/OpCodeType.cs b/dnlib/DotNet/Emit/OpCodeType.cs new file mode 100644 index 0000000..473ad43 --- /dev/null +++ b/dnlib/DotNet/Emit/OpCodeType.cs @@ -0,0 +1,21 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// CIL opcode type + /// + public enum OpCodeType : byte { + /// + Annotation, + /// + Macro, + /// + Nternal, + /// + Objmodel, + /// + Prefix, + /// + Primitive, + } +} diff --git a/dnlib/DotNet/Emit/OpCodes.cs b/dnlib/DotNet/Emit/OpCodes.cs new file mode 100644 index 0000000..bfcda86 --- /dev/null +++ b/dnlib/DotNet/Emit/OpCodes.cs @@ -0,0 +1,263 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// Contains all valid CIL opcodes + /// + public static class OpCodes { + /// + /// All one-byte opcodes + /// + public static readonly OpCode[] OneByteOpCodes = new OpCode[0x100]; + + /// + /// All two-byte opcodes (first byte is 0xFE) + /// + public static readonly OpCode[] TwoByteOpCodes = new OpCode[0x100]; + +#pragma warning disable 1591 // disable XML doc warning + public static readonly OpCode UNKNOWN1 = new OpCode("UNKNOWN1", Code.UNKNOWN1, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode UNKNOWN2 = new OpCode("UNKNOWN2", Code.UNKNOWN2, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Nop = new OpCode("nop", Code.Nop, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Break = new OpCode("break", Code.Break, OperandType.InlineNone, FlowControl.Break, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Ldarg_0 = new OpCode("ldarg.0", Code.Ldarg_0, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldarg_1 = new OpCode("ldarg.1", Code.Ldarg_1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldarg_2 = new OpCode("ldarg.2", Code.Ldarg_2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldarg_3 = new OpCode("ldarg.3", Code.Ldarg_3, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldloc_0 = new OpCode("ldloc.0", Code.Ldloc_0, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldloc_1 = new OpCode("ldloc.1", Code.Ldloc_1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldloc_2 = new OpCode("ldloc.2", Code.Ldloc_2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldloc_3 = new OpCode("ldloc.3", Code.Ldloc_3, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Stloc_0 = new OpCode("stloc.0", Code.Stloc_0, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Stloc_1 = new OpCode("stloc.1", Code.Stloc_1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Stloc_2 = new OpCode("stloc.2", Code.Stloc_2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Stloc_3 = new OpCode("stloc.3", Code.Stloc_3, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Ldarg_S = new OpCode("ldarg.s", Code.Ldarg_S, OperandType.ShortInlineVar, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldarga_S = new OpCode("ldarga.s", Code.Ldarga_S, OperandType.ShortInlineVar, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Starg_S = new OpCode("starg.s", Code.Starg_S, OperandType.ShortInlineVar, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Ldloc_S = new OpCode("ldloc.s", Code.Ldloc_S, OperandType.ShortInlineVar, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldloca_S = new OpCode("ldloca.s", Code.Ldloca_S, OperandType.ShortInlineVar, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Stloc_S = new OpCode("stloc.s", Code.Stloc_S, OperandType.ShortInlineVar, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Ldnull = new OpCode("ldnull", Code.Ldnull, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushref, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_M1 = new OpCode("ldc.i4.m1", Code.Ldc_I4_M1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_0 = new OpCode("ldc.i4.0", Code.Ldc_I4_0, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_1 = new OpCode("ldc.i4.1", Code.Ldc_I4_1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_2 = new OpCode("ldc.i4.2", Code.Ldc_I4_2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_3 = new OpCode("ldc.i4.3", Code.Ldc_I4_3, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_4 = new OpCode("ldc.i4.4", Code.Ldc_I4_4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_5 = new OpCode("ldc.i4.5", Code.Ldc_I4_5, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_6 = new OpCode("ldc.i4.6", Code.Ldc_I4_6, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_7 = new OpCode("ldc.i4.7", Code.Ldc_I4_7, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_8 = new OpCode("ldc.i4.8", Code.Ldc_I4_8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4_S = new OpCode("ldc.i4.s", Code.Ldc_I4_S, OperandType.ShortInlineI, FlowControl.Next, OpCodeType.Macro, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I4 = new OpCode("ldc.i4", Code.Ldc_I4, OperandType.InlineI, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldc_I8 = new OpCode("ldc.i8", Code.Ldc_I8, OperandType.InlineI8, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop0); + public static readonly OpCode Ldc_R4 = new OpCode("ldc.r4", Code.Ldc_R4, OperandType.ShortInlineR, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr4, StackBehaviour.Pop0); + public static readonly OpCode Ldc_R8 = new OpCode("ldc.r8", Code.Ldc_R8, OperandType.InlineR, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr8, StackBehaviour.Pop0); + public static readonly OpCode Dup = new OpCode("dup", Code.Dup, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1_push1, StackBehaviour.Pop1); + public static readonly OpCode Pop = new OpCode("pop", Code.Pop, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Jmp = new OpCode("jmp", Code.Jmp, OperandType.InlineMethod, FlowControl.Call, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Call = new OpCode("call", Code.Call, OperandType.InlineMethod, FlowControl.Call, OpCodeType.Primitive, StackBehaviour.Varpush, StackBehaviour.Varpop); + public static readonly OpCode Calli = new OpCode("calli", Code.Calli, OperandType.InlineSig, FlowControl.Call, OpCodeType.Primitive, StackBehaviour.Varpush, StackBehaviour.Varpop); + public static readonly OpCode Ret = new OpCode("ret", Code.Ret, OperandType.InlineNone, FlowControl.Return, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Varpop); + public static readonly OpCode Br_S = new OpCode("br.s", Code.Br_S, OperandType.ShortInlineBrTarget, FlowControl.Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Brfalse_S = new OpCode("brfalse.s", Code.Brfalse_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Brtrue_S = new OpCode("brtrue.s", Code.Brtrue_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Beq_S = new OpCode("beq.s", Code.Beq_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bge_S = new OpCode("bge.s", Code.Bge_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bgt_S = new OpCode("bgt.s", Code.Bgt_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Ble_S = new OpCode("ble.s", Code.Ble_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Blt_S = new OpCode("blt.s", Code.Blt_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bne_Un_S = new OpCode("bne.un.s", Code.Bne_Un_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bge_Un_S = new OpCode("bge.un.s", Code.Bge_Un_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bgt_Un_S = new OpCode("bgt.un.s", Code.Bgt_Un_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Ble_Un_S = new OpCode("ble.un.s", Code.Ble_Un_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Blt_Un_S = new OpCode("blt.un.s", Code.Blt_Un_S, OperandType.ShortInlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Br = new OpCode("br", Code.Br, OperandType.InlineBrTarget, FlowControl.Branch, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Brfalse = new OpCode("brfalse", Code.Brfalse, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Brtrue = new OpCode("brtrue", Code.Brtrue, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Beq = new OpCode("beq", Code.Beq, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bge = new OpCode("bge", Code.Bge, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bgt = new OpCode("bgt", Code.Bgt, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Ble = new OpCode("ble", Code.Ble, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Blt = new OpCode("blt", Code.Blt, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bne_Un = new OpCode("bne.un", Code.Bne_Un, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bge_Un = new OpCode("bge.un", Code.Bge_Un, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Bgt_Un = new OpCode("bgt.un", Code.Bgt_Un, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Ble_Un = new OpCode("ble.un", Code.Ble_Un, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Blt_Un = new OpCode("blt.un", Code.Blt_Un, OperandType.InlineBrTarget, FlowControl.Cond_Branch, OpCodeType.Macro, StackBehaviour.Push0, StackBehaviour.Pop1_pop1); + public static readonly OpCode Switch = new OpCode("switch", Code.Switch, OperandType.InlineSwitch, FlowControl.Cond_Branch, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Ldind_I1 = new OpCode("ldind.i1", Code.Ldind_I1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_U1 = new OpCode("ldind.u1", Code.Ldind_U1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_I2 = new OpCode("ldind.i2", Code.Ldind_I2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_U2 = new OpCode("ldind.u2", Code.Ldind_U2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_I4 = new OpCode("ldind.i4", Code.Ldind_I4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_U4 = new OpCode("ldind.u4", Code.Ldind_U4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_I8 = new OpCode("ldind.i8", Code.Ldind_I8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Popi); + public static readonly OpCode Ldind_I = new OpCode("ldind.i", Code.Ldind_I, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Ldind_R4 = new OpCode("ldind.r4", Code.Ldind_R4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr4, StackBehaviour.Popi); + public static readonly OpCode Ldind_R8 = new OpCode("ldind.r8", Code.Ldind_R8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr8, StackBehaviour.Popi); + public static readonly OpCode Ldind_Ref = new OpCode("ldind.ref", Code.Ldind_Ref, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushref, StackBehaviour.Popi); + public static readonly OpCode Stind_Ref = new OpCode("stind.ref", Code.Stind_Ref, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi); + public static readonly OpCode Stind_I1 = new OpCode("stind.i1", Code.Stind_I1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi); + public static readonly OpCode Stind_I2 = new OpCode("stind.i2", Code.Stind_I2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi); + public static readonly OpCode Stind_I4 = new OpCode("stind.i4", Code.Stind_I4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi); + public static readonly OpCode Stind_I8 = new OpCode("stind.i8", Code.Stind_I8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi8); + public static readonly OpCode Stind_R4 = new OpCode("stind.r4", Code.Stind_R4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popr4); + public static readonly OpCode Stind_R8 = new OpCode("stind.r8", Code.Stind_R8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popr8); + public static readonly OpCode Add = new OpCode("add", Code.Add, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Sub = new OpCode("sub", Code.Sub, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Mul = new OpCode("mul", Code.Mul, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Div = new OpCode("div", Code.Div, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Div_Un = new OpCode("div.un", Code.Div_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Rem = new OpCode("rem", Code.Rem, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Rem_Un = new OpCode("rem.un", Code.Rem_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode And = new OpCode("and", Code.And, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Or = new OpCode("or", Code.Or, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Xor = new OpCode("xor", Code.Xor, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Shl = new OpCode("shl", Code.Shl, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Shr = new OpCode("shr", Code.Shr, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Shr_Un = new OpCode("shr.un", Code.Shr_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Neg = new OpCode("neg", Code.Neg, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1); + public static readonly OpCode Not = new OpCode("not", Code.Not, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1); + public static readonly OpCode Conv_I1 = new OpCode("conv.i1", Code.Conv_I1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_I2 = new OpCode("conv.i2", Code.Conv_I2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_I4 = new OpCode("conv.i4", Code.Conv_I4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_I8 = new OpCode("conv.i8", Code.Conv_I8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop1); + public static readonly OpCode Conv_R4 = new OpCode("conv.r4", Code.Conv_R4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr4, StackBehaviour.Pop1); + public static readonly OpCode Conv_R8 = new OpCode("conv.r8", Code.Conv_R8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr8, StackBehaviour.Pop1); + public static readonly OpCode Conv_U4 = new OpCode("conv.u4", Code.Conv_U4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_U8 = new OpCode("conv.u8", Code.Conv_U8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop1); + public static readonly OpCode Callvirt = new OpCode("callvirt", Code.Callvirt, OperandType.InlineMethod, FlowControl.Call, OpCodeType.Objmodel, StackBehaviour.Varpush, StackBehaviour.Varpop); + public static readonly OpCode Cpobj = new OpCode("cpobj", Code.Cpobj, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popi_popi); + public static readonly OpCode Ldobj = new OpCode("ldobj", Code.Ldobj, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push1, StackBehaviour.Popi); + public static readonly OpCode Ldstr = new OpCode("ldstr", Code.Ldstr, OperandType.InlineString, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushref, StackBehaviour.Pop0); + public static readonly OpCode Newobj = new OpCode("newobj", Code.Newobj, OperandType.InlineMethod, FlowControl.Call, OpCodeType.Objmodel, StackBehaviour.Pushref, StackBehaviour.Varpop); + public static readonly OpCode Castclass = new OpCode("castclass", Code.Castclass, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushref, StackBehaviour.Popref); + public static readonly OpCode Isinst = new OpCode("isinst", Code.Isinst, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref); + public static readonly OpCode Conv_R_Un = new OpCode("conv.r.un", Code.Conv_R_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr8, StackBehaviour.Pop1); + public static readonly OpCode Unbox = new OpCode("unbox", Code.Unbox, OperandType.InlineType, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popref); + public static readonly OpCode Throw = new OpCode("throw", Code.Throw, OperandType.InlineNone, FlowControl.Throw, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref); + public static readonly OpCode Ldfld = new OpCode("ldfld", Code.Ldfld, OperandType.InlineField, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push1, StackBehaviour.Popref); + public static readonly OpCode Ldflda = new OpCode("ldflda", Code.Ldflda, OperandType.InlineField, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref); + public static readonly OpCode Stfld = new OpCode("stfld", Code.Stfld, OperandType.InlineField, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_pop1); + public static readonly OpCode Ldsfld = new OpCode("ldsfld", Code.Ldsfld, OperandType.InlineField, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldsflda = new OpCode("ldsflda", Code.Ldsflda, OperandType.InlineField, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Stsfld = new OpCode("stsfld", Code.Stsfld, OperandType.InlineField, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Stobj = new OpCode("stobj", Code.Stobj, OperandType.InlineType, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_pop1); + public static readonly OpCode Conv_Ovf_I1_Un= new OpCode("conv.ovf.i1.un", Code.Conv_Ovf_I1_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I2_Un= new OpCode("conv.ovf.i2.un", Code.Conv_Ovf_I2_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I4_Un= new OpCode("conv.ovf.i4.un", Code.Conv_Ovf_I4_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I8_Un= new OpCode("conv.ovf.i8.un", Code.Conv_Ovf_I8_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U1_Un= new OpCode("conv.ovf.u1.un", Code.Conv_Ovf_U1_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U2_Un= new OpCode("conv.ovf.u2.un", Code.Conv_Ovf_U2_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U4_Un= new OpCode("conv.ovf.u4.un", Code.Conv_Ovf_U4_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U8_Un= new OpCode("conv.ovf.u8.un", Code.Conv_Ovf_U8_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I_Un = new OpCode("conv.ovf.i.un", Code.Conv_Ovf_I_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U_Un = new OpCode("conv.ovf.u.un", Code.Conv_Ovf_U_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Box = new OpCode("box", Code.Box, OperandType.InlineType, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushref, StackBehaviour.Pop1); + public static readonly OpCode Newarr = new OpCode("newarr", Code.Newarr, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushref, StackBehaviour.Popi); + public static readonly OpCode Ldlen = new OpCode("ldlen", Code.Ldlen, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref); + public static readonly OpCode Ldelema = new OpCode("ldelema", Code.Ldelema, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_I1 = new OpCode("ldelem.i1", Code.Ldelem_I1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_U1 = new OpCode("ldelem.u1", Code.Ldelem_U1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_I2 = new OpCode("ldelem.i2", Code.Ldelem_I2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_U2 = new OpCode("ldelem.u2", Code.Ldelem_U2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_I4 = new OpCode("ldelem.i4", Code.Ldelem_I4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_U4 = new OpCode("ldelem.u4", Code.Ldelem_U4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_I8 = new OpCode("ldelem.i8", Code.Ldelem_I8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi8, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_I = new OpCode("ldelem.i", Code.Ldelem_I, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushi, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_R4 = new OpCode("ldelem.r4", Code.Ldelem_R4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushr4, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_R8 = new OpCode("ldelem.r8", Code.Ldelem_R8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushr8, StackBehaviour.Popref_popi); + public static readonly OpCode Ldelem_Ref = new OpCode("ldelem.ref", Code.Ldelem_Ref, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Pushref, StackBehaviour.Popref_popi); + public static readonly OpCode Stelem_I = new OpCode("stelem.i", Code.Stelem_I, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popi); + public static readonly OpCode Stelem_I1 = new OpCode("stelem.i1", Code.Stelem_I1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popi); + public static readonly OpCode Stelem_I2 = new OpCode("stelem.i2", Code.Stelem_I2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popi); + public static readonly OpCode Stelem_I4 = new OpCode("stelem.i4", Code.Stelem_I4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popi); + public static readonly OpCode Stelem_I8 = new OpCode("stelem.i8", Code.Stelem_I8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popi8); + public static readonly OpCode Stelem_R4 = new OpCode("stelem.r4", Code.Stelem_R4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popr4); + public static readonly OpCode Stelem_R8 = new OpCode("stelem.r8", Code.Stelem_R8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popr8); + public static readonly OpCode Stelem_Ref = new OpCode("stelem.ref", Code.Stelem_Ref, OperandType.InlineNone, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_popref); + public static readonly OpCode Ldelem = new OpCode("ldelem", Code.Ldelem, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push1, StackBehaviour.Popref_popi); + public static readonly OpCode Stelem = new OpCode("stelem", Code.Stelem, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popref_popi_pop1); + public static readonly OpCode Unbox_Any = new OpCode("unbox.any", Code.Unbox_Any, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push1, StackBehaviour.Popref); + public static readonly OpCode Conv_Ovf_I1 = new OpCode("conv.ovf.i1", Code.Conv_Ovf_I1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U1 = new OpCode("conv.ovf.u1", Code.Conv_Ovf_U1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I2 = new OpCode("conv.ovf.i2", Code.Conv_Ovf_I2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U2 = new OpCode("conv.ovf.u2", Code.Conv_Ovf_U2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I4 = new OpCode("conv.ovf.i4", Code.Conv_Ovf_I4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U4 = new OpCode("conv.ovf.u4", Code.Conv_Ovf_U4, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I8 = new OpCode("conv.ovf.i8", Code.Conv_Ovf_I8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U8 = new OpCode("conv.ovf.u8", Code.Conv_Ovf_U8, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi8, StackBehaviour.Pop1); + public static readonly OpCode Refanyval = new OpCode("refanyval", Code.Refanyval, OperandType.InlineType, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Ckfinite = new OpCode("ckfinite", Code.Ckfinite, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushr8, StackBehaviour.Pop1); + public static readonly OpCode Mkrefany = new OpCode("mkrefany", Code.Mkrefany, OperandType.InlineType, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Popi); + public static readonly OpCode Ldtoken = new OpCode("ldtoken", Code.Ldtoken, OperandType.InlineTok, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Conv_U2 = new OpCode("conv.u2", Code.Conv_U2, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_U1 = new OpCode("conv.u1", Code.Conv_U1, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_I = new OpCode("conv.i", Code.Conv_I, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_I = new OpCode("conv.ovf.i", Code.Conv_Ovf_I, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Conv_Ovf_U = new OpCode("conv.ovf.u", Code.Conv_Ovf_U, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Add_Ovf = new OpCode("add.ovf", Code.Add_Ovf, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Add_Ovf_Un = new OpCode("add.ovf.un", Code.Add_Ovf_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Mul_Ovf = new OpCode("mul.ovf", Code.Mul_Ovf, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Mul_Ovf_Un = new OpCode("mul.ovf.un", Code.Mul_Ovf_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Sub_Ovf = new OpCode("sub.ovf", Code.Sub_Ovf, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Sub_Ovf_Un = new OpCode("sub.ovf.un", Code.Sub_Ovf_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop1_pop1); + public static readonly OpCode Endfinally = new OpCode("endfinally", Code.Endfinally, OperandType.InlineNone, FlowControl.Return, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.PopAll); + public static readonly OpCode Leave = new OpCode("leave", Code.Leave, OperandType.InlineBrTarget, FlowControl.Branch, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.PopAll); + public static readonly OpCode Leave_S = new OpCode("leave.s", Code.Leave_S, OperandType.ShortInlineBrTarget, FlowControl.Branch, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.PopAll); + public static readonly OpCode Stind_I = new OpCode("stind.i", Code.Stind_I, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi); + public static readonly OpCode Conv_U = new OpCode("conv.u", Code.Conv_U, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Prefix7 = new OpCode("prefix7", Code.Prefix7, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefix6 = new OpCode("prefix6", Code.Prefix6, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefix5 = new OpCode("prefix5", Code.Prefix5, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefix4 = new OpCode("prefix4", Code.Prefix4, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefix3 = new OpCode("prefix3", Code.Prefix3, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefix2 = new OpCode("prefix2", Code.Prefix2, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefix1 = new OpCode("prefix1", Code.Prefix1, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Prefixref = new OpCode("prefixref", Code.Prefixref, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Nternal, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Arglist = new OpCode("arglist", Code.Arglist, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ceq = new OpCode("ceq", Code.Ceq, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1_pop1); + public static readonly OpCode Cgt = new OpCode("cgt", Code.Cgt, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1_pop1); + public static readonly OpCode Cgt_Un = new OpCode("cgt.un", Code.Cgt_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1_pop1); + public static readonly OpCode Clt = new OpCode("clt", Code.Clt, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1_pop1); + public static readonly OpCode Clt_Un = new OpCode("clt.un", Code.Clt_Un, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1_pop1); + public static readonly OpCode Ldftn = new OpCode("ldftn", Code.Ldftn, OperandType.InlineMethod, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Ldvirtftn = new OpCode("ldvirtftn", Code.Ldvirtftn, OperandType.InlineMethod, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popref); + public static readonly OpCode Ldarg = new OpCode("ldarg", Code.Ldarg, OperandType.InlineVar, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldarga = new OpCode("ldarga", Code.Ldarga, OperandType.InlineVar, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Starg = new OpCode("starg", Code.Starg, OperandType.InlineVar, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Ldloc = new OpCode("ldloc", Code.Ldloc, OperandType.InlineVar, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push1, StackBehaviour.Pop0); + public static readonly OpCode Ldloca = new OpCode("ldloca", Code.Ldloca, OperandType.InlineVar, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Stloc = new OpCode("stloc", Code.Stloc, OperandType.InlineVar, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Pop1); + public static readonly OpCode Localloc = new OpCode("localloc", Code.Localloc, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Popi); + public static readonly OpCode Endfilter = new OpCode("endfilter", Code.Endfilter, OperandType.InlineNone, FlowControl.Return, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Unaligned = new OpCode("unaligned.", Code.Unaligned, OperandType.ShortInlineI, FlowControl.Meta, OpCodeType.Prefix, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Volatile = new OpCode("volatile.", Code.Volatile, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Prefix, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Tailcall = new OpCode("tail.", Code.Tailcall, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Prefix, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Initobj = new OpCode("initobj", Code.Initobj, OperandType.InlineType, FlowControl.Next, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Popi); + public static readonly OpCode Constrained = new OpCode("constrained.", Code.Constrained, OperandType.InlineType, FlowControl.Meta, OpCodeType.Prefix, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Cpblk = new OpCode("cpblk", Code.Cpblk, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi_popi); + public static readonly OpCode Initblk = new OpCode("initblk", Code.Initblk, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Push0, StackBehaviour.Popi_popi_popi); +// public static readonly OpCode No = new OpCode("no.", Code.No, OperandType.ShortInlineI, FlowControl.Meta, OpCodeType.Prefix, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Rethrow = new OpCode("rethrow", Code.Rethrow, OperandType.InlineNone, FlowControl.Throw, OpCodeType.Objmodel, StackBehaviour.Push0, StackBehaviour.Pop0); + public static readonly OpCode Sizeof = new OpCode("sizeof", Code.Sizeof, OperandType.InlineType, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop0); + public static readonly OpCode Refanytype = new OpCode("refanytype", Code.Refanytype, OperandType.InlineNone, FlowControl.Next, OpCodeType.Primitive, StackBehaviour.Pushi, StackBehaviour.Pop1); + public static readonly OpCode Readonly = new OpCode("readonly.", Code.Readonly, OperandType.InlineNone, FlowControl.Meta, OpCodeType.Prefix, StackBehaviour.Push0, StackBehaviour.Pop0); +#pragma warning restore + + static OpCodes() { + // The OpCode ctor copies itself to one of these arrays. Whatever are still null + // are unsupported opcodes. Set them all to UNKNOWN1 or UNKNOWN2. + for (int i = 0; i < OneByteOpCodes.Length; i++) { + if (OneByteOpCodes[i] == null) + OneByteOpCodes[i] = UNKNOWN1; + } + for (int i = 0; i < TwoByteOpCodes.Length; i++) { + if (TwoByteOpCodes[i] == null) + TwoByteOpCodes[i] = UNKNOWN2; + } + } + } +} diff --git a/dnlib/DotNet/Emit/OperandType.cs b/dnlib/DotNet/Emit/OperandType.cs new file mode 100644 index 0000000..1fcd6ee --- /dev/null +++ b/dnlib/DotNet/Emit/OperandType.cs @@ -0,0 +1,53 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Emit { + /// + /// CIL opcode operand type + /// + public enum OperandType : byte { + /// 4-byte relative instruction offset + InlineBrTarget, + /// 4-byte field token ( or ) + InlineField, + /// int32 + InlineI, + /// int64 + InlineI8, + /// 4-byte method token (, + /// or ) + InlineMethod, + /// No operand + InlineNone, + /// Never used + InlinePhi, + /// 64-bit real + InlineR, + /// + NOT_USED_8, + /// 4-byte method sig token () + InlineSig, + /// 4-byte string token (0x70xxxxxx) + InlineString, + /// 4-byte count N followed by N 4-byte relative instruction offsets + InlineSwitch, + /// 4-byte token (, , + /// , , , + /// or ) + InlineTok, + /// 4-byte type token (, or + /// ) + InlineType, + /// 2-byte param/local index + InlineVar, + /// 1-byte relative instruction offset + ShortInlineBrTarget, + /// 1-byte sbyte () or byte (the rest) + ShortInlineI, + /// 32-bit real + ShortInlineR, + /// 1-byte param/local index + ShortInlineVar, + } +} diff --git a/dnlib/DotNet/Emit/StackBehaviour.cs b/dnlib/DotNet/Emit/StackBehaviour.cs new file mode 100644 index 0000000..ccb9e92 --- /dev/null +++ b/dnlib/DotNet/Emit/StackBehaviour.cs @@ -0,0 +1,69 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Emit { + /// + /// CIL opcode stack behavior + /// + public enum StackBehaviour : byte { + /// + Pop0, + /// + Pop1, + /// + Pop1_pop1, + /// + Popi, + /// + Popi_pop1, + /// + Popi_popi, + /// + Popi_popi8, + /// + Popi_popi_popi, + /// + Popi_popr4, + /// + Popi_popr8, + /// + Popref, + /// + Popref_pop1, + /// + Popref_popi, + /// + Popref_popi_popi, + /// + Popref_popi_popi8, + /// + Popref_popi_popr4, + /// + Popref_popi_popr8, + /// + Popref_popi_popref, + /// + Push0, + /// + Push1, + /// + Push1_push1, + /// + Pushi, + /// + Pushi8, + /// + Pushr4, + /// + Pushr8, + /// + Pushref, + /// + Varpop, + /// + Varpush, + /// + Popref_popi_pop1, + /// + PopAll = 0xFF, + } +} diff --git a/dnlib/DotNet/EventAttributes.cs b/dnlib/DotNet/EventAttributes.cs new file mode 100644 index 0000000..dc01c73 --- /dev/null +++ b/dnlib/DotNet/EventAttributes.cs @@ -0,0 +1,16 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Event attributes, see CorHdr.h/CorEventAttr + /// + [Flags] + public enum EventAttributes : ushort { + /// event is special. Name describes how. + SpecialName = 0x0200, + /// Runtime(metadata internal APIs) should check name encoding. + RTSpecialName = 0x0400, + } +} diff --git a/dnlib/DotNet/EventDef.cs b/dnlib/DotNet/EventDef.cs new file mode 100644 index 0000000..45b65af --- /dev/null +++ b/dnlib/DotNet/EventDef.cs @@ -0,0 +1,471 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Event table + /// + public abstract class EventDef : IHasCustomAttribute, IHasSemantic, IFullName, IMemberDef { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.Event, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 10; } + } + + /// + public int HasSemanticTag { + get { return 0; } + } + + /// + /// From column Event.EventFlags + /// + public EventAttributes Attributes { + get { return (EventAttributes)attributes; } + set { attributes = (int)value; } + } + /// + protected int attributes; + + /// + /// From column Event.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column Event.EventType + /// + public ITypeDefOrRef EventType { + get { return eventType; } + set { eventType = value; } + } + /// + protected ITypeDefOrRef eventType; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + /// Gets/sets the adder method + /// + public MethodDef AddMethod { + get { + if (otherMethods == null) + InitializeEventMethods(); + return addMethod; + } + set { + if (otherMethods == null) + InitializeEventMethods(); + addMethod = value; + } + } + + /// + /// Gets/sets the invoker method + /// + public MethodDef InvokeMethod { + get { + if (otherMethods == null) + InitializeEventMethods(); + return invokeMethod; + } + set { + if (otherMethods == null) + InitializeEventMethods(); + invokeMethod = value; + } + } + + /// + /// Gets/sets the remover method + /// + public MethodDef RemoveMethod { + get { + if (otherMethods == null) + InitializeEventMethods(); + return removeMethod; + } + set { + if (otherMethods == null) + InitializeEventMethods(); + removeMethod = value; + } + } + + /// + /// Gets the other methods + /// + public ThreadSafe.IList OtherMethods { + get { + if (otherMethods == null) + InitializeEventMethods(); + return otherMethods; + } + } + + void InitializeEventMethods() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (otherMethods == null) + InitializeEventMethods_NoLock(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Initializes , , + /// and . + /// + protected virtual void InitializeEventMethods_NoLock() { + otherMethods = ThreadSafeListCreator.Create(); + } + + /// + protected MethodDef addMethod; + /// + protected MethodDef invokeMethod; + /// + protected MethodDef removeMethod; + /// + protected ThreadSafe.IList otherMethods; + + /// Reset , , , + protected void ResetMethods() { + otherMethods = null; + } + + /// + /// true if there are no methods attached to this event + /// + public bool IsEmpty { + get { + // The first property access initializes the other fields we access here + return AddMethod == null && + removeMethod == null && + invokeMethod == null && + otherMethods.Count == 0; + } + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if is not empty + /// + public bool HasOtherMethods { + get { return OtherMethods.Count > 0; } + } + + /// + /// Gets/sets the declaring type (owner type) + /// + public TypeDef DeclaringType { + get { return declaringType2; } + set { + var currentDeclaringType = DeclaringType2; + if (currentDeclaringType == value) + return; + if (currentDeclaringType != null) + currentDeclaringType.Events.Remove(this); // Will set DeclaringType2 = null + if (value != null) + value.Events.Add(this); // Will set DeclaringType2 = value + } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return declaringType2; } + } + + /// + /// Called by and should normally not be called by any user + /// code. Use instead. Only call this if you must set the + /// declaring type without inserting it in the declaring type's method list. + /// + public TypeDef DeclaringType2 { + get { return declaringType2; } + set { declaringType2 = value; } + } + /// + protected TypeDef declaringType2; + + /// + public ModuleDef Module { + get { + var dt = declaringType2; + return dt == null ? null : dt.Module; + } + } + + /// + /// Gets the full name of the event + /// + public string FullName { + get { + var dt = declaringType2; + return FullNameCreator.EventFullName(dt == null ? null : dt.FullName, name, eventType); + } + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return true; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, EventAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool IsSpecialName { + get { return ((EventAttributes)attributes & EventAttributes.SpecialName) != 0; } + set { ModifyAttributes(value, EventAttributes.SpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRuntimeSpecialName { + get { return ((EventAttributes)attributes & EventAttributes.RTSpecialName) != 0; } + set { ModifyAttributes(value, EventAttributes.RTSpecialName); } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// An Event row created by the user and not present in the original .NET file + /// + public class EventDefUser : EventDef { + /// + /// Default constructor + /// + public EventDefUser() { + } + + /// + /// Constructor + /// + /// Name + public EventDefUser(UTF8String name) + : this(name, null, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Type + public EventDefUser(UTF8String name, ITypeDefOrRef type) + : this(name, type, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Type + /// Flags + public EventDefUser(UTF8String name, ITypeDefOrRef type, EventAttributes flags) { + this.name = name; + this.eventType = type; + this.attributes = (int)flags; + } + } + + /// + /// Created from a row in the Event table + /// + sealed class EventDefMD : EventDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Event, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this Event row + /// Row ID + /// If is null + /// If is invalid + public EventDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.EventTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Event rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint eventType = readerModule.TablesStream.ReadEventRow(origRid, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.declaringType2 = readerModule.GetOwnerType(this); + this.eventType = readerModule.ResolveTypeDefOrRef(eventType, new GenericParamContext(declaringType2)); + } + + internal EventDefMD InitializeAll() { + MemberMDInitializer.Initialize(Attributes); + MemberMDInitializer.Initialize(Name); + MemberMDInitializer.Initialize(EventType); + MemberMDInitializer.Initialize(CustomAttributes); + MemberMDInitializer.Initialize(AddMethod); + MemberMDInitializer.Initialize(InvokeMethod); + MemberMDInitializer.Initialize(RemoveMethod); + MemberMDInitializer.Initialize(OtherMethods); + MemberMDInitializer.Initialize(DeclaringType); + return this; + } + + /// + protected override void InitializeEventMethods_NoLock() { + ThreadSafe.IList newOtherMethods; + var dt = declaringType2 as TypeDefMD; + if (dt == null) + newOtherMethods = ThreadSafeListCreator.Create(); + else + dt.InitializeEvent(this, out addMethod, out invokeMethod, out removeMethod, out newOtherMethods); + otherMethods = newOtherMethods; + } + } +} diff --git a/dnlib/DotNet/ExportedType.cs b/dnlib/DotNet/ExportedType.cs new file mode 100644 index 0000000..b812a70 --- /dev/null +++ b/dnlib/DotNet/ExportedType.cs @@ -0,0 +1,758 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the ExportedType table + /// + public abstract class ExportedType : IHasCustomAttribute, IImplementation, IType { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// The owner module + /// + protected ModuleDef module; + + /// + public MDToken MDToken { + get { return new MDToken(Table.ExportedType, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 17; } + } + + /// + public int ImplementationTag { + get { return 2; } + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public bool IsValueType { + get { + var td = Resolve(); + return td != null && td.IsValueType; + } + } + + /// + public bool IsPrimitive { + get { return this.IsPrimitive(); } + } + + /// + string IType.TypeName { + get { return FullNameCreator.Name(this, false); } + } + + /// + public UTF8String Name { + get { return typeName; } + set { typeName = value; } + } + + /// + public string ReflectionName { + get { return FullNameCreator.Name(this, true); } + } + + /// + public string Namespace { + get { return FullNameCreator.Namespace(this, false); } + } + + /// + public string ReflectionNamespace { + get { return FullNameCreator.Namespace(this, true); } + } + + /// + public string FullName { + get { return FullNameCreator.FullName(this, false); } + } + + /// + public string ReflectionFullName { + get { return FullNameCreator.FullName(this, true); } + } + + /// + public string AssemblyQualifiedName { + get { return FullNameCreator.AssemblyQualifiedName(this); } + } + + /// + public IAssembly DefinitionAssembly { + get { return FullNameCreator.DefinitionAssembly(this); } + } + + /// + public IScope Scope { + get { return FullNameCreator.Scope(this); } + } + + /// + public ITypeDefOrRef ScopeType { + get { return FullNameCreator.ScopeType(this); } + } + + /// + /// Always returns false since a does not contain any + /// or . + /// + public bool ContainsGenericParameter { + get { return false; } + } + + /// + public ModuleDef Module { + get { return module; } + } + + /// + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + /// + bool IIsTypeOrMethod.IsType { + get { return true; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { return 0; } + } + + /// + /// From column ExportedType.Flags + /// + public TypeAttributes Attributes { + get { return (TypeAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column ExportedType.TypeDefId + /// + public uint TypeDefId { + get { return typeDefId; } + set { typeDefId = value; } + } + /// + protected uint typeDefId; + + /// + /// From column ExportedType.TypeName + /// + public UTF8String TypeName { + get { return typeName; } + set { typeName = value; } + } + /// + protected UTF8String typeName; + + /// + /// From column ExportedType.TypeNamespace + /// + public UTF8String TypeNamespace { + get { return typeNamespace; } + set { typeNamespace = value; } + } + /// + protected UTF8String typeNamespace; + + /// + /// From column ExportedType.Implementation + /// + public IImplementation Implementation { + get { + if (!implementation_isInitialized) + InitializeImplementation(); + return implementation; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + implementation = value; + implementation_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected IImplementation implementation; + /// + protected bool implementation_isInitialized; + + void InitializeImplementation() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (implementation_isInitialized) + return; + implementation = GetImplementation_NoLock(); + implementation_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual IImplementation GetImplementation_NoLock() { + return null; + } + + /// + /// true if it's nested within another + /// + public bool IsNested { + get { return DeclaringType != null; } + } + + /// + /// Gets the declaring type, if any + /// + public ExportedType DeclaringType { + get { + if (!implementation_isInitialized) + InitializeImplementation(); + return implementation as ExportedType; + } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(TypeAttributes andMask, TypeAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, TypeAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the visibility + /// + public TypeAttributes Visibility { + get { return (TypeAttributes)attributes & TypeAttributes.VisibilityMask; } + set { ModifyAttributes(~TypeAttributes.VisibilityMask, value & TypeAttributes.VisibilityMask); } + } + + /// + /// true if is set + /// + public bool IsNotPublic { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NotPublic; } + } + + /// + /// true if is set + /// + public bool IsPublic { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public; } + } + + /// + /// true if is set + /// + public bool IsNestedPublic { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic; } + } + + /// + /// true if is set + /// + public bool IsNestedPrivate { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPrivate; } + } + + /// + /// true if is set + /// + public bool IsNestedFamily { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamily; } + } + + /// + /// true if is set + /// + public bool IsNestedAssembly { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedAssembly; } + } + + /// + /// true if is set + /// + public bool IsNestedFamilyAndAssembly { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamANDAssem; } + } + + /// + /// true if is set + /// + public bool IsNestedFamilyOrAssembly { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamORAssem; } + } + + /// + /// Gets/sets the layout + /// + public TypeAttributes Layout { + get { return (TypeAttributes)attributes & TypeAttributes.LayoutMask; } + set { ModifyAttributes(~TypeAttributes.LayoutMask, value & TypeAttributes.LayoutMask); } + } + + /// + /// true if is set + /// + public bool IsAutoLayout { + get { return ((TypeAttributes)attributes & TypeAttributes.LayoutMask) == TypeAttributes.AutoLayout; } + } + + /// + /// true if is set + /// + public bool IsSequentialLayout { + get { return ((TypeAttributes)attributes & TypeAttributes.LayoutMask) == TypeAttributes.SequentialLayout; } + } + + /// + /// true if is set + /// + public bool IsExplicitLayout { + get { return ((TypeAttributes)attributes & TypeAttributes.LayoutMask) == TypeAttributes.ExplicitLayout; } + } + + /// + /// Gets/sets the bit + /// + public bool IsInterface { + get { return ((TypeAttributes)attributes & TypeAttributes.Interface) != 0; } + set { ModifyAttributes(value, TypeAttributes.Interface); } + } + + /// + /// Gets/sets the bit + /// + public bool IsClass { + get { return ((TypeAttributes)attributes & TypeAttributes.Interface) == 0; } + set { ModifyAttributes(!value, TypeAttributes.Interface); } + } + + /// + /// Gets/sets the bit + /// + public bool IsAbstract { + get { return ((TypeAttributes)attributes & TypeAttributes.Abstract) != 0; } + set { ModifyAttributes(value, TypeAttributes.Abstract); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSealed { + get { return ((TypeAttributes)attributes & TypeAttributes.Sealed) != 0; } + set { ModifyAttributes(value, TypeAttributes.Sealed); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSpecialName { + get { return ((TypeAttributes)attributes & TypeAttributes.SpecialName) != 0; } + set { ModifyAttributes(value, TypeAttributes.SpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool IsImport { + get { return ((TypeAttributes)attributes & TypeAttributes.Import) != 0; } + set { ModifyAttributes(value, TypeAttributes.Import); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSerializable { + get { return ((TypeAttributes)attributes & TypeAttributes.Serializable) != 0; } + set { ModifyAttributes(value, TypeAttributes.Serializable); } + } + + /// + /// Gets/sets the bit + /// + public bool IsWindowsRuntime { + get { return ((TypeAttributes)attributes & TypeAttributes.WindowsRuntime) != 0; } + set { ModifyAttributes(value, TypeAttributes.WindowsRuntime); } + } + + /// + /// Gets/sets the string format + /// + public TypeAttributes StringFormat { + get { return (TypeAttributes)attributes & TypeAttributes.StringFormatMask; } + set { ModifyAttributes(~TypeAttributes.StringFormatMask, value & TypeAttributes.StringFormatMask); } + } + + /// + /// true if is set + /// + public bool IsAnsiClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.AnsiClass; } + } + + /// + /// true if is set + /// + public bool IsUnicodeClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.UnicodeClass; } + } + + /// + /// true if is set + /// + public bool IsAutoClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.AutoClass; } + } + + /// + /// true if is set + /// + public bool IsCustomFormatClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.CustomFormatClass; } + } + + /// + /// Gets/sets the bit + /// + public bool IsBeforeFieldInit { + get { return ((TypeAttributes)attributes & TypeAttributes.BeforeFieldInit) != 0; } + set { ModifyAttributes(value, TypeAttributes.BeforeFieldInit); } + } + + /// + /// Gets/sets the bit. See also + /// + public bool IsForwarder { + get { return ((TypeAttributes)attributes & TypeAttributes.Forwarder) != 0; } + set { ModifyAttributes(value, TypeAttributes.Forwarder); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRuntimeSpecialName { + get { return ((TypeAttributes)attributes & TypeAttributes.RTSpecialName) != 0; } + set { ModifyAttributes(value, TypeAttributes.RTSpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool HasSecurity { + get { return ((TypeAttributes)attributes & TypeAttributes.HasSecurity) != 0; } + set { ModifyAttributes(value, TypeAttributes.HasSecurity); } + } + + const int MAX_LOOP_ITERS = 50; + + /// + /// true if this type has been moved to another assembly + /// + public bool MovedToAnotherAssembly { + get { + ExportedType et = this; + for (int i = 0; i < MAX_LOOP_ITERS; i++) { + var impl = et.Implementation; + if (impl is AssemblyRef) + return et.IsForwarder; + + et = impl as ExportedType; + if (et == null) + break; + } + return false; + } + } + + /// + /// Resolves the type + /// + /// A instance or null if it couldn't be resolved + public TypeDef Resolve() { + return Resolve(null); + } + + /// + /// Resolves the type + /// + /// Source module or null + /// A instance or null if it couldn't be resolved + public TypeDef Resolve(ModuleDef sourceModule) { + if (module == null) + return null; + + return Resolve(sourceModule, this); + } + + static TypeDef Resolve(ModuleDef sourceModule, ExportedType et) { + for (int i = 0; i < MAX_LOOP_ITERS; i++) { + if (et == null || et.module == null) + break; + var resolver = et.module.Context.AssemblyResolver; + var etAsm = resolver.Resolve(et.DefinitionAssembly, sourceModule ?? et.module); + if (etAsm == null) + break; + + var td = etAsm.Find(et.FullName, false); + if (td != null) + return td; + + et = FindExportedType(etAsm, et); + } + + return null; + } + + static ExportedType FindExportedType(AssemblyDef asm, ExportedType et) { + foreach (var mod in asm.Modules.GetSafeEnumerable()) { + foreach (var et2 in mod.ExportedTypes.GetSafeEnumerable()) { + if (new SigComparer(SigComparerOptions.DontCompareTypeScope).Equals(et, et2)) + return et2; + } + } + return null; + } + + /// + /// Resolves the type + /// + /// A instance + /// If the type couldn't be resolved + public TypeDef ResolveThrow() { + var type = Resolve(); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not resolve type: {0} ({1})", this, DefinitionAssembly)); + } + + /// + /// Converts this instance to a + /// + /// A new instance + public TypeRef ToTypeRef() { + TypeRef result = null, prev = null; + var mod = module; + IImplementation impl = this; + for (int i = 0; i < MAX_LOOP_ITERS && impl != null; i++) { + var et = impl as ExportedType; + if (et != null) { + var newTr = mod.UpdateRowId(new TypeRefUser(mod, et.TypeNamespace, et.TypeName)); + if (result == null) + result = newTr; + if (prev != null) + prev.ResolutionScope = newTr; + + prev = newTr; + impl = et.Implementation; + continue; + } + + var asmRef = impl as AssemblyRef; + if (asmRef != null) { + // prev is never null when we're here + prev.ResolutionScope = asmRef; + return result; + } + + var file = impl as FileDef; + if (file != null) { + // prev is never null when we're here + prev.ResolutionScope = FindModule(mod, file); + return result; + } + + break; + } + return result; + } + + static ModuleDef FindModule(ModuleDef module, FileDef file) { + if (module == null || file == null) + return null; + if (UTF8String.CaseInsensitiveEquals(module.Name, file.Name)) + return module; + var asm = module.Assembly; + if (asm == null) + return null; + return asm.FindModule(file.Name); + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// An ExportedType row created by the user and not present in the original .NET file + /// + public class ExportedTypeUser : ExportedType { + /// + /// Constructor + /// + /// Owner module + public ExportedTypeUser(ModuleDef module) { + this.module = module; + } + + /// + /// Constructor + /// + /// Owner module + /// TypeDef ID + /// Type name + /// Type namespace + /// Flags + /// Implementation + public ExportedTypeUser(ModuleDef module, uint typeDefId, UTF8String typeNamespace, UTF8String typeName, TypeAttributes flags, IImplementation implementation) { + this.module = module; + this.typeDefId = typeDefId; + this.typeName = typeName; + this.typeNamespace = typeNamespace; + this.attributes = (int)flags; + this.implementation = implementation; + this.implementation_isInitialized = true; + } + } + + /// + /// Created from a row in the ExportedType table + /// + sealed class ExportedTypeMD : ExportedType, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + readonly uint implementationRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.ExportedType, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + protected override IImplementation GetImplementation_NoLock() { + return readerModule.ResolveImplementation(implementationRid); + } + + /// + /// Constructor + /// + /// The module which contains this ExportedType row + /// Row ID + /// If is null + /// If is invalid + public ExportedTypeMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ExportedTypeTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("ExportedType rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.module = readerModule; + uint name, @namespace; + this.implementationRid = readerModule.TablesStream.ReadExportedTypeRow(origRid, out this.attributes, out this.typeDefId, out name, out @namespace); + this.typeName = readerModule.StringsStream.ReadNoNull(name); + this.typeNamespace = readerModule.StringsStream.ReadNoNull(@namespace); + } + } +} diff --git a/dnlib/DotNet/Extensions.cs b/dnlib/DotNet/Extensions.cs new file mode 100644 index 0000000..4ed09f1 --- /dev/null +++ b/dnlib/DotNet/Extensions.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Extension methods + /// + public static partial class Extensions { + } +} diff --git a/dnlib/DotNet/FieldAttributes.cs b/dnlib/DotNet/FieldAttributes.cs new file mode 100644 index 0000000..137beed --- /dev/null +++ b/dnlib/DotNet/FieldAttributes.cs @@ -0,0 +1,54 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Field flags, see CorHdr.h/CorFieldAttr + /// + [Flags] + public enum FieldAttributes : ushort { + /// member access mask - Use this mask to retrieve accessibility information. + FieldAccessMask = 0x0007, + /// Member not referenceable. + PrivateScope = 0x0000, + /// Member not referenceable. + CompilerControlled = PrivateScope, + /// Accessible only by the parent type. + Private = 0x0001, + /// Accessible by sub-types only in this Assembly. + FamANDAssem = 0x0002, + /// Accessibly by anyone in the Assembly. + Assembly = 0x0003, + /// Accessible only by type and sub-types. + Family = 0x0004, + /// Accessibly by sub-types anywhere, plus anyone in assembly. + FamORAssem = 0x0005, + /// Accessibly by anyone who has visibility to this scope. + Public = 0x0006, + + /// Defined on type, else per instance. + Static = 0x0010, + /// Field may only be initialized, not written to after init. + InitOnly = 0x0020, + /// Value is compile time constant. + Literal = 0x0040, + /// Field does not have to be serialized when type is remoted. + NotSerialized = 0x0080, + + /// field is special. Name describes how. + SpecialName = 0x0200, + + /// Implementation is forwarded through pinvoke. + PinvokeImpl = 0x2000, + + /// Runtime(metadata internal APIs) should check name encoding. + RTSpecialName = 0x0400, + /// Field has marshalling information. + HasFieldMarshal = 0x1000, + /// Field has default. + HasDefault = 0x8000, + /// Field has RVA. + HasFieldRVA = 0x0100, + } +} diff --git a/dnlib/DotNet/FieldDef.cs b/dnlib/DotNet/FieldDef.cs new file mode 100644 index 0000000..358126a --- /dev/null +++ b/dnlib/DotNet/FieldDef.cs @@ -0,0 +1,965 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.PE; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Field table + /// + public abstract class FieldDef : IHasConstant, IHasCustomAttribute, IHasFieldMarshal, IMemberForwarded, IField, ITokenOperand, IMemberDef { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.Field, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasConstantTag { + get { return 0; } + } + + /// + public int HasCustomAttributeTag { + get { return 1; } + } + + /// + public int HasFieldMarshalTag { + get { return 0; } + } + + /// + public int MemberForwardedTag { + get { return 0; } + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + /// From column Field.Flags + /// + public FieldAttributes Attributes { + get { return (FieldAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column Field.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column Field.Signature + /// + public CallingConventionSig Signature { + get { return signature; } + set { signature = value; } + } + /// + protected CallingConventionSig signature; + + /// + /// Gets/sets the field layout offset + /// + public uint? FieldOffset { + get { + if (!fieldOffset_isInitialized) + InitializeFieldOffset(); + return fieldOffset; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + fieldOffset = value; + fieldOffset_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected uint? fieldOffset; + /// + protected bool fieldOffset_isInitialized; + + void InitializeFieldOffset() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (fieldOffset_isInitialized) + return; + fieldOffset = GetFieldOffset_NoLock(); + fieldOffset_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual uint? GetFieldOffset_NoLock() { + return null; + } + + /// + public MarshalType MarshalType { + get { + if (!marshalType_isInitialized) + InitializeMarshalType(); + return marshalType; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + marshalType = value; + marshalType_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected MarshalType marshalType; + /// + protected bool marshalType_isInitialized; + + void InitializeMarshalType() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (marshalType_isInitialized) + return; + marshalType = GetMarshalType_NoLock(); + marshalType_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual MarshalType GetMarshalType_NoLock() { + return null; + } + + /// Reset + protected void ResetMarshalType() { + marshalType_isInitialized = false; + } + + /// + /// Gets/sets the field RVA + /// + public RVA RVA { + get { + if (!rva_isInitialized) + InitializeRVA(); + return rva; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + rva = value; + rva_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected RVA rva; + /// + protected bool rva_isInitialized; + + void InitializeRVA() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (rva_isInitialized) + return; + rva = GetRVA_NoLock(); + rva_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual RVA GetRVA_NoLock() { + return 0; + } + + /// Reset + protected void ResetRVA() { + rva_isInitialized = false; + } + + /// + /// Gets/sets the initial value. Be sure to set to true if + /// you write to this field. + /// + public byte[] InitialValue { + get { + if (!initialValue_isInitialized) + InitializeInitialValue(); + return initialValue; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + initialValue = value; + initialValue_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected byte[] initialValue; + /// + protected bool initialValue_isInitialized; + + void InitializeInitialValue() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (initialValue_isInitialized) + return; + initialValue = GetInitialValue_NoLock(); + initialValue_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual byte[] GetInitialValue_NoLock() { + return null; + } + + /// Reset + protected void ResetInitialValue() { + initialValue_isInitialized = false; + } + + /// + public ImplMap ImplMap { + get { + if (!implMap_isInitialized) + InitializeImplMap(); + return implMap; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + implMap = value; + implMap_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected ImplMap implMap; + /// + protected bool implMap_isInitialized; + + void InitializeImplMap() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (implMap_isInitialized) + return; + implMap = GetImplMap_NoLock(); + implMap_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual ImplMap GetImplMap_NoLock() { + return null; + } + + /// + public Constant Constant { + get { + if (!constant_isInitialized) + InitializeConstant(); + return constant; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + constant = value; + constant_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected Constant constant; + /// + protected bool constant_isInitialized; + + void InitializeConstant() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (constant_isInitialized) + return; + constant = GetConstant_NoLock(); + constant_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual Constant GetConstant_NoLock() { + return null; + } + + /// Reset + protected void ResetConstant() { + constant_isInitialized = false; + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public bool HasImplMap { + get { return ImplMap != null; } + } + + /// + /// Gets/sets the declaring type (owner type) + /// + public TypeDef DeclaringType { + get { return declaringType2; } + set { + var currentDeclaringType = DeclaringType2; + if (currentDeclaringType == value) + return; + if (currentDeclaringType != null) + currentDeclaringType.Fields.Remove(this); // Will set DeclaringType2 = null + if (value != null) + value.Fields.Add(this); // Will set DeclaringType2 = value + } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return declaringType2; } + } + + /// + /// Called by and should normally not be called by any user + /// code. Use instead. Only call this if you must set the + /// declaring type without inserting it in the declaring type's method list. + /// + public TypeDef DeclaringType2 { + get { return declaringType2; } + set { declaringType2 = value; } + } + /// + protected TypeDef declaringType2; + + /// + /// Gets/sets the + /// + public FieldSig FieldSig { + get { return signature as FieldSig; } + set { signature = value; } + } + + /// + public ModuleDef Module { + get { + var dt = declaringType2; + return dt == null ? null : dt.Module; + } + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return true; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return true; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// true if is not null + /// + public bool HasLayoutInfo { + get { return FieldOffset != null; } + } + + /// + /// true if is not null + /// + public bool HasConstant { + get { return Constant != null; } + } + + /// + /// Gets the constant element type or if there's no constant + /// + public ElementType ElementType { + get { + var c = Constant; + return c == null ? ElementType.End : c.Type; + } + } + + /// + /// true if is not null + /// + public bool HasMarshalType { + get { return MarshalType != null; } + } + + /// + /// Gets/sets the field type + /// + public TypeSig FieldType { + get { return FieldSig.GetFieldType(); } + set { + var sig = FieldSig; + if (sig != null) + sig.Type = value; + } + } + + /// + /// Modify field: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(FieldAttributes andMask, FieldAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, FieldAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the field access + /// + public FieldAttributes Access { + get { return (FieldAttributes)attributes & FieldAttributes.FieldAccessMask; } + set { ModifyAttributes(~FieldAttributes.FieldAccessMask, value & FieldAttributes.FieldAccessMask); } + } + + /// + /// true if is set + /// + public bool IsCompilerControlled { + get { return IsPrivateScope; } + } + + /// + /// true if is set + /// + public bool IsPrivateScope { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.PrivateScope; } + } + + /// + /// true if is set + /// + public bool IsPrivate { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Private; } + } + + /// + /// true if is set + /// + public bool IsFamilyAndAssembly { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.FamANDAssem; } + } + + /// + /// true if is set + /// + public bool IsAssembly { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Assembly; } + } + + /// + /// true if is set + /// + public bool IsFamily { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Family; } + } + + /// + /// true if is set + /// + public bool IsFamilyOrAssembly { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.FamORAssem; } + } + + /// + /// true if is set + /// + public bool IsPublic { + get { return ((FieldAttributes)attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Public; } + } + + /// + /// Gets/sets the bit + /// + public bool IsStatic { + get { return ((FieldAttributes)attributes & FieldAttributes.Static) != 0; } + set { ModifyAttributes(value, FieldAttributes.Static); } + } + + /// + /// Gets/sets the bit + /// + public bool IsInitOnly { + get { return ((FieldAttributes)attributes & FieldAttributes.InitOnly) != 0; } + set { ModifyAttributes(value, FieldAttributes.InitOnly); } + } + + /// + /// Gets/sets the bit + /// + public bool IsLiteral { + get { return ((FieldAttributes)attributes & FieldAttributes.Literal) != 0; } + set { ModifyAttributes(value, FieldAttributes.Literal); } + } + + /// + /// Gets/sets the bit + /// + public bool IsNotSerialized { + get { return ((FieldAttributes)attributes & FieldAttributes.NotSerialized) != 0; } + set { ModifyAttributes(value, FieldAttributes.NotSerialized); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSpecialName { + get { return ((FieldAttributes)attributes & FieldAttributes.SpecialName) != 0; } + set { ModifyAttributes(value, FieldAttributes.SpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool IsPinvokeImpl { + get { return ((FieldAttributes)attributes & FieldAttributes.PinvokeImpl) != 0; } + set { ModifyAttributes(value, FieldAttributes.PinvokeImpl); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRuntimeSpecialName { + get { return ((FieldAttributes)attributes & FieldAttributes.RTSpecialName) != 0; } + set { ModifyAttributes(value, FieldAttributes.RTSpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool HasFieldMarshal { + get { return ((FieldAttributes)attributes & FieldAttributes.HasFieldMarshal) != 0; } + set { ModifyAttributes(value, FieldAttributes.HasFieldMarshal); } + } + + /// + /// Gets/sets the bit + /// + public bool HasDefault { + get { return ((FieldAttributes)attributes & FieldAttributes.HasDefault) != 0; } + set { ModifyAttributes(value, FieldAttributes.HasDefault); } + } + + /// + /// Gets/sets the bit + /// + public bool HasFieldRVA { + get { return ((FieldAttributes)attributes & FieldAttributes.HasFieldRVA) != 0; } + set { ModifyAttributes(value, FieldAttributes.HasFieldRVA); } + } + + /// + /// Returns the full name of this field + /// + public string FullName { + get { + var dt = declaringType2; + return FullNameCreator.FieldFullName(dt == null ? null : dt.FullName, name, FieldSig); + } + } + + /// + /// Gets the size of this field in bytes or 0 if unknown. + /// + public uint GetFieldSize() { + uint size; + if (!GetFieldSize(out size)) + return 0; + return size; + } + + /// + /// Gets the size of this field in bytes or 0 if unknown. + /// + /// Updated with size + /// true if is valid, false otherwise + public bool GetFieldSize(out uint size) { + return GetFieldSize(declaringType2, FieldSig, out size); + } + + /// + /// Gets the size of this field in bytes or 0 if unknown. + /// + /// The declaring type of this + /// The field signature of this + /// Updated with size + /// true if is valid, false otherwise + protected bool GetFieldSize(TypeDef declaringType, FieldSig fieldSig, out uint size) { + return GetFieldSize(declaringType, fieldSig, GetPointerSize(declaringType), out size); + } + + /// + /// Gets the size of this field in bytes or 0 if unknown. + /// + /// The declaring type of this + /// The field signature of this + /// Size of a pointer + /// Updated with size + /// true if is valid, false otherwise + protected bool GetFieldSize(TypeDef declaringType, FieldSig fieldSig, int ptrSize, out uint size) { + size = 0; + if (fieldSig == null) + return false; + return GetClassSize(declaringType, fieldSig.Type, ptrSize, out size); + } + + bool GetClassSize(TypeDef declaringType, TypeSig ts, int ptrSize, out uint size) { + size = 0; + ts = ts.RemovePinnedAndModifiers(); + if (ts == null) + return false; + + int size2 = ts.ElementType.GetPrimitiveSize(ptrSize); + if (size2 >= 0) { + size = (uint)size2; + return true; + } + + var tdrs = ts as TypeDefOrRefSig; + if (tdrs == null) + return false; + + var td = tdrs.TypeDef; + if (td != null) + return TypeDef.GetClassSize(td, out size); + + var tr = tdrs.TypeRef; + if (tr != null) + return TypeDef.GetClassSize(tr.Resolve(), out size); + + return false; + } + + int GetPointerSize(TypeDef declaringType) { + if (declaringType == null) + return 4; + var module = declaringType.Module; + if (module == null) + return 4; + return module.GetPointerSize(); + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A Field row created by the user and not present in the original .NET file + /// + public class FieldDefUser : FieldDef { + /// + /// Default constructor + /// + public FieldDefUser() { + } + + /// + /// Constructor + /// + /// Name + public FieldDefUser(UTF8String name) + : this(name, null) { + } + + /// + /// Constructor + /// + /// Name + /// Signature + public FieldDefUser(UTF8String name, FieldSig signature) + : this(name, signature, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Signature + /// Flags + public FieldDefUser(UTF8String name, FieldSig signature, FieldAttributes attributes) { + this.name = name; + this.signature = signature; + this.attributes = (int)attributes; + } + } + + /// + /// Created from a row in the Field table + /// + sealed class FieldDefMD : FieldDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + readonly FieldAttributes origAttributes; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Field, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + protected override uint? GetFieldOffset_NoLock() { + return readerModule.TablesStream.ReadFieldLayoutRow2(readerModule.MetaData.GetFieldLayoutRid(origRid)); + } + + /// + protected override MarshalType GetMarshalType_NoLock() { + return readerModule.ReadMarshalType(Table.Field, origRid, new GenericParamContext(declaringType2)); + } + + /// + protected override RVA GetRVA_NoLock() { + RVA rva2; + GetFieldRVA_NoLock(out rva2); + return rva2; + } + + /// + protected override byte[] GetInitialValue_NoLock() { + RVA rva2; + if (!GetFieldRVA_NoLock(out rva2)) + return null; + return ReadInitialValue_NoLock(rva2); + } + + /// + protected override ImplMap GetImplMap_NoLock() { + return readerModule.ResolveImplMap(readerModule.MetaData.GetImplMapRid(Table.Field, origRid)); + } + + /// + protected override Constant GetConstant_NoLock() { + return readerModule.ResolveConstant(readerModule.MetaData.GetConstantRid(Table.Field, origRid)); + } + + /// + /// Constructor + /// + /// The module which contains this Field row + /// Row ID + /// If is null + /// If is invalid + public FieldDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.FieldTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Field rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint signature = readerModule.TablesStream.ReadFieldRow(origRid, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.origAttributes = (FieldAttributes)attributes; + this.declaringType2 = readerModule.GetOwnerType(this); + this.signature = readerModule.ReadSignature(signature, new GenericParamContext(declaringType2)); + } + + internal FieldDefMD InitializeAll() { + MemberMDInitializer.Initialize(CustomAttributes); + MemberMDInitializer.Initialize(Attributes); + MemberMDInitializer.Initialize(Name); + MemberMDInitializer.Initialize(Signature); + MemberMDInitializer.Initialize(FieldOffset); + MemberMDInitializer.Initialize(MarshalType); + MemberMDInitializer.Initialize(RVA); + MemberMDInitializer.Initialize(InitialValue); + MemberMDInitializer.Initialize(ImplMap); + MemberMDInitializer.Initialize(Constant); + MemberMDInitializer.Initialize(DeclaringType); + return this; + } + + bool GetFieldRVA_NoLock(out RVA rva) { + if ((origAttributes & FieldAttributes.HasFieldRVA) == 0) { + rva = 0; + return false; + } + return readerModule.TablesStream.ReadFieldRVARow(readerModule.MetaData.GetFieldRVARid(origRid), out rva); + } + + byte[] ReadInitialValue_NoLock(RVA rva) { + uint size; + if (!GetFieldSize(declaringType2, signature as FieldSig, out size)) + return null; + if (size >= int.MaxValue) + return null; + return readerModule.ReadDataAt(rva, (int)size); + } + } +} diff --git a/dnlib/DotNet/FileAttributes.cs b/dnlib/DotNet/FileAttributes.cs new file mode 100644 index 0000000..6fc1de1 --- /dev/null +++ b/dnlib/DotNet/FileAttributes.cs @@ -0,0 +1,16 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// File row flags. See CorHdr.h/CorFileFlags + /// + [Flags] + public enum FileAttributes : uint { + /// This is not a resource file + ContainsMetaData = 0x0000, + /// This is a resource file or other non-metadata-containing file + ContainsNoMetaData = 0x0001, + } +} diff --git a/dnlib/DotNet/FileDef.cs b/dnlib/DotNet/FileDef.cs new file mode 100644 index 0000000..6681dff --- /dev/null +++ b/dnlib/DotNet/FileDef.cs @@ -0,0 +1,208 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the File table + /// + public abstract class FileDef : IHasCustomAttribute, IImplementation, IManagedEntryPoint { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.File, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 16; } + } + + /// + public int ImplementationTag { + get { return 0; } + } + + /// + /// From column File.Flags + /// + public FileAttributes Flags { + get { return (FileAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column File.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column File.HashValue + /// + public byte[] HashValue { + get { return hashValue; } + set { hashValue = value; } + } + /// + protected byte[] hashValue; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, FileAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool ContainsMetaData { + get { return ((FileAttributes)attributes & FileAttributes.ContainsNoMetaData) == 0; } + set { ModifyAttributes(!value, FileAttributes.ContainsNoMetaData); } + } + + /// + /// Gets/sets the bit + /// + public bool ContainsNoMetaData { + get { return ((FileAttributes)attributes & FileAttributes.ContainsNoMetaData) != 0; } + set { ModifyAttributes(value, FileAttributes.ContainsNoMetaData); } + } + + /// + public string FullName { + get { return UTF8String.ToSystemStringOrEmpty(name); } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A File row created by the user and not present in the original .NET file + /// + public class FileDefUser : FileDef { + /// + /// Default constructor + /// + public FileDefUser() { + } + + /// + /// Constructor + /// + /// Name of file + /// Flags + /// File hash + public FileDefUser(UTF8String name, FileAttributes flags, byte[] hashValue) { + this.name = name; + this.attributes = (int)flags; + this.hashValue = hashValue; + } + } + + /// + /// Created from a row in the File table + /// + sealed class FileDefMD : FileDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.File, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this File row + /// Row ID + /// If is null + /// If is invalid + public FileDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.FileTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("File rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint hashValue = readerModule.TablesStream.ReadFileRow(origRid, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.hashValue = readerModule.BlobStream.Read(hashValue); + } + } +} diff --git a/dnlib/DotNet/FrameworkRedirect.cs b/dnlib/DotNet/FrameworkRedirect.cs new file mode 100644 index 0000000..602214b --- /dev/null +++ b/dnlib/DotNet/FrameworkRedirect.cs @@ -0,0 +1,323 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet { + /// + /// Redirects .NET framework assembly references from older to newer versions + /// + public static class FrameworkRedirect { + static readonly Dictionary frmRedir2; + static readonly Dictionary frmRedir4; + + struct FrameworkRedirectInfo { + public readonly PublicKeyToken publicKeyToken; + public readonly Version redirectVersion; + + public FrameworkRedirectInfo(string publicKeyToken, string redirectVersion) { + this.publicKeyToken = new PublicKeyToken(publicKeyToken); + this.redirectVersion = new Version(redirectVersion); + } + } + + static FrameworkRedirect() { + frmRedir2 = new Dictionary(StringComparer.OrdinalIgnoreCase); + frmRedir4 = new Dictionary(StringComparer.OrdinalIgnoreCase); + InitFrameworkRedirectV2(); + InitFrameworkRedirectV4(); + } + + static void InitFrameworkRedirectV2() { + frmRedir2["Accessibility"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["cscompmgd"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["CustomMarshalers"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["IEExecRemote"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["IEHost"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["IIEHost"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["ISymWrapper"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["Microsoft.JScript"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.VisualBasic"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.VisualBasic.Compatibility"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.VisualBasic.Compatibility.Data"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.VisualBasic.Vsa"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.VisualC"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.Vsa"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft.Vsa.Vb.CodeDOMProcessor"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["Microsoft_VsaVb"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "8.0.0.0"); + frmRedir2["mscorcfg"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["mscorlib"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Configuration"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Configuration.Install"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Data"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Data.OracleClient"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Data.SqlXml"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Deployment"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Design"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.DirectoryServices"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.DirectoryServices.Protocols"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Drawing"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Drawing.Design"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.EnterpriseServices"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Management"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Messaging"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Runtime.Remoting"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Runtime.Serialization.Formatters.Soap"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Security"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.ServiceProcess"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Transactions"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Web"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Web.Mobile"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Web.RegularExpressions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Web.Services"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["System.Windows.Forms"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["System.Xml"] = new FrameworkRedirectInfo("b77a5c561934e089", "2.0.0.0"); + frmRedir2["vjscor"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["VJSharpCodeProvider"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjsJBC"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjslib"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjslibcw"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["Vjssupuilib"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjsvwaux"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjswfc"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["VJSWfcBrowserStubLib"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjswfccw"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir2["vjswfchtml"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + } + + static void InitFrameworkRedirectV4() { + frmRedir4["Accessibility"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["CustomMarshalers"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["ISymWrapper"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.JScript"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "10.0.0.0"); + frmRedir4["Microsoft.VisualBasic"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "10.0.0.0"); + frmRedir4["Microsoft.VisualBasic.Compatibility"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "10.0.0.0"); + frmRedir4["Microsoft.VisualBasic.Compatibility.Data"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "10.0.0.0"); + frmRedir4["Microsoft.VisualC"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "10.0.0.0"); + frmRedir4["mscorlib"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Configuration"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Configuration.Install"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Data"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.OracleClient"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.SqlXml"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Deployment"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Design"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.DirectoryServices"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.DirectoryServices.Protocols"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Drawing"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Drawing.Design"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.EnterpriseServices"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Management"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Messaging"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Remoting"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Runtime.Serialization.Formatters.Soap"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Security"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceProcess"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Transactions"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Web"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Web.Mobile"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Web.RegularExpressions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Web.Services"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Windows.Forms"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Xml"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["AspNetMMCExt"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["sysglobl"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.Build.Engine"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.Build.Framework"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["PresentationCFFRasterizer"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationCore"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework.Aero"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework.Classic"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework.Luna"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework.Royale"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationUI"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["ReachFramework"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Printing"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Speech"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["UIAutomationClient"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["UIAutomationClientsideProviders"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["UIAutomationProvider"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["UIAutomationTypes"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["WindowsBase"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["WindowsFormsIntegration"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["SMDiagnostics"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.IdentityModel"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.IdentityModel.Selectors"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.IO.Log"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Serialization"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.ServiceModel"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.ServiceModel.Install"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.ServiceModel.WasHosting"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Workflow.Activities"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Workflow.ComponentModel"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Workflow.Runtime"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["Microsoft.Transactions.Bridge"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.Transactions.Bridge.Dtc"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.AddIn"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.AddIn.Contract"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ComponentModel.Composition"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Core"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.DataSetExtensions"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.Linq"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Xml.Linq"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.DirectoryServices.AccountManagement"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Management.Instrumentation"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Net"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceModel.Web"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.Extensions"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.Extensions.Design"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Windows.Presentation"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.WorkflowServices"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ComponentModel.DataAnnotations"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Data.Entity"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.Entity.Design"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.Services"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.Services.Client"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Data.Services.Design"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Web.Abstractions"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.DynamicData"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.DynamicData.Design"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.Entity"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Web.Entity.Design"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Web.Routing"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["Microsoft.Build"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.CSharp"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Dynamic"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Numerics"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Xaml"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["Microsoft.Workflow.Compiler"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["Microsoft.Activities.Build"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["Microsoft.Build.Conversion.v4.0"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.Build.Tasks.v4.0"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.Build.Utilities.v4.0"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["Microsoft.Internal.Tasks.Dataflow"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["Microsoft.VisualBasic.Activities.Compiler"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "10.0.0.0"); + frmRedir4["Microsoft.VisualC.STLCLR"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "2.0.0.0"); + frmRedir4["Microsoft.Windows.ApplicationServer.Applications"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationBuildTasks"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework.Aero2"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework.AeroLite"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["PresentationFramework-SystemCore"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["PresentationFramework-SystemData"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["PresentationFramework-SystemDrawing"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["PresentationFramework-SystemXml"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["PresentationFramework-SystemXmlLinq"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Activities"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Activities.Core.Presentation"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Activities.DurableInstancing"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Activities.Presentation"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ComponentModel.Composition.Registration"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Device"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.IdentityModel.Services"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.IO.Compression"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.IO.Compression.FileSystem"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Net.Http"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Net.Http.WebRequest"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection.Context"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Runtime.Caching"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.DurableInstancing"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Runtime.WindowsRuntime"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Runtime.WindowsRuntime.UI.Xaml"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.ServiceModel.Activation"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ServiceModel.Activities"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ServiceModel.Channels"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ServiceModel.Discovery"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ServiceModel.Internals"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ServiceModel.Routing"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.ServiceModel.ServiceMoniker40"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Web.ApplicationServices"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.DataVisualization"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Web.DataVisualization.Design"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Windows.Controls.Ribbon"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Windows.Forms.DataVisualization"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Windows.Forms.DataVisualization.Design"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Windows.Input.Manipulations"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + frmRedir4["System.Xaml.Hosting"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["XamlBuildTask"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["XsdBuildTask"] = new FrameworkRedirectInfo("31bf3856ad364e35", "4.0.0.0"); + frmRedir4["System.Collections"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Collections.Concurrent"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ComponentModel"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ComponentModel.Annotations"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ComponentModel.EventBasedAsync"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Diagnostics.Contracts"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Diagnostics.Debug"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Diagnostics.Tools"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Diagnostics.Tracing"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Dynamic.Runtime"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Globalization"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.IO"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Linq"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Linq.Expressions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Linq.Parallel"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Linq.Queryable"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Net.NetworkInformation"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Net.Primitives"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Net.Requests"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ObjectModel"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection.Emit"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection.Emit.ILGeneration"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection.Emit.Lightweight"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection.Extensions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Reflection.Primitives"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Resources.ResourceManager"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Extensions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.InteropServices"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.InteropServices.WindowsRuntime"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Numerics"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Serialization.Json"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Serialization.Primitives"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Runtime.Serialization.Xml"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Security.Principal"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceModel.Duplex"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceModel.Http"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceModel.NetTcp"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceModel.Primitives"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.ServiceModel.Security"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Text.Encoding"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Text.Encoding.Extensions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Text.RegularExpressions"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Threading"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Threading.Timer"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Threading.Tasks"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Threading.Tasks.Parallel"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Xml.ReaderWriter"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Xml.XDocument"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Xml.XmlSerializer"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Net.Http.Rtc"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Windows"] = new FrameworkRedirectInfo("b03f5f7f11d50a3a", "4.0.0.0"); + frmRedir4["System.Xml.Serialization"] = new FrameworkRedirectInfo("b77a5c561934e089", "4.0.0.0"); + } + + /// + /// Redirects a .NET framework assembly from an older version to the correct version + /// loaded at runtime. + /// + /// Current assembly reference that might get updated + /// Module using the assembly reference + public static void ApplyFrameworkRedirect(ref IAssembly assembly, ModuleDef sourceModule) { + if (sourceModule == null) + return; + if (!Utils.LocaleEquals(assembly.Culture, "")) + return; + if (!sourceModule.IsClr20 && !sourceModule.IsClr40) + return; + + FrameworkRedirectInfo redirect; + if (!(sourceModule.IsClr20 ? frmRedir2 : frmRedir4).TryGetValue(assembly.Name, out redirect)) + return; + if (PublicKeyBase.TokenCompareTo(assembly.PublicKeyOrToken, redirect.publicKeyToken) != 0) + return; + if (Utils.CompareTo(assembly.Version, redirect.redirectVersion) == 0) + return; + + assembly = new AssemblyNameInfo(assembly); + assembly.Version = redirect.redirectVersion; + } + } +} diff --git a/dnlib/DotNet/FullNameCreator.cs b/dnlib/DotNet/FullNameCreator.cs new file mode 100644 index 0000000..a2fa732 --- /dev/null +++ b/dnlib/DotNet/FullNameCreator.cs @@ -0,0 +1,2095 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.Text; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Helps create a name + /// + public interface IFullNameCreatorHelper { + /// + /// Checks whether the assembly name should be included when printing + /// the full type name. The assembly name isn't required in custom attributes + /// when the type already exists in the same module as the CA, or if the type + /// exists in mscorlib. + /// + /// The type (TypeDef, TypeRef or ExportedType) + /// or null + /// true if the assembly name must be included, false otherwise + bool MustUseAssemblyName(IType type); + } + + /// + /// Creates type names, method names, etc. + /// + public struct FullNameCreator { + const string RECURSION_ERROR_RESULT_STRING = "<<>>"; + const string NULLVALUE = "<<>>"; + readonly StringBuilder sb; + readonly bool isReflection; + readonly IFullNameCreatorHelper helper; + GenericArguments genericArguments; + RecursionCounter recursionCounter; + + /// + /// Checks whether the assembly name should be included when printing the full name. + /// See for more info. + /// + /// Owner module + /// The type (TypeDef, TypeRef or ExportedType) + /// or null + /// true if the assembly name must be included, false otherwise + public static bool MustUseAssemblyName(ModuleDef module, IType type) { + var td = type as TypeDef; + if (td != null) + return td.Module != module; + + var tr = type as TypeRef; + if (tr == null) + return true; + if (tr.ResolutionScope == AssemblyRef.CurrentAssembly) + return false; + if (!tr.DefinitionAssembly.IsCorLib()) + return true; + // If it's present in this module, but it's a corlib type, then we will need the + // assembly name. + return module.Find(tr) != null; + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The IType + /// The assembly qualified full name + public static string AssemblyQualifiedName(IType type) { + return AssemblyQualifiedName(type, null); + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The IType + /// Helps print the name + /// The assembly qualified full name + public static string AssemblyQualifiedName(IType type, IFullNameCreatorHelper helper) { + var td = type as TypeDef; + if (td != null) + return AssemblyQualifiedName(td, helper); + + var tr = type as TypeRef; + if (tr != null) + return AssemblyQualifiedName(tr, helper); + + var ts = type as TypeSpec; + if (ts != null) + return AssemblyQualifiedName(ts, helper); + + var sig = type as TypeSig; + if (sig != null) + return AssemblyQualifiedName(sig, helper); + + var et = type as ExportedType; + if (et != null) + return AssemblyQualifiedName(et, helper); + + return string.Empty; + } + + /// + /// Returns the full name of a property + /// + /// Declaring type full name or null if none + /// Name of property + /// Property signature + /// Property full name + public static string PropertyFullName(string declaringType, UTF8String name, CallingConventionSig propertySig) { + return PropertyFullName(declaringType, name, propertySig, null); + } + + /// + /// Returns the full name of a property + /// + /// Declaring type full name or null if none + /// Name of property + /// Property signature + /// Type generic arguments or null if none + /// Property full name + public static string PropertyFullName(string declaringType, UTF8String name, CallingConventionSig propertySig, IList typeGenArgs) { + var fnc = new FullNameCreator(false, null); + if (typeGenArgs != null) { + fnc.genericArguments = new GenericArguments(); + fnc.genericArguments.PushTypeArgs(typeGenArgs); + } + + fnc.CreatePropertyFullName(declaringType, name, propertySig); + return fnc.Result; + } + + /// + /// Returns the full name of an event + /// + /// Declaring type full name or null if none + /// Name of event + /// Event type + /// Event full name + public static string EventFullName(string declaringType, UTF8String name, ITypeDefOrRef typeDefOrRef) { + return EventFullName(declaringType, name, typeDefOrRef, null); + } + + /// + /// Returns the full name of a property + /// + /// Declaring type full name or null if none + /// Name of property + /// Event type + /// Type generic arguments or null if none + /// Property full name + public static string EventFullName(string declaringType, UTF8String name, ITypeDefOrRef typeDefOrRef, IList typeGenArgs) { + var fnc = new FullNameCreator(false, null); + if (typeGenArgs != null) { + fnc.genericArguments = new GenericArguments(); + fnc.genericArguments.PushTypeArgs(typeGenArgs); + } + + fnc.CreateEventFullName(declaringType, name, typeDefOrRef); + return fnc.Result; + } + + /// + /// Returns the full name of a field + /// + /// Declaring type full name or null if none + /// Name of field + /// Field signature + /// Field full name + public static string FieldFullName(string declaringType, UTF8String name, FieldSig fieldSig) { + return FieldFullName(declaringType, UTF8String.ToSystemString(name), fieldSig, null); + } + + /// + /// Returns the full name of a field + /// + /// Declaring type full name or null if none + /// Name of field + /// Field signature + /// Type generic arguments or null if none + /// Field full name + public static string FieldFullName(string declaringType, UTF8String name, FieldSig fieldSig, IList typeGenArgs) { + return FieldFullName(declaringType, UTF8String.ToSystemString(name), fieldSig, typeGenArgs); + } + + /// + /// Returns the full name of a field + /// + /// Declaring type full name or null if none + /// Name of field + /// Field signature + /// Field full name + public static string FieldFullName(string declaringType, string name, FieldSig fieldSig) { + return FieldFullName(declaringType, name, fieldSig, null); + } + + /// + /// Returns the full name of a field + /// + /// Declaring type full name or null if none + /// Name of field + /// Field signature + /// Type generic arguments or null if none + /// Field full name + public static string FieldFullName(string declaringType, string name, FieldSig fieldSig, IList typeGenArgs) { + var fnc = new FullNameCreator(false, null); + if (typeGenArgs != null) { + fnc.genericArguments = new GenericArguments(); + fnc.genericArguments.PushTypeArgs(typeGenArgs); + } + + fnc.CreateFieldFullName(declaringType, name, fieldSig); + return fnc.Result; + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Method full name + public static string MethodFullName(string declaringType, UTF8String name, MethodSig methodSig) { + return MethodFullName(declaringType, UTF8String.ToSystemString(name), methodSig, null, null, null); + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Type generic arguments or null if none + /// Method full name + public static string MethodFullName(string declaringType, UTF8String name, MethodSig methodSig, IList typeGenArgs) { + return MethodFullName(declaringType, UTF8String.ToSystemString(name), methodSig, typeGenArgs, null, null); + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Type generic arguments or null if none + /// Method generic arguments or null if none + /// Method full name + public static string MethodFullName(string declaringType, UTF8String name, MethodSig methodSig, IList typeGenArgs, IList methodGenArgs) { + return MethodFullName(declaringType, UTF8String.ToSystemString(name), methodSig, typeGenArgs, methodGenArgs, null); + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Method full name + public static string MethodFullName(string declaringType, string name, MethodSig methodSig) { + return MethodFullName(declaringType, name, methodSig, null, null, null); + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Type generic arguments or null if none + /// Method full name + public static string MethodFullName(string declaringType, string name, MethodSig methodSig, IList typeGenArgs) { + return MethodFullName(declaringType, name, methodSig, typeGenArgs, null, null); + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Type generic arguments or null if none + /// Method generic arguments or null if none + /// Method full name + public static string MethodFullName(string declaringType, string name, MethodSig methodSig, IList typeGenArgs, IList methodGenArgs) { + return MethodFullName(declaringType, name, methodSig, typeGenArgs, methodGenArgs, null); + } + + /// + /// Returns the full name of a method + /// + /// Declaring type full name or null if none + /// Name of method or null if none + /// Method signature + /// Type generic arguments or null if none + /// Method generic arguments or null if none + /// Generic parameter owner method or null + /// Method full name + public static string MethodFullName(string declaringType, string name, MethodSig methodSig, IList typeGenArgs, IList methodGenArgs, MethodDef gppMethod) { + var fnc = new FullNameCreator(false, null); + if (typeGenArgs != null || methodGenArgs != null) + fnc.genericArguments = new GenericArguments(); + if (typeGenArgs != null) + fnc.genericArguments.PushTypeArgs(typeGenArgs); + if (methodGenArgs != null) + fnc.genericArguments.PushMethodArgs(methodGenArgs); + fnc.CreateMethodFullName(declaringType, name, methodSig, gppMethod); + return fnc.Result; + } + + /// + /// Returns the full name of a method sig + /// + /// Method sig + /// Method sig full name + public static string MethodSigFullName(MethodSig methodSig) { + return MethodBaseSigFullName(methodSig); + } + + /// + /// Returns the full name of a property sig + /// + /// Property sig + /// Property sig full name + public static string PropertySigFullName(PropertySig propertySig) { + return MethodBaseSigFullName(propertySig); + } + + /// + /// Returns the full name of a property sig + /// + /// Property sig + /// Property sig full name + public static string MethodBaseSigFullName(MethodBaseSig sig) { + var fnc = new FullNameCreator(false, null); + fnc.CreateMethodFullName(null, null, sig, null); + return fnc.Result; + } + + /// + /// Returns the full name of a sig + /// + /// Declaring type or null + /// Name or null + /// Method sig + /// Owner method or null + /// Sig full name + public static string MethodBaseSigFullName(string declType, string name, MethodBaseSig sig, MethodDef gppMethod) { + var fnc = new FullNameCreator(false, null); + fnc.CreateMethodFullName(declType, name, sig, gppMethod); + return fnc.Result; + } + + /// + /// Returns the namespace of a + /// + /// The TypeRef + /// Set if output should be compatible with reflection + /// The namespace + public static string Namespace(TypeRef typeRef, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateNamespace(typeRef); + return fnc.Result; + } + + /// + /// Returns the name of a + /// + /// The TypeRef + /// Set if output should be compatible with reflection + /// The name + public static string Name(TypeRef typeRef, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateName(typeRef); + return fnc.Result; + } + + /// + /// Returns the full name of a + /// + /// The TypeRef + /// Set if output should be compatible with reflection + /// The full name + public static string FullName(TypeRef typeRef, bool isReflection) { + return FullName(typeRef, isReflection, null); + } + + /// + /// Returns the full name of a + /// + /// The TypeRef + /// Set if output should be compatible with reflection + /// Helps print the name + /// The full name + public static string FullName(TypeRef typeRef, bool isReflection, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(isReflection, helper); + fnc.CreateFullName(typeRef); + return fnc.Result; + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeRef + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeRef typeRef) { + return AssemblyQualifiedName(typeRef, null); + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeRef + /// Helps print the name + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeRef typeRef, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(true, helper); + fnc.CreateAssemblyQualifiedName(typeRef); + return fnc.Result; + } + + /// + /// Returns the assembly where this type is defined + /// + /// The TypeRef + /// A or null if none found + public static IAssembly DefinitionAssembly(TypeRef typeRef) { + return new FullNameCreator().GetDefinitionAssembly(typeRef); + } + + /// + /// Gets the scope + /// + /// The TypeRef + /// The or null if none found + public static IScope Scope(TypeRef typeRef) { + return new FullNameCreator().GetScope(typeRef); + } + + /// + /// Returns the owner module. The type was created from metadata in this module. + /// + /// The TypeRef + /// A or null if none found + public static ModuleDef OwnerModule(TypeRef typeRef) { + return new FullNameCreator().GetOwnerModule(typeRef); + } + + /// + /// Returns the namespace of a + /// + /// The TypeDef + /// Set if output should be compatible with reflection + /// The namespace + public static string Namespace(TypeDef typeDef, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateNamespace(typeDef); + return fnc.Result; + } + + /// + /// Returns the name of a + /// + /// The TypeDef + /// Set if output should be compatible with reflection + /// The name + public static string Name(TypeDef typeDef, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateName(typeDef); + return fnc.Result; + } + + /// + /// Returns the full name of a + /// + /// The TypeDef + /// Set if output should be compatible with reflection + /// The full name + public static string FullName(TypeDef typeDef, bool isReflection) { + return FullName(typeDef, isReflection, null); + } + + /// + /// Returns the full name of a + /// + /// The TypeDef + /// Set if output should be compatible with reflection + /// Helps print the name + /// The full name + public static string FullName(TypeDef typeDef, bool isReflection, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(isReflection, helper); + fnc.CreateFullName(typeDef); + return fnc.Result; + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeDef + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeDef typeDef) { + return AssemblyQualifiedName(typeDef, null); + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeDef + /// Helps print the name + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeDef typeDef, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(true, helper); + fnc.CreateAssemblyQualifiedName(typeDef); + return fnc.Result; + } + + /// + /// Returns the assembly where this type is defined + /// + /// The TypeDef + /// A or null if none found + public static IAssembly DefinitionAssembly(TypeDef typeDef) { + return new FullNameCreator().GetDefinitionAssembly(typeDef); + } + + /// + /// Returns the owner module. The type was created from metadata in this module. + /// + /// The TypeDef + /// A or null if none found + public static ModuleDef OwnerModule(TypeDef typeDef) { + return new FullNameCreator().GetOwnerModule(typeDef); + } + + /// + /// Returns the namespace of a + /// + /// The TypeSpec + /// Set if output should be compatible with reflection + /// The namespace + public static string Namespace(TypeSpec typeSpec, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateNamespace(typeSpec); + return fnc.Result; + } + + /// + /// Returns the name of a + /// + /// The TypeSpec + /// Set if output should be compatible with reflection + /// The name + public static string Name(TypeSpec typeSpec, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateName(typeSpec); + return fnc.Result; + } + + /// + /// Returns the full name of a + /// + /// The TypeSpec + /// Set if output should be compatible with reflection + /// The full name + public static string FullName(TypeSpec typeSpec, bool isReflection) { + return FullName(typeSpec, isReflection, null); + } + + /// + /// Returns the full name of a + /// + /// The TypeSpec + /// Set if output should be compatible with reflection + /// Helps print the name + /// The full name + public static string FullName(TypeSpec typeSpec, bool isReflection, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(isReflection, helper); + fnc.CreateFullName(typeSpec); + return fnc.Result; + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeSpec + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeSpec typeSpec) { + return AssemblyQualifiedName(typeSpec, null); + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeSpec + /// Helps print the name + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeSpec typeSpec, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(true, helper); + fnc.CreateAssemblyQualifiedName(typeSpec); + return fnc.Result; + } + + /// + /// Returns the assembly where this type is defined + /// + /// The TypeSpec + /// A or null if none found + public static IAssembly DefinitionAssembly(TypeSpec typeSpec) { + return new FullNameCreator().GetDefinitionAssembly(typeSpec); + } + + /// + /// Gets the scope type + /// + /// The TypeSpec + /// The scope type or null if none found + public static ITypeDefOrRef ScopeType(TypeSpec typeSpec) { + return new FullNameCreator().GetScopeType(typeSpec); + } + + /// + /// Gets the scope + /// + /// The TypeSpec + /// The or null if none found + public static IScope Scope(TypeSpec typeSpec) { + return new FullNameCreator().GetScope(typeSpec); + } + + /// + /// Returns the owner module. The type was created from metadata in this module. + /// + /// The TypeSpec + /// A or null if none found + public static ModuleDef OwnerModule(TypeSpec typeSpec) { + return new FullNameCreator().GetOwnerModule(typeSpec); + } + + /// + /// Returns the namespace of a + /// + /// The type sig + /// Set if output should be compatible with reflection + /// The namespace + public static string Namespace(TypeSig typeSig, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateNamespace(typeSig); + return fnc.Result; + } + + /// + /// Returns the name of a + /// + /// The type sig + /// Set if output should be compatible with reflection + /// The name + public static string Name(TypeSig typeSig, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateName(typeSig); + return fnc.Result; + } + + /// + /// Returns the full name of a + /// + /// The type sig + /// Set if output should be compatible with reflection + /// The full name + public static string FullName(TypeSig typeSig, bool isReflection) { + return FullName(typeSig, isReflection, null, null, null); + } + + /// + /// Returns the full name of a + /// + /// The type sig + /// Set if output should be compatible with reflection + /// Helps print the name + /// The full name + public static string FullName(TypeSig typeSig, bool isReflection, IFullNameCreatorHelper helper) { + return FullName(typeSig, isReflection, helper, null, null); + } + + /// + /// Returns the full name of a + /// + /// The type sig + /// Set if output should be compatible with reflection + /// Type generic args or null if none + /// Method generic args or null if none + /// The full name + public static string FullName(TypeSig typeSig, bool isReflection, IList typeGenArgs, IList methodGenArgs) { + return FullName(typeSig, isReflection, null, typeGenArgs, methodGenArgs); + } + + /// + /// Returns the full name of a + /// + /// The type sig + /// Set if output should be compatible with reflection + /// Helps print the name + /// Type generic args or null if none + /// Method generic args or null if none + /// The full name + public static string FullName(TypeSig typeSig, bool isReflection, IFullNameCreatorHelper helper, IList typeGenArgs, IList methodGenArgs) { + var fnc = new FullNameCreator(isReflection, helper); + if (typeGenArgs != null || methodGenArgs != null) + fnc.genericArguments = new GenericArguments(); + if (typeGenArgs != null) + fnc.genericArguments.PushTypeArgs(typeGenArgs); + if (methodGenArgs != null) + fnc.genericArguments.PushMethodArgs(methodGenArgs); + fnc.CreateFullName(typeSig); + return fnc.Result; + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeSig + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeSig typeSig) { + return AssemblyQualifiedName(typeSig, null); + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The TypeSig + /// Helps print the name + /// The assembly qualified full name + public static string AssemblyQualifiedName(TypeSig typeSig, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(true, helper); + fnc.CreateAssemblyQualifiedName(typeSig); + return fnc.Result; + } + + /// + /// Returns the assembly where this type is defined + /// + /// The TypeSig + /// A or null if none found + public static IAssembly DefinitionAssembly(TypeSig typeSig) { + return new FullNameCreator().GetDefinitionAssembly(typeSig); + } + + /// + /// Gets the scope + /// + /// The TypeSig + /// The or null if none found + public static IScope Scope(TypeSig typeSig) { + return new FullNameCreator().GetScope(typeSig); + } + + /// + /// Gets the scope type + /// + /// The TypeSig + /// The scope type or null if none found + public static ITypeDefOrRef ScopeType(TypeSig typeSig) { + return new FullNameCreator().GetScopeType(typeSig); + } + + /// + /// Returns the owner module. The type was created from metadata in this module. + /// + /// The TypeSig + /// A or null if none found + public static ModuleDef OwnerModule(TypeSig typeSig) { + return new FullNameCreator().GetOwnerModule(typeSig); + } + + /// + /// Returns the namespace of a + /// + /// The ExportedType + /// Set if output should be compatible with reflection + /// The namespace + public static string Namespace(ExportedType exportedType, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateNamespace(exportedType); + return fnc.Result; + } + + /// + /// Returns the name of a + /// + /// The ExportedType + /// Set if output should be compatible with reflection + /// The name + public static string Name(ExportedType exportedType, bool isReflection) { + var fnc = new FullNameCreator(isReflection, null); + fnc.CreateName(exportedType); + return fnc.Result; + } + + /// + /// Returns the full name of a + /// + /// The ExportedType + /// Set if output should be compatible with reflection + /// The full name + public static string FullName(ExportedType exportedType, bool isReflection) { + return FullName(exportedType, isReflection, null); + } + + /// + /// Returns the full name of a + /// + /// The ExportedType + /// Set if output should be compatible with reflection + /// Helps print the name + /// The full name + public static string FullName(ExportedType exportedType, bool isReflection, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(isReflection, helper); + fnc.CreateFullName(exportedType); + return fnc.Result; + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The ExportedType + /// The assembly qualified full name + public static string AssemblyQualifiedName(ExportedType exportedType) { + return AssemblyQualifiedName(exportedType, null); + } + + /// + /// Returns the assembly qualified full name of a + /// + /// The ExportedType + /// Helps print the name + /// The assembly qualified full name + public static string AssemblyQualifiedName(ExportedType exportedType, IFullNameCreatorHelper helper) { + var fnc = new FullNameCreator(true, helper); + fnc.CreateAssemblyQualifiedName(exportedType); + return fnc.Result; + } + + /// + /// Returns the assembly where this type is defined + /// + /// The ExportedType + /// A or null if none found + public static IAssembly DefinitionAssembly(ExportedType exportedType) { + return new FullNameCreator().GetDefinitionAssembly(exportedType); + } + + /// + /// Gets the scope type + /// + /// The ExportedType + /// The scope type or null if none found + public static ITypeDefOrRef ScopeType(ExportedType exportedType) { + return new FullNameCreator().GetScopeType(exportedType); + } + + /// + /// Gets the scope + /// + /// The ExportedType + /// The or null if none found + public static IScope Scope(ExportedType exportedType) { + return new FullNameCreator().GetScope(exportedType); + } + + /// + /// Returns the owner module. The type was created from metadata in this module. + /// + /// The ExportedType + /// A or null if none found + public static ModuleDef OwnerModule(ExportedType exportedType) { + return new FullNameCreator().GetOwnerModule(exportedType); + } + + string Result { + get { return sb == null ? null : sb.ToString(); } + } + + FullNameCreator(bool isReflection, IFullNameCreatorHelper helper) { + this.sb = new StringBuilder(); + this.isReflection = isReflection; + this.helper = helper; + this.genericArguments = null; + this.recursionCounter = new RecursionCounter(); + } + + bool MustUseAssemblyName(IType type) { + if (helper == null) + return true; + return helper.MustUseAssemblyName(GetDefinitionType(type)); + } + + IType GetDefinitionType(IType type) { + if (!recursionCounter.Increment()) + return type; + + TypeSpec ts = type as TypeSpec; + if (ts != null) + type = ts.TypeSig; + + TypeSig sig = type as TypeSig; + if (sig != null) { + TypeDefOrRefSig tdr; + GenericInstSig gis; + if ((tdr = sig as TypeDefOrRefSig) != null) + type = GetDefinitionType(tdr.TypeDefOrRef); + else if ((gis = sig as GenericInstSig) != null) + type = GetDefinitionType(gis.GenericType); + else + type = GetDefinitionType(sig.Next); + } + + recursionCounter.Decrement(); + return type; + } + + void CreateFullName(ITypeDefOrRef typeDefOrRef) { + if (typeDefOrRef is TypeRef) + CreateFullName((TypeRef)typeDefOrRef); + else if (typeDefOrRef is TypeDef) + CreateFullName((TypeDef)typeDefOrRef); + else if (typeDefOrRef is TypeSpec) + CreateFullName((TypeSpec)typeDefOrRef); + else + sb.Append(NULLVALUE); + } + + void CreateNamespace(ITypeDefOrRef typeDefOrRef) { + if (typeDefOrRef is TypeRef) + CreateNamespace((TypeRef)typeDefOrRef); + else if (typeDefOrRef is TypeDef) + CreateNamespace((TypeDef)typeDefOrRef); + else if (typeDefOrRef is TypeSpec) + CreateNamespace((TypeSpec)typeDefOrRef); + else + sb.Append(NULLVALUE); + } + + void CreateName(ITypeDefOrRef typeDefOrRef) { + if (typeDefOrRef is TypeRef) + CreateName((TypeRef)typeDefOrRef); + else if (typeDefOrRef is TypeDef) + CreateName((TypeDef)typeDefOrRef); + else if (typeDefOrRef is TypeSpec) + CreateName((TypeSpec)typeDefOrRef); + else + sb.Append(NULLVALUE); + } + + void CreateAssemblyQualifiedName(ITypeDefOrRef typeDefOrRef) { + if (typeDefOrRef is TypeRef) + CreateAssemblyQualifiedName((TypeRef)typeDefOrRef); + else if (typeDefOrRef is TypeDef) + CreateAssemblyQualifiedName((TypeDef)typeDefOrRef); + else if (typeDefOrRef is TypeSpec) + CreateAssemblyQualifiedName((TypeSpec)typeDefOrRef); + else + sb.Append(NULLVALUE); + } + + void CreateAssemblyQualifiedName(TypeRef typeRef) { + if (typeRef == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + CreateFullName(typeRef); + if (MustUseAssemblyName(typeRef)) + AddAssemblyName(GetDefinitionAssembly(typeRef)); + + recursionCounter.Decrement(); + } + + void CreateFullName(TypeRef typeRef) { + if (typeRef == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + var declaringTypeRef = typeRef.ResolutionScope as TypeRef; + if (declaringTypeRef != null) { + CreateFullName(declaringTypeRef); + AddNestedTypeSeparator(); + } + + if (AddNamespace(typeRef.Namespace)) + sb.Append('.'); + AddName(typeRef.Name); + + recursionCounter.Decrement(); + } + + void CreateNamespace(TypeRef typeRef) { + if (typeRef == null) { + sb.Append(NULLVALUE); + return; + } + AddNamespace(typeRef.Namespace); + } + + void CreateName(TypeRef typeRef) { + if (typeRef == null) { + sb.Append(NULLVALUE); + return; + } + AddName(typeRef.Name); + } + + void CreateAssemblyQualifiedName(TypeDef typeDef) { + if (typeDef == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + CreateFullName(typeDef); + if (MustUseAssemblyName(typeDef)) + AddAssemblyName(GetDefinitionAssembly(typeDef)); + + recursionCounter.Decrement(); + } + + void CreateFullName(TypeDef typeDef) { + if (typeDef == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + var declaringTypeDef = typeDef.DeclaringType; + if (declaringTypeDef != null) { + CreateFullName(declaringTypeDef); + AddNestedTypeSeparator(); + } + + if (AddNamespace(typeDef.Namespace)) + sb.Append('.'); + AddName(typeDef.Name); + + recursionCounter.Decrement(); + } + + void CreateNamespace(TypeDef typeDef) { + if (typeDef == null) { + sb.Append(NULLVALUE); + return; + } + AddNamespace(typeDef.Namespace); + } + + void CreateName(TypeDef typeDef) { + if (typeDef == null) { + sb.Append(NULLVALUE); + return; + } + AddName(typeDef.Name); + } + + void CreateAssemblyQualifiedName(TypeSpec typeSpec) { + if (typeSpec == null) { + sb.Append(NULLVALUE); + return; + } + CreateAssemblyQualifiedName(typeSpec.TypeSig); + } + + void CreateFullName(TypeSpec typeSpec) { + if (typeSpec == null) { + sb.Append(NULLVALUE); + return; + } + CreateFullName(typeSpec.TypeSig); + } + + void CreateNamespace(TypeSpec typeSpec) { + if (typeSpec == null) { + sb.Append(NULLVALUE); + return; + } + CreateNamespace(typeSpec.TypeSig); + } + + void CreateName(TypeSpec typeSpec) { + if (typeSpec == null) { + sb.Append(NULLVALUE); + return; + } + CreateName(typeSpec.TypeSig); + } + + + void CreateAssemblyQualifiedName(TypeSig typeSig) { + if (typeSig == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + CreateFullName(typeSig); + if (MustUseAssemblyName(typeSig)) + AddAssemblyName(GetDefinitionAssembly(typeSig)); + + recursionCounter.Decrement(); + } + + void CreateFullName(TypeSig typeSig) { + CreateTypeSigName(typeSig, TYPESIG_NAMESPACE | TYPESIG_NAME); + } + + void CreateNamespace(TypeSig typeSig) { + CreateTypeSigName(typeSig, TYPESIG_NAMESPACE); + } + + void CreateName(TypeSig typeSig) { + CreateTypeSigName(typeSig, TYPESIG_NAME); + } + + TypeSig ReplaceGenericArg(TypeSig typeSig) { + if (genericArguments == null) + return typeSig; + var newTypeSig = genericArguments.Resolve(typeSig); + if (newTypeSig != typeSig) + genericArguments = null; + return newTypeSig; + } + + const int TYPESIG_NAMESPACE = 1; + const int TYPESIG_NAME = 2; + void CreateTypeSigName(TypeSig typeSig, int flags) { + if (typeSig == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + var old = genericArguments; + typeSig = ReplaceGenericArg(typeSig); + + bool createNamespace = (flags & TYPESIG_NAMESPACE) != 0; + bool createName = (flags & TYPESIG_NAME) != 0; + switch (typeSig.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + if (createNamespace && createName) + CreateFullName(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + else if (createNamespace) + CreateNamespace(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + else if (createName) + CreateName(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + break; + + case ElementType.Ptr: + CreateTypeSigName(typeSig.Next, flags); + if (createName) + sb.Append('*'); + break; + + case ElementType.ByRef: + CreateTypeSigName(typeSig.Next, flags); + if (createName) + sb.Append('&'); + break; + + case ElementType.Array: + CreateTypeSigName(typeSig.Next, flags); + if (createName) { + var arraySig = (ArraySig)typeSig; + sb.Append('['); + uint rank = arraySig.Rank; + if (rank == 0) + sb.Append(""); // Not allowed + else if (rank == 1) + sb.Append('*'); + else for (int i = 0; i < (int)rank; i++) { + if (i != 0) + sb.Append(','); + if (!isReflection) { + const int NO_LOWER = int.MinValue; + const uint NO_SIZE = uint.MaxValue; + int lower = arraySig.LowerBounds.Get(i, NO_LOWER); + uint size = arraySig.Sizes.Get(i, NO_SIZE); + if (lower != NO_LOWER) { + sb.Append(lower); + sb.Append(".."); + if (size != NO_SIZE) + sb.Append(lower + (int)size - 1); + else + sb.Append('.'); + } + } + } + sb.Append(']'); + } + break; + + case ElementType.SZArray: + CreateTypeSigName(typeSig.Next, flags); + if (createName) + sb.Append("[]"); + break; + + case ElementType.CModReqd: + CreateTypeSigName(typeSig.Next, flags); + if (!isReflection && createName) { + sb.Append(" modreq("); + if (createNamespace) + CreateFullName(((ModifierSig)typeSig).Modifier); + else + CreateName(((ModifierSig)typeSig).Modifier); + sb.Append(")"); + } + break; + + case ElementType.CModOpt: + CreateTypeSigName(typeSig.Next, flags); + if (!isReflection && createName) { + sb.Append(" modopt("); + if (createNamespace) + CreateFullName(((ModifierSig)typeSig).Modifier); + else + CreateName(((ModifierSig)typeSig).Modifier); + sb.Append(")"); + } + break; + + case ElementType.Pinned: + CreateTypeSigName(typeSig.Next, flags); + break; + + case ElementType.ValueArray: + CreateTypeSigName(typeSig.Next, flags); + if (createName) { + var valueArraySig = (ValueArraySig)typeSig; + sb.Append(" ValueArray("); + sb.Append(valueArraySig.Size); + sb.Append(')'); + } + break; + + case ElementType.Module: + CreateTypeSigName(typeSig.Next, flags); + if (createName) { + var moduleSig = (ModuleSig)typeSig; + sb.Append(" Module("); + sb.Append(moduleSig.Index); + sb.Append(')'); + } + break; + + case ElementType.GenericInst: + var genericInstSig = (GenericInstSig)typeSig; + var typeGenArgs = genericInstSig.GenericArguments; + CreateTypeSigName(genericInstSig.GenericType, flags); + if (createNamespace && createName) { + if (isReflection) { + sb.Append('['); + int i = -1; + foreach (var genArg in typeGenArgs.GetSafeEnumerable()) { + i++; + if (i != 0) + sb.Append(','); + + bool mustWriteAssembly = MustUseAssemblyName(genArg); + if (mustWriteAssembly) + sb.Append('['); + + CreateFullName(genArg); + + if (mustWriteAssembly) { + sb.Append(", "); + var asm = GetDefinitionAssembly(genArg); + if (asm == null) + sb.Append(NULLVALUE); + else + sb.Append(EscapeAssemblyName(GetAssemblyName(asm))); + sb.Append(']'); + } + } + sb.Append(']'); + } + else { + sb.Append('<'); + int i = -1; + foreach (var genArg in typeGenArgs.GetSafeEnumerable()) { + i++; + if (i != 0) + sb.Append(','); + CreateFullName(genArg); + } + sb.Append('>'); + } + } + break; + + case ElementType.Var: + case ElementType.MVar: + if (createName) { + var gs = (GenericSig)typeSig; + var gp = gs.GenericParam; + if (gp == null || !AddName(gp.Name)) { + sb.Append(gs.IsMethodVar ? "!!" : "!"); + sb.Append(gs.Number); + } + } + break; + + case ElementType.FnPtr: + if (createName) { + if (isReflection) + sb.Append("(fnptr)"); + else + CreateMethodFullName(null, null, ((FnPtrSig)typeSig).MethodSig, null); + } + break; + + case ElementType.Sentinel: + break; + + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + break; + } + + genericArguments = old; + recursionCounter.Decrement(); + } + + void CreateAssemblyQualifiedName(ExportedType exportedType) { + if (exportedType == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + CreateFullName(exportedType); + if (MustUseAssemblyName(exportedType)) + AddAssemblyName(GetDefinitionAssembly(exportedType)); + + recursionCounter.Decrement(); + } + + void CreateFullName(ExportedType exportedType) { + if (exportedType == null) { + sb.Append(NULLVALUE); + return; + } + if (!recursionCounter.Increment()) { + sb.Append(RECURSION_ERROR_RESULT_STRING); + return; + } + + var declaringExportedType = exportedType.Implementation as ExportedType; + if (declaringExportedType != null) { + CreateFullName(declaringExportedType); + AddNestedTypeSeparator(); + } + + if (AddNamespace(exportedType.TypeNamespace)) + sb.Append('.'); + AddName(exportedType.TypeName); + + recursionCounter.Decrement(); + } + + void CreateNamespace(ExportedType exportedType) { + if (exportedType == null) { + sb.Append(NULLVALUE); + return; + } + AddNamespace(exportedType.TypeNamespace); + } + + void CreateName(ExportedType exportedType) { + if (exportedType == null) { + sb.Append(NULLVALUE); + return; + } + AddName(exportedType.TypeName); + } + + static string GetAssemblyName(IAssembly assembly) { + var pk = assembly.PublicKeyOrToken; + if (pk is PublicKey) + pk = ((PublicKey)pk).Token; + return Utils.GetAssemblyNameString(EscapeAssemblyName(assembly.Name), assembly.Version, assembly.Culture, pk, assembly.Attributes); + } + + static string EscapeAssemblyName(UTF8String asmSimplName) { + return EscapeAssemblyName(UTF8String.ToSystemString(asmSimplName)); + } + + static string EscapeAssemblyName(string asmSimplName) { + var sb = new StringBuilder(asmSimplName.Length); + foreach (var c in asmSimplName) { + if (c == ']') + sb.Append('\\'); + sb.Append(c); + } + return sb.ToString(); + } + + void AddNestedTypeSeparator() { + if (isReflection) + sb.Append('+'); + else + sb.Append('/'); + } + + bool AddNamespace(UTF8String @namespace) { + if (UTF8String.IsNullOrEmpty(@namespace)) + return false; + AddIdentifier(@namespace.String); + return true; + } + + bool AddName(UTF8String name) { + if (UTF8String.IsNullOrEmpty(name)) + return false; + AddIdentifier(name.String); + return true; + } + + void AddAssemblyName(IAssembly assembly) { + sb.Append(", "); + if (assembly == null) + sb.Append(NULLVALUE); + else { + var pkt = assembly.PublicKeyOrToken; + if (pkt is PublicKey) + pkt = ((PublicKey)pkt).Token; + sb.Append(Utils.GetAssemblyNameString(assembly.Name, assembly.Version, assembly.Culture, pkt, assembly.Attributes)); + } + } + + void AddIdentifier(string id) { + if (isReflection) { + // Periods are not escaped by Reflection, even if they're part of a type name. + foreach (var c in id) { + switch (c) { + case ',': + case '+': + case '&': + case '*': + case '[': + case ']': + case '\\': + sb.Append('\\'); + break; + } + sb.Append(c); + } + } + else + sb.Append(id); + } + + IAssembly GetDefinitionAssembly(ITypeDefOrRef typeDefOrRef) { + var tr = typeDefOrRef as TypeRef; + if (tr != null) + return GetDefinitionAssembly(tr); + + var td = typeDefOrRef as TypeDef; + if (td != null) + return GetDefinitionAssembly(td); + + var ts = typeDefOrRef as TypeSpec; + if (ts != null) + return GetDefinitionAssembly(ts); + + return null; + } + + IScope GetScope(ITypeDefOrRef typeDefOrRef) { + var tr = typeDefOrRef as TypeRef; + if (tr != null) + return GetScope(tr); + + var td = typeDefOrRef as TypeDef; + if (td != null) + return td.Scope; + + var ts = typeDefOrRef as TypeSpec; + if (ts != null) + return GetScope(ts); + + return null; + } + + ITypeDefOrRef GetScopeType(ITypeDefOrRef typeDefOrRef) { + var tr = typeDefOrRef as TypeRef; + if (tr != null) + return tr; + + var td = typeDefOrRef as TypeDef; + if (td != null) + return td; + + var ts = typeDefOrRef as TypeSpec; + if (ts != null) + return GetScopeType(ts); + + return null; + } + + ModuleDef GetOwnerModule(ITypeDefOrRef typeDefOrRef) { + var tr = typeDefOrRef as TypeRef; + if (tr != null) + return GetOwnerModule(tr); + + var td = typeDefOrRef as TypeDef; + if (td != null) + return GetOwnerModule(td); + + var ts = typeDefOrRef as TypeSpec; + if (ts != null) + return GetOwnerModule(ts); + + return null; + } + + IAssembly GetDefinitionAssembly(TypeRef typeRef) { + if (typeRef == null) + return null; + if (!recursionCounter.Increment()) + return null; + IAssembly result; + + var scope = typeRef.ResolutionScope; + if (scope == null) + result = null; //TODO: Check ownerModule's ExportedType table + else if (scope is TypeRef) + result = GetDefinitionAssembly((TypeRef)scope); + else if (scope is AssemblyRef) + result = (AssemblyRef)scope; + else if (scope is ModuleRef) { + var ownerModule = GetOwnerModule(typeRef); + result = ownerModule == null ? null : ownerModule.Assembly; + } + else if (scope is ModuleDef) + result = ((ModuleDef)scope).Assembly; + else + result = null; // Should never be reached + + recursionCounter.Decrement(); + return result; + } + + IScope GetScope(TypeRef typeRef) { + if (typeRef == null) + return null; + if (!recursionCounter.Increment()) + return null; + IScope result; + TypeRef tr; + AssemblyRef asmRef; + ModuleRef modRef; + ModuleDef modDef; + + var scope = typeRef.ResolutionScope; + if (scope == null) + result = null; //TODO: Check ownerModule's ExportedType table + else if ((tr = scope as TypeRef) != null) + result = GetScope(tr); + else if ((asmRef = scope as AssemblyRef) != null) + result = asmRef; + else if ((modRef = scope as ModuleRef) != null) + result = modRef; + else if ((modDef = scope as ModuleDef) != null) + result = modDef; + else + result = null; // Should never be reached + + recursionCounter.Decrement(); + return result; + } + + ModuleDef GetOwnerModule(TypeRef typeRef) { + if (typeRef == null) + return null; + return typeRef.Module; + } + + IAssembly GetDefinitionAssembly(TypeDef typeDef) { + var ownerModule = GetOwnerModule(typeDef); + return ownerModule == null ? null : ownerModule.Assembly; + } + + ModuleDef GetOwnerModule(TypeDef typeDef) { + if (typeDef == null) + return null; + + ModuleDef result = null; + for (int i = recursionCounter.Counter; i < RecursionCounter.MAX_RECURSION_COUNT; i++) { + var declaringType = typeDef.DeclaringType; + if (declaringType == null) { + result = typeDef.Module2; + break; + } + typeDef = declaringType; + } + + return result; + } + + IAssembly GetDefinitionAssembly(TypeSpec typeSpec) { + if (typeSpec == null) + return null; + return GetDefinitionAssembly(typeSpec.TypeSig); + } + + IScope GetScope(TypeSpec typeSpec) { + if (typeSpec == null) + return null; + return GetScope(typeSpec.TypeSig); + } + + ITypeDefOrRef GetScopeType(TypeSpec typeSpec) { + if (typeSpec == null) + return null; + return GetScopeType(typeSpec.TypeSig); + } + + ModuleDef GetOwnerModule(TypeSpec typeSpec) { + if (typeSpec == null) + return null; + return GetOwnerModule(typeSpec.TypeSig); + } + + IAssembly GetDefinitionAssembly(TypeSig typeSig) { + if (typeSig == null) + return null; + if (!recursionCounter.Increment()) + return null; + IAssembly result; + + var old = genericArguments; + typeSig = ReplaceGenericArg(typeSig); + + switch (typeSig.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + result = GetDefinitionAssembly(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Array: + case ElementType.SZArray: + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Pinned: + case ElementType.ValueArray: + case ElementType.Module: + result = GetDefinitionAssembly(typeSig.Next); + break; + + case ElementType.GenericInst: + var genericInstSig = (GenericInstSig)typeSig; + var genericType = genericInstSig.GenericType; + result = GetDefinitionAssembly(genericType == null ? null : genericType.TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + case ElementType.FnPtr: + case ElementType.Sentinel: + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = null; + break; + } + + genericArguments = old; + recursionCounter.Decrement(); + return result; + } + + ITypeDefOrRef GetScopeType(TypeSig typeSig) { + if (typeSig == null) + return null; + if (!recursionCounter.Increment()) + return null; + ITypeDefOrRef result; + + var old = genericArguments; + typeSig = ReplaceGenericArg(typeSig); + + switch (typeSig.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + result = GetScopeType(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Array: + case ElementType.SZArray: + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Pinned: + case ElementType.ValueArray: + case ElementType.Module: + result = GetScopeType(typeSig.Next); + break; + + case ElementType.GenericInst: + var genericInstSig = (GenericInstSig)typeSig; + var genericType = genericInstSig.GenericType; + result = GetScopeType(genericType == null ? null : genericType.TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + case ElementType.FnPtr: + case ElementType.Sentinel: + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = null; + break; + } + + genericArguments = old; + recursionCounter.Decrement(); + return result; + } + + IScope GetScope(TypeSig typeSig) { + if (typeSig == null) + return null; + if (!recursionCounter.Increment()) + return null; + IScope result; + + var old = genericArguments; + typeSig = ReplaceGenericArg(typeSig); + + switch (typeSig.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + result = GetScope(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Array: + case ElementType.SZArray: + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Pinned: + case ElementType.ValueArray: + case ElementType.Module: + result = GetScope(typeSig.Next); + break; + + case ElementType.GenericInst: + var genericInstSig = (GenericInstSig)typeSig; + var genericType = genericInstSig.GenericType; + result = GetScope(genericType == null ? null : genericType.TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + case ElementType.FnPtr: + case ElementType.Sentinel: + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = null; + break; + } + + genericArguments = old; + recursionCounter.Decrement(); + return result; + } + + ModuleDef GetOwnerModule(TypeSig typeSig) { + if (typeSig == null) + return null; + if (!recursionCounter.Increment()) + return null; + ModuleDef result; + + var old = genericArguments; + typeSig = ReplaceGenericArg(typeSig); + + switch (typeSig.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + result = GetOwnerModule(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Array: + case ElementType.SZArray: + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Pinned: + case ElementType.ValueArray: + case ElementType.Module: + result = GetOwnerModule(typeSig.Next); + break; + + case ElementType.GenericInst: + var genericInstSig = (GenericInstSig)typeSig; + var genericType = genericInstSig.GenericType; + result = GetOwnerModule(genericType == null ? null : genericType.TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + case ElementType.FnPtr: + case ElementType.Sentinel: + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = null; + break; + } + + genericArguments = old; + recursionCounter.Decrement(); + return result; + } + + IAssembly GetDefinitionAssembly(ExportedType exportedType) { + if (exportedType == null) + return null; + if (!recursionCounter.Increment()) + return null; + IAssembly result; + ExportedType et; + AssemblyRef asmRef; + + var scope = exportedType.Implementation; + if ((et = scope as ExportedType) != null) + result = GetDefinitionAssembly(et); + else if ((asmRef = scope as AssemblyRef) != null) + result = asmRef; + else if (scope is FileDef) { + var ownerModule = GetOwnerModule(exportedType); + result = ownerModule == null ? null : ownerModule.Assembly; + } + else + result = null; + + recursionCounter.Decrement(); + return result; + } + + ITypeDefOrRef GetScopeType(ExportedType exportedType) { + return null; + } + + IScope GetScope(ExportedType exportedType) { + if (exportedType == null) + return null; + if (!recursionCounter.Increment()) + return null; + IScope result; + ExportedType et; + AssemblyRef asmRef; + FileDef file; + + var scope = exportedType.Implementation; + if ((et = scope as ExportedType) != null) + result = GetScope(et); + else if ((asmRef = scope as AssemblyRef) != null) + result = asmRef; + else if ((file = scope as FileDef) != null) { + var ownerModule = GetOwnerModule(exportedType); + //TODO: Not all modules' names are equal to the name in FileDef.Name + var modRef = new ModuleRefUser(ownerModule, file.Name); + if (ownerModule != null) + ownerModule.UpdateRowId(modRef); + result = modRef; + } + else + result = null; + + recursionCounter.Decrement(); + return result; + } + + ModuleDef GetOwnerModule(ExportedType exportedType) { + if (exportedType == null) + return null; + return exportedType.Module; + } + + void CreateFieldFullName(string declaringType, string name, FieldSig fieldSig) { + CreateFullName(fieldSig == null ? null : fieldSig.Type); + sb.Append(' '); + + if (declaringType != null) { + sb.Append(declaringType); + sb.Append("::"); + } + if (name != null) + sb.Append(name); + } + + void CreateMethodFullName(string declaringType, string name, MethodBaseSig methodSig, MethodDef gppMethod) { + if (methodSig == null) { + sb.Append(NULLVALUE); + return; + } + + CreateFullName(methodSig.RetType); + sb.Append(' '); + if (declaringType != null) { + sb.Append(declaringType); + sb.Append("::"); + } + if (name != null) + sb.Append(name); + + if (methodSig.Generic) { + sb.Append('<'); + uint genParamCount = methodSig.GenParamCount; + for (uint i = 0; i < genParamCount; i++) { + if (i != 0) + sb.Append(','); + CreateFullName(new GenericMVar(i, gppMethod)); + } + sb.Append('>'); + } + sb.Append('('); + int count = PrintMethodArgList(methodSig.Params, false, false); + PrintMethodArgList(methodSig.ParamsAfterSentinel, count > 0, true); + sb.Append(')'); + } + + int PrintMethodArgList(IEnumerable args, bool hasPrintedArgs, bool isAfterSentinel) { + if (args == null) + return 0; + if (isAfterSentinel) { + if (hasPrintedArgs) + sb.Append(','); + sb.Append("..."); + hasPrintedArgs = true; + } + int count = 0; + foreach (var arg in args.GetSafeEnumerable()) { + count++; + if (hasPrintedArgs) + sb.Append(','); + CreateFullName(arg); + hasPrintedArgs = true; + } + return count; + } + + void CreatePropertyFullName(string declaringType, UTF8String name, CallingConventionSig propertySig) { + CreateMethodFullName(declaringType, UTF8String.ToSystemString(name), propertySig as MethodBaseSig, null); + } + + void CreateEventFullName(string declaringType, UTF8String name, ITypeDefOrRef typeDefOrRef) { + CreateFullName(typeDefOrRef); + sb.Append(' '); + if (declaringType != null) { + sb.Append(declaringType); + sb.Append("::"); + } + if (!UTF8String.IsNull(name)) + sb.Append(UTF8String.ToSystemString(name)); + } + + /// + public override string ToString() { + return Result; + } + } +} diff --git a/dnlib/DotNet/GenericArguments.cs b/dnlib/DotNet/GenericArguments.cs new file mode 100644 index 0000000..92a76c7 --- /dev/null +++ b/dnlib/DotNet/GenericArguments.cs @@ -0,0 +1,132 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; + +namespace dnlib.DotNet { + struct GenericArgumentsStack { + readonly List> argsStack; + readonly bool isTypeVar; + + /// + /// Constructor + /// + /// true if it's for generic types, false if generic methods + public GenericArgumentsStack(bool isTypeVar) { + this.argsStack = new List>(); + this.isTypeVar = isTypeVar; + } + + /// + /// Pushes generic arguments + /// + /// The generic arguments + public void Push(IList args) { + argsStack.Add(args); + } + + /// + /// Pops generic arguments + /// + /// The popped generic arguments + public IList Pop() { + int index = argsStack.Count - 1; + var result = argsStack[index]; + argsStack.RemoveAt(index); + return result; + } + + /// + /// Resolves a generic argument + /// + /// Generic variable number + /// A or null if none was found + public TypeSig Resolve(uint number) { + TypeSig result = null; + for (int i = argsStack.Count - 1; i >= 0; i--) { + var args = argsStack[i]; + if (number >= args.Count) + return null; + var typeSig = args[(int)number]; + var gvar = typeSig as GenericSig; + if (gvar == null || gvar.IsTypeVar != isTypeVar) + return typeSig; + result = gvar; + number = gvar.Number; + } + return result; + } + } + + /// + /// Replaces generic type/method var with its generic argument + /// + public sealed class GenericArguments { + GenericArgumentsStack typeArgsStack = new GenericArgumentsStack(true); + GenericArgumentsStack methodArgsStack = new GenericArgumentsStack(false); + + /// + /// Pushes generic arguments + /// + /// The generic arguments + public void PushTypeArgs(IList typeArgs) { + typeArgsStack.Push(typeArgs); + } + + /// + /// Pops generic arguments + /// + /// The popped generic arguments + public IList PopTypeArgs() { + return typeArgsStack.Pop(); + } + + /// + /// Pushes generic arguments + /// + /// The generic arguments + public void PushMethodArgs(IList methodArgs) { + methodArgsStack.Push(methodArgs); + } + + /// + /// Pops generic arguments + /// + /// The popped generic arguments + public IList PopMethodArgs() { + return methodArgsStack.Pop(); + } + + /// + /// Replaces a generic type/method var with its generic argument (if any). If + /// isn't a generic type/method var or if it can't + /// be resolved, it itself is returned. Else the resolved type is returned. + /// + /// Type signature + /// New which is never null unless + /// is null + public TypeSig Resolve(TypeSig typeSig) { + if (typeSig == null) + return null; + + var sig = typeSig; + + var genericMVar = sig as GenericMVar; + if (genericMVar != null) { + var newSig = methodArgsStack.Resolve(genericMVar.Number); + if (newSig == null || newSig == sig) + return sig; + return newSig; + } + + var genericVar = sig as GenericVar; + if (genericVar != null) { + var newSig = typeArgsStack.Resolve(genericVar.Number); + if (newSig == null || newSig == sig) + return sig; + return newSig; + } + + return sig; + } + } +} diff --git a/dnlib/DotNet/GenericParam.cs b/dnlib/DotNet/GenericParam.cs new file mode 100644 index 0000000..5df8bfe --- /dev/null +++ b/dnlib/DotNet/GenericParam.cs @@ -0,0 +1,501 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Threading; +using dnlib.Utils; +using dnlib.DotNet.MD; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the GenericParam table + /// + [DebuggerDisplay("{Name.String}")] + public abstract class GenericParam : IHasCustomAttribute, IMemberDef, IListListener { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.GenericParam, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 19; } + } + + /// + /// Gets the owner type/method + /// + public ITypeOrMethodDef Owner { + get { return owner; } + internal set { owner = value; } + } + /// + protected ITypeOrMethodDef owner; + + /// + /// Gets the declaring type or null if none or if is + /// not a + /// + public TypeDef DeclaringType { + get { return owner as TypeDef; } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return owner as TypeDef; } + } + + /// + /// Gets the declaring method or null if none or if is + /// not a + /// + public MethodDef DeclaringMethod { + get { return owner as MethodDef; } + } + + /// + /// From column GenericParam.Number + /// + public ushort Number { + get { return number; } + set { number = value; } + } + /// + protected ushort number; + + /// + /// From column GenericParam.Flags + /// + public GenericParamAttributes Flags { + get { return (GenericParamAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column GenericParam.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column GenericParam.Kind (v1.1 only) + /// + public ITypeDefOrRef Kind { + get { return kind; } + set { kind = value; } + } + /// + protected ITypeDefOrRef kind; + + /// + /// Gets the generic param constraints + /// + public ThreadSafe.IList GenericParamConstraints { + get { + if (genericParamConstraints == null) + InitializeGenericParamConstraints(); + return genericParamConstraints; + } + } + /// + protected LazyList genericParamConstraints; + /// Initializes + protected virtual void InitializeGenericParamConstraints() { + Interlocked.CompareExchange(ref genericParamConstraints, new LazyList(this), null); + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if is not empty + /// + public bool HasGenericParamConstraints { + get { return GenericParamConstraints.Count > 0; } + } + + /// + public ModuleDef Module { + get { + var dt = owner; + return dt == null ? null : dt.Module; + } + } + + /// + public string FullName { + get { return UTF8String.ToSystemStringOrEmpty(name); } + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return true; } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(GenericParamAttributes andMask, GenericParamAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, GenericParamAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets variance (non, contra, co) + /// + public GenericParamAttributes Variance { + get { return (GenericParamAttributes)attributes & GenericParamAttributes.VarianceMask; } + set { ModifyAttributes(~GenericParamAttributes.VarianceMask, value & GenericParamAttributes.VarianceMask); } + } + + /// + /// true if is set + /// + public bool IsNonVariant { + get { return Variance == GenericParamAttributes.NonVariant; } + } + + /// + /// true if is set + /// + public bool IsCovariant { + get { return Variance == GenericParamAttributes.Covariant; } + } + + /// + /// true if is set + /// + public bool IsContravariant { + get { return Variance == GenericParamAttributes.Contravariant; } + } + + /// + /// Gets/sets the special constraint + /// + public GenericParamAttributes SpecialConstraint { + get { return (GenericParamAttributes)attributes & GenericParamAttributes.SpecialConstraintMask; } + set { ModifyAttributes(~GenericParamAttributes.SpecialConstraintMask, value & GenericParamAttributes.SpecialConstraintMask); } + } + + /// + /// true if there are no special constraints + /// + public bool HasNoSpecialConstraint { + get { return ((GenericParamAttributes)attributes & GenericParamAttributes.SpecialConstraintMask) == GenericParamAttributes.NoSpecialConstraint; } + } + + /// + /// Gets/sets the bit + /// + public bool HasReferenceTypeConstraint { + get { return ((GenericParamAttributes)attributes & GenericParamAttributes.ReferenceTypeConstraint) != 0; } + set { ModifyAttributes(value, GenericParamAttributes.ReferenceTypeConstraint); } + } + + /// + /// Gets/sets the bit + /// + public bool HasNotNullableValueTypeConstraint { + get { return ((GenericParamAttributes)attributes & GenericParamAttributes.NotNullableValueTypeConstraint) != 0; } + set { ModifyAttributes(value, GenericParamAttributes.NotNullableValueTypeConstraint); } + } + + /// + /// Gets/sets the bit + /// + public bool HasDefaultConstructorConstraint { + get { return ((GenericParamAttributes)attributes & GenericParamAttributes.DefaultConstructorConstraint) != 0; } + set { ModifyAttributes(value, GenericParamAttributes.DefaultConstructorConstraint); } + } + + /// + void IListListener.OnLazyAdd(int index, ref GenericParamConstraint value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref GenericParamConstraint value) { +#if DEBUG + if (value.Owner != this) + throw new InvalidOperationException("Added generic param constraint's Owner != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, GenericParamConstraint value) { + if (value.Owner != null) + throw new InvalidOperationException("Generic param constraint is already owned by another generic param. Set Owner to null first."); + value.Owner = this; + } + + /// + void IListListener.OnRemove(int index, GenericParamConstraint value) { + value.Owner = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var gpc in GenericParamConstraints.GetEnumerable_NoLock()) + gpc.Owner = null; + } + + /// + public override string ToString() { + var o = owner; + if (o is TypeDef) + return string.Format("!{0}", number); + if (o is MethodDef) + return string.Format("!!{0}", number); + return string.Format("??{0}", number); + } + } + + /// + /// A GenericParam row created by the user and not present in the original .NET file + /// + public class GenericParamUser : GenericParam { + /// + /// Default constructor + /// + public GenericParamUser() { + } + + /// + /// Constructor + /// + /// The generic param number + public GenericParamUser(ushort number) + : this(number, 0) { + } + + /// + /// Constructor + /// + /// The generic param number + /// Flags + public GenericParamUser(ushort number, GenericParamAttributes flags) + : this(number, flags, UTF8String.Empty) { + } + + /// + /// Constructor + /// + /// The generic param number + /// Flags + /// Name + public GenericParamUser(ushort number, GenericParamAttributes flags, UTF8String name) { + this.genericParamConstraints = new LazyList(this); + this.number = number; + this.attributes = (int)flags; + this.name = name; + } + } + + /// + /// Created from a row in the GenericParam table + /// + sealed class GenericParamMD : GenericParam, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.GenericParam, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + protected override void InitializeGenericParamConstraints() { + var list = readerModule.MetaData.GetGenericParamConstraintRidList(origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveGenericParamConstraint(((RidList)list2)[index], GetGenericParamContext(owner))); + Interlocked.CompareExchange(ref genericParamConstraints, tmp, null); + } + + static GenericParamContext GetGenericParamContext(ITypeOrMethodDef tmOwner) { + var md = tmOwner as MethodDef; + if (md != null) + return GenericParamContext.Create(md); + return new GenericParamContext(tmOwner as TypeDef); + } + + /// + /// Constructor + /// + /// The module which contains this GenericParam row + /// Row ID + /// If is null + /// If is invalid + public GenericParamMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.GenericParamTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("GenericParam rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint kind = readerModule.TablesStream.ReadGenericParamRow(origRid, out this.number, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.owner = readerModule.GetOwner(this); + if (kind != 0) + this.kind = readerModule.ResolveTypeDefOrRef(kind, GetGenericParamContext(owner)); + } + + internal GenericParamMD InitializeAll() { + MemberMDInitializer.Initialize(Owner); + MemberMDInitializer.Initialize(Number); + MemberMDInitializer.Initialize(Flags); + MemberMDInitializer.Initialize(Name); + MemberMDInitializer.Initialize(Kind); + MemberMDInitializer.Initialize(CustomAttributes); + MemberMDInitializer.Initialize(GenericParamConstraints); + return this; + } + + /// + internal override void OnLazyAdd2(int index, ref GenericParamConstraint value) { + if (value.Owner != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadGenericParamConstraint(value.Rid, GetGenericParamContext(owner)).InitializeAll()); + value.Owner = this; + } + } + } +} diff --git a/dnlib/DotNet/GenericParamAttributes.cs b/dnlib/DotNet/GenericParamAttributes.cs new file mode 100644 index 0000000..2b14fba --- /dev/null +++ b/dnlib/DotNet/GenericParamAttributes.cs @@ -0,0 +1,31 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Generic parameter flags. See CorHdr.h/CorGenericParamAttr + /// + [Flags] + public enum GenericParamAttributes : ushort { + /// + VarianceMask = 0x0003, + /// + NonVariant = 0x0000, + /// + Covariant = 0x0001, + /// + Contravariant = 0x0002, + + /// + SpecialConstraintMask = 0x001C, + /// + NoSpecialConstraint = 0x0000, + /// type argument must be a reference type + ReferenceTypeConstraint = 0x0004, + /// type argument must be a value type but not Nullable + NotNullableValueTypeConstraint = 0x0008, + /// type argument must have a public default constructor + DefaultConstructorConstraint = 0x0010, + } +} diff --git a/dnlib/DotNet/GenericParamConstraint.cs b/dnlib/DotNet/GenericParamConstraint.cs new file mode 100644 index 0000000..4d20a9a --- /dev/null +++ b/dnlib/DotNet/GenericParamConstraint.cs @@ -0,0 +1,150 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the GenericParamConstraint table + /// + public abstract class GenericParamConstraint : IHasCustomAttribute, IContainsGenericParameter { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.GenericParamConstraint, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 20; } + } + + /// + /// Gets the owner generic param + /// + public GenericParam Owner { + get { return owner; } + internal set { owner = value; } + } + /// + protected GenericParam owner; + + /// + /// From column GenericParamConstraint.Constraint + /// + public ITypeDefOrRef Constraint { + get { return constraint; } + set { constraint = value; } + } + /// + protected ITypeDefOrRef constraint; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + bool IContainsGenericParameter.ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + } + + /// + /// A GenericParamConstraintAssembly row created by the user and not present in the original .NET file + /// + public class GenericParamConstraintUser : GenericParamConstraint { + /// + /// Default constructor + /// + public GenericParamConstraintUser() { + } + + /// + /// Constructor + /// + /// The constraint + public GenericParamConstraintUser(ITypeDefOrRef constraint) { + this.constraint = constraint; + } + } + + /// + /// Created from a row in the GenericParamConstraint table + /// + sealed class GenericParamConstraintMD : GenericParamConstraint, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.GenericParamConstraint, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this GenericParamConstraint row + /// Row ID + /// Generic parameter context + /// If is null + /// If is invalid + public GenericParamConstraintMD(ModuleDefMD readerModule, uint rid, GenericParamContext gpContext) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.GenericParamConstraintTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("GenericParamConstraint rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint constraint = readerModule.TablesStream.ReadGenericParamConstraintRow2(origRid); + this.constraint = readerModule.ResolveTypeDefOrRef(constraint, gpContext); + this.owner = readerModule.GetOwner(this); + } + + internal GenericParamConstraintMD InitializeAll() { + MemberMDInitializer.Initialize(Owner); + MemberMDInitializer.Initialize(Constraint); + MemberMDInitializer.Initialize(CustomAttributes); + return this; + } + } +} diff --git a/dnlib/DotNet/GenericParamContext.cs b/dnlib/DotNet/GenericParamContext.cs new file mode 100644 index 0000000..7f2e35f --- /dev/null +++ b/dnlib/DotNet/GenericParamContext.cs @@ -0,0 +1,79 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Generic parameter context + /// + public struct GenericParamContext { + /// + /// Type context + /// + public readonly TypeDef Type; + + /// + /// Method context + /// + public readonly MethodDef Method; + + /// + /// true if and are both null + /// + public bool IsEmpty { + get { return Type == null && Method == null; } + } + + /// + /// Creates a new instance and initializes the + /// field to 's + /// and the field to . + /// + /// Method + /// A new instance + public static GenericParamContext Create(MethodDef method) { + if (method == null) + return new GenericParamContext(); + return new GenericParamContext(method.DeclaringType, method); + } + + /// + /// Creates a new instance and initializes the + /// field to and the field + /// to null + /// + /// Type + /// A new instance + public static GenericParamContext Create(TypeDef type) { + return new GenericParamContext(type); + } + + /// + /// Constructor + /// + /// Type context + public GenericParamContext(TypeDef type) { + this.Type = type; + this.Method = null; + } + + /// + /// Constructor. The field is set to null and NOT to + /// 's . Use + /// if you want that behavior. + /// + /// Method context + public GenericParamContext(MethodDef method) { + this.Type = null; + this.Method = method; + } + + /// + /// Constructor + /// + /// Type context + /// Method context + public GenericParamContext(TypeDef type, MethodDef method) { + this.Type = type; + this.Method = method; + } + } +} diff --git a/dnlib/DotNet/IAssemblyResolver.cs b/dnlib/DotNet/IAssemblyResolver.cs new file mode 100644 index 0000000..2824e6e --- /dev/null +++ b/dnlib/DotNet/IAssemblyResolver.cs @@ -0,0 +1,150 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Reflection; + +namespace dnlib.DotNet { + /// + /// Resolves assemblies + /// + public interface IAssemblyResolver { + /// + /// Finds and returns an + /// + /// The assembly to find + /// The module that needs to resolve an assembly or null + /// An instance owned by the assembly resolver or + /// null if the assembly couldn't be found. + AssemblyDef Resolve(IAssembly assembly, ModuleDef sourceModule); + + /// + /// Add an assembly to the assembly cache + /// + /// The assembly + /// true if is cached, false if it's not + /// cached because some other assembly with the exact same full name has already been + /// cached or if is null. + bool AddToCache(AssemblyDef asm); + + /// + /// Removes the assembly from the cache + /// + /// The assembly + /// true if it was removed, false if it wasn't removed since it + /// wasn't in the cache or if was null + bool Remove(AssemblyDef asm); + + /// + /// Clears the cache and calls on each cached module. + /// Use to remove any assemblies you added yourself + /// using before calling this method if you don't want + /// them disposed. + /// + void Clear(); + } + + public static partial class Extensions { + /// + /// Add a module's assembly to the assembly cache + /// + /// this + /// The module whose assembly should be cached + /// true if 's assembly is cached, false + /// if it's not cached because some other assembly with the exact same full name has + /// already been cached or if or its assembly is null. + public static bool AddToCache(this IAssemblyResolver self, ModuleDef module) { + return module != null && self.AddToCache(module.Assembly); + } + + /// + /// Removes a module's assembly from the cache + /// + /// this + /// The module + /// true if its assembly was removed, false if it wasn't removed + /// since it wasn't in the cache, it has no assembly, or was + /// null + public static bool Remove(this IAssemblyResolver self, ModuleDef module) { + return module != null && self.Remove(module.Assembly); + } + + /// + /// Finds and returns an + /// + /// this + /// The assembly to find + /// The module that needs to resolve an assembly or null + /// An instance owned by the assembly resolver or + /// null if the assembly couldn't be found. + public static AssemblyDef Resolve(this IAssemblyResolver self, AssemblyName assembly, ModuleDef sourceModule) { + if (assembly == null) + return null; + return self.Resolve(new AssemblyNameInfo(assembly), sourceModule); + } + + /// + /// Finds and returns an + /// + /// this + /// The assembly to find + /// The module that needs to resolve an assembly or null + /// An instance owned by the assembly resolver or + /// null if the assembly couldn't be found. + public static AssemblyDef Resolve(this IAssemblyResolver self, string asmFullName, ModuleDef sourceModule) { + if (asmFullName == null) + return null; + return self.Resolve(new AssemblyNameInfo(asmFullName), sourceModule); + } + + /// + /// Finds and returns an + /// + /// this + /// The assembly to find + /// The module that needs to resolve an assembly or null + /// An instance owned by the assembly resolver + /// If the assembly couldn't be found. + public static AssemblyDef ResolveThrow(this IAssemblyResolver self, IAssembly assembly, ModuleDef sourceModule) { + if (assembly == null) + return null; + var asm = self.Resolve(assembly, sourceModule); + if (asm != null) + return asm; + throw new AssemblyResolveException(string.Format("Could not resolve assembly: {0}", assembly)); + } + + /// + /// Finds and returns an + /// + /// this + /// The assembly to find + /// The module that needs to resolve an assembly or null + /// An instance owned by the assembly resolver + /// If the assembly couldn't be found. + public static AssemblyDef ResolveThrow(this IAssemblyResolver self, AssemblyName assembly, ModuleDef sourceModule) { + if (assembly == null) + return null; + var asm = self.Resolve(new AssemblyNameInfo(assembly), sourceModule); + if (asm != null) + return asm; + throw new AssemblyResolveException(string.Format("Could not resolve assembly: {0}", assembly)); + } + + /// + /// Finds and returns an + /// + /// this + /// The assembly to find + /// The module that needs to resolve an assembly or null + /// An instance owned by the assembly resolver + /// If the assembly couldn't be found. + public static AssemblyDef ResolveThrow(this IAssemblyResolver self, string asmFullName, ModuleDef sourceModule) { + if (asmFullName == null) + return null; + var asm = self.Resolve(new AssemblyNameInfo(asmFullName), sourceModule); + if (asm != null) + return asm; + throw new AssemblyResolveException(string.Format("Could not resolve assembly: {0}", asmFullName)); + } + } +} diff --git a/dnlib/DotNet/ICodedToken.cs b/dnlib/DotNet/ICodedToken.cs new file mode 100644 index 0000000..921d742 --- /dev/null +++ b/dnlib/DotNet/ICodedToken.cs @@ -0,0 +1,1078 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// The table row can be referenced by a MD token + /// + public interface IMDTokenProvider { + /// + /// Returns the metadata token + /// + MDToken MDToken { get; } + + /// + /// Gets/sets the row ID + /// + uint Rid { get; set; } + } + + /// + /// All *MD classes implement this interface. + /// + public interface IMDTokenProviderMD : IMDTokenProvider { + /// + /// Gets the original row ID + /// + uint OrigRid { get; } + } + + /// + /// An assembly. Implemented by , and + /// . + /// + public interface IAssembly : IFullName { + /// + /// The assembly version + /// + Version Version { get; set; } + + /// + /// Assembly flags + /// + AssemblyAttributes Attributes { get; set; } + + /// + /// Public key or public key token + /// + PublicKeyBase PublicKeyOrToken { get; } + + /// + /// Locale, aka culture + /// + UTF8String Culture { get; set; } + + /// + /// Gets the full name of the assembly but use a public key token + /// + string FullNameToken { get; } + + /// + /// Gets/sets the bit + /// + bool HasPublicKey { get; set; } + + /// + /// Gets/sets the processor architecture + /// + AssemblyAttributes ProcessorArchitecture { get; set; } + + /// + /// Gets/sets the processor architecture + /// + AssemblyAttributes ProcessorArchitectureFull { get; set; } + + /// + /// true if unspecified processor architecture + /// + bool IsProcessorArchitectureNone { get; } + + /// + /// true if neutral (PE32) architecture + /// + bool IsProcessorArchitectureMSIL { get; } + + /// + /// true if x86 (PE32) architecture + /// + bool IsProcessorArchitectureX86 { get; } + + /// + /// true if IA-64 (PE32+) architecture + /// + bool IsProcessorArchitectureIA64 { get; } + + /// + /// true if x64 (PE32+) architecture + /// + bool IsProcessorArchitectureX64 { get; } + + /// + /// true if ARM (PE32) architecture + /// + bool IsProcessorArchitectureARM { get; } + + /// + /// true if eg. reference assembly (not runnable) + /// + bool IsProcessorArchitectureNoPlatform { get; } + + /// + /// Gets/sets the bit + /// + bool IsProcessorArchitectureSpecified { get; set; } + + /// + /// Gets/sets the bit + /// + bool EnableJITcompileTracking { get; set; } + + /// + /// Gets/sets the bit + /// + bool DisableJITcompileOptimizer { get; set; } + + /// + /// Gets/sets the bit + /// + bool IsRetargetable { get; set; } + + /// + /// Gets/sets the content type + /// + AssemblyAttributes ContentType { get; set; } + + /// + /// true if content type is Default + /// + bool IsContentTypeDefault { get; } + + /// + /// true if content type is WindowsRuntime + /// + bool IsContentTypeWindowsRuntime { get; } + } + + public static partial class Extensions { + /// + /// Checks whether appears to be the core library (eg. + /// mscorlib, System.Runtime or corefx) + /// + /// The assembly + public static bool IsCorLib(this IAssembly asm) { + string asmName; + return asm != null && + UTF8String.IsNullOrEmpty(asm.Culture) && + ((asmName = UTF8String.ToSystemStringOrEmpty(asm.Name)).Equals("mscorlib", StringComparison.OrdinalIgnoreCase) || + asmName.Equals("System.Runtime", StringComparison.OrdinalIgnoreCase) || + asmName.Equals("corefx", StringComparison.OrdinalIgnoreCase)); + } + + /// + /// Converts to a instance + /// + /// The assembly + /// A new instance + public static AssemblyRef ToAssemblyRef(this IAssembly asm) { + if (asm == null) + return null; + // Always create a new one, even if it happens to be an AssemblyRef + return new AssemblyRefUser(asm.Name, asm.Version, asm.PublicKeyOrToken, asm.Culture) { Attributes = asm.Attributes }; + } + + /// + /// Converts to a + /// + /// The type + /// A instance or null if + /// is invalid + public static TypeSig ToTypeSig(this ITypeDefOrRef type) { + return ToTypeSig(type, true); + } + + /// + /// Converts to a + /// + /// The type + /// true if we should try to figure out whether + /// is a + /// A instance or null if + /// is invalid + public static TypeSig ToTypeSig(this ITypeDefOrRef type, bool checkValueType) { + if (type == null) + return null; + + var module = type.Module; + if (module != null) { + var corLibType = module.CorLibTypes.GetCorLibTypeSig(type); + if (corLibType != null) + return corLibType; + } + + var td = type as TypeDef; + if (td != null) + return CreateClassOrValueType(type, checkValueType ? td.IsValueType : false); + + var tr = type as TypeRef; + if (tr != null) { + if (checkValueType) + td = tr.Resolve(); + return CreateClassOrValueType(type, td == null ? false : td.IsValueType); + } + + var ts = type as TypeSpec; + if (ts != null) + return ts.TypeSig; + + return null; + } + + static TypeSig CreateClassOrValueType(ITypeDefOrRef type, bool isValueType) { + if (isValueType) + return new ValueTypeSig(type); + return new ClassSig(type); + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static TypeDefOrRefSig TryGetTypeDefOrRefSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as TypeDefOrRefSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ClassOrValueTypeSig TryGetClassOrValueTypeSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as ClassOrValueTypeSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ValueTypeSig TryGetValueTypeSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as ValueTypeSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ClassSig TryGetClassSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as ClassSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericSig TryGetGenericSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as GenericSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericVar TryGetGenericVar(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as GenericVar; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericMVar TryGetGenericMVar(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as GenericMVar; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericInstSig TryGetGenericInstSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as GenericInstSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static PtrSig TryGetPtrSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as PtrSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ByRefSig TryGetByRefSig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as ByRefSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ArraySig TryGetArraySig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as ArraySig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static SZArraySig TryGetSZArraySig(this ITypeDefOrRef type) { + var ts = type as TypeSpec; + return ts == null ? null : ts.TypeSig.RemovePinnedAndModifiers() as SZArraySig; + } + + /// + /// Returns the base type of . Throws if we can't resolve + /// a . + /// + /// The type + /// The base type or null if there's no base type + public static ITypeDefOrRef GetBaseTypeThrow(this ITypeDefOrRef tdr) { + return tdr.GetBaseType(true); + } + + /// + /// Returns the base type of + /// + /// The type + /// The base type or null if there's no base type, or if + /// we couldn't resolve a + public static ITypeDefOrRef GetBaseType(this ITypeDefOrRef tdr) { + return tdr.GetBaseType(false); + } + + /// + /// Returns the base type of + /// + /// The type + /// true if we should throw if we can't + /// resolve a . false if we should ignore the error and + /// just return null. + /// The base type or null if there's no base type, or if + /// is true and we couldn't resolve + /// a + public static ITypeDefOrRef GetBaseType(this ITypeDefOrRef tdr, bool throwOnResolveFailure) { + var td = tdr as TypeDef; + if (td != null) + return td.BaseType; + + var tr = tdr as TypeRef; + if (tr != null) { + td = throwOnResolveFailure ? tr.ResolveThrow() : tr.Resolve(); + return td == null ? null : td.BaseType; + } + + var ts = tdr as TypeSpec; + if (ts == null) + return null; + + var git = ts.TypeSig.ToGenericInstSig(); + if (git != null) { + var genType = git.GenericType; + tdr = genType == null ? null : genType.TypeDefOrRef; + } + else { + var sig = ts.TypeSig.ToTypeDefOrRefSig(); + tdr = sig == null ? null : sig.TypeDefOrRef; + } + + td = tdr as TypeDef; + if (td != null) + return td.BaseType; + + tr = tdr as TypeRef; + if (tr != null) { + td = throwOnResolveFailure ? tr.ResolveThrow() : tr.Resolve(); + return td == null ? null : td.BaseType; + } + + return null; + } + + /// + /// Gets the scope type, resolves it, and returns the + /// + /// Type + /// A or null if input was null or if we + /// couldn't resolve the reference. + public static TypeDef ResolveTypeDef(this ITypeDefOrRef tdr) { + var td = tdr as TypeDef; + if (td != null) + return td; + + var tr = tdr as TypeRef; + if (tr != null) + return tr.Resolve(); + + if (tdr == null) + return null; + tdr = tdr.ScopeType; + + td = tdr as TypeDef; + if (td != null) + return td; + + tr = tdr as TypeRef; + if (tr != null) + return tr.Resolve(); + + return null; + } + + /// + /// Gets the scope type, resolves it, and returns the + /// + /// Type + /// A instance. + /// If the type couldn't be resolved + public static TypeDef ResolveTypeDefThrow(this ITypeDefOrRef tdr) { + var td = tdr as TypeDef; + if (td != null) + return td; + + var tr = tdr as TypeRef; + if (tr != null) + return tr.ResolveThrow(); + + if (tdr == null) + throw new TypeResolveException("Can't resolve a null pointer"); + tdr = tdr.ScopeType; + + td = tdr as TypeDef; + if (td != null) + return td; + + tr = tdr as TypeRef; + if (tr != null) + return tr.ResolveThrow(); + + throw new TypeResolveException(string.Format("Could not resolve type: {0} ({1})", tdr, tdr == null ? null : tdr.DefinitionAssembly)); + } + + /// + /// Resolves an to a . Returns null if it + /// was not possible to resolve it. See also + /// + /// Field to resolve + /// The or null if is + /// null or if it wasn't possible to resolve it (the field doesn't exist or its + /// assembly couldn't be loaded) + public static FieldDef ResolveFieldDef(this IField field) { + var fd = field as FieldDef; + if (fd != null) + return fd; + + var mr = field as MemberRef; + if (mr != null) + return mr.ResolveField(); + + return null; + } + + /// + /// Resolves an to a and throws an exception if + /// it was not possible to resolve it. See also + /// + /// Field to resolve + /// The + public static FieldDef ResolveFieldDefThrow(this IField field) { + var fd = field as FieldDef; + if (fd != null) + return fd; + + var mr = field as MemberRef; + if (mr != null) + return mr.ResolveFieldThrow(); + + throw new MemberRefResolveException(string.Format("Could not resolve field: {0}", field)); + } + + /// + /// Resolves an to a . Returns null if it + /// was not possible to resolve it. See also . If + /// is a , then the + /// property is resolved and returned. + /// + /// Method to resolve + /// The or null if is + /// null or if it wasn't possible to resolve it (the method doesn't exist or its + /// assembly couldn't be loaded) + public static MethodDef ResolveMethodDef(this IMethod method) { + var md = method as MethodDef; + if (md != null) + return md; + + var mr = method as MemberRef; + if (mr != null) + return mr.ResolveMethod(); + + var ms = method as MethodSpec; + if (ms != null) { + md = ms.Method as MethodDef; + if (md != null) + return md; + + mr = ms.Method as MemberRef; + if (mr != null) + return mr.ResolveMethod(); + } + + return null; + } + + /// + /// Resolves an to a and throws an exception + /// if it was not possible to resolve it. See also . If + /// is a , then the + /// property is resolved and returned. + /// + /// Method to resolve + /// The + public static MethodDef ResolveMethodDefThrow(this IMethod method) { + var md = method as MethodDef; + if (md != null) + return md; + + var mr = method as MemberRef; + if (mr != null) + return mr.ResolveMethodThrow(); + + var ms = method as MethodSpec; + if (ms != null) { + md = ms.Method as MethodDef; + if (md != null) + return md; + + mr = ms.Method as MemberRef; + if (mr != null) + return mr.ResolveMethodThrow(); + } + + throw new MemberRefResolveException(string.Format("Could not resolve method: {0}", method)); + } + + /// + /// Returns the definition assembly of a + /// + /// Member reference + /// + static internal IAssembly GetDefinitionAssembly(this MemberRef mr) { + if (mr == null) + return null; + var parent = mr.Class; + + var tdr = parent as ITypeDefOrRef; + if (tdr != null) + return tdr.DefinitionAssembly; + + if (parent is ModuleRef) { + var mod = mr.Module; + return mod == null ? null : mod.Assembly; + } + + var md = parent as MethodDef; + if (md != null) { + var declType = md.DeclaringType; + return declType == null ? null : declType.DefinitionAssembly; + } + + return null; + } + } + + /// + /// Implemented by and , which are the only + /// valid managed entry point tokens. + /// + public interface IManagedEntryPoint : ICodedToken { + } + + /// + /// Interface to access a module def/ref + /// + public interface IModule : IScope, IFullName { + } + + /// + /// Type of scope + /// + public enum ScopeType { + /// + /// It's an instance + /// + AssemblyRef, + + /// + /// It's a instance + /// + ModuleRef, + + /// + /// It's a instance + /// + ModuleDef, + } + + /// + /// Implemented by modules and assemblies + /// + public interface IScope { + /// + /// Gets the scope type + /// + ScopeType ScopeType { get; } + + /// + /// Gets the scope name + /// + string ScopeName { get; } + } + + /// + /// Interface to get the full name of a type, field, or method + /// + public interface IFullName { + /// + /// Gets the full name + /// + string FullName { get; } + + /// + /// Simple name of implementer + /// + UTF8String Name { get; set; } + } + + /// + /// Implemented by all member refs and types + /// + public interface IOwnerModule { + /// + /// Gets the owner module + /// + ModuleDef Module { get; } + } + + /// + /// Methods to check whether the implementer is a type or a method. + /// + public interface IIsTypeOrMethod { + /// + /// true if it's a type + /// + bool IsType { get; } + + /// + /// true if it's a method + /// + bool IsMethod { get; } + } + + /// + /// Implemented by types, fields, methods, properties, events + /// + public interface IMemberRef : ICodedToken, IFullName, IOwnerModule, IIsTypeOrMethod { + /// + /// Gets the declaring type + /// + ITypeDefOrRef DeclaringType { get; } + + /// + /// true if it's a or a that's + /// referencing a field. + /// + bool IsField { get; } + + /// + /// true if it's a + /// + bool IsTypeSpec { get; } + + /// + /// true if it's a + /// + bool IsTypeRef { get; } + + /// + /// true if it's a + /// + bool IsTypeDef { get; } + + /// + /// true if it's a + /// + bool IsMethodSpec { get; } + + /// + /// true if it's a + /// + bool IsMethodDef { get; } + + /// + /// true if it's a + /// + bool IsMemberRef { get; } + + /// + /// true if it's a + /// + bool IsFieldDef { get; } + + /// + /// true if it's a + /// + bool IsPropertyDef { get; } + + /// + /// true if it's a + /// + bool IsEventDef { get; } + + /// + /// true if it's a + /// + bool IsGenericParam { get; } + } + + /// + /// All member definitions implement this interface: , + /// , , , + /// , and . + /// + public interface IMemberDef : IDnlibDef, IMemberRef { + /// + /// Gets the declaring type + /// + new TypeDef DeclaringType { get; } + } + + /// + /// Implemented by the following classes: , + /// , , , + /// , , , + /// and + /// + public interface IDnlibDef : ICodedToken, IFullName, IHasCustomAttribute { + } + + /// + /// Implemented by types and methods + /// + public interface IGenericParameterProvider : ICodedToken, IIsTypeOrMethod { + /// + /// Gets the number of generic parameters / arguments + /// + int NumberOfGenericParameters { get; } + } + + /// + /// Implemented by fields ( and ) + /// + public interface IField : ICodedToken, ITokenOperand, IFullName, IMemberRef { + /// + /// Gets/sets the field signature + /// + FieldSig FieldSig { get; set; } + } + + /// + /// Implemented by methods (, and ) + /// + public interface IMethod : ICodedToken, ITokenOperand, IFullName, IGenericParameterProvider, IMemberRef { + /// + /// Method signature + /// + MethodSig MethodSig { get; set; } + } + + /// + /// Implemented by tables that can be a token in the ldtoken instruction + /// + public interface ITokenOperand : ICodedToken { + } + + /// + /// The table row can be referenced by a coded token + /// + public interface ICodedToken : IMDTokenProvider { + } + + /// + /// TypeDefOrRef coded token interface + /// + public interface ITypeDefOrRef : ICodedToken, IHasCustomAttribute, IMemberRefParent, IType, ITokenOperand, IMemberRef { + /// + /// The coded token tag + /// + int TypeDefOrRefTag { get; } + } + + /// + /// HasConstant coded token interface + /// + public interface IHasConstant : ICodedToken, IHasCustomAttribute, IFullName { + /// + /// The coded token tag + /// + int HasConstantTag { get; } + + /// + /// Gets/sets the constant value + /// + Constant Constant { get; set; } + } + + /// + /// HasCustomAttribute coded token interface + /// + public interface IHasCustomAttribute : ICodedToken { + /// + /// The coded token tag + /// + int HasCustomAttributeTag { get; } + + /// + /// Gets all custom attributes + /// + CustomAttributeCollection CustomAttributes { get; } + + /// + /// true if is not empty + /// + bool HasCustomAttributes { get; } + } + + /// + /// HasFieldMarshal coded token interface + /// + public interface IHasFieldMarshal : ICodedToken, IHasCustomAttribute, IHasConstant, IFullName { + /// + /// The coded token tag + /// + int HasFieldMarshalTag { get; } + + /// + /// Gets/sets the marshal type + /// + MarshalType MarshalType { get; set; } + + /// + /// true if is not null + /// + bool HasMarshalType { get; } + } + + /// + /// HasDeclSecurity coded token interface + /// + public interface IHasDeclSecurity : ICodedToken, IHasCustomAttribute, IFullName { + /// + /// The coded token tag + /// + int HasDeclSecurityTag { get; } + + /// + /// Gets the permission sets + /// + ThreadSafe.IList DeclSecurities { get; } + + /// + /// true if is not empty + /// + bool HasDeclSecurities { get; } + } + + /// + /// MemberRefParent coded token interface + /// + public interface IMemberRefParent : ICodedToken, IHasCustomAttribute, IFullName { + /// + /// The coded token tag + /// + int MemberRefParentTag { get; } + } + + /// + /// HasSemantic coded token interface + /// + public interface IHasSemantic : ICodedToken, IHasCustomAttribute, IFullName, IMemberRef { + /// + /// The coded token tag + /// + int HasSemanticTag { get; } + } + + /// + /// MethodDefOrRef coded token interface + /// + public interface IMethodDefOrRef : ICodedToken, IHasCustomAttribute, ICustomAttributeType, IMethod { + /// + /// The coded token tag + /// + int MethodDefOrRefTag { get; } + } + + /// + /// MemberForwarded coded token interface + /// + public interface IMemberForwarded : ICodedToken, IHasCustomAttribute, IFullName, IMemberRef { + /// + /// The coded token tag + /// + int MemberForwardedTag { get; } + + /// + /// Gets/sets the impl map + /// + ImplMap ImplMap { get; set; } + + /// + /// true if is not null + /// + bool HasImplMap { get; } + } + + /// + /// Implementation coded token interface + /// + public interface IImplementation : ICodedToken, IHasCustomAttribute, IFullName { + /// + /// The coded token tag + /// + int ImplementationTag { get; } + } + + /// + /// CustomAttributeType coded token interface + /// + public interface ICustomAttributeType : ICodedToken, IHasCustomAttribute, IMethod { + /// + /// The coded token tag + /// + int CustomAttributeTypeTag { get; } + } + + /// + /// ResolutionScope coded token interface + /// + public interface IResolutionScope : ICodedToken, IHasCustomAttribute, IFullName { + /// + /// The coded token tag + /// + int ResolutionScopeTag { get; } + } + + /// + /// TypeOrMethodDef coded token interface + /// + public interface ITypeOrMethodDef : ICodedToken, IHasCustomAttribute, IHasDeclSecurity, IMemberRefParent, IFullName, IMemberRef, IGenericParameterProvider { + /// + /// The coded token tag + /// + int TypeOrMethodDefTag { get; } + + /// + /// Gets the generic parameters + /// + ThreadSafe.IList GenericParameters { get; } + + /// + /// true if is not empty + /// + bool HasGenericParameters { get; } + } + + public static partial class Extensions { + /// + /// Converts a to a + /// + /// The sig + public static ITypeDefOrRef ToTypeDefOrRef(this TypeSig sig) { + if (sig == null) + return null; + var tdrSig = sig as TypeDefOrRefSig; + if (tdrSig != null) + return tdrSig.TypeDefOrRef; + var module = sig.Module; + if (module == null) + return new TypeSpecUser(sig); + return module.UpdateRowId(new TypeSpecUser(sig)); + } + + /// + /// Returns true if it's an integer or a floating point type + /// + /// Type + /// + internal static bool IsPrimitive(this IType tdr) { + if (tdr == null) + return false; + + switch (tdr.Name) { + case "Boolean": + case "Char": + case "SByte": + case "Byte": + case "Int16": + case "UInt16": + case "Int32": + case "UInt32": + case "Int64": + case "UInt64": + case "Single": + case "Double": + case "IntPtr": + case "UIntPtr": + break; + default: + return false; + } + + if (tdr.Namespace != "System") + return false; + + return tdr.DefinitionAssembly.IsCorLib(); + } + } +} diff --git a/dnlib/DotNet/ICorLibTypes.cs b/dnlib/DotNet/ICorLibTypes.cs new file mode 100644 index 0000000..a697390 --- /dev/null +++ b/dnlib/DotNet/ICorLibTypes.cs @@ -0,0 +1,189 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Access to .NET core library's simple types + /// + public interface ICorLibTypes { + /// + /// Gets a System.Void + /// + CorLibTypeSig Void { get; } + + /// + /// Gets a System.Boolean + /// + CorLibTypeSig Boolean { get; } + + /// + /// Gets a System.Char + /// + CorLibTypeSig Char { get; } + + /// + /// Gets a System.SByte + /// + CorLibTypeSig SByte { get; } + + /// + /// Gets a System.Byte + /// + CorLibTypeSig Byte { get; } + + /// + /// Gets a System.Int16 + /// + CorLibTypeSig Int16 { get; } + + /// + /// Gets a System.UInt16 + /// + CorLibTypeSig UInt16 { get; } + + /// + /// Gets a System.Int32 + /// + CorLibTypeSig Int32 { get; } + + /// + /// Gets a System.UInt32 + /// + CorLibTypeSig UInt32 { get; } + + /// + /// Gets a System.Int64 + /// + CorLibTypeSig Int64 { get; } + + /// + /// Gets a System.UInt64 + /// + CorLibTypeSig UInt64 { get; } + + /// + /// Gets a System.Single + /// + CorLibTypeSig Single { get; } + + /// + /// Gets a System.Double + /// + CorLibTypeSig Double { get; } + + /// + /// Gets a System.String + /// + CorLibTypeSig String { get; } + + /// + /// Gets a System.TypedReference + /// + CorLibTypeSig TypedReference { get; } + + /// + /// Gets a System.IntPtr + /// + CorLibTypeSig IntPtr { get; } + + /// + /// Gets a System.UIntPtr + /// + CorLibTypeSig UIntPtr { get; } + + /// + /// Gets a System.Object + /// + CorLibTypeSig Object { get; } + + /// + /// Gets the assembly reference to the core library + /// + AssemblyRef AssemblyRef { get; } + + /// + /// Gets a that references a type in the core library assembly + /// + /// Namespace of type (eg. "System") + /// Name of type + /// A instance. This instance may be a cached instance. + TypeRef GetTypeRef(string @namespace, string name); + } + + public static partial class Extensions { + /// + /// Gets a if matches a primitive type. + /// + /// this + /// The type + /// A or null if it didn't match any primitive type + public static CorLibTypeSig GetCorLibTypeSig(this ICorLibTypes self, ITypeDefOrRef type) { + CorLibTypeSig corLibType; + + TypeDef td; + if ((td = type as TypeDef) != null && + td.DeclaringType == null && + (corLibType = self.GetCorLibTypeSig(td.Namespace, td.Name, td.DefinitionAssembly)) != null) { + return corLibType; + } + + TypeRef tr; + if ((tr = type as TypeRef) != null && + !(tr.ResolutionScope is TypeRef) && + (corLibType = self.GetCorLibTypeSig(tr.Namespace, tr.Name, tr.DefinitionAssembly)) != null) { + return corLibType; + } + + return null; + } + + /// + /// Gets a if and + /// matches a primitive type. + /// + /// this + /// Namespace + /// Name + /// Definition assembly + /// A or null if it didn't match any primitive type + public static CorLibTypeSig GetCorLibTypeSig(this ICorLibTypes self, UTF8String @namespace, UTF8String name, IAssembly defAsm) { + return self.GetCorLibTypeSig(UTF8String.ToSystemStringOrEmpty(@namespace), UTF8String.ToSystemStringOrEmpty(name), defAsm); + } + + /// + /// Gets a if and + /// matches a primitive type. + /// + /// this + /// Namespace + /// Name + /// Definition assembly + /// A or null if it didn't match any primitive type + public static CorLibTypeSig GetCorLibTypeSig(this ICorLibTypes self, string @namespace, string name, IAssembly defAsm) { + if (@namespace != "System") + return null; + if (defAsm == null || !defAsm.IsCorLib()) + return null; + switch (name) { + case "Void": return self.Void; + case "Boolean": return self.Boolean; + case "Char": return self.Char; + case "SByte": return self.SByte; + case "Byte": return self.Byte; + case "Int16": return self.Int16; + case "UInt16": return self.UInt16; + case "Int32": return self.Int32; + case "UInt32": return self.UInt32; + case "Int64": return self.Int64; + case "UInt64": return self.UInt64; + case "Single": return self.Single; + case "Double": return self.Double; + case "String": return self.String; + case "TypedReference": return self.TypedReference; + case "IntPtr": return self.IntPtr; + case "UIntPtr": return self.UIntPtr; + case "Object": return self.Object; + } + return null; + } + } +} diff --git a/dnlib/DotNet/ICustomAttribute.cs b/dnlib/DotNet/ICustomAttribute.cs new file mode 100644 index 0000000..ac1609a --- /dev/null +++ b/dnlib/DotNet/ICustomAttribute.cs @@ -0,0 +1,47 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// Custom attribute interface. Implemented by and + /// + /// + public interface ICustomAttribute { + /// + /// Gets the attribute type + /// + ITypeDefOrRef AttributeType { get; } + + /// + /// Gets the full name of the attribute type + /// + string TypeFullName { get; } + + /// + /// Gets all named arguments (field and property values) + /// + ThreadSafe.IList NamedArguments { get; } + + /// + /// true if is not empty + /// + bool HasNamedArguments { get; } + + /// + /// Gets all s that are field arguments + /// + IEnumerable Fields { get; } + + /// + /// Gets all s that are property arguments + /// + IEnumerable Properties { get; } + } +} diff --git a/dnlib/DotNet/IDecrypters.cs b/dnlib/DotNet/IDecrypters.cs new file mode 100644 index 0000000..96e66a5 --- /dev/null +++ b/dnlib/DotNet/IDecrypters.cs @@ -0,0 +1,37 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.PE; +using dnlib.DotNet.Emit; + +namespace dnlib.DotNet { + /// + /// Interface to decrypt methods + /// + public interface IMethodDecrypter { + /// + /// Gets the method's body + /// + /// Method rid + /// The found in the method's Method row + /// The method's parameters + /// Generic parameter context + /// Updated with the method's if this + /// method returns true + /// true if the method body was decrypted, false if the method isn't + /// encrypted and the default body reader code should be used. + bool GetMethodBody(uint rid, RVA rva, IList parameters, GenericParamContext gpContext, out MethodBody methodBody); + } + + /// + /// Interface to decrypt strings + /// + public interface IStringDecrypter { + /// + /// Reads a string + /// + /// String token + /// A string or null if we should read it from the #US heap + string ReadUserString(uint token); + } +} diff --git a/dnlib/DotNet/ILogger.cs b/dnlib/DotNet/ILogger.cs new file mode 100644 index 0000000..6ab6b32 --- /dev/null +++ b/dnlib/DotNet/ILogger.cs @@ -0,0 +1,466 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Reflection; +using dnlib.DotNet.Writer; + +namespace dnlib.DotNet { + /// + /// events + /// + public enum LoggerEvent { + /// + /// An error was detected. An exception should normally be thrown but the error + /// can be ignored. + /// + Error, + + /// + /// Just a warning and can be ignored. + /// + Warning, + + /// + /// A normal message + /// + Info, + + /// + /// A verbose message + /// + Verbose, + + /// + /// A very verbose message + /// + VeryVerbose, + } + + /// + /// Simple logger + /// + public interface ILogger { + /// + /// Log something + /// + /// Caller or null + /// Logger event + /// Format + /// Arguments + void Log(object sender, LoggerEvent loggerEvent, string format, params object[] args); + + /// + /// true if this event is ignored. If the event is ignored, the caller can + /// choose not to call . This is useful if it can take time to + /// prepare the message. + /// + /// The logger event + bool IgnoresEvent(LoggerEvent loggerEvent); + } + + public static partial class Extensions { + /// + /// Log an error message + /// + /// this + /// Sender or null + /// Message + public static void Error(this ILogger logger, object sender, string message) { + logger.Log(sender, LoggerEvent.Error, "{0}", message); + } + + /// + /// Log an error message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + public static void Error(this ILogger logger, object sender, string message, object arg1) { + logger.Log(sender, LoggerEvent.Error, message, arg1); + } + + /// + /// Log an error message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + public static void Error(this ILogger logger, object sender, string message, object arg1, object arg2) { + logger.Log(sender, LoggerEvent.Error, message, arg1, arg2); + } + + /// + /// Log an error message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + public static void Error(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3) { + logger.Log(sender, LoggerEvent.Error, message, arg1, arg2, arg3); + } + + /// + /// Log an error message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + /// Message arg #4 + public static void Error(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3, object arg4) { + logger.Log(sender, LoggerEvent.Error, message, arg1, arg2, arg3, arg4); + } + + /// + /// Log an error message + /// + /// this + /// Sender or null + /// Message + /// Message arguments + public static void Error(this ILogger logger, object sender, string message, params object[] args) { + logger.Log(sender, LoggerEvent.Error, message, args); + } + + /// + /// Log a warning message + /// + /// this + /// Sender or null + /// Message + public static void Warning(this ILogger logger, object sender, string message) { + logger.Log(sender, LoggerEvent.Warning, "{0}", message); + } + + /// + /// Log a warning message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + public static void Warning(this ILogger logger, object sender, string message, object arg1) { + logger.Log(sender, LoggerEvent.Warning, message, arg1); + } + + /// + /// Log a warning message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + public static void Warning(this ILogger logger, object sender, string message, object arg1, object arg2) { + logger.Log(sender, LoggerEvent.Warning, message, arg1, arg2); + } + + /// + /// Log a warning message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + public static void Warning(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3) { + logger.Log(sender, LoggerEvent.Warning, message, arg1, arg2, arg3); + } + + /// + /// Log a warning message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + /// Message arg #4 + public static void Warning(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3, object arg4) { + logger.Log(sender, LoggerEvent.Warning, message, arg1, arg2, arg3, arg4); + } + + /// + /// Log a warning message + /// + /// this + /// Sender or null + /// Message + /// Message arguments + public static void Warning(this ILogger logger, object sender, string message, params object[] args) { + logger.Log(sender, LoggerEvent.Warning, message, args); + } + + /// + /// Log an info message + /// + /// this + /// Sender or null + /// Message + public static void Info(this ILogger logger, object sender, string message) { + logger.Log(sender, LoggerEvent.Info, "{0}", message); + } + + /// + /// Log an info message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + public static void Info(this ILogger logger, object sender, string message, object arg1) { + logger.Log(sender, LoggerEvent.Info, message, arg1); + } + + /// + /// Log an info message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + public static void Info(this ILogger logger, object sender, string message, object arg1, object arg2) { + logger.Log(sender, LoggerEvent.Info, message, arg1, arg2); + } + + /// + /// Log an info message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + public static void Info(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3) { + logger.Log(sender, LoggerEvent.Info, message, arg1, arg2, arg3); + } + + /// + /// Log an info message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + /// Message arg #4 + public static void Info(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3, object arg4) { + logger.Log(sender, LoggerEvent.Info, message, arg1, arg2, arg3, arg4); + } + + /// + /// Log an info message + /// + /// this + /// Sender or null + /// Message + /// Message arguments + public static void Info(this ILogger logger, object sender, string message, params object[] args) { + logger.Log(sender, LoggerEvent.Info, message, args); + } + + /// + /// Log a verbose message + /// + /// this + /// Sender or null + /// Message + public static void Verbose(this ILogger logger, object sender, string message) { + logger.Log(sender, LoggerEvent.Verbose, "{0}", message); + } + + /// + /// Log a verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + public static void Verbose(this ILogger logger, object sender, string message, object arg1) { + logger.Log(sender, LoggerEvent.Verbose, message, arg1); + } + + /// + /// Log a verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + public static void Verbose(this ILogger logger, object sender, string message, object arg1, object arg2) { + logger.Log(sender, LoggerEvent.Verbose, message, arg1, arg2); + } + + /// + /// Log a verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + public static void Verbose(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3) { + logger.Log(sender, LoggerEvent.Verbose, message, arg1, arg2, arg3); + } + + /// + /// Log a verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + /// Message arg #4 + public static void Verbose(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3, object arg4) { + logger.Log(sender, LoggerEvent.Verbose, message, arg1, arg2, arg3, arg4); + } + + /// + /// Log a verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arguments + public static void Verbose(this ILogger logger, object sender, string message, params object[] args) { + logger.Log(sender, LoggerEvent.Verbose, message, args); + } + + /// + /// Log a very verbose message + /// + /// this + /// Sender or null + /// Message + public static void VeryVerbose(this ILogger logger, object sender, string message) { + logger.Log(sender, LoggerEvent.VeryVerbose, "{0}", message); + } + + /// + /// Log a very verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + public static void VeryVerbose(this ILogger logger, object sender, string message, object arg1) { + logger.Log(sender, LoggerEvent.VeryVerbose, message, arg1); + } + + /// + /// Log a very verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + public static void VeryVerbose(this ILogger logger, object sender, string message, object arg1, object arg2) { + logger.Log(sender, LoggerEvent.VeryVerbose, message, arg1, arg2); + } + + /// + /// Log a very verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + public static void VeryVerbose(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3) { + logger.Log(sender, LoggerEvent.VeryVerbose, message, arg1, arg2, arg3); + } + + /// + /// Log a very verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arg #1 + /// Message arg #2 + /// Message arg #3 + /// Message arg #4 + public static void VeryVerbose(this ILogger logger, object sender, string message, object arg1, object arg2, object arg3, object arg4) { + logger.Log(sender, LoggerEvent.VeryVerbose, message, arg1, arg2, arg3, arg4); + } + + /// + /// Log a very verbose message + /// + /// this + /// Sender or null + /// Message + /// Message arguments + public static void VeryVerbose(this ILogger logger, object sender, string message, params object[] args) { + logger.Log(sender, LoggerEvent.VeryVerbose, message, args); + } + } + + /// + /// Dummy logger which ignores all messages, but can optionally throw on errors. + /// + public sealed class DummyLogger : ILogger { + ConstructorInfo ctor; + + /// + /// It ignores everything and doesn't throw anything. + /// + public static readonly DummyLogger NoThrowInstance = new DummyLogger(); + + /// + /// Throws a on errors, but ignores anything else. + /// + public static readonly DummyLogger ThrowModuleWriterExceptionOnErrorInstance = new DummyLogger(typeof(ModuleWriterException)); + + DummyLogger() { + } + + /// + /// Constructor + /// + /// If non-null, this exception type is thrown on + /// errors. It must have a public constructor that takes a as the only + /// argument. + public DummyLogger(Type exceptionToThrow) { + if (exceptionToThrow != null) { + if (!exceptionToThrow.IsSubclassOf(typeof(Exception))) + throw new ArgumentException(string.Format("Not a System.Exception sub class: {0}", exceptionToThrow.GetType())); + ctor = exceptionToThrow.GetConstructor(new Type[] { typeof(string) }); + if (ctor == null) + throw new ArgumentException(string.Format("Exception type {0} doesn't have a public constructor that takes a string as the only argument", exceptionToThrow.GetType())); + } + } + + /// + public void Log(object sender, LoggerEvent loggerEvent, string format, params object[] args) { + if (loggerEvent == LoggerEvent.Error && ctor != null) + throw (Exception)ctor.Invoke(new object[] { string.Format(format, args) }); + } + + /// + public bool IgnoresEvent(LoggerEvent loggerEvent) { + if (ctor == null) + return true; + return loggerEvent != LoggerEvent.Error; + } + } +} diff --git a/dnlib/DotNet/IResolver.cs b/dnlib/DotNet/IResolver.cs new file mode 100644 index 0000000..89e9864 --- /dev/null +++ b/dnlib/DotNet/IResolver.cs @@ -0,0 +1,135 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Resolves types, methods, fields + /// + public interface IResolver : ITypeResolver, IMemberRefResolver { + } + + /// + /// Resolves types + /// + public interface ITypeResolver { + /// + /// Resolves a type + /// + /// The type + /// The module that needs to resolve the type or null + /// A instance or null if it couldn't be resolved + TypeDef Resolve(TypeRef typeRef, ModuleDef sourceModule); + } + + /// + /// Resolves fields and methods + /// + public interface IMemberRefResolver { + /// + /// Resolves a method or a field + /// + /// A method/field reference + /// A or a instance or null + /// if it couldn't be resolved. + IMemberForwarded Resolve(MemberRef memberRef); + } + + public static partial class Extensions { + /// + /// Resolves a type + /// + /// this + /// The type + /// A instance or null if it couldn't be resolved + public static TypeDef Resolve(this ITypeResolver self, TypeRef typeRef) { + return self.Resolve(typeRef, null); + } + + /// + /// Resolves a type + /// + /// this + /// The type + /// A instance + /// If the type couldn't be resolved + public static TypeDef ResolveThrow(this ITypeResolver self, TypeRef typeRef) { + return self.ResolveThrow(typeRef, null); + } + + /// + /// Resolves a type + /// + /// this + /// The type + /// The module that needs to resolve the type or null + /// A instance + /// If the type couldn't be resolved + public static TypeDef ResolveThrow(this ITypeResolver self, TypeRef typeRef, ModuleDef sourceModule) { + var type = self.Resolve(typeRef, sourceModule); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not resolve type: {0} ({1})", typeRef, typeRef == null ? null : typeRef.DefinitionAssembly)); + } + + /// + /// Resolves a method or a field + /// + /// this + /// A method/field reference + /// A or a instance + /// If the method/field couldn't be resolved + public static IMemberForwarded ResolveThrow(this IMemberRefResolver self, MemberRef memberRef) { + var memberDef = self.Resolve(memberRef); + if (memberDef != null) + return memberDef; + throw new MemberRefResolveException(string.Format("Could not resolve method/field: {0} ({1})", memberRef, memberRef == null ? null : memberRef.GetDefinitionAssembly())); + } + + /// + /// Resolves a field + /// + /// this + /// A field reference + /// A instance or null if it couldn't be resolved. + public static FieldDef ResolveField(this IMemberRefResolver self, MemberRef memberRef) { + return self.Resolve(memberRef) as FieldDef; + } + + /// + /// Resolves a field + /// + /// this + /// A field reference + /// A instance or null if it couldn't be resolved. + /// If the field couldn't be resolved + public static FieldDef ResolveFieldThrow(this IMemberRefResolver self, MemberRef memberRef) { + var field = self.Resolve(memberRef) as FieldDef; + if (field != null) + return field; + throw new MemberRefResolveException(string.Format("Could not resolve field: {0} ({1})", memberRef, memberRef == null ? null : memberRef.GetDefinitionAssembly())); + } + + /// + /// Resolves a method + /// + /// this + /// A method reference + /// A instance or null if it couldn't be resolved. + public static MethodDef ResolveMethod(this IMemberRefResolver self, MemberRef memberRef) { + return self.Resolve(memberRef) as MethodDef; + } + + /// + /// Resolves a method + /// + /// this + /// A method reference + /// A instance or null if it couldn't be resolved. + /// If the method couldn't be resolved + public static MethodDef ResolveMethodThrow(this IMemberRefResolver self, MemberRef memberRef) { + var method = self.Resolve(memberRef) as MethodDef; + if (method != null) + return method; + throw new MemberRefResolveException(string.Format("Could not resolve method: {0} ({1})", memberRef, memberRef == null ? null : memberRef.GetDefinitionAssembly())); + } + } +} diff --git a/dnlib/DotNet/ITokenResolver.cs b/dnlib/DotNet/ITokenResolver.cs new file mode 100644 index 0000000..2d3e0c8 --- /dev/null +++ b/dnlib/DotNet/ITokenResolver.cs @@ -0,0 +1,28 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Resolves tokens + /// + public interface ITokenResolver { + /// + /// Resolves a token + /// + /// The metadata token + /// Generic parameter context + /// A or null if is invalid + IMDTokenProvider ResolveToken(uint token, GenericParamContext gpContext); + } + + public static partial class Extensions { + /// + /// Resolves a token + /// + /// This + /// The metadata token + /// A or null if is invalid + public static IMDTokenProvider ResolveToken(this ITokenResolver self, uint token) { + return self.ResolveToken(token, new GenericParamContext()); + } + } +} diff --git a/dnlib/DotNet/IType.cs b/dnlib/DotNet/IType.cs new file mode 100644 index 0000000..03cd924 --- /dev/null +++ b/dnlib/DotNet/IType.cs @@ -0,0 +1,107 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Interface to get the full name of a type + /// + public interface IType : IFullName, IOwnerModule, ICodedToken, IGenericParameterProvider, IContainsGenericParameter { + /// + /// true if it's a value type + /// + bool IsValueType { get; } + + /// + /// Returns the name of this type + /// + string TypeName { get; } + + /// + /// Returns the reflection name of this type + /// + string ReflectionName { get; } + + /// + /// Returns the namespace of this type + /// + string Namespace { get; } + + /// + /// Returns the reflection namespace of this type + /// + string ReflectionNamespace { get; } + + /// + /// Returns the reflection name of this type. See also . + /// + string ReflectionFullName { get; } + + /// + /// Returns the reflection name of this type, and includes the assembly name where the + /// type is located. It can be passed to to + /// load the type. + /// + string AssemblyQualifiedName { get; } + + /// + /// Gets the assembly where this type is defined + /// + IAssembly DefinitionAssembly { get; } + + /// + /// Gets the scope, which is different from since it + /// can differentiate between modules within the same assembly. + /// + IScope Scope { get; } + + /// + /// Gets the type whose scope is returned by and whose assembly + /// is returned by . This is always a + /// , or null. It can also be a + /// nested . + /// For example, if this type is a System.String&, then this value is a System.String. + /// If it's a generic instance type (eg. List<int>), then the generic type is + /// returned (eg. List<T>). In other words, the first or + /// that is found (without searching generic arguments) is returned. + /// + ITypeDefOrRef ScopeType { get; } + + /// + /// true if it's an integer or a floating point type + /// + bool IsPrimitive { get; } + } + + /// + /// Implemented by types and calling convention signatures. + /// + public interface IContainsGenericParameter { + /// + /// true if this contains a or a . + /// + bool ContainsGenericParameter { get; } + } + + public static partial class Extensions { + /// + /// Returns , but if it's a nested , + /// return the non-nested + /// + /// this + /// The scope type + public static ITypeDefOrRef GetNonNestedTypeRefScope(this IType type) { + if (type == null) + return null; + var scopeType = type.ScopeType; + var tr = scopeType as TypeRef; + if (tr == null) + return scopeType; + for (int i = 0; i < 100; i++) { + var dt = tr.ResolutionScope as TypeRef; + if (dt == null) + return tr; + tr = dt; + } + return tr; + } + } +} diff --git a/dnlib/DotNet/ITypeDefFinder.cs b/dnlib/DotNet/ITypeDefFinder.cs new file mode 100644 index 0000000..0a232b1 --- /dev/null +++ b/dnlib/DotNet/ITypeDefFinder.cs @@ -0,0 +1,152 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Finds s + /// + public interface ITypeDefFinder { + /// + /// Finds a + /// + /// Full name of the type (no assembly information) + /// true if it's a reflection name, and nested + /// type names are separated by a + character. If false, nested type names + /// are separated by a / character. + /// An existing or null if it wasn't found. + TypeDef Find(string fullName, bool isReflectionName); + + /// + /// Finds a . 's scope (i.e., module or + /// assembly) is ignored when looking up the type. + /// + /// The type ref + /// An existing or null if it wasn't found. + TypeDef Find(TypeRef typeRef); + } + + public static partial class Extensions { + /// + /// Finds a . Its scope (i.e., module or assembly) is ignored when + /// looking up the type. + /// + /// this + /// The type ref + /// An existing or null if it wasn't found. + /// If type couldn't be found + public static TypeDef FindThrow(this ITypeDefFinder self, TypeRef typeRef) { + var type = self.Find(typeRef); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not find type: {0}", typeRef)); + } + + /// + /// Finds a + /// + /// this + /// Full name of the type (no assembly information) + /// true if it's a reflection name, and nested + /// type names are separated by a + character. If false, nested type names + /// are separated by a / character. + /// An existing + /// If type couldn't be found + public static TypeDef FindThrow(this ITypeDefFinder self, string fullName, bool isReflectionName) { + var type = self.Find(fullName, isReflectionName); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not find type: {0}", fullName)); + } + + /// + /// Finds a + /// + /// this + /// Full name of the type (no assembly information). Nested types are separated by / + /// An existing or null if it wasn't found. + public static TypeDef FindNormal(this ITypeDefFinder self, string fullName) { + return self.Find(fullName, false); + } + + /// + /// Finds a + /// + /// this + /// Full name of the type (no assembly information). Nested types are separated by / + /// An existing + /// If type couldn't be found + public static TypeDef FindNormalThrow(this ITypeDefFinder self, string fullName) { + var type = self.Find(fullName, false); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not find type: {0}", fullName)); + } + + /// + /// Finds a + /// + /// this + /// Full name of the type (no assembly information). Nested types are separated by + + /// An existing or null if it wasn't found. + public static TypeDef FindReflection(this ITypeDefFinder self, string fullName) { + return self.Find(fullName, true); + } + + /// + /// Finds a + /// + /// this + /// Full name of the type (no assembly information). Nested types are separated by + + /// An existing + /// If type couldn't be found + public static TypeDef FindReflectionThrow(this ITypeDefFinder self, string fullName) { + var type = self.Find(fullName, true); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not find type: {0}", fullName)); + } + + /// + /// Checks whether a exists. 's scope (i.e., + /// module or assembly) is ignored when looking up the type. + /// + /// this + /// The type ref + /// true if the exists, false otherwise + public static bool TypeExists(this ITypeDefFinder self, TypeRef typeRef) { + return self.Find(typeRef) != null; + } + + /// + /// Checks whether a exists + /// + /// this + /// Full name of the type (no assembly information) + /// true if it's a reflection name, and nested + /// type names are separated by a + character. If false, nested type names + /// are separated by a / character. + /// true if the exists, false otherwise + public static bool TypeExists(this ITypeDefFinder self, string fullName, bool isReflectionName) { + return self.Find(fullName, isReflectionName) != null; + } + + /// + /// Checks whether a exists + /// + /// this + /// Full name of the type (no assembly information). Nested types are separated by / + /// true if the exists, false otherwise + public static bool TypeExistsNormal(this ITypeDefFinder self, string fullName) { + return self.Find(fullName, false) != null; + } + + /// + /// Checks whether a exists + /// + /// this + /// Full name of the type (no assembly information). Nested types are separated by + + /// true if the exists, false otherwise + public static bool TypeExistsReflection(this ITypeDefFinder self, string fullName) { + return self.Find(fullName, true) != null; + } + } +} diff --git a/dnlib/DotNet/IVariable.cs b/dnlib/DotNet/IVariable.cs new file mode 100644 index 0000000..a80d9d1 --- /dev/null +++ b/dnlib/DotNet/IVariable.cs @@ -0,0 +1,23 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Interface to access a local or a parameter + /// + public interface IVariable { + /// + /// Gets the variable type + /// + TypeSig Type { get; } + + /// + /// Gets the 0-based position + /// + int Index { get; } + + /// + /// Gets/sets the variable name + /// + string Name { get; set; } + } +} diff --git a/dnlib/DotNet/ImplMap.cs b/dnlib/DotNet/ImplMap.cs new file mode 100644 index 0000000..60d2492 --- /dev/null +++ b/dnlib/DotNet/ImplMap.cs @@ -0,0 +1,337 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the ImplMap table + /// + [DebuggerDisplay("{Module} {Name}")] + public abstract class ImplMap : IMDTokenProvider { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.ImplMap, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + /// From column ImplMap.MappingFlags + /// + public PInvokeAttributes Attributes { + get { return (PInvokeAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column ImplMap.ImportName + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column ImplMap.ImportScope + /// + public ModuleRef Module { + get { return module; } + set { module = value; } + } + /// + protected ModuleRef module; + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(PInvokeAttributes andMask, PInvokeAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, PInvokeAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool IsNoMangle { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.NoMangle) != 0; } + set { ModifyAttributes(value, PInvokeAttributes.NoMangle); } + } + + /// + /// Gets/sets the char set + /// + public PInvokeAttributes CharSet { + get { return (PInvokeAttributes)attributes & PInvokeAttributes.CharSetMask; } + set { ModifyAttributes(~PInvokeAttributes.CharSetMask, value & PInvokeAttributes.CharSetMask); } + } + + /// + /// true if is set + /// + public bool IsCharSetNotSpec { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CharSetMask) == PInvokeAttributes.CharSetNotSpec; } + } + + /// + /// true if is set + /// + public bool IsCharSetAnsi { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CharSetMask) == PInvokeAttributes.CharSetAnsi; } + } + + /// + /// true if is set + /// + public bool IsCharSetUnicode { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CharSetMask) == PInvokeAttributes.CharSetUnicode; } + } + + /// + /// true if is set + /// + public bool IsCharSetAuto { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CharSetMask) == PInvokeAttributes.CharSetAuto; } + } + + /// + /// Gets/sets best fit + /// + public PInvokeAttributes BestFit { + get { return (PInvokeAttributes)attributes & PInvokeAttributes.BestFitMask; } + set { ModifyAttributes(~PInvokeAttributes.BestFitMask, value & PInvokeAttributes.BestFitMask); } + } + + /// + /// true if is set + /// + public bool IsBestFitUseAssem { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.BestFitMask) == PInvokeAttributes.BestFitUseAssem; } + } + + /// + /// true if is set + /// + public bool IsBestFitEnabled { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.BestFitMask) == PInvokeAttributes.BestFitEnabled; } + } + + /// + /// true if is set + /// + public bool IsBestFitDisabled { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.BestFitMask) == PInvokeAttributes.BestFitDisabled; } + } + + /// + /// Gets/sets throw on unmappable char + /// + public PInvokeAttributes ThrowOnUnmappableChar { + get { return (PInvokeAttributes)attributes & PInvokeAttributes.ThrowOnUnmappableCharMask; } + set { ModifyAttributes(~PInvokeAttributes.ThrowOnUnmappableCharMask, value & PInvokeAttributes.ThrowOnUnmappableCharMask); } + } + + /// + /// true if is set + /// + public bool IsThrowOnUnmappableCharUseAssem { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.ThrowOnUnmappableCharMask) == PInvokeAttributes.ThrowOnUnmappableCharUseAssem; } + } + + /// + /// true if is set + /// + public bool IsThrowOnUnmappableCharEnabled { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.ThrowOnUnmappableCharMask) == PInvokeAttributes.ThrowOnUnmappableCharEnabled; } + } + + /// + /// true if is set + /// + public bool IsThrowOnUnmappableCharDisabled { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.ThrowOnUnmappableCharMask) == PInvokeAttributes.ThrowOnUnmappableCharDisabled; } + } + + /// + /// Gets/sets the bit + /// + public bool SupportsLastError { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.SupportsLastError) != 0; } + set { ModifyAttributes(value, PInvokeAttributes.SupportsLastError); } + } + + /// + /// Gets/sets calling convention + /// + public PInvokeAttributes CallConv { + get { return (PInvokeAttributes)attributes & PInvokeAttributes.CallConvMask; } + set { ModifyAttributes(~PInvokeAttributes.CallConvMask, value & PInvokeAttributes.CallConvMask); } + } + + /// + /// true if is set + /// + public bool IsCallConvWinapi { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CallConvMask) == PInvokeAttributes.CallConvWinapi; } + } + + /// + /// true if is set + /// + public bool IsCallConvCdecl { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CallConvMask) == PInvokeAttributes.CallConvCdecl; } + } + + /// + /// true if is set + /// + public bool IsCallConvStdcall { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CallConvMask) == PInvokeAttributes.CallConvStdcall; } + } + + /// + /// true if is set + /// + public bool IsCallConvThiscall { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CallConvMask) == PInvokeAttributes.CallConvThiscall; } + } + + /// + /// true if is set + /// + public bool IsCallConvFastcall { + get { return ((PInvokeAttributes)attributes & PInvokeAttributes.CallConvMask) == PInvokeAttributes.CallConvFastcall; } + } + + /// + /// Checks whether this is a certain P/Invoke method + /// + /// Name of the DLL + /// Name of the function within the DLL + /// true if it's the specified P/Invoke method, else false + public bool IsPinvokeMethod(string dllName, string funcName) { + if (name != funcName) + return false; + var mod = module; + if (mod == null) + return false; + return GetDllName(dllName).Equals(GetDllName(mod.Name), StringComparison.OrdinalIgnoreCase); + } + + static string GetDllName(string dllName) { + if (dllName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + return dllName.Substring(0, dllName.Length - 4); + return dllName; + } + } + + /// + /// An ImplMap row created by the user and not present in the original .NET file + /// + public class ImplMapUser : ImplMap { + /// + /// Default constructor + /// + public ImplMapUser() { + } + + /// + /// Constructor + /// + /// Scope + /// Name + /// Flags + public ImplMapUser(ModuleRef scope, UTF8String name, PInvokeAttributes flags) { + this.module = scope; + this.name = name; + this.attributes = (int)flags; + } + } + + /// + /// Created from a row in the ImplMap table + /// + sealed class ImplMapMD : ImplMap, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + /// Constructor + /// + /// The module which contains this ImplMap row + /// Row ID + /// If is null + /// If is invalid + public ImplMapMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ImplMapTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("ImplMap rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint scope = readerModule.TablesStream.ReadImplMapRow(origRid, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.module = readerModule.ResolveModuleRef(scope); + } + } +} diff --git a/dnlib/DotNet/Importer.cs b/dnlib/DotNet/Importer.cs new file mode 100644 index 0000000..6f92d19 --- /dev/null +++ b/dnlib/DotNet/Importer.cs @@ -0,0 +1,1210 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Reflection; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// options + /// + [Flags] + public enum ImporterOptions { + /// + /// Use s whenever possible if the is located + /// in this module. + /// + TryToUseTypeDefs = 1, + + /// + /// Use s whenever possible if the is located + /// in this module. + /// + TryToUseMethodDefs = 2, + + /// + /// Use s whenever possible if the is located + /// in this module. + /// + TryToUseFieldDefs = 4, + + /// + /// Use s, s and s + /// whenever possible if the definition is located in this module. + /// + /// + /// + /// + TryToUseDefs = TryToUseTypeDefs | TryToUseMethodDefs | TryToUseFieldDefs, + + /// + /// Don't set this flag. For internal use only. + /// + FixSignature = int.MinValue, + } + + /// + /// Provides a chance to resolve definition when encountered a definition to import. + /// + public class ImportResolver { + /// + /// Resolves the specified TypeDef. + /// + /// The TypeDef. + /// The resolved TypeDef, or null if cannot be resolved. + public virtual TypeDef Resolve(TypeDef typeDef) { + return null; + } + + /// + /// Resolves the specified MethodDef. + /// + /// The MethodDef. + /// The resolved MethodDef, or null if cannot be resolved. + public virtual MethodDef Resolve(MethodDef methodDef) { + return null; + } + + /// + /// Resolves the specified FieldDef. + /// + /// The FieldDef. + /// The resolved FieldDef, or null if cannot be resolved. + public virtual FieldDef Resolve(FieldDef fieldDef) { + return null; + } + } + + /// + /// Imports s, s, s + /// and s as references + /// + public struct Importer { + readonly ModuleDef module; + readonly GenericParamContext gpContext; + RecursionCounter recursionCounter; + ImporterOptions options; + ImportResolver resolver; + + /// + /// Gets/sets the bit + /// + public bool TryToUseTypeDefs { + get { return (options & ImporterOptions.TryToUseTypeDefs) != 0; } + set { + if (value) + options |= ImporterOptions.TryToUseTypeDefs; + else + options &= ~ImporterOptions.TryToUseTypeDefs; + } + } + + /// + /// Gets/sets the bit + /// + public bool TryToUseMethodDefs { + get { return (options & ImporterOptions.TryToUseMethodDefs) != 0; } + set { + if (value) + options |= ImporterOptions.TryToUseMethodDefs; + else + options &= ~ImporterOptions.TryToUseMethodDefs; + } + } + + /// + /// Gets/sets the bit + /// + public bool TryToUseFieldDefs { + get { return (options & ImporterOptions.TryToUseFieldDefs) != 0; } + set { + if (value) + options |= ImporterOptions.TryToUseFieldDefs; + else + options &= ~ImporterOptions.TryToUseFieldDefs; + } + } + + /// + /// Gets/sets the bit + /// + bool FixSignature { + get { return (options & ImporterOptions.FixSignature) != 0; } + set { + if (value) + options |= ImporterOptions.FixSignature; + else + options &= ~ImporterOptions.FixSignature; + } + } + + /// + /// Gets or sets the resolver used to resolve definitions. + /// + /// The resolver. + public ImportResolver Resolver { + get { return resolver; } + set { resolver = value; } + } + + /// + /// Constructor + /// + /// The module that will own all references + public Importer(ModuleDef module) + : this(module, 0, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// The module that will own all references + /// Generic parameter context + public Importer(ModuleDef module, GenericParamContext gpContext) + : this(module, 0, gpContext) { + } + + /// + /// Constructor + /// + /// The module that will own all references + /// Importer options + public Importer(ModuleDef module, ImporterOptions options) + : this(module, options, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// The module that will own all references + /// Importer options + /// Generic parameter context + public Importer(ModuleDef module, ImporterOptions options, GenericParamContext gpContext) { + this.module = module; + this.recursionCounter = new RecursionCounter(); + this.options = options; + this.gpContext = gpContext; + this.resolver = null; + } + + /// + /// Imports a as a + /// + /// The type + /// The imported type or null if is invalid + public ITypeDefOrRef Import(Type type) { + return module.UpdateRowId(ImportAsTypeSig(type).ToTypeDefOrRef()); + } + + /// + /// Imports a as a + /// + /// The type + /// A list of all required modifiers or null + /// A list of all optional modifiers or null + /// The imported type or null if is invalid + public ITypeDefOrRef Import(Type type, IList requiredModifiers, IList optionalModifiers) { + return module.UpdateRowId(ImportAsTypeSig(type, requiredModifiers, optionalModifiers).ToTypeDefOrRef()); + } + + /// + /// Imports a as a + /// + /// The type + /// The imported type or null if is invalid + public TypeSig ImportAsTypeSig(Type type) { + return ImportAsTypeSig(type, false); + } + + TypeSig ImportAsTypeSig(Type type, bool treatAsGenericInst) { + if (type == null) + return null; + switch (treatAsGenericInst ? ElementType.GenericInst : type.GetElementType2()) { + case ElementType.Void: return module.CorLibTypes.Void; + case ElementType.Boolean: return module.CorLibTypes.Boolean; + case ElementType.Char: return module.CorLibTypes.Char; + case ElementType.I1: return module.CorLibTypes.SByte; + case ElementType.U1: return module.CorLibTypes.Byte; + case ElementType.I2: return module.CorLibTypes.Int16; + case ElementType.U2: return module.CorLibTypes.UInt16; + case ElementType.I4: return module.CorLibTypes.Int32; + case ElementType.U4: return module.CorLibTypes.UInt32; + case ElementType.I8: return module.CorLibTypes.Int64; + case ElementType.U8: return module.CorLibTypes.UInt64; + case ElementType.R4: return module.CorLibTypes.Single; + case ElementType.R8: return module.CorLibTypes.Double; + case ElementType.String: return module.CorLibTypes.String; + case ElementType.TypedByRef:return module.CorLibTypes.TypedReference; + case ElementType.U: return module.CorLibTypes.UIntPtr; + case ElementType.Object: return module.CorLibTypes.Object; + case ElementType.Ptr: return new PtrSig(ImportAsTypeSig(type.GetElementType(), treatAsGenericInst)); + case ElementType.ByRef: return new ByRefSig(ImportAsTypeSig(type.GetElementType(), treatAsGenericInst)); + case ElementType.SZArray: return new SZArraySig(ImportAsTypeSig(type.GetElementType(), treatAsGenericInst)); + case ElementType.ValueType: return new ValueTypeSig(CreateTypeRef(type)); + case ElementType.Class: return new ClassSig(CreateTypeRef(type)); + case ElementType.Var: return new GenericVar((uint)type.GenericParameterPosition, gpContext.Type); + case ElementType.MVar: return new GenericMVar((uint)type.GenericParameterPosition, gpContext.Method); + + case ElementType.I: + FixSignature = true; // FnPtr is mapped to System.IntPtr + return module.CorLibTypes.IntPtr; + + case ElementType.Array: + FixSignature = true; // We don't know sizes and lower bounds + return new ArraySig(ImportAsTypeSig(type.GetElementType(), treatAsGenericInst), (uint)type.GetArrayRank()); + + case ElementType.GenericInst: + var typeGenArgs = type.GetGenericArguments(); + var git = new GenericInstSig(ImportAsTypeSig(type.GetGenericTypeDefinition()) as ClassOrValueTypeSig, (uint)typeGenArgs.Length); + foreach (var ga in typeGenArgs) + git.GenericArguments.Add(ImportAsTypeSig(ga)); + return git; + + case ElementType.Sentinel: + case ElementType.Pinned: + case ElementType.FnPtr: // mapped to System.IntPtr + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.ValueArray: + case ElementType.R: + case ElementType.Internal: + case ElementType.Module: + case ElementType.End: + default: + return null; + } + } + + ITypeDefOrRef TryResolve(TypeRef tr) { + if (!TryToUseTypeDefs || tr == null) + return tr; + if (!IsThisModule(tr)) + return tr; + var td = tr.Resolve(); + if (td == null || td.Module != module) + return tr; + return td; + } + + IMethodDefOrRef TryResolveMethod(IMethodDefOrRef mdr) { + if (!TryToUseMethodDefs || mdr == null) + return mdr; + + var mr = mdr as MemberRef; + if (mr == null) + return mdr; + if (!mr.IsMethodRef) + return mr; + + var declType = GetDeclaringType(mr); + if (declType == null) + return mr; + if (declType.Module != module) + return mr; + return (IMethodDefOrRef)declType.ResolveMethod(mr) ?? mr; + } + + IField TryResolveField(MemberRef mr) { + if (!TryToUseFieldDefs || mr == null) + return mr; + + if (!mr.IsFieldRef) + return mr; + + var declType = GetDeclaringType(mr); + if (declType == null) + return mr; + if (declType.Module != module) + return mr; + return (IField)declType.ResolveField(mr) ?? mr; + } + + TypeDef GetDeclaringType(MemberRef mr) { + if (mr == null) + return null; + + var td = mr.Class as TypeDef; + if (td != null) + return td; + + td = TryResolve(mr.Class as TypeRef) as TypeDef; + if (td != null) + return td; + + var modRef = mr.Class as ModuleRef; + if (IsThisModule(modRef)) + return module.GlobalType; + + return null; + } + + bool IsThisModule(TypeRef tr) { + if (tr == null) + return false; + var scopeType = tr.ScopeType.GetNonNestedTypeRefScope() as TypeRef; + if (scopeType == null) + return false; + + if (module == scopeType.ResolutionScope) + return true; + + var modRef = scopeType.ResolutionScope as ModuleRef; + if (modRef != null) + return IsThisModule(modRef); + + var asmRef = scopeType.ResolutionScope as AssemblyRef; + return Equals(module.Assembly, asmRef); + } + + bool IsThisModule(ModuleRef modRef) { + return modRef != null && + module.Name == modRef.Name && + Equals(module.Assembly, modRef.DefinitionAssembly); + } + + static bool Equals(IAssembly a, IAssembly b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + return Utils.Equals(a.Version, b.Version) && + PublicKeyBase.TokenEquals(a.PublicKeyOrToken, b.PublicKeyOrToken) && + UTF8String.Equals(a.Name, b.Name) && + UTF8String.CaseInsensitiveEquals(a.Culture, b.Culture); + } + + ITypeDefOrRef CreateTypeRef(Type type) { + return TryResolve(CreateTypeRef2(type)); + } + + TypeRef CreateTypeRef2(Type type) { + if (!type.IsNested) + return module.UpdateRowId(new TypeRefUser(module, type.Namespace ?? string.Empty, type.Name ?? string.Empty, CreateScopeReference(type))); + return module.UpdateRowId(new TypeRefUser(module, string.Empty, type.Name ?? string.Empty, CreateTypeRef2(type.DeclaringType))); + } + + IResolutionScope CreateScopeReference(Type type) { + if (type == null) + return null; + var asmName = type.Assembly.GetName(); + var modAsm = module.Assembly; + if (modAsm != null) { + if (UTF8String.ToSystemStringOrEmpty(modAsm.Name).Equals(asmName.Name, StringComparison.OrdinalIgnoreCase)) { + if (UTF8String.ToSystemStringOrEmpty(module.Name).Equals(type.Module.ScopeName, StringComparison.OrdinalIgnoreCase)) + return module; + return module.UpdateRowId(new ModuleRefUser(module, type.Module.ScopeName)); + } + } + var pkt = asmName.GetPublicKeyToken(); + if (pkt == null || pkt.Length == 0) + pkt = null; + + AssemblyRef assemblyRef = new AssemblyRefUser(asmName.Name, asmName.Version, PublicKeyBase.CreatePublicKeyToken(pkt), asmName.CultureInfo.Name); + if (assemblyRef.IsCorLib()) + return module.CorLibTypes.AssemblyRef; + return module.UpdateRowId(assemblyRef); + } + + /// + /// Imports a as a + /// + /// The type + /// A list of all required modifiers or null + /// A list of all optional modifiers or null + /// The imported type or null if is invalid + public TypeSig ImportAsTypeSig(Type type, IList requiredModifiers, IList optionalModifiers) { + return ImportAsTypeSig(type, requiredModifiers, optionalModifiers, false); + } + + TypeSig ImportAsTypeSig(Type type, IList requiredModifiers, IList optionalModifiers, bool treatAsGenericInst) { + if (type == null) + return null; + if (IsEmpty(requiredModifiers) && IsEmpty(optionalModifiers)) + return ImportAsTypeSig(type, treatAsGenericInst); + + FixSignature = true; // Order of modifiers is unknown + var ts = ImportAsTypeSig(type, treatAsGenericInst); + + // We don't know the original order of the modifiers. + // Assume all required modifiers are closer to the real type. + // Assume all modifiers should be applied in the same order as in the lists. + + if (requiredModifiers != null) { + foreach (var modifier in requiredModifiers.GetSafeEnumerable()) + ts = new CModReqdSig(Import(modifier), ts); + } + + if (optionalModifiers != null) { + foreach (var modifier in optionalModifiers.GetSafeEnumerable()) + ts = new CModOptSig(Import(modifier), ts); + } + + return ts; + } + + static bool IsEmpty(IList list) { + return list == null || list.Count == 0; + } + + /// + /// Imports a as a . This will be either + /// a or a . + /// + /// The method + /// The imported method or null if is invalid + /// or if we failed to import the method + public IMethod Import(MethodBase methodBase) { + return Import(methodBase, false); + } + + /// + /// Imports a as a . This will be either + /// a or a . + /// + /// The method + /// Always verify method signature to make sure the + /// returned reference matches the metadata in the source assembly + /// The imported method or null if is invalid + /// or if we failed to import the method + public IMethod Import(MethodBase methodBase, bool forceFixSignature) { + FixSignature = false; + return ImportInternal(methodBase, forceFixSignature); + } + + IMethod ImportInternal(MethodBase methodBase) { + return ImportInternal(methodBase, false); + } + + IMethod ImportInternal(MethodBase methodBase, bool forceFixSignature) { + if (methodBase == null) + return null; + + if (forceFixSignature) { + //TODO: + } + + bool isMethodSpec = methodBase.IsGenericButNotGenericMethodDefinition(); + if (isMethodSpec) { + IMethodDefOrRef method; + var origMethod = methodBase.Module.ResolveMethod(methodBase.MetadataToken); + if (methodBase.DeclaringType.GetElementType2() == ElementType.GenericInst) + method = module.UpdateRowId(new MemberRefUser(module, methodBase.Name, CreateMethodSig(origMethod), Import(methodBase.DeclaringType))); + else + method = ImportInternal(origMethod) as IMethodDefOrRef; + + method = TryResolveMethod(method); + + var gim = CreateGenericInstMethodSig(methodBase); + var methodSpec = module.UpdateRowId(new MethodSpecUser(method, gim)); + if (FixSignature && !forceFixSignature) { + //TODO: + } + return methodSpec; + } + else { + IMemberRefParent parent; + if (methodBase.DeclaringType == null) { + // It's the global type. We can reference it with a ModuleRef token. + parent = GetModuleParent(methodBase.Module); + } + else + parent = Import(methodBase.DeclaringType); + if (parent == null) + return null; + + MethodBase origMethod; + try { + // Get the original method def in case the declaring type is a generic + // type instance and the method uses at least one generic type parameter. + origMethod = methodBase.Module.ResolveMethod(methodBase.MetadataToken); + } + catch (ArgumentException) { + // Here if eg. the method was created by the runtime (eg. a multi-dimensional + // array getter/setter method). The method token is in that case 0x06000000, + // which is invalid. + origMethod = methodBase; + } + + var methodSig = CreateMethodSig(origMethod); + IMethodDefOrRef methodRef = module.UpdateRowId(new MemberRefUser(module, methodBase.Name, methodSig, parent)); + methodRef = TryResolveMethod(methodRef); + if (FixSignature && !forceFixSignature) { + //TODO: + } + return methodRef; + } + } + + MethodSig CreateMethodSig(MethodBase mb) { + var sig = new MethodSig(GetCallingConvention(mb)); + + var mi = mb as MethodInfo; + if (mi != null) + sig.RetType = ImportAsTypeSig(mi.ReturnParameter, mb.DeclaringType); + else + sig.RetType = module.CorLibTypes.Void; + + foreach (var p in mb.GetParameters()) + sig.Params.Add(ImportAsTypeSig(p, mb.DeclaringType)); + + if (mb.IsGenericMethodDefinition) + sig.GenParamCount = (uint)mb.GetGenericArguments().Length; + + return sig; + } + + TypeSig ImportAsTypeSig(ParameterInfo p, Type declaringType) { + return ImportAsTypeSig(p.ParameterType, p.GetRequiredCustomModifiers(), p.GetOptionalCustomModifiers(), declaringType.MustTreatTypeAsGenericInstType(p.ParameterType)); + } + + CallingConvention GetCallingConvention(MethodBase mb) { + CallingConvention cc = 0; + + var mbcc = mb.CallingConvention; + if (mb.IsGenericMethodDefinition) + cc |= CallingConvention.Generic; + if ((mbcc & CallingConventions.HasThis) != 0) + cc |= CallingConvention.HasThis; + if ((mbcc & CallingConventions.ExplicitThis) != 0) + cc |= CallingConvention.ExplicitThis; + + switch (mbcc & CallingConventions.Any) { + case CallingConventions.Standard: + cc |= CallingConvention.Default; + break; + + case CallingConventions.VarArgs: + cc |= CallingConvention.VarArg; + break; + + case CallingConventions.Any: + default: + FixSignature = true; + cc |= CallingConvention.Default; + break; + } + + return cc; + } + + GenericInstMethodSig CreateGenericInstMethodSig(MethodBase mb) { + var genMethodArgs = mb.GetGenericArguments(); + var gim = new GenericInstMethodSig(CallingConvention.GenericInst, (uint)genMethodArgs.Length); + foreach (var gma in genMethodArgs) + gim.GenericArguments.Add(ImportAsTypeSig(gma)); + return gim; + } + + IMemberRefParent GetModuleParent(Module module2) { + // If we have no assembly, assume this is a netmodule in the same assembly as module + var modAsm = module.Assembly; + bool isSameAssembly = modAsm == null || + UTF8String.ToSystemStringOrEmpty(modAsm.Name).Equals(module2.Assembly.GetName().Name, StringComparison.OrdinalIgnoreCase); + if (!isSameAssembly) + return null; + return module.UpdateRowId(new ModuleRefUser(module, module.Name)); + } + + /// + /// Imports a as a + /// + /// The field + /// The imported field or null if is invalid + /// or if we failed to import the field + public IField Import(FieldInfo fieldInfo) { + return Import(fieldInfo, false); + } + + /// + /// Imports a as a + /// + /// The field + /// Always verify field signature to make sure the + /// returned reference matches the metadata in the source assembly + /// The imported field or null if is invalid + /// or if we failed to import the field + public IField Import(FieldInfo fieldInfo, bool forceFixSignature) { + FixSignature = false; + if (fieldInfo == null) + return null; + + if (forceFixSignature) { + //TODO: + } + + IMemberRefParent parent; + if (fieldInfo.DeclaringType == null) { + // It's the global type. We can reference it with a ModuleRef token. + parent = GetModuleParent(fieldInfo.Module); + } + else + parent = Import(fieldInfo.DeclaringType); + if (parent == null) + return null; + + FieldInfo origField; + try { + // Get the original field def in case the declaring type is a generic + // type instance and the field uses a generic type parameter. + origField = fieldInfo.Module.ResolveField(fieldInfo.MetadataToken); + } + catch (ArgumentException) { + origField = fieldInfo; + } + + MemberRef fieldRef; + if (origField.FieldType.ContainsGenericParameters) { + var origDeclType = origField.DeclaringType; + var asm = module.Context.AssemblyResolver.Resolve(origDeclType.Module.Assembly.GetName(), module); + if (asm == null || asm.FullName != origDeclType.Assembly.FullName) + throw new Exception("Couldn't resolve the correct assembly"); + var mod = asm.FindModule(origDeclType.Module.Name) as ModuleDefMD; + if (mod == null) + throw new Exception("Couldn't resolve the correct module"); + var fieldDef = mod.ResolveField((uint)(origField.MetadataToken & 0x00FFFFFF)); + if (fieldDef == null) + throw new Exception("Couldn't resolve the correct field"); + + var fieldSig = new FieldSig(Import(fieldDef.FieldSig.GetFieldType())); + fieldRef = module.UpdateRowId(new MemberRefUser(module, fieldInfo.Name, fieldSig, parent)); + } + else { + var fieldSig = new FieldSig(ImportAsTypeSig(fieldInfo.FieldType)); + fieldRef = module.UpdateRowId(new MemberRefUser(module, fieldInfo.Name, fieldSig, parent)); + } + var field = TryResolveField(fieldRef); + if (FixSignature && !forceFixSignature) { + //TODO: + } + return field; + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public IType Import(IType type) { + if (type == null) + return null; + if (!recursionCounter.Increment()) + return null; + + IType result; + TypeDef td; + TypeRef tr; + TypeSpec ts; + TypeSig sig; + + if ((td = type as TypeDef) != null) + result = Import(td); + else if ((tr = type as TypeRef) != null) + result = Import(tr); + else if ((ts = type as TypeSpec) != null) + result = Import(ts); + else if ((sig = type as TypeSig) != null) + result = Import(sig); + else + result = null; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a as a + /// + /// The type + /// The imported type or null + public ITypeDefOrRef Import(TypeDef type) { + if (type == null) + return null; + if (TryToUseTypeDefs && type.Module == module) + return type; + + if (resolver != null) { + ITypeDefOrRef result = resolver.Resolve(type); + if (result != null) + return result; + } + + return Import2(type); + } + + TypeRef Import2(TypeDef type) { + if (type == null) + return null; + if (!recursionCounter.Increment()) + return null; + TypeRef result; + + var declType = type.DeclaringType; + if (declType != null) + result = module.UpdateRowId(new TypeRefUser(module, type.Namespace, type.Name, Import2(declType))); + else + result = module.UpdateRowId(new TypeRefUser(module, type.Namespace, type.Name, CreateScopeReference(type.DefinitionAssembly, type.Module))); + + recursionCounter.Decrement(); + return result; + } + + IResolutionScope CreateScopeReference(IAssembly defAsm, ModuleDef defMod) { + if (defAsm == null) + return null; + if (defAsm.IsCorLib()) + return module.CorLibTypes.AssemblyRef; + + var modAsm = module.Assembly; + if (defMod != null && defAsm != null && modAsm != null) { + if (UTF8String.CaseInsensitiveEquals(modAsm.Name, defAsm.Name)) { + if (UTF8String.CaseInsensitiveEquals(module.Name, defMod.Name)) + return module; + return module.UpdateRowId(new ModuleRefUser(module, defMod.Name)); + } + } + var pkt = PublicKeyBase.ToPublicKeyToken(defAsm.PublicKeyOrToken); + if (PublicKeyBase.IsNullOrEmpty2(pkt)) + pkt = null; + return module.UpdateRowId(new AssemblyRefUser(defAsm.Name, defAsm.Version, pkt, defAsm.Culture) { Attributes = defAsm.Attributes & ~AssemblyAttributes.PublicKey }); + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public ITypeDefOrRef Import(TypeRef type) { + return TryResolve(Import2(type)); + } + + TypeRef Import2(TypeRef type) { + if (type == null) + return null; + if (!recursionCounter.Increment()) + return null; + TypeRef result; + + var declaringType = type.DeclaringType; + if (declaringType != null) + result = module.UpdateRowId(new TypeRefUser(module, type.Namespace, type.Name, Import2(declaringType))); + else + result = module.UpdateRowId(new TypeRefUser(module, type.Namespace, type.Name, CreateScopeReference(type.DefinitionAssembly, type.Module))); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public TypeSpec Import(TypeSpec type) { + if (type == null) + return null; + return module.UpdateRowId(new TypeSpecUser(Import(type.TypeSig))); + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public TypeSig Import(TypeSig type) { + if (type == null) + return null; + if (!recursionCounter.Increment()) + return null; + + TypeSig result; + switch (type.ElementType) { + case ElementType.Void: result = module.CorLibTypes.Void; break; + case ElementType.Boolean: result = module.CorLibTypes.Boolean; break; + case ElementType.Char: result = module.CorLibTypes.Char; break; + case ElementType.I1: result = module.CorLibTypes.SByte; break; + case ElementType.U1: result = module.CorLibTypes.Byte; break; + case ElementType.I2: result = module.CorLibTypes.Int16; break; + case ElementType.U2: result = module.CorLibTypes.UInt16; break; + case ElementType.I4: result = module.CorLibTypes.Int32; break; + case ElementType.U4: result = module.CorLibTypes.UInt32; break; + case ElementType.I8: result = module.CorLibTypes.Int64; break; + case ElementType.U8: result = module.CorLibTypes.UInt64; break; + case ElementType.R4: result = module.CorLibTypes.Single; break; + case ElementType.R8: result = module.CorLibTypes.Double; break; + case ElementType.String: result = module.CorLibTypes.String; break; + case ElementType.TypedByRef:result = module.CorLibTypes.TypedReference; break; + case ElementType.I: result = module.CorLibTypes.IntPtr; break; + case ElementType.U: result = module.CorLibTypes.UIntPtr; break; + case ElementType.Object: result = module.CorLibTypes.Object; break; + case ElementType.Ptr: result = new PtrSig(Import(type.Next)); break; + case ElementType.ByRef: result = new ByRefSig(Import(type.Next)); break; + case ElementType.ValueType: result = CreateClassOrValueType((type as ClassOrValueTypeSig).TypeDefOrRef, true); break; + case ElementType.Class: result = CreateClassOrValueType((type as ClassOrValueTypeSig).TypeDefOrRef, false); break; + case ElementType.Var: result = new GenericVar((type as GenericVar).Number, gpContext.Type); break; + case ElementType.ValueArray:result = new ValueArraySig(Import(type.Next), (type as ValueArraySig).Size); break; + case ElementType.FnPtr: result = new FnPtrSig(Import((type as FnPtrSig).Signature)); break; + case ElementType.SZArray: result = new SZArraySig(Import(type.Next)); break; + case ElementType.MVar: result = new GenericMVar((type as GenericMVar).Number, gpContext.Method); break; + case ElementType.CModReqd: result = new CModReqdSig(Import((type as ModifierSig).Modifier), Import(type.Next)); break; + case ElementType.CModOpt: result = new CModOptSig(Import((type as ModifierSig).Modifier), Import(type.Next)); break; + case ElementType.Module: result = new ModuleSig((type as ModuleSig).Index, Import(type.Next)); break; + case ElementType.Sentinel: result = new SentinelSig(); break; + case ElementType.Pinned: result = new PinnedSig(Import(type.Next)); break; + + case ElementType.Array: + var arraySig = (ArraySig)type; + var sizes = new List(arraySig.Sizes); + var lbounds = new List(arraySig.LowerBounds); + result = new ArraySig(Import(type.Next), arraySig.Rank, sizes, lbounds); + break; + + case ElementType.GenericInst: + var gis = (GenericInstSig)type; + var genArgs = new List(gis.GenericArguments.Count); + foreach (var ga in gis.GenericArguments.GetSafeEnumerable()) + genArgs.Add(Import(ga)); + result = new GenericInstSig(Import(gis.GenericType) as ClassOrValueTypeSig, genArgs); + break; + + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = null; + break; + } + + recursionCounter.Decrement(); + return result; + } + + ITypeDefOrRef Import(ITypeDefOrRef type) { + return (ITypeDefOrRef)Import((IType)type); + } + + TypeSig CreateClassOrValueType(ITypeDefOrRef type, bool isValueType) { + var corLibType = module.CorLibTypes.GetCorLibTypeSig(type); + if (corLibType != null) + return corLibType; + + if (isValueType) + return new ValueTypeSig(Import(type)); + return new ClassSig(Import(type)); + } + + /// + /// Imports a + /// + /// The sig + /// The imported sig or null if input is invalid + public CallingConventionSig Import(CallingConventionSig sig) { + if (sig == null) + return null; + if (!recursionCounter.Increment()) + return null; + CallingConventionSig result; + + var sigType = sig.GetType(); + if (sigType == typeof(MethodSig)) + result = Import((MethodSig)sig); + else if (sigType == typeof(FieldSig)) + result = Import((FieldSig)sig); + else if (sigType == typeof(GenericInstMethodSig)) + result = Import((GenericInstMethodSig)sig); + else if (sigType == typeof(PropertySig)) + result = Import((PropertySig)sig); + else if (sigType == typeof(LocalSig)) + result = Import((LocalSig)sig); + else + result = null; // Should never be reached + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The sig + /// The imported sig or null if input is invalid + public FieldSig Import(FieldSig sig) { + if (sig == null) + return null; + if (!recursionCounter.Increment()) + return null; + + var result = new FieldSig(sig.GetCallingConvention(), Import(sig.Type)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The sig + /// The imported sig or null if input is invalid + public MethodSig Import(MethodSig sig) { + if (sig == null) + return null; + if (!recursionCounter.Increment()) + return null; + + MethodSig result = Import(new MethodSig(sig.GetCallingConvention()), sig); + + recursionCounter.Decrement(); + return result; + } + + T Import(T sig, T old) where T : MethodBaseSig { + sig.RetType = Import(old.RetType); + foreach (var p in old.Params.GetSafeEnumerable()) + sig.Params.Add(Import(p)); + sig.GenParamCount = old.GenParamCount; + var paramsAfterSentinel = sig.ParamsAfterSentinel; + if (paramsAfterSentinel != null) { + foreach (var p in old.ParamsAfterSentinel.GetSafeEnumerable()) + paramsAfterSentinel.Add(Import(p)); + } + return sig; + } + + /// + /// Imports a + /// + /// The sig + /// The imported sig or null if input is invalid + public PropertySig Import(PropertySig sig) { + if (sig == null) + return null; + if (!recursionCounter.Increment()) + return null; + + PropertySig result = Import(new PropertySig(sig.GetCallingConvention()), sig); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The sig + /// The imported sig or null if input is invalid + public LocalSig Import(LocalSig sig) { + if (sig == null) + return null; + if (!recursionCounter.Increment()) + return null; + + LocalSig result = new LocalSig(sig.GetCallingConvention(), (uint)sig.Locals.Count); + foreach (var l in sig.Locals.GetSafeEnumerable()) + result.Locals.Add(Import(l)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The sig + /// The imported sig or null if input is invalid + public GenericInstMethodSig Import(GenericInstMethodSig sig) { + if (sig == null) + return null; + if (!recursionCounter.Increment()) + return null; + + GenericInstMethodSig result = new GenericInstMethodSig(sig.GetCallingConvention(), (uint)sig.GenericArguments.Count); + foreach (var l in sig.GenericArguments.GetSafeEnumerable()) + result.GenericArguments.Add(Import(l)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The field + /// The imported type or null if is invalid + public IField Import(IField field) { + if (field == null) + return null; + if (!recursionCounter.Increment()) + return null; + + IField result; + MemberRef mr; + FieldDef fd; + + if ((fd = field as FieldDef) != null) + result = Import(fd); + else if ((mr = field as MemberRef) != null) + result = Import(mr); + else + result = null; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The method + /// The imported method or null if is invalid + public IMethod Import(IMethod method) { + if (method == null) + return null; + if (!recursionCounter.Increment()) + return null; + + IMethod result; + MethodDef md; + MethodSpec ms; + MemberRef mr; + + if ((md = method as MethodDef) != null) + result = Import(md); + else if ((ms = method as MethodSpec) != null) + result = Import(ms); + else if ((mr = method as MemberRef) != null) + result = Import(mr); + else + result = null; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a as an + /// + /// The field + /// The imported type or null if is invalid + public IField Import(FieldDef field) { + if (field == null) + return null; + if (TryToUseFieldDefs && field.Module == module) + return field; + if (!recursionCounter.Increment()) + return null; + + if (resolver != null) { + IField resultField = resolver.Resolve(field); + if (resultField != null) + return resultField; + } + + MemberRef result = module.UpdateRowId(new MemberRefUser(module, field.Name)); + result.Signature = Import(field.Signature); + result.Class = ImportParent(field.DeclaringType); + + recursionCounter.Decrement(); + return result; + } + + IMemberRefParent ImportParent(TypeDef type) { + if (type == null) + return null; + if (type.IsGlobalModuleType) { + var om = type.Module; + return module.UpdateRowId(new ModuleRefUser(module, om == null ? null : om.Name)); + } + return Import(type); + } + + /// + /// Imports a as an + /// + /// The method + /// The imported method or null if is invalid + public IMethod Import(MethodDef method) { + if (method == null) + return null; + if (TryToUseMethodDefs && method.Module == module) + return method; + if (!recursionCounter.Increment()) + return null; + + if (resolver != null) { + IMethod resultMethod = resolver.Resolve(method); + if (resultMethod != null) + return resultMethod; + } + + MemberRef result = module.UpdateRowId(new MemberRefUser(module, method.Name)); + result.Signature = Import(method.Signature); + result.Class = ImportParent(method.DeclaringType); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The method + /// The imported method or null if is invalid + public MethodSpec Import(MethodSpec method) { + if (method == null) + return null; + if (!recursionCounter.Increment()) + return null; + + MethodSpec result = module.UpdateRowId(new MethodSpecUser((IMethodDefOrRef)Import(method.Method))); + result.Instantiation = Import(method.Instantiation); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Imports a + /// + /// The member ref + /// The imported member ref or null if is invalid + public MemberRef Import(MemberRef memberRef) { + if (memberRef == null) + return null; + if (!recursionCounter.Increment()) + return null; + + MemberRef result = module.UpdateRowId(new MemberRefUser(module, memberRef.Name)); + result.Signature = Import(memberRef.Signature); + result.Class = Import(memberRef.Class); + if (result.Class == null) // Will be null if memberRef.Class is null or a MethodDef + result = null; + + recursionCounter.Decrement(); + return result; + } + + IMemberRefParent Import(IMemberRefParent parent) { + var tdr = parent as ITypeDefOrRef; + if (tdr != null) { + var td = tdr as TypeDef; + if (td != null && td.IsGlobalModuleType) { + var om = td.Module; + return module.UpdateRowId(new ModuleRefUser(module, om == null ? null : om.Name)); + } + return Import(tdr); + } + + var modRef = parent as ModuleRef; + if (modRef != null) + return module.UpdateRowId(new ModuleRefUser(module, modRef.Name)); + + var method = parent as MethodDef; + if (method != null) { + var dt = method.DeclaringType; + return dt == null || dt.Module != module ? null : method; + } + + return null; + } + } +} diff --git a/dnlib/DotNet/InterfaceImpl.cs b/dnlib/DotNet/InterfaceImpl.cs new file mode 100644 index 0000000..ec3aade --- /dev/null +++ b/dnlib/DotNet/InterfaceImpl.cs @@ -0,0 +1,134 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the InterfaceImpl table + /// + [DebuggerDisplay("{Interface}")] + public abstract class InterfaceImpl : IHasCustomAttribute, IContainsGenericParameter { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.InterfaceImpl, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 5; } + } + + /// + /// From column InterfaceImpl.Interface + /// + public ITypeDefOrRef Interface { + get { return @interface; } + set { @interface = value; } + } + /// + protected ITypeDefOrRef @interface; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + bool IContainsGenericParameter.ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + } + + /// + /// An InterfaceImpl row created by the user and not present in the original .NET file + /// + public class InterfaceImplUser : InterfaceImpl { + /// + /// Default constructor + /// + public InterfaceImplUser() { + } + + /// + /// Constructor + /// + /// The interface the type implements + public InterfaceImplUser(ITypeDefOrRef @interface) { + this.@interface = @interface; + } + } + + /// + /// Created from a row in the InterfaceImpl table + /// + sealed class InterfaceImplMD : InterfaceImpl, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.InterfaceImpl, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this InterfaceImpl row + /// Row ID + /// Generic parameter context + /// If is null + /// If is invalid + public InterfaceImplMD(ModuleDefMD readerModule, uint rid, GenericParamContext gpContext) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.InterfaceImplTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("InterfaceImpl rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint @interface = readerModule.TablesStream.ReadInterfaceImplRow2(origRid); + this.@interface = readerModule.ResolveTypeDefOrRef(@interface, gpContext); + } + } +} diff --git a/dnlib/DotNet/MD/BlobStream.cs b/dnlib/DotNet/MD/BlobStream.cs new file mode 100644 index 0000000..1d324d6 --- /dev/null +++ b/dnlib/DotNet/MD/BlobStream.cs @@ -0,0 +1,87 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Represents the #Blob stream + /// + public sealed class BlobStream : HeapStream { + static readonly byte[] noData = new byte[0]; + + /// + public BlobStream() { + } + + /// + public BlobStream(IImageStream imageStream, StreamHeader streamHeader) + : base(imageStream, streamHeader) { + } + + /// + /// Reads data + /// + /// Offset of data + /// The data or null if invalid offset + public byte[] Read(uint offset) { + // The CLR has a special check for offset 0. It always interprets it as + // 0-length data, even if that first byte isn't 0 at all. + if (offset == 0) + return noData; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + IImageStream reader; + int size = GetReader_NoLock(offset, out reader); + if (size < 0) + return null; + return reader.ReadBytes(size); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads data just like , but returns an empty array if + /// offset is invalid + /// + /// Offset of data + /// The data + public byte[] ReadNoNull(uint offset) { + return Read(offset) ?? noData; + } + + /// + /// Creates a new sub stream of the #Blob stream that can access one blob + /// + /// Offset of blob + /// A new stream + public IImageStream CreateStream(uint offset) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + IImageStream reader; + int size = GetReader_NoLock(offset, out reader); + if (size < 0) + return MemoryImageStream.CreateEmpty(); + return reader.Create((FileOffset)reader.Position, size); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + int GetReader_NoLock(uint offset, out IImageStream reader) { + reader = null; + if (!IsValidOffset(offset)) + return -1; + reader = GetReader_NoLock(offset); + uint length; + if (!reader.ReadCompressedUInt32(out length)) + return -1; + if (reader.Position + length < length || reader.Position + length > reader.Length) + return -1; + + return (int)length; // length <= 0x1FFFFFFF so this cast does not make it negative + } + } +} diff --git a/dnlib/DotNet/MD/CodedToken.cs b/dnlib/DotNet/MD/CodedToken.cs new file mode 100644 index 0000000..792db01 --- /dev/null +++ b/dnlib/DotNet/MD/CodedToken.cs @@ -0,0 +1,215 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.MD { + /// + /// Contains all possible coded token classes + /// + public sealed class CodedToken { + /// TypeDefOrRef coded token + public static readonly CodedToken TypeDefOrRef = new CodedToken(2, new Table[3] { + Table.TypeDef, Table.TypeRef, Table.TypeSpec, + }); + + /// HasConstant coded token + public static readonly CodedToken HasConstant = new CodedToken(2, new Table[3] { + Table.Field, Table.Param, Table.Property, + }); + + /// HasCustomAttribute coded token + public static readonly CodedToken HasCustomAttribute = new CodedToken(5, new Table[24] { + Table.Method, Table.Field, Table.TypeRef, Table.TypeDef, + Table.Param, Table.InterfaceImpl, Table.MemberRef, Table.Module, + Table.DeclSecurity, Table.Property, Table.Event, Table.StandAloneSig, + Table.ModuleRef, Table.TypeSpec, Table.Assembly, Table.AssemblyRef, + Table.File, Table.ExportedType, Table.ManifestResource, Table.GenericParam, + Table.GenericParamConstraint, Table.MethodSpec, 0, 0, + }); + + /// HasFieldMarshal coded token + public static readonly CodedToken HasFieldMarshal = new CodedToken(1, new Table[2] { + Table.Field, Table.Param, + }); + + /// HasDeclSecurity coded token + public static readonly CodedToken HasDeclSecurity = new CodedToken(2, new Table[3] { + Table.TypeDef, Table.Method, Table.Assembly, + }); + + /// MemberRefParent coded token + public static readonly CodedToken MemberRefParent = new CodedToken(3, new Table[5] { + Table.TypeDef, Table.TypeRef, Table.ModuleRef, Table.Method, + Table.TypeSpec, + }); + + /// HasSemantic coded token + public static readonly CodedToken HasSemantic = new CodedToken(1, new Table[2] { + Table.Event, Table.Property, + }); + + /// MethodDefOrRef coded token + public static readonly CodedToken MethodDefOrRef = new CodedToken(1, new Table[2] { + Table.Method, Table.MemberRef, + }); + + /// MemberForwarded coded token + public static readonly CodedToken MemberForwarded = new CodedToken(1, new Table[2] { + Table.Field, Table.Method, + }); + + /// Implementation coded token + public static readonly CodedToken Implementation = new CodedToken(2, new Table[3] { + Table.File, Table.AssemblyRef, Table.ExportedType, + }); + + /// CustomAttributeType coded token + public static readonly CodedToken CustomAttributeType = new CodedToken(3, new Table[4] { + 0, 0, Table.Method, Table.MemberRef, + }); + + /// ResolutionScope coded token + public static readonly CodedToken ResolutionScope = new CodedToken(2, new Table[4] { + Table.Module, Table.ModuleRef, Table.AssemblyRef, Table.TypeRef, + }); + + /// TypeOrMethodDef coded token + public static readonly CodedToken TypeOrMethodDef = new CodedToken(1, new Table[2] { + Table.TypeDef, Table.Method, + }); + + readonly Table[] tableTypes; + readonly int bits; + readonly int mask; + + /// + /// Returns all types of tables + /// + public Table[] TableTypes { + get { return tableTypes; } + } + + /// + /// Returns the number of bits that is used to encode table type + /// + public int Bits { + get { return bits; } + } + + /// + /// Constructor + /// + /// Number of bits used to encode token type + /// All table types + internal CodedToken(int bits, Table[] tableTypes) { + this.bits = bits; + this.mask = (1 << bits) - 1; + this.tableTypes = tableTypes; + } + + /// + /// Encodes a token + /// + /// The token + /// Coded token + /// + public uint Encode(MDToken token) { + return Encode(token.Raw); + } + + /// + /// Encodes a token + /// + /// The token + /// Coded token + /// + public uint Encode(uint token) { + uint codedToken; + Encode(token, out codedToken); + return codedToken; + } + + /// + /// Encodes a token + /// + /// The token + /// Coded token + /// true if successful + public bool Encode(MDToken token, out uint codedToken) { + return Encode(token.Raw, out codedToken); + } + + /// + /// Encodes a token + /// + /// The token + /// Coded token + /// true if successful + public bool Encode(uint token, out uint codedToken) { + int index = Array.IndexOf(tableTypes, MDToken.ToTable(token)); + if (index < 0) { + codedToken = uint.MaxValue; + return false; + } + // This shift can never overflow a uint since bits < 8 (it's at most 5), and + // ToRid() returns an integer <= 0x00FFFFFF. + codedToken = (MDToken.ToRID(token) << bits) | (uint)index; + return true; + } + + /// + /// Decodes a coded token + /// + /// The coded token + /// Decoded token or 0 on failure + /// + public MDToken Decode2(uint codedToken) { + uint token; + Decode(codedToken, out token); + return new MDToken(token); + } + + /// + /// Decodes a coded token + /// + /// The coded token + /// Decoded token or 0 on failure + /// + public uint Decode(uint codedToken) { + uint token; + Decode(codedToken, out token); + return token; + } + + /// + /// Decodes a coded token + /// + /// The coded token + /// Decoded token + /// true if successful + public bool Decode(uint codedToken, out MDToken token) { + uint decodedToken; + bool result = Decode(codedToken, out decodedToken); + token = new MDToken(decodedToken); + return result; + } + + /// + /// Decodes a coded token + /// + /// The coded token + /// Decoded token + /// true if successful + public bool Decode(uint codedToken, out uint token) { + uint rid = codedToken >> bits; + int index = (int)(codedToken & mask); + if (rid > MDToken.RID_MAX || index >= tableTypes.Length) { + token = 0; + return false; + } + + token = ((uint)tableTypes[index] << MDToken.TABLE_SHIFT) | rid; + return true; + } + } +} diff --git a/dnlib/DotNet/MD/ColumnInfo.cs b/dnlib/DotNet/MD/ColumnInfo.cs new file mode 100644 index 0000000..cab756e --- /dev/null +++ b/dnlib/DotNet/MD/ColumnInfo.cs @@ -0,0 +1,113 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.IO; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Info about one column in a MD table + /// + [DebuggerDisplay("{offset} {size} {name}")] + public sealed class ColumnInfo { + readonly byte index; + byte offset; + readonly ColumnSize columnSize; + byte size; + readonly string name; + + /// + /// Gets the column index + /// + public int Index { + get { return index; } + } + + /// + /// Returns the column offset within the table row + /// + public int Offset { + get { return offset; } + internal set { offset = (byte)value; } + } + + /// + /// Returns the column size + /// + public int Size { + get { return size; } + internal set { size = (byte)value; } + } + + /// + /// Returns the column name + /// + public string Name { + get { return name; } + } + + /// + /// Returns the ColumnSize enum value + /// + public ColumnSize ColumnSize { + get { return columnSize; } + } + + /// + /// Constructor + /// + /// Column index + /// The column name + /// Column size + public ColumnInfo(byte index, string name, ColumnSize columnSize) { + this.index = index; + this.name = name; + this.columnSize = columnSize; + } + + /// + /// Constructor + /// + /// Column index + /// The column name + /// Column size + /// Offset of column + /// Size of column + public ColumnInfo(byte index, string name, ColumnSize columnSize, byte offset, byte size) { + this.index = index; + this.name = name; + this.columnSize = columnSize; + this.offset = offset; + this.size = size; + } + + /// + /// Reads the column + /// + /// A reader positioned on this column + /// The column value + public uint Read(IBinaryReader reader) { + switch (size) { + case 1: return reader.ReadByte(); + case 2: return reader.ReadUInt16(); + case 4: return reader.ReadUInt32(); + default: throw new InvalidOperationException("Invalid column size"); + } + } + + /// + /// Writes a column + /// + /// The writer position on this column + /// The column value + public void Write(BinaryWriter writer, uint value) { + switch (size) { + case 1: writer.Write((byte)value); break; + case 2: writer.Write((ushort)value); break; + case 4: writer.Write(value); break; + default: throw new InvalidOperationException("Invalid column size"); + } + } + } +} diff --git a/dnlib/DotNet/MD/ColumnSize.cs b/dnlib/DotNet/MD/ColumnSize.cs new file mode 100644 index 0000000..4f7ef6d --- /dev/null +++ b/dnlib/DotNet/MD/ColumnSize.cs @@ -0,0 +1,141 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// MD table column size + /// + public enum ColumnSize : byte { + /// RID into Module table + Module, + /// RID into TypeRef table + TypeRef, + /// RID into TypeDef table + TypeDef, + /// RID into FieldPtr table + FieldPtr, + /// RID into Field table + Field, + /// RID into MethodPtr table + MethodPtr, + /// RID into Method table + Method, + /// RID into ParamPtr table + ParamPtr, + /// RID into Param table + Param, + /// RID into InterfaceImpl table + InterfaceImpl, + /// RID into MemberRef table + MemberRef, + /// RID into Constant table + Constant, + /// RID into CustomAttribute table + CustomAttribute, + /// RID into FieldMarshal table + FieldMarshal, + /// RID into DeclSecurity table + DeclSecurity, + /// RID into ClassLayout table + ClassLayout, + /// RID into FieldLayout table + FieldLayout, + /// RID into StandAloneSig table + StandAloneSig, + /// RID into EventMap table + EventMap, + /// RID into EventPtr table + EventPtr, + /// RID into Event table + Event, + /// RID into PropertyMap table + PropertyMap, + /// RID into PropertyPtr table + PropertyPtr, + /// RID into Property table + Property, + /// RID into MethodSemantics table + MethodSemantics, + /// RID into MethodImpl table + MethodImpl, + /// RID into ModuleRef table + ModuleRef, + /// RID into TypeSpec table + TypeSpec, + /// RID into ImplMap table + ImplMap, + /// RID into FieldRVA table + FieldRVA, + /// RID into ENCLog table + ENCLog, + /// RID into ENCMap table + ENCMap, + /// RID into Assembly table + Assembly, + /// RID into AssemblyProcessor table + AssemblyProcessor, + /// RID into AssemblyOS table + AssemblyOS, + /// RID into AssemblyRef table + AssemblyRef, + /// RID into AssemblyRefProcessor table + AssemblyRefProcessor, + /// RID into AssemblyRefOS table + AssemblyRefOS, + /// RID into File table + File, + /// RID into ExportedType table + ExportedType, + /// RID into ManifestResource table + ManifestResource, + /// RID into NestedClass table + NestedClass, + /// RID into GenericParam table + GenericParam, + /// RID into MethodSpec table + MethodSpec, + /// RID into GenericParamConstraint table + GenericParamConstraint, + /// 8-bit byte + Byte = 0x40, + /// 16-bit signed int + Int16, + /// 16-bit unsigned int + UInt16, + /// 32-bit signed int + Int32, + /// 32-bit unsigned int + UInt32, + /// Index into #Strings stream + Strings, + /// Index into #GUID stream + GUID, + /// Index into #Blob stream + Blob, + /// TypeDefOrRef encoded token + TypeDefOrRef, + /// HasConstant encoded token + HasConstant, + /// HasCustomAttribute encoded token + HasCustomAttribute, + /// HasFieldMarshal encoded token + HasFieldMarshal, + /// HasDeclSecurity encoded token + HasDeclSecurity, + /// MemberRefParent encoded token + MemberRefParent, + /// HasSemantic encoded token + HasSemantic, + /// MethodDefOrRef encoded token + MethodDefOrRef, + /// MemberForwarded encoded token + MemberForwarded, + /// Implementation encoded token + Implementation, + /// CustomAttributeType encoded token + CustomAttributeType, + /// ResolutionScope encoded token + ResolutionScope, + /// TypeOrMethodDef encoded token + TypeOrMethodDef, + } +} diff --git a/dnlib/DotNet/MD/ComImageFlags.cs b/dnlib/DotNet/MD/ComImageFlags.cs new file mode 100644 index 0000000..181eccd --- /dev/null +++ b/dnlib/DotNet/MD/ComImageFlags.cs @@ -0,0 +1,46 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.MD { + /// + /// See COMIMAGE_FLAGS_XXX in CorHdr.h in the Windows SDK + /// + [Flags] + public enum ComImageFlags : uint { + /// + /// See COMIMAGE_FLAGS_ILONLY in the Windows SDK + /// + ILOnly = 1, + + /// + /// See COMIMAGE_FLAGS_32BITREQUIRED in the Windows SDK + /// + _32BitRequired = 2, + + /// + /// Set if a native header exists (COMIMAGE_FLAGS_IL_LIBRARY) + /// + ILLibrary = 4, + + /// + /// See COMIMAGE_FLAGS_STRONGNAMESIGNED in the Windows SDK + /// + StrongNameSigned = 8, + + /// + /// See COMIMAGE_FLAGS_NATIVE_ENTRYPOINT in the Windows SDK + /// + NativeEntryPoint = 0x10, + + /// + /// See COMIMAGE_FLAGS_TRACKDEBUGDATA in the Windows SDK + /// + TrackDebugData = 0x10000, + + /// + /// See COMIMAGE_FLAGS_32BITPREFERRED in the Windows SDK + /// + _32BitPreferred = 0x20000, + } +} diff --git a/dnlib/DotNet/MD/CompressedMetaData.cs b/dnlib/DotNet/MD/CompressedMetaData.cs new file mode 100644 index 0000000..0be9d94 --- /dev/null +++ b/dnlib/DotNet/MD/CompressedMetaData.cs @@ -0,0 +1,296 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.PE; +using dnlib.Threading; + +namespace dnlib.DotNet.MD { + /// + /// Used when a #~ stream is present in the metadata + /// + sealed class CompressedMetaData : MetaData { + /// + public override bool IsCompressed { + get { return true; } + } + + /// + public CompressedMetaData(IPEImage peImage, ImageCor20Header cor20Header, MetaDataHeader mdHeader) + : base(peImage, cor20Header, mdHeader) { + } + + static CompressedMetaData() { + var windir = Environment.GetEnvironmentVariable("WINDIR"); + if (!string.IsNullOrEmpty(windir)) { + var baseDir = Path.Combine(windir, "assembly"); + nativeImages40 = Path.Combine(baseDir, "NativeImages_v4.0.30319"); + } + } + + static string nativeImages40; + static HotHeapVersion GetHotHeapVersion(string fileName, string version) { + // Some .NET 2.0 assemblies are stored in the 4.0 GAC. The version is not easily + // detectable from the data in the image so check the path. + if (nativeImages40 != null && fileName != null && fileName.StartsWith(nativeImages40, StringComparison.OrdinalIgnoreCase)) + return HotHeapVersion.CLR40; + + if (version.StartsWith(MDHeaderRuntimeVersion.MS_CLR_20_PREFIX)) + return HotHeapVersion.CLR20; + if (version.StartsWith(MDHeaderRuntimeVersion.MS_CLR_40_PREFIX)) + return HotHeapVersion.CLR40; + + return HotHeapVersion.CLR40; + } + + /// + protected override void InitializeInternal() { + var hotHeapVersion = GetHotHeapVersion(peImage.FileName, mdHeader.VersionString); + + IImageStream imageStream = null, fullStream = null; + DotNetStream dns = null; + List hotStreams = null; + HotStream hotStream = null; + var newAllStreams = new List(allStreams); + try { + var mdRva = cor20Header.MetaData.VirtualAddress; + for (int i = mdHeader.StreamHeaders.Count - 1; i >= 0; i--) { + var sh = mdHeader.StreamHeaders[i]; + var rva = mdRva + sh.Offset; + var fileOffset = peImage.ToFileOffset(rva); + imageStream = peImage.CreateStream(fileOffset, sh.StreamSize); + switch (sh.Name) { + case "#Strings": + if (stringsStream == null) { + stringsStream = new StringsStream(imageStream, sh); + imageStream = null; + newAllStreams.Add(stringsStream); + continue; + } + break; + + case "#US": + if (usStream == null) { + usStream = new USStream(imageStream, sh); + imageStream = null; + newAllStreams.Add(usStream); + continue; + } + break; + + case "#Blob": + if (blobStream == null) { + blobStream = new BlobStream(imageStream, sh); + imageStream = null; + newAllStreams.Add(blobStream); + continue; + } + break; + + case "#GUID": + if (guidStream == null) { + guidStream = new GuidStream(imageStream, sh); + imageStream = null; + newAllStreams.Add(guidStream); + continue; + } + break; + + case "#~": + if (tablesStream == null) { + tablesStream = new TablesStream(imageStream, sh); + imageStream = null; + newAllStreams.Add(tablesStream); + continue; + } + break; + + case "#!": + if (hotStreams == null) + hotStreams = new List(); + fullStream = peImage.CreateFullStream(); + hotStream = HotStream.Create(hotHeapVersion, imageStream, sh, fullStream, fileOffset); + fullStream = null; + hotStreams.Add(hotStream); + newAllStreams.Add(hotStream); + hotStream = null; + imageStream = null; + continue; + } + dns = new DotNetStream(imageStream, sh); + imageStream = null; + newAllStreams.Add(dns); + dns = null; + } + } + finally { + if (imageStream != null) + imageStream.Dispose(); + if (fullStream != null) + fullStream.Dispose(); + if (dns != null) + dns.Dispose(); + if (hotStream != null) + hotStream.Dispose(); + newAllStreams.Reverse(); + allStreams = ThreadSafeListCreator.MakeThreadSafe(newAllStreams); + } + + if (tablesStream == null) + throw new BadImageFormatException("Missing MD stream"); + + if (hotStreams != null) { + hotStreams.Reverse(); + InitializeHotStreams(hotStreams); + } + + tablesStream.Initialize(peImage); + } + + int GetPointerSize() { + return peImage.ImageNTHeaders.OptionalHeader.Magic == 0x10B ? 4 : 8; + } + + void InitializeHotStreams(IList hotStreams) { + if (hotStreams == null || hotStreams.Count == 0) + return; + + // If this is a 32-bit image, make sure that we emulate this by masking + // all base offsets to 32 bits. + long offsetMask = GetPointerSize() == 8 ? -1L : uint.MaxValue; + + // It's always the last one found that is used + var hotTable = hotStreams[hotStreams.Count - 1].HotTableStream; + if (hotTable != null) { + hotTable.Initialize(offsetMask); + tablesStream.HotTableStream = hotTable; + } + + HotHeapStream hotStrings = null, hotBlob = null, hotGuid = null, hotUs = null; + for (int i = hotStreams.Count - 1; i >= 0; i--) { + var hotStream = hotStreams[i]; + var hotHeapStreams = hotStream.HotHeapStreams; + if (hotHeapStreams == null) + continue; + + // It's always the last one found that is used + for (int j = hotHeapStreams.Count - 1; j >= 0; j--) { + var hotHeap = hotHeapStreams[j]; + switch (hotHeap.HeapType) { + case HeapType.Strings: + if (hotStrings == null) { + hotHeap.Initialize(offsetMask); + hotStrings = hotHeap; + } + break; + + case HeapType.Guid: + if (hotGuid == null) { + hotHeap.Initialize(offsetMask); + hotGuid = hotHeap; + } + break; + + case HeapType.Blob: + if (hotBlob == null) { + hotHeap.Initialize(offsetMask); + hotBlob = hotHeap; + } + break; + + case HeapType.US: + if (hotUs == null) { + hotHeap.Initialize(offsetMask); + hotUs = hotHeap; + } + break; + } + } + } + InitializeNonExistentHeaps(); + stringsStream.HotHeapStream = hotStrings; + guidStream.HotHeapStream = hotGuid; + blobStream.HotHeapStream = hotBlob; + usStream.HotHeapStream = hotUs; + } + + /// + public override RidList GetFieldRidList(uint typeDefRid) { + return GetRidList(tablesStream.TypeDefTable, typeDefRid, 4, tablesStream.FieldTable); + } + + /// + public override RidList GetMethodRidList(uint typeDefRid) { + return GetRidList(tablesStream.TypeDefTable, typeDefRid, 5, tablesStream.MethodTable); + } + + /// + public override RidList GetParamRidList(uint methodRid) { + return GetRidList(tablesStream.MethodTable, methodRid, 5, tablesStream.ParamTable); + } + + /// + public override RidList GetEventRidList(uint eventMapRid) { + return GetRidList(tablesStream.EventMapTable, eventMapRid, 1, tablesStream.EventTable); + } + + /// + public override RidList GetPropertyRidList(uint propertyMapRid) { + return GetRidList(tablesStream.PropertyMapTable, propertyMapRid, 1, tablesStream.PropertyTable); + } + + /// + /// Gets a rid list (eg. field list) + /// + /// Source table, eg. TypeDef + /// Row ID in + /// Column index in , eg. 4 for TypeDef.FieldList + /// Destination table, eg. Field + /// A new instance + RidList GetRidList(MDTable tableSource, uint tableSourceRid, int colIndex, MDTable tableDest) { + var column = tableSource.TableInfo.Columns[colIndex]; + uint startRid, nextListRid; + bool hasNext; +#if THREAD_SAFE + tablesStream.theLock.EnterWriteLock(); try { +#endif + if (!tablesStream.ReadColumn_NoLock(tableSource, tableSourceRid, column, out startRid)) + return RidList.Empty; + hasNext = tablesStream.ReadColumn_NoLock(tableSource, tableSourceRid + 1, column, out nextListRid); +#if THREAD_SAFE + } finally { tablesStream.theLock.ExitWriteLock(); } +#endif + uint lastRid = tableDest.Rows + 1; + if (startRid == 0 || startRid >= lastRid) + return RidList.Empty; + uint endRid = hasNext ? nextListRid : lastRid; + if (endRid < startRid) + endRid = startRid; + if (endRid > lastRid) + endRid = lastRid; + return new ContiguousRidList(startRid, endRid - startRid); + } + + /// + protected override uint BinarySearch_NoLock(MDTable tableSource, int keyColIndex, uint key) { + var keyColumn = tableSource.TableInfo.Columns[keyColIndex]; + uint ridLo = 1, ridHi = tableSource.Rows; + while (ridLo <= ridHi) { + uint rid = (ridLo + ridHi) / 2; + uint key2; + if (!tablesStream.ReadColumn_NoLock(tableSource, rid, keyColumn, out key2)) + break; // Never happens since rid is valid + if (key == key2) + return rid; + if (key2 > key) + ridHi = rid - 1; + else + ridLo = rid + 1; + } + + return 0; + } + } +} diff --git a/dnlib/DotNet/MD/DotNetStream.cs b/dnlib/DotNet/MD/DotNetStream.cs new file mode 100644 index 0000000..83c7537 --- /dev/null +++ b/dnlib/DotNet/MD/DotNetStream.cs @@ -0,0 +1,183 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using dnlib.IO; +using dnlib.Threading; + +namespace dnlib.DotNet.MD { + /// + /// .NET metadata stream + /// + [DebuggerDisplay("{imageStream.Length} {streamHeader.Name}")] + public class DotNetStream : IFileSection, IDisposable { + /// + /// Reader that can access the whole stream + /// + protected IImageStream imageStream; + + /// + /// null if it wasn't present in the file + /// + StreamHeader streamHeader; + + /// + public FileOffset StartOffset { + get { return imageStream.FileOffset; } + } + + /// + public FileOffset EndOffset { + get { return imageStream.FileOffset + imageStream.Length; } + } + + /// + /// Gets the length of the internal .NET blob stream + /// + public long ImageStreamLength { + get { return imageStream.Length; } + } + + /// + /// Gets the stream header + /// + public StreamHeader StreamHeader { + get { return streamHeader; } + } + + /// + /// Gets the name of the stream + /// + public string Name { + get { return streamHeader == null ? string.Empty : streamHeader.Name; } + } + + /// + /// Returns a cloned of the internal .NET blob stream. + /// + /// A new instance + public IImageStream GetClonedImageStream() { + return imageStream.Clone(); + } + + /// + /// Default constructor + /// + public DotNetStream() { + this.imageStream = MemoryImageStream.CreateEmpty(); + this.streamHeader = null; + } + + /// + /// Constructor + /// + /// Stream data + /// The stream header + public DotNetStream(IImageStream imageStream, StreamHeader streamHeader) { + this.imageStream = imageStream; + this.streamHeader = streamHeader; + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (disposing) { + var ims = imageStream; + if (ims != null) + ims.Dispose(); + imageStream = null; + streamHeader = null; + } + } + + /// + /// Checks whether an index is valid + /// + /// The index + /// true if the index is valid + public virtual bool IsValidIndex(uint index) { + return IsValidOffset(index); + } + + /// + /// Check whether an offset is within the stream + /// + /// Stream offset + /// true if the offset is valid + public bool IsValidOffset(uint offset) { + return offset == 0 || offset < imageStream.Length; + } + + /// + /// Check whether an offset is within the stream + /// + /// Stream offset + /// Size of data + /// true if the offset is valid + public bool IsValidOffset(uint offset, int size) { + if (size == 0) + return IsValidOffset(offset); + return size > 0 && (long)offset + (uint)size <= imageStream.Length; + } + } + + /// + /// Base class of #US, #Strings, #Blob, and #GUID classes + /// + public abstract class HeapStream : DotNetStream { + HotHeapStream hotHeapStream; +#if THREAD_SAFE + internal readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Gets/sets the instance + /// + internal HotHeapStream HotHeapStream { + set { hotHeapStream = value; } + } + + /// + protected HeapStream() { + } + + /// + protected HeapStream(IImageStream imageStream, StreamHeader streamHeader) + : base(imageStream, streamHeader) { + } + + /// + /// Gets the heap reader and initializes its position + /// + /// Offset in the heap. If it's the #GUID heap, this should + /// be the offset of the GUID, not its index + /// The heap reader + protected IImageStream GetReader_NoLock(uint offset) { + var stream = hotHeapStream == null ? null : hotHeapStream.GetBlobReader(offset); + if (stream == null) { + stream = imageStream; + stream.Position = offset; + } + return stream; + } + + /// + protected override void Dispose(bool disposing) { + if (disposing) { + var hhs = hotHeapStream; + if (hhs != null) + hhs.Dispose(); + hotHeapStream = null; + } + base.Dispose(disposing); + } + } +} diff --git a/dnlib/DotNet/MD/DotNetTableSizes.cs b/dnlib/DotNet/MD/DotNetTableSizes.cs new file mode 100644 index 0000000..197505d --- /dev/null +++ b/dnlib/DotNet/MD/DotNetTableSizes.cs @@ -0,0 +1,347 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet.MD { + /// + /// Initializes .NET table row sizes + /// + sealed class DotNetTableSizes { + bool bigStrings; + bool bigGuid; + bool bigBlob; + IList rowCounts; + TableInfo[] tableInfos; + + /// + /// Initializes the table sizes + /// + /// true if #Strings size >= 0x10000 + /// true if #GUID size >= 0x10000 + /// true if #Blob size >= 0x10000 + /// Count of rows in each table + public void InitializeSizes(bool bigStrings, bool bigGuid, bool bigBlob, IList rowCounts) { + this.bigStrings = bigStrings; + this.bigGuid = bigGuid; + this.bigBlob = bigBlob; + this.rowCounts = rowCounts; + foreach (var tableInfo in tableInfos) { + int colOffset = 0; + foreach (var colInfo in tableInfo.Columns) { + colInfo.Offset = colOffset; + var colSize = GetSize(colInfo.ColumnSize); + colInfo.Size = colSize; + colOffset += colSize + (colSize & 1); + } + tableInfo.RowSize = colOffset; + } + } + + int GetSize(ColumnSize columnSize) { + if (ColumnSize.Module <= columnSize && columnSize <= ColumnSize.GenericParamConstraint) { + int table = (int)(columnSize - ColumnSize.Module); + return rowCounts[table] > 0xFFFF ? 4 : 2; + } + else if (ColumnSize.TypeDefOrRef <= columnSize && columnSize <= ColumnSize.TypeOrMethodDef) { + CodedToken info; + switch (columnSize) { + case ColumnSize.TypeDefOrRef: info = CodedToken.TypeDefOrRef; break; + case ColumnSize.HasConstant: info = CodedToken.HasConstant; break; + case ColumnSize.HasCustomAttribute: info = CodedToken.HasCustomAttribute; break; + case ColumnSize.HasFieldMarshal: info = CodedToken.HasFieldMarshal; break; + case ColumnSize.HasDeclSecurity: info = CodedToken.HasDeclSecurity; break; + case ColumnSize.MemberRefParent: info = CodedToken.MemberRefParent; break; + case ColumnSize.HasSemantic: info = CodedToken.HasSemantic; break; + case ColumnSize.MethodDefOrRef: info = CodedToken.MethodDefOrRef; break; + case ColumnSize.MemberForwarded: info = CodedToken.MemberForwarded; break; + case ColumnSize.Implementation: info = CodedToken.Implementation; break; + case ColumnSize.CustomAttributeType:info = CodedToken.CustomAttributeType; break; + case ColumnSize.ResolutionScope: info = CodedToken.ResolutionScope; break; + case ColumnSize.TypeOrMethodDef: info = CodedToken.TypeOrMethodDef; break; + default: throw new InvalidOperationException(string.Format("Invalid ColumnSize: {0}", columnSize)); + } + uint maxRows = 0; + foreach (var tableType in info.TableTypes) { + var tableRows = rowCounts[(int)tableType]; + if (tableRows > maxRows) + maxRows = tableRows; + } + // Can't overflow since maxRows <= 0x00FFFFFF and info.Bits < 8 + uint finalRows = maxRows << info.Bits; + return finalRows > 0xFFFF ? 4 : 2; + } + else { + switch (columnSize) { + case ColumnSize.Byte: return 1; + case ColumnSize.Int16: return 2; + case ColumnSize.UInt16: return 2; + case ColumnSize.Int32: return 4; + case ColumnSize.UInt32: return 4; + case ColumnSize.Strings:return bigStrings ? 4 : 2; + case ColumnSize.GUID: return bigGuid ? 4 : 2; + case ColumnSize.Blob: return bigBlob ? 4 : 2; + } + } + throw new InvalidOperationException(string.Format("Invalid ColumnSize: {0}", columnSize)); + } + + /// + /// Creates the table infos + /// + /// Major table version + /// Minor table version + /// All table infos (not completely initialized) + public TableInfo[] CreateTables(byte majorVersion, byte minorVersion) { + int maxPresentTables; + return CreateTables(majorVersion, minorVersion, out maxPresentTables); + } + + /// + /// Creates the table infos + /// + /// Major table version + /// Minor table version + /// Initialized to max present tables (eg. 42 or 45) + /// All table infos (not completely initialized) + public TableInfo[] CreateTables(byte majorVersion, byte minorVersion, out int maxPresentTables) { + // The three extra generics tables aren't used by CLR 1.x + maxPresentTables = (majorVersion == 1 && minorVersion == 0) ? (int)Table.NestedClass + 1 : (int)Table.GenericParamConstraint + 1; + + var tableInfos = new TableInfo[(int)Table.GenericParamConstraint + 1]; + + tableInfos[(int)Table.Module] = new TableInfo(Table.Module, "Module", new ColumnInfo[] { + new ColumnInfo(0, "Generation", ColumnSize.UInt16), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "Mvid", ColumnSize.GUID), + new ColumnInfo(3, "EncId", ColumnSize.GUID), + new ColumnInfo(4, "EncBaseId", ColumnSize.GUID), + }); + tableInfos[(int)Table.TypeRef] = new TableInfo(Table.TypeRef, "TypeRef", new ColumnInfo[] { + new ColumnInfo(0, "ResolutionScope", ColumnSize.ResolutionScope), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "Namespace", ColumnSize.Strings), + }); + tableInfos[(int)Table.TypeDef] = new TableInfo(Table.TypeDef, "TypeDef", new ColumnInfo[] { + new ColumnInfo(0, "Flags", ColumnSize.UInt32), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "Namespace", ColumnSize.Strings), + new ColumnInfo(3, "Extends", ColumnSize.TypeDefOrRef), + new ColumnInfo(4, "FieldList", ColumnSize.Field), + new ColumnInfo(5, "MethodList", ColumnSize.Method), + }); + tableInfos[(int)Table.FieldPtr] = new TableInfo(Table.FieldPtr, "FieldPtr", new ColumnInfo[] { + new ColumnInfo(0, "Field", ColumnSize.Field), + }); + tableInfos[(int)Table.Field] = new TableInfo(Table.Field, "Field", new ColumnInfo[] { + new ColumnInfo(0, "Flags", ColumnSize.UInt16), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "Signature", ColumnSize.Blob), + }); + tableInfos[(int)Table.MethodPtr] = new TableInfo(Table.MethodPtr, "MethodPtr", new ColumnInfo[] { + new ColumnInfo(0, "Method", ColumnSize.Method), + }); + tableInfos[(int)Table.Method] = new TableInfo(Table.Method, "Method", new ColumnInfo[] { + new ColumnInfo(0, "RVA", ColumnSize.UInt32), + new ColumnInfo(1, "ImplFlags", ColumnSize.UInt16), + new ColumnInfo(2, "Flags", ColumnSize.UInt16), + new ColumnInfo(3, "Name", ColumnSize.Strings), + new ColumnInfo(4, "Signature", ColumnSize.Blob), + new ColumnInfo(5, "ParamList", ColumnSize.Param), + }); + tableInfos[(int)Table.ParamPtr] = new TableInfo(Table.ParamPtr, "ParamPtr", new ColumnInfo[] { + new ColumnInfo(0, "Param", ColumnSize.Param), + }); + tableInfos[(int)Table.Param] = new TableInfo(Table.Param, "Param", new ColumnInfo[] { + new ColumnInfo(0, "Flags", ColumnSize.UInt16), + new ColumnInfo(1, "Sequence", ColumnSize.UInt16), + new ColumnInfo(2, "Name", ColumnSize.Strings), + }); + tableInfos[(int)Table.InterfaceImpl] = new TableInfo(Table.InterfaceImpl, "InterfaceImpl", new ColumnInfo[] { + new ColumnInfo(0, "Class", ColumnSize.TypeDef), + new ColumnInfo(1, "Interface", ColumnSize.TypeDefOrRef), + }); + tableInfos[(int)Table.MemberRef] = new TableInfo(Table.MemberRef, "MemberRef", new ColumnInfo[] { + new ColumnInfo(0, "Class", ColumnSize.MemberRefParent), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "Signature", ColumnSize.Blob), + }); + tableInfos[(int)Table.Constant] = new TableInfo(Table.Constant, "Constant", new ColumnInfo[] { + new ColumnInfo(0, "Type", ColumnSize.Byte), + new ColumnInfo(1, "Parent", ColumnSize.HasConstant), + new ColumnInfo(2, "Value", ColumnSize.Blob), + }); + tableInfos[(int)Table.CustomAttribute] = new TableInfo(Table.CustomAttribute, "CustomAttribute", new ColumnInfo[] { + new ColumnInfo(0, "Parent", ColumnSize.HasCustomAttribute), + new ColumnInfo(1, "Type", ColumnSize.CustomAttributeType), + new ColumnInfo(2, "Value", ColumnSize.Blob), + }); + tableInfos[(int)Table.FieldMarshal] = new TableInfo(Table.FieldMarshal, "FieldMarshal", new ColumnInfo[] { + new ColumnInfo(0, "Parent", ColumnSize.HasFieldMarshal), + new ColumnInfo(1, "NativeType", ColumnSize.Blob), + }); + tableInfos[(int)Table.DeclSecurity] = new TableInfo(Table.DeclSecurity, "DeclSecurity", new ColumnInfo[] { + new ColumnInfo(0, "Action", ColumnSize.Int16), + new ColumnInfo(1, "Parent", ColumnSize.HasDeclSecurity), + new ColumnInfo(2, "PermissionSet", ColumnSize.Blob), + }); + tableInfos[(int)Table.ClassLayout] = new TableInfo(Table.ClassLayout, "ClassLayout", new ColumnInfo[] { + new ColumnInfo(0, "PackingSize", ColumnSize.UInt16), + new ColumnInfo(1, "ClassSize", ColumnSize.UInt32), + new ColumnInfo(2, "Parent", ColumnSize.TypeDef), + }); + tableInfos[(int)Table.FieldLayout] = new TableInfo(Table.FieldLayout, "FieldLayout", new ColumnInfo[] { + new ColumnInfo(0, "OffSet", ColumnSize.UInt32), + new ColumnInfo(1, "Field", ColumnSize.Field), + }); + tableInfos[(int)Table.StandAloneSig] = new TableInfo(Table.StandAloneSig, "StandAloneSig", new ColumnInfo[] { + new ColumnInfo(0, "Signature", ColumnSize.Blob), + }); + tableInfos[(int)Table.EventMap] = new TableInfo(Table.EventMap, "EventMap", new ColumnInfo[] { + new ColumnInfo(0, "Parent", ColumnSize.TypeDef), + new ColumnInfo(1, "EventList", ColumnSize.Event), + }); + tableInfos[(int)Table.EventPtr] = new TableInfo(Table.EventPtr, "EventPtr", new ColumnInfo[] { + new ColumnInfo(0, "Event", ColumnSize.Event), + }); + tableInfos[(int)Table.Event] = new TableInfo(Table.Event, "Event", new ColumnInfo[] { + new ColumnInfo(0, "EventFlags", ColumnSize.UInt16), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "EventType", ColumnSize.TypeDefOrRef), + }); + tableInfos[(int)Table.PropertyMap] = new TableInfo(Table.PropertyMap, "PropertyMap", new ColumnInfo[] { + new ColumnInfo(0, "Parent", ColumnSize.TypeDef), + new ColumnInfo(1, "PropertyList", ColumnSize.Property), + }); + tableInfos[(int)Table.PropertyPtr] = new TableInfo(Table.PropertyPtr, "PropertyPtr", new ColumnInfo[] { + new ColumnInfo(0, "Property", ColumnSize.Property), + }); + tableInfos[(int)Table.Property] = new TableInfo(Table.Property, "Property", new ColumnInfo[] { + new ColumnInfo(0, "PropFlags", ColumnSize.UInt16), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "Type", ColumnSize.Blob), + }); + tableInfos[(int)Table.MethodSemantics] = new TableInfo(Table.MethodSemantics, "MethodSemantics", new ColumnInfo[] { + new ColumnInfo(0, "Semantic", ColumnSize.UInt16), + new ColumnInfo(1, "Method", ColumnSize.Method), + new ColumnInfo(2, "Association", ColumnSize.HasSemantic), + }); + tableInfos[(int)Table.MethodImpl] = new TableInfo(Table.MethodImpl, "MethodImpl", new ColumnInfo[] { + new ColumnInfo(0, "Class", ColumnSize.TypeDef), + new ColumnInfo(1, "MethodBody", ColumnSize.MethodDefOrRef), + new ColumnInfo(2, "MethodDeclaration", ColumnSize.MethodDefOrRef), + }); + tableInfos[(int)Table.ModuleRef] = new TableInfo(Table.ModuleRef, "ModuleRef", new ColumnInfo[] { + new ColumnInfo(0, "Name", ColumnSize.Strings), + }); + tableInfos[(int)Table.TypeSpec] = new TableInfo(Table.TypeSpec, "TypeSpec", new ColumnInfo[] { + new ColumnInfo(0, "Signature", ColumnSize.Blob), + }); + tableInfos[(int)Table.ImplMap] = new TableInfo(Table.ImplMap, "ImplMap", new ColumnInfo[] { + new ColumnInfo(0, "MappingFlags", ColumnSize.UInt16), + new ColumnInfo(1, "MemberForwarded", ColumnSize.MemberForwarded), + new ColumnInfo(2, "ImportName", ColumnSize.Strings), + new ColumnInfo(3, "ImportScope", ColumnSize.ModuleRef), + }); + tableInfos[(int)Table.FieldRVA] = new TableInfo(Table.FieldRVA, "FieldRVA", new ColumnInfo[] { + new ColumnInfo(0, "RVA", ColumnSize.UInt32), + new ColumnInfo(1, "Field", ColumnSize.Field), + }); + tableInfos[(int)Table.ENCLog] = new TableInfo(Table.ENCLog, "ENCLog", new ColumnInfo[] { + new ColumnInfo(0, "Token", ColumnSize.UInt32), + new ColumnInfo(1, "FuncCode", ColumnSize.UInt32), + }); + tableInfos[(int)Table.ENCMap] = new TableInfo(Table.ENCMap, "ENCMap", new ColumnInfo[] { + new ColumnInfo(0, "Token", ColumnSize.UInt32), + }); + tableInfos[(int)Table.Assembly] = new TableInfo(Table.Assembly, "Assembly", new ColumnInfo[] { + new ColumnInfo(0, "HashAlgId", ColumnSize.UInt32), + new ColumnInfo(1, "MajorVersion", ColumnSize.UInt16), + new ColumnInfo(2, "MinorVersion", ColumnSize.UInt16), + new ColumnInfo(3, "BuildNumber", ColumnSize.UInt16), + new ColumnInfo(4, "RevisionNumber", ColumnSize.UInt16), + new ColumnInfo(5, "Flags", ColumnSize.UInt32), + new ColumnInfo(6, "PublicKey", ColumnSize.Blob), + new ColumnInfo(7, "Name", ColumnSize.Strings), + new ColumnInfo(8, "Locale", ColumnSize.Strings), + }); + tableInfos[(int)Table.AssemblyProcessor] = new TableInfo(Table.AssemblyProcessor, "AssemblyProcessor", new ColumnInfo[] { + new ColumnInfo(0, "Processor", ColumnSize.UInt32), + }); + tableInfos[(int)Table.AssemblyOS] = new TableInfo(Table.AssemblyOS, "AssemblyOS", new ColumnInfo[] { + new ColumnInfo(0, "OSPlatformId", ColumnSize.UInt32), + new ColumnInfo(1, "OSMajorVersion", ColumnSize.UInt32), + new ColumnInfo(2, "OSMinorVersion", ColumnSize.UInt32), + }); + tableInfos[(int)Table.AssemblyRef] = new TableInfo(Table.AssemblyRef, "AssemblyRef", new ColumnInfo[] { + new ColumnInfo(0, "MajorVersion", ColumnSize.UInt16), + new ColumnInfo(1, "MinorVersion", ColumnSize.UInt16), + new ColumnInfo(2, "BuildNumber", ColumnSize.UInt16), + new ColumnInfo(3, "RevisionNumber", ColumnSize.UInt16), + new ColumnInfo(4, "Flags", ColumnSize.UInt32), + new ColumnInfo(5, "PublicKeyOrToken", ColumnSize.Blob), + new ColumnInfo(6, "Name", ColumnSize.Strings), + new ColumnInfo(7, "Locale", ColumnSize.Strings), + new ColumnInfo(8, "HashValue", ColumnSize.Blob), + }); + tableInfos[(int)Table.AssemblyRefProcessor] = new TableInfo(Table.AssemblyRefProcessor, "AssemblyRefProcessor", new ColumnInfo[] { + new ColumnInfo(0, "Processor", ColumnSize.UInt32), + new ColumnInfo(1, "AssemblyRef", ColumnSize.AssemblyRef), + }); + tableInfos[(int)Table.AssemblyRefOS] = new TableInfo(Table.AssemblyRefOS, "AssemblyRefOS", new ColumnInfo[] { + new ColumnInfo(0, "OSPlatformId", ColumnSize.UInt32), + new ColumnInfo(1, "OSMajorVersion", ColumnSize.UInt32), + new ColumnInfo(2, "OSMinorVersion", ColumnSize.UInt32), + new ColumnInfo(3, "AssemblyRef", ColumnSize.AssemblyRef), + }); + tableInfos[(int)Table.File] = new TableInfo(Table.File, "File", new ColumnInfo[] { + new ColumnInfo(0, "Flags", ColumnSize.UInt32), + new ColumnInfo(1, "Name", ColumnSize.Strings), + new ColumnInfo(2, "HashValue", ColumnSize.Blob), + }); + tableInfos[(int)Table.ExportedType] = new TableInfo(Table.ExportedType, "ExportedType", new ColumnInfo[] { + new ColumnInfo(0, "Flags", ColumnSize.UInt32), + new ColumnInfo(1, "TypeDefId", ColumnSize.UInt32), + new ColumnInfo(2, "TypeName", ColumnSize.Strings), + new ColumnInfo(3, "TypeNamespace", ColumnSize.Strings), + new ColumnInfo(4, "Implementation", ColumnSize.Implementation), + }); + tableInfos[(int)Table.ManifestResource] = new TableInfo(Table.ManifestResource, "ManifestResource", new ColumnInfo[] { + new ColumnInfo(0, "Offset", ColumnSize.UInt32), + new ColumnInfo(1, "Flags", ColumnSize.UInt32), + new ColumnInfo(2, "Name", ColumnSize.Strings), + new ColumnInfo(3, "Implementation", ColumnSize.Implementation), + }); + tableInfos[(int)Table.NestedClass] = new TableInfo(Table.NestedClass, "NestedClass", new ColumnInfo[] { + new ColumnInfo(0, "NestedClass", ColumnSize.TypeDef), + new ColumnInfo(1, "EnclosingClass", ColumnSize.TypeDef), + }); + if (majorVersion == 1 && minorVersion == 1) { + tableInfos[(int)Table.GenericParam] = new TableInfo(Table.GenericParam, "GenericParam", new ColumnInfo[] { + new ColumnInfo(0, "Number", ColumnSize.UInt16), + new ColumnInfo(1, "Flags", ColumnSize.UInt16), + new ColumnInfo(2, "Owner", ColumnSize.TypeOrMethodDef), + new ColumnInfo(3, "Name", ColumnSize.Strings), + new ColumnInfo(4, "Kind", ColumnSize.TypeDefOrRef), + }); + } + else { + tableInfos[(int)Table.GenericParam] = new TableInfo(Table.GenericParam, "GenericParam", new ColumnInfo[] { + new ColumnInfo(0, "Number", ColumnSize.UInt16), + new ColumnInfo(1, "Flags", ColumnSize.UInt16), + new ColumnInfo(2, "Owner", ColumnSize.TypeOrMethodDef), + new ColumnInfo(3, "Name", ColumnSize.Strings), + }); + } + tableInfos[(int)Table.MethodSpec] = new TableInfo(Table.MethodSpec, "MethodSpec", new ColumnInfo[] { + new ColumnInfo(0, "Method", ColumnSize.MethodDefOrRef), + new ColumnInfo(1, "Instantiation", ColumnSize.Blob), + }); + tableInfos[(int)Table.GenericParamConstraint] = new TableInfo(Table.GenericParamConstraint, "GenericParamConstraint", new ColumnInfo[] { + new ColumnInfo(0, "Owner", ColumnSize.GenericParam), + new ColumnInfo(1, "Constraint", ColumnSize.TypeDefOrRef), + }); + return this.tableInfos = tableInfos; + } + } +} diff --git a/dnlib/DotNet/MD/ENCMetaData.cs b/dnlib/DotNet/MD/ENCMetaData.cs new file mode 100644 index 0000000..465e550 --- /dev/null +++ b/dnlib/DotNet/MD/ENCMetaData.cs @@ -0,0 +1,436 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.IO; +using dnlib.PE; +using dnlib.Threading; + +namespace dnlib.DotNet.MD { + /// + /// Used when a #- stream is present in the metadata + /// + sealed class ENCMetaData : MetaData { + static readonly UTF8String DeletedName = "_Deleted"; + bool hasMethodPtr, hasFieldPtr, hasParamPtr, hasEventPtr, hasPropertyPtr; + bool hasDeletedRows; + readonly Dictionary sortedTables = new Dictionary(); +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public override bool IsCompressed { + get { return false; } + } + + /// + public ENCMetaData(IPEImage peImage, ImageCor20Header cor20Header, MetaDataHeader mdHeader) + : base(peImage, cor20Header, mdHeader) { + } + + /// + protected override void InitializeInternal() { + IImageStream imageStream = null; + DotNetStream dns = null; + try { + var mdRva = cor20Header.MetaData.VirtualAddress; + foreach (var sh in mdHeader.StreamHeaders) { + var rva = mdRva + sh.Offset; + imageStream = peImage.CreateStream(rva, sh.StreamSize); + switch (sh.Name.ToUpperInvariant()) { + case "#STRINGS": + if (stringsStream == null) { + stringsStream = new StringsStream(imageStream, sh); + imageStream = null; + allStreams.Add(stringsStream); + continue; + } + break; + + case "#US": + if (usStream == null) { + usStream = new USStream(imageStream, sh); + imageStream = null; + allStreams.Add(usStream); + continue; + } + break; + + case "#BLOB": + if (blobStream == null) { + blobStream = new BlobStream(imageStream, sh); + imageStream = null; + allStreams.Add(blobStream); + continue; + } + break; + + case "#GUID": + if (guidStream == null) { + guidStream = new GuidStream(imageStream, sh); + imageStream = null; + allStreams.Add(guidStream); + continue; + } + break; + + case "#~": // Only if #Schema is used + case "#-": + if (tablesStream == null) { + tablesStream = new TablesStream(imageStream, sh); + imageStream = null; + allStreams.Add(tablesStream); + continue; + } + break; + } + dns = new DotNetStream(imageStream, sh); + imageStream = null; + allStreams.Add(dns); + dns = null; + } + } + finally { + if (imageStream != null) + imageStream.Dispose(); + if (dns != null) + dns.Dispose(); + } + + if (tablesStream == null) + throw new BadImageFormatException("Missing MD stream"); + tablesStream.Initialize(peImage); + + // The pointer tables are used iff row count != 0 + hasFieldPtr = !tablesStream.FieldPtrTable.IsEmpty; + hasMethodPtr = !tablesStream.MethodPtrTable.IsEmpty; + hasParamPtr = !tablesStream.ParamPtrTable.IsEmpty; + hasEventPtr = !tablesStream.EventPtrTable.IsEmpty; + hasPropertyPtr = !tablesStream.PropertyPtrTable.IsEmpty; + hasDeletedRows = tablesStream.HasDelete; + } + + /// + public override RidList GetTypeDefRidList() { + if (!hasDeletedRows) + return base.GetTypeDefRidList(); + uint rows = tablesStream.TypeDefTable.Rows; + var list = new RandomRidList((int)rows); + for (uint rid = 1; rid <= rows; rid++) { + var row = tablesStream.ReadTypeDefRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + + // RTSpecialName is ignored by the CLR. It's only the name that indicates + // whether it's been deleted. + if (stringsStream.ReadNoNull(row.Name).StartsWith(DeletedName)) + continue; // ignore this deleted row + list.Add(rid); + } + return list; + } + + /// + public override RidList GetExportedTypeRidList() { + if (!hasDeletedRows) + return base.GetExportedTypeRidList(); + uint rows = tablesStream.ExportedTypeTable.Rows; + var list = new RandomRidList((int)rows); + for (uint rid = 1; rid <= rows; rid++) { + var row = tablesStream.ReadExportedTypeRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + + // RTSpecialName is ignored by the CLR. It's only the name that indicates + // whether it's been deleted. + if (stringsStream.ReadNoNull(row.TypeName).StartsWith(DeletedName)) + continue; // ignore this deleted row + list.Add(rid); + } + return list; + } + + /// + /// Converts a logical Field rid to a physical Field rid + /// + /// A valid rid + /// Converted rid or any invalid rid value if is invalid + uint ToFieldRid(uint listRid) { + if (!hasFieldPtr) + return listRid; + uint listValue; + return tablesStream.ReadColumn(tablesStream.FieldPtrTable, listRid, 0, out listValue) ? listValue : 0; + } + + /// + /// Converts a logical Method rid to a physical Method rid + /// + /// A valid rid + /// Converted rid or any invalid rid value if is invalid + uint ToMethodRid(uint listRid) { + if (!hasMethodPtr) + return listRid; + uint listValue; + return tablesStream.ReadColumn(tablesStream.MethodPtrTable, listRid, 0, out listValue) ? listValue : 0; + } + + /// + /// Converts a logical Param rid to a physical Param rid + /// + /// A valid rid + /// Converted rid or any invalid rid value if is invalid + uint ToParamRid(uint listRid) { + if (!hasParamPtr) + return listRid; + uint listValue; + return tablesStream.ReadColumn(tablesStream.ParamPtrTable, listRid, 0, out listValue) ? listValue : 0; + } + + /// + /// Converts a logical Event rid to a physical Event rid + /// + /// A valid rid + /// Converted rid or any invalid rid value if is invalid + uint ToEventRid(uint listRid) { + if (!hasEventPtr) + return listRid; + uint listValue; + return tablesStream.ReadColumn(tablesStream.EventPtrTable, listRid, 0, out listValue) ? listValue : 0; + } + + /// + /// Converts a logical Property rid to a physical Property rid + /// + /// A valid rid + /// Converted rid or any invalid rid value if is invalid + uint ToPropertyRid(uint listRid) { + if (!hasPropertyPtr) + return listRid; + uint listValue; + return tablesStream.ReadColumn(tablesStream.PropertyPtrTable, listRid, 0, out listValue) ? listValue : 0; + } + + /// + public override RidList GetFieldRidList(uint typeDefRid) { + var list = GetRidList(tablesStream.TypeDefTable, typeDefRid, 4, tablesStream.FieldTable); + if (list.Length == 0 || (!hasFieldPtr && !hasDeletedRows)) + return list; + + var destTable = tablesStream.FieldTable; + var newList = new RandomRidList((int)list.Length); + for (uint i = 0; i < list.Length; i++) { + var rid = ToFieldRid(list[i]); + if (destTable.IsInvalidRID(rid)) + continue; + if (hasDeletedRows) { + // It's a deleted row if RTSpecialName is set and name is "_Deleted" + var row = tablesStream.ReadFieldRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + if ((row.Flags & (uint)FieldAttributes.RTSpecialName) != 0) { + if (stringsStream.ReadNoNull(row.Name).StartsWith(DeletedName)) + continue; // ignore this deleted row + } + } + // It's a valid non-deleted rid so add it + newList.Add(rid); + } + return newList; + } + + /// + public override RidList GetMethodRidList(uint typeDefRid) { + var list = GetRidList(tablesStream.TypeDefTable, typeDefRid, 5, tablesStream.MethodTable); + if (list.Length == 0 || (!hasMethodPtr && !hasDeletedRows)) + return list; + + var destTable = tablesStream.MethodTable; + var newList = new RandomRidList((int)list.Length); + for (uint i = 0; i < list.Length; i++) { + var rid = ToMethodRid(list[i]); + if (destTable.IsInvalidRID(rid)) + continue; + if (hasDeletedRows) { + // It's a deleted row if RTSpecialName is set and name is "_Deleted" + var row = tablesStream.ReadMethodRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + if ((row.Flags & (uint)MethodAttributes.RTSpecialName) != 0) { + if (stringsStream.ReadNoNull(row.Name).StartsWith(DeletedName)) + continue; // ignore this deleted row + } + } + // It's a valid non-deleted rid so add it + newList.Add(rid); + } + return newList; + } + + /// + public override RidList GetParamRidList(uint methodRid) { + var list = GetRidList(tablesStream.MethodTable, methodRid, 5, tablesStream.ParamTable); + if (list.Length == 0 || !hasParamPtr) + return list; + + var destTable = tablesStream.ParamTable; + var newList = new RandomRidList((int)list.Length); + for (uint i = 0; i < list.Length; i++) { + var rid = ToParamRid(list[i]); + if (destTable.IsInvalidRID(rid)) + continue; + newList.Add(rid); + } + return newList; + } + + /// + public override RidList GetEventRidList(uint eventMapRid) { + var list = GetRidList(tablesStream.EventMapTable, eventMapRid, 1, tablesStream.EventTable); + if (list.Length == 0 || (!hasEventPtr && !hasDeletedRows)) + return list; + + var destTable = tablesStream.EventTable; + var newList = new RandomRidList((int)list.Length); + for (uint i = 0; i < list.Length; i++) { + var rid = ToEventRid(list[i]); + if (destTable.IsInvalidRID(rid)) + continue; + if (hasDeletedRows) { + // It's a deleted row if RTSpecialName is set and name is "_Deleted" + var row = tablesStream.ReadEventRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + if ((row.EventFlags & (uint)EventAttributes.RTSpecialName) != 0) { + if (stringsStream.ReadNoNull(row.Name).StartsWith(DeletedName)) + continue; // ignore this deleted row + } + } + // It's a valid non-deleted rid so add it + newList.Add(rid); + } + return newList; + } + + /// + public override RidList GetPropertyRidList(uint propertyMapRid) { + var list = GetRidList(tablesStream.PropertyMapTable, propertyMapRid, 1, tablesStream.PropertyTable); + if (list.Length == 0 || (!hasPropertyPtr && !hasDeletedRows)) + return list; + + var destTable = tablesStream.PropertyTable; + var newList = new RandomRidList((int)list.Length); + for (uint i = 0; i < list.Length; i++) { + var rid = ToPropertyRid(list[i]); + if (destTable.IsInvalidRID(rid)) + continue; + if (hasDeletedRows) { + // It's a deleted row if RTSpecialName is set and name is "_Deleted" + var row = tablesStream.ReadPropertyRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + if ((row.PropFlags & (uint)PropertyAttributes.RTSpecialName) != 0) { + if (stringsStream.ReadNoNull(row.Name).StartsWith(DeletedName)) + continue; // ignore this deleted row + } + } + // It's a valid non-deleted rid so add it + newList.Add(rid); + } + return newList; + } + + /// + /// Gets a rid list (eg. field list) + /// + /// Source table, eg. TypeDef + /// Row ID in + /// Column index in , eg. 4 for TypeDef.FieldList + /// Destination table, eg. Field + /// A new instance + RidList GetRidList(MDTable tableSource, uint tableSourceRid, int colIndex, MDTable tableDest) { + var column = tableSource.TableInfo.Columns[colIndex]; + uint startRid, nextListRid; + bool hasNext; +#if THREAD_SAFE + tablesStream.theLock.EnterWriteLock(); try { +#endif + if (!tablesStream.ReadColumn_NoLock(tableSource, tableSourceRid, column, out startRid)) + return RidList.Empty; + hasNext = tablesStream.ReadColumn_NoLock(tableSource, tableSourceRid + 1, column, out nextListRid); +#if THREAD_SAFE + } finally { tablesStream.theLock.ExitWriteLock(); } +#endif + uint lastRid = tableDest.Rows + 1; + if (startRid == 0 || startRid >= lastRid) + return RidList.Empty; + uint endRid = hasNext && nextListRid != 0 ? nextListRid : lastRid; + if (endRid < startRid) + endRid = startRid; + if (endRid > lastRid) + endRid = lastRid; + return new ContiguousRidList(startRid, endRid - startRid); + } + + /// + protected override uint BinarySearch_NoLock(MDTable tableSource, int keyColIndex, uint key) { + var keyColumn = tableSource.TableInfo.Columns[keyColIndex]; + uint ridLo = 1, ridHi = tableSource.Rows; + while (ridLo <= ridHi) { + uint rid = (ridLo + ridHi) / 2; + uint key2; + if (!tablesStream.ReadColumn_NoLock(tableSource, rid, keyColumn, out key2)) + break; // Never happens since rid is valid + if (key == key2) + return rid; + if (key2 > key) + ridHi = rid - 1; + else + ridLo = rid + 1; + } + + if (tableSource.Table == Table.GenericParam && !tablesStream.IsSorted(tableSource)) + return LinearSearch_NoLock(tableSource, keyColIndex, key); + + return 0; + } + + /// + /// Linear searches the table (O(n)) for a rid whose key column at index + /// is equal to . + /// + /// Table to search + /// Key column index + /// Key + /// The rid of the found row, or 0 if none found + uint LinearSearch_NoLock(MDTable tableSource, int keyColIndex, uint key) { + if (tableSource == null) + return 0; + var keyColumn = tableSource.TableInfo.Columns[keyColIndex]; + for (uint rid = 1; rid <= tableSource.Rows; rid++) { + uint key2; + if (!tablesStream.ReadColumn_NoLock(tableSource, rid, keyColumn, out key2)) + break; // Never happens since rid is valid + if (key == key2) + return rid; + } + return 0; + } + + /// + protected override RidList FindAllRowsUnsorted(MDTable tableSource, int keyColIndex, uint key) { + if (tablesStream.IsSorted(tableSource)) + return FindAllRows(tableSource, keyColIndex, key); + SortedTable sortedTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (!sortedTables.TryGetValue(tableSource.Table, out sortedTable)) + sortedTables[tableSource.Table] = sortedTable = new SortedTable(tableSource, keyColIndex); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + return sortedTable.FindAllRows(key); + } + } +} diff --git a/dnlib/DotNet/MD/GuidStream.cs b/dnlib/DotNet/MD/GuidStream.cs new file mode 100644 index 0000000..dbbfca0 --- /dev/null +++ b/dnlib/DotNet/MD/GuidStream.cs @@ -0,0 +1,43 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Represents the #GUID stream + /// + public sealed class GuidStream : HeapStream { + /// + public GuidStream() { + } + + /// + public GuidStream(IImageStream imageStream, StreamHeader streamHeader) + : base(imageStream, streamHeader) { + } + + /// + public override bool IsValidIndex(uint index) { + return index == 0 || (index <= 0x10000000 && IsValidOffset((index - 1) * 16, 16)); + } + + /// + /// Read a + /// + /// Index into this stream + /// A or null if is 0 or invalid + public Guid? Read(uint index) { + if (index == 0 || !IsValidIndex(index)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock((index - 1) * 16); + return new Guid(reader.ReadBytes(16)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } +} diff --git a/dnlib/DotNet/MD/HeapType.cs b/dnlib/DotNet/MD/HeapType.cs new file mode 100644 index 0000000..c185d15 --- /dev/null +++ b/dnlib/DotNet/MD/HeapType.cs @@ -0,0 +1,17 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// Heap type. The values are set in stone by MS. Don't change. + /// + public enum HeapType : uint { + /// #Strings heap + Strings = 0, + /// #GUID heap + Guid = 1, + /// #Blob heap + Blob = 2, + /// #US heap + US = 3, + } +} diff --git a/dnlib/DotNet/MD/HotHeapStream.cs b/dnlib/DotNet/MD/HotHeapStream.cs new file mode 100644 index 0000000..2d085da --- /dev/null +++ b/dnlib/DotNet/MD/HotHeapStream.cs @@ -0,0 +1,220 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Runtime.ExceptionServices; +using System.Security; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Stores some/all heap data + /// + abstract class HotHeapStream : IDisposable { + readonly HeapType heapType; + protected readonly IImageStream reader; + protected readonly long baseOffset; + protected bool invalid; + protected long posData; + protected long posIndexes; + protected long posRids; + protected uint numRids; + protected long offsetMask; + + /// + /// Gets the heap type + /// + public HeapType HeapType { + get { return heapType; } + } + + /// + /// Constructor + /// + /// Heap type + /// Data stream + /// Offset in of start of data + protected HotHeapStream(HeapType heapType, IImageStream reader, long baseOffset) { + this.heapType = heapType; + this.reader = reader; + this.baseOffset = baseOffset; + } + + /// + /// Must be called once after creating it so it can initialize + /// + /// Offset mask (0xFFFFFFFF or 0xFFFFFFFFFFFFFFFF) + public abstract void Initialize(long mask); + + /// + /// Returns a stream that can access a blob + /// + /// Offset in the original heap. If it's the #GUID heap, it should + /// be (index - 1) * 16 + /// The reader (owned by us) or null if the data isn't present + public IImageStream GetBlobReader(uint originalHeapOffset) { + long dataOffset; + if (GetBlobOffset(originalHeapOffset, out dataOffset)) { + reader.Position = dataOffset; + return reader; + } + return null; + } + + /// + /// Returns the offset in of some data + /// + /// Original heap offset + /// Updated with offset in of data + /// true if data is present, false if data is not present + protected abstract bool GetBlobOffset(uint originalHeapOffset, out long dataOffset); + + /// + /// Binary searches the rids table for + /// + /// Original heap offset + /// The rids table index or if not found + protected uint BinarySearch(uint originalHeapOffset) { + uint lo = 0, hi = numRids - 1; + while (lo <= hi && hi != uint.MaxValue) { + uint index = (lo + hi) / 2; + uint val = reader.ReadUInt32At(posRids + index * 4); + if (originalHeapOffset == val) + return index; + if (originalHeapOffset > val) + lo = index + 1; + else + hi = index - 1; + } + return uint.MaxValue; + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (disposing) { + if (reader != null) + reader.Dispose(); + } + } + } + + /// + /// Hot heap stream (CLR 2.0) + /// + sealed class HotHeapStreamCLR20 : HotHeapStream { + /// + /// Constructor + /// + /// Heap type + /// Data stream + /// Offset in of start of data + public HotHeapStreamCLR20(HeapType heapType, IImageStream reader, long baseOffset) + : base(heapType, reader, baseOffset) { + } + + /// + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + public override void Initialize(long mask) { + try { + offsetMask = mask; + reader.Position = baseOffset; + posData = (baseOffset - reader.ReadInt32()) & mask; + posIndexes = (baseOffset - (reader.ReadInt32() & ~3)) & mask; + uint ridsOffset = reader.ReadUInt32(); + numRids = ridsOffset / 4; + posRids = (baseOffset - numRids * 4) & mask; + } + // Ignore exceptions. The CLR only reads these values when needed. Assume + // that this was invalid data that the CLR will never read anyway. + catch (AccessViolationException) { + invalid = true; + } + catch (IOException) { + invalid = true; + } + } + + /// + protected override bool GetBlobOffset(uint originalHeapOffset, out long dataOffset) { + if (invalid) { + dataOffset = 0; + return false; + } + uint index = BinarySearch(originalHeapOffset); + if (index == uint.MaxValue) { + dataOffset = 0; + return false; + } + + if (index == 0) + dataOffset = posData; + else + dataOffset = posData + reader.ReadUInt32At((posIndexes + (index - 1) * 4) & offsetMask); + dataOffset &= offsetMask; + return true; + } + } + + /// + /// Hot heap stream (CLR 4.0) + /// + sealed class HotHeapStreamCLR40 : HotHeapStream { + /// + /// Constructor + /// + /// Heap type + /// Data stream + /// Offset in of start of data + public HotHeapStreamCLR40(HeapType heapType, IImageStream reader, long baseOffset) + : base(heapType, reader, baseOffset) { + } + + /// + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + public override void Initialize(long mask) { + try { + offsetMask = mask; + reader.Position = baseOffset; + uint ridsOffset = reader.ReadUInt32(); + numRids = ridsOffset / 4; + posRids = (baseOffset - ridsOffset) & mask; + posIndexes = (baseOffset - reader.ReadInt32()) & mask; + posData = (baseOffset - reader.ReadInt32()) & mask; + } + // Ignore exceptions. The CLR only reads these values when needed. Assume + // that this was invalid data that the CLR will never read anyway. + catch (AccessViolationException) { + invalid = true; + } + catch (IOException) { + invalid = true; + } + } + + /// + protected override bool GetBlobOffset(uint originalHeapOffset, out long dataOffset) { + if (invalid) { + dataOffset = 0; + return false; + } + uint index = BinarySearch(originalHeapOffset); + if (index == uint.MaxValue) { + dataOffset = 0; + return false; + } + + dataOffset = posData + reader.ReadUInt32At((posIndexes + index * 4) & offsetMask); + dataOffset &= offsetMask; + return true; + } + } +} diff --git a/dnlib/DotNet/MD/HotHeapVersion.cs b/dnlib/DotNet/MD/HotHeapVersion.cs new file mode 100644 index 0000000..5bc11a3 --- /dev/null +++ b/dnlib/DotNet/MD/HotHeapVersion.cs @@ -0,0 +1,18 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// Hot heap version + /// + public enum HotHeapVersion { + /// + /// CLR 2.0 (.NET 2.0 - 3.5) + /// + CLR20, + + /// + /// CLR 4.0 (.NET 4.0 - 4.5) + /// + CLR40, + } +} diff --git a/dnlib/DotNet/MD/HotStream.cs b/dnlib/DotNet/MD/HotStream.cs new file mode 100644 index 0000000..9d84cd9 --- /dev/null +++ b/dnlib/DotNet/MD/HotStream.cs @@ -0,0 +1,306 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.ExceptionServices; +using System.Security; +using System.Threading; +using dnlib.IO; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet.MD { + /// + /// Represents the (undocumented) #! stream. The CLR only uses this stream if the + /// normal compressed tables stream (#~) is used. + /// + abstract class HotStream : DotNetStream { + protected readonly IImageStream fullStream; + protected readonly long baseOffset; + protected readonly long endOffset; + protected HotTableStream hotTableStream; + protected ThreadSafe.IList hotHeapStreams; + + /// + /// Gets the or null if there's none + /// + public HotTableStream HotTableStream { + get { + if (hotTableStream == null) { + var newHts = CreateHotTableStream(); + if (Interlocked.CompareExchange(ref hotTableStream, newHts, null) != null) + newHts.Dispose(); + } + return hotTableStream; + } + } + + /// + /// Gets all s + /// + public IList HotHeapStreams { + get { + if (hotHeapStreams == null) { + var newHhs = CreateHotHeapStreams(); + if (Interlocked.CompareExchange(ref hotHeapStreams, newHhs, null) != null) { + foreach (var hhs in newHhs) + hhs.Dispose(); + } + } + return hotHeapStreams; + } + } + + /// + /// Creates a instance + /// + /// Hot heap version + /// Heap stream + /// Stream header info + /// Stream for the full PE file + /// Offset in where the data starts + /// A instance or null if + /// is invalid + public static HotStream Create(HotHeapVersion version, IImageStream imageStream, StreamHeader streamHeader, IImageStream fullStream, FileOffset baseOffset) { + switch (version) { + case HotHeapVersion.CLR20: return new HotStreamCLR20(imageStream, streamHeader, fullStream, baseOffset); + case HotHeapVersion.CLR40: return new HotStreamCLR40(imageStream, streamHeader, fullStream, baseOffset); + default: return null; + } + } + + /// + /// Constructor + /// + /// Heap stream + /// Stream header info + /// Stream for the full PE file + /// Offset in where the data starts + protected HotStream(IImageStream imageStream, StreamHeader streamHeader, IImageStream fullStream, FileOffset baseOffset) + : base(imageStream, streamHeader) { + this.fullStream = fullStream; + this.baseOffset = (long)baseOffset; + this.endOffset = (long)baseOffset + imageStream.Length; + } + + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + HotTableStream CreateHotTableStream() { + try { + return CreateHotTableStreamImpl(); + } + catch (AccessViolationException) { + return null; + } + catch (IOException) { + return null; + } + } + + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + ThreadSafe.IList CreateHotHeapStreams() { + try { + return CreateHotHeapStreams2(); + } + catch (AccessViolationException) { + return null; + } + catch (IOException) { + return null; + } + } + + ThreadSafe.IList CreateHotHeapStreams2() { + var list = ThreadSafeListCreator.Create(); + try { + long dirBaseOffs = GetHotHeapDirectoryBaseOffset(); + for (long offs = dirBaseOffs; offs + 8 <= endOffset - 8; offs += 8) { + fullStream.Position = offs; + HeapType heapType; + long hotHeapOffset; + ReadHotHeapDirectory(fullStream, dirBaseOffs, out heapType, out hotHeapOffset); + + IImageStream dataStream = null; + HotHeapStream hotHeapStream = null; + try { + dataStream = fullStream.Clone(); + list.Add(hotHeapStream = CreateHotHeapStream(heapType, dataStream, hotHeapOffset)); + dataStream = null; + hotHeapStream = null; + } + catch { + if (hotHeapStream != null) + hotHeapStream.Dispose(); + if (dataStream != null) + dataStream.Dispose(); + throw; + } + } + } + catch { + foreach (var h in list) + h.Dispose(); + throw; + } + return list; + } + + /// + /// Reads a hot heap directory + /// + /// Reader stream + /// Pool directory base offset + /// Updated with heap type + /// Updated with heap offset + protected abstract void ReadHotHeapDirectory(IImageStream reader, long dirBaseOffs, out HeapType heapType, out long hotHeapOffs); + + /// + /// Creates a + /// + /// Heap type + /// Data stream + /// Offset in of start of data + /// A new instance + protected abstract HotHeapStream CreateHotHeapStream(HeapType heapType, IImageStream stream, long baseOffset); + + /// + /// Creates the + /// + /// A new instance or null if it doesn't exist + protected abstract HotTableStream CreateHotTableStreamImpl(); + + /// + /// Gets the offset of the hot table directory in + /// + protected long GetHotTableBaseOffset() { + // All bits in this dword are used + return endOffset - 8 - HotTableStream.HOT_HEAP_DIR_SIZE - fullStream.ReadUInt32At(endOffset - 8); + } + + /// + /// Gets the offset of the hot pool directory in + /// + protected abstract long GetHotHeapDirectoryBaseOffset(); + + /// + protected override void Dispose(bool disposing) { + if (disposing) { + IDisposable id = fullStream; + if (id != null) + id.Dispose(); + id = hotTableStream; + if (id != null) + id.Dispose(); + var hhs = hotHeapStreams; + if (hhs != null) { + foreach (var hs in hhs) { + if (hs != null) + hs.Dispose(); + } + } + } + base.Dispose(disposing); + } + } + + /// + /// Represents the #! stream. Should be used if the module uses CLR 2.0 (.NET 2.0 - 3.5) + /// + sealed class HotStreamCLR20 : HotStream { + /// + /// Constructor + /// + /// Heap stream + /// Stream header info + /// Stream for the full PE file + /// Offset in where the data starts + public HotStreamCLR20(IImageStream imageStream, StreamHeader streamHeader, IImageStream fullStream, FileOffset baseOffset) + : base(imageStream, streamHeader, fullStream, baseOffset) { + } + + /// + protected override HotTableStream CreateHotTableStreamImpl() { + IImageStream stream = null; + try { + stream = fullStream.Clone(); + return new HotTableStreamCLR20(stream, GetHotTableBaseOffset()); + } + catch { + if (stream != null) + stream.Dispose(); + throw; + } + } + + /// + protected override long GetHotHeapDirectoryBaseOffset() { + // Lower 2 bits are ignored + return endOffset - 8 - (fullStream.ReadUInt32At(endOffset - 8 + 4) & ~3); + } + + /// + protected override void ReadHotHeapDirectory(IImageStream reader, long dirBaseOffs, out HeapType heapType, out long hotHeapOffs) { + heapType = (HeapType)reader.ReadUInt32(); + // Lower 2 bits are ignored + hotHeapOffs = dirBaseOffs - (reader.ReadUInt32() & ~3); + } + + /// + protected override HotHeapStream CreateHotHeapStream(HeapType heapType, IImageStream stream, long baseOffset) { + return new HotHeapStreamCLR20(heapType, stream, baseOffset); + } + } + + /// + /// Represents the #! stream. Should be used if the module uses CLR 4.0 (.NET 4.0 - 4.5) + /// + sealed class HotStreamCLR40 : HotStream { + /// + /// Constructor + /// + /// Heap stream + /// Stream header info + /// Stream for the full PE file + /// Offset in where the data starts + public HotStreamCLR40(IImageStream imageStream, StreamHeader streamHeader, IImageStream fullStream, FileOffset baseOffset) + : base(imageStream, streamHeader, fullStream, baseOffset) { + } + + /// + protected override HotTableStream CreateHotTableStreamImpl() { + IImageStream stream = null; + try { + stream = fullStream.Clone(); + return new HotTableStreamCLR40(stream, GetHotTableBaseOffset()); + } + catch { + if (stream != null) + stream.Dispose(); + throw; + } + } + + /// + protected override long GetHotHeapDirectoryBaseOffset() { + // All bits are used + return endOffset - 8 - fullStream.ReadUInt32At(endOffset - 8 + 4); + } + + /// + protected override void ReadHotHeapDirectory(IImageStream reader, long dirBaseOffs, out HeapType heapType, out long hotHeapOffs) { + heapType = (HeapType)reader.ReadUInt32(); + // All bits are used + hotHeapOffs = dirBaseOffs - reader.ReadUInt32(); + } + + /// + protected override HotHeapStream CreateHotHeapStream(HeapType heapType, IImageStream stream, long baseOffset) { + return new HotHeapStreamCLR40(heapType, stream, baseOffset); + } + } +} diff --git a/dnlib/DotNet/MD/HotTableStream.cs b/dnlib/DotNet/MD/HotTableStream.cs new file mode 100644 index 0000000..a49d738 --- /dev/null +++ b/dnlib/DotNet/MD/HotTableStream.cs @@ -0,0 +1,276 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Runtime.ExceptionServices; +using System.Security; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Stores some/all rows of a table + /// + abstract class HotTableStream : IDisposable { + protected const int MAX_TABLES = (int)Table.GenericParamConstraint + 1; + internal const uint HOT_HEAP_DIR_SIZE = 4 + MAX_TABLES * 4; + + protected readonly IImageStream fullStream; + protected readonly long baseOffset; + + /// + /// Constructor + /// + /// Data stream + /// Offset in of start of the + /// hot table directory header + protected HotTableStream(IImageStream fullStream, long baseOffset) { + this.fullStream = fullStream; + this.baseOffset = baseOffset; + } + + /// + /// Must be called once after creating it so it can initialize + /// + /// Offset mask (0xFFFFFFFF or 0xFFFFFFFFFFFFFFFF) + public abstract void Initialize(long mask); + + /// + /// Returns a reader positioned at a table row + /// + /// Table + /// A valid row ID (i.e., >= 1 and <= number of rows) + /// The reader (owned by us) or null if the row isn't present + public IImageStream GetTableReader(MDTable table, uint rid) { + long offset; + if (GetRowOffset(table, rid, out offset)) { + fullStream.Position = offset; + return fullStream; + } + + return null; + } + + /// + /// Returns the offset (in ) of a row + /// + /// Table + /// A valid row ID (i.e., >= 1 and <= number of rows) + /// Updated with the offset + /// true if the row exists, false if the row doesn't exist + protected abstract bool GetRowOffset(MDTable table, uint rid, out long offset); + + /// + /// Add offsets + /// + /// Mask + /// Base offset + /// Displacement + /// Returns 0 if is 0, else returns + /// the sum of and masked + /// by + protected static long AddOffsets(long mask, long baseOffset, long displ) { + if (displ == 0) + return 0; + return (baseOffset + displ) & mask; + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (disposing) { + var fs = fullStream; + if (fs != null) + fs.Dispose(); + } + } + } + + /// + /// Hot table stream (CLR 2.0) + /// + sealed class HotTableStreamCLR20 : HotTableStream { + TableHeader[] tableHeaders; + + class TableHeader { + public uint numRows; + public long posTable1; + public long posTable2; + public long posData; + public int shift; + public uint mask; + } + + /// + /// Constructor + /// + /// Data stream + /// Offset in of start of the + /// hot table directory header + public HotTableStreamCLR20(IImageStream fullStream, long baseOffset) + : base(fullStream, baseOffset) { + } + + /// + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + public override void Initialize(long mask) { + tableHeaders = new TableHeader[MAX_TABLES]; + for (int i = 0; i < tableHeaders.Length; i++) { + fullStream.Position = baseOffset + 4 + i * 4; + int headerOffs = fullStream.ReadInt32(); + if (headerOffs == 0) + continue; + var headerBaseOffs = (baseOffset + headerOffs) & mask; + fullStream.Position = headerBaseOffs; + try { + var header = new TableHeader { + numRows = fullStream.ReadUInt32(), + posTable1 = AddOffsets(mask, headerBaseOffs, fullStream.ReadInt32()), + posTable2 = (headerBaseOffs + fullStream.ReadInt32()) & mask, + posData = (headerBaseOffs + fullStream.ReadInt32()) & mask, + shift = fullStream.ReadUInt16(), + }; + header.mask = (1U << header.shift) - 1; + tableHeaders[i] = header; + } + // Ignore exceptions. The CLR only reads these values when needed. Assume + // that this was invalid data that the CLR will never read anyway. + catch (AccessViolationException) { + } + catch (IOException) { + } + } + } + + /// + protected override bool GetRowOffset(MDTable table, uint rid, out long offset) { + offset = 0; + if ((uint)table.Table >= (uint)tableHeaders.Length) + return false; + var header = tableHeaders[(int)table.Table]; + if (header == null) + return false; + + // Check whether the whole table is in memory + if (header.posTable1 == 0) { + offset = header.posData + (rid - 1) * table.RowSize; + return true; + } + + fullStream.Position = header.posTable1 + (rid & header.mask) * 2; + int index = fullStream.ReadUInt16(); + int stop = fullStream.ReadUInt16(); + fullStream.Position = header.posTable2 + index; + byte highBits = (byte)(rid >> header.shift); + while (index < stop) { + if (fullStream.ReadByte() == highBits) { + offset = header.posData + index * table.RowSize; + return true; + } + index++; + } + + offset = 0; + return false; + } + } + + /// + /// Hot table stream (CLR 4.0) + /// + sealed class HotTableStreamCLR40 : HotTableStream { + TableHeader[] tableHeaders; + + class TableHeader { + public uint numRows; + public long posTable1; + public long posTable2; + public long posIndexes; + public long posData; + public int shift; + public uint mask; + } + + /// + /// Constructor + /// + /// Data stream + /// Offset in of start of the + /// hot table directory header + public HotTableStreamCLR40(IImageStream fullStream, long baseOffset) + : base(fullStream, baseOffset) { + } + + /// + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + public override void Initialize(long mask) { + tableHeaders = new TableHeader[MAX_TABLES]; + for (int i = 0; i < tableHeaders.Length; i++) { + fullStream.Position = baseOffset + 4 + i * 4; + int headerOffs = fullStream.ReadInt32(); + if (headerOffs == 0) + continue; + var headerBaseOffs = (baseOffset + headerOffs) & mask; + fullStream.Position = headerBaseOffs; + try { + var header = new TableHeader { + numRows = fullStream.ReadUInt32(), + posTable1 = AddOffsets(mask, headerBaseOffs, fullStream.ReadInt32()), + posTable2 = (headerBaseOffs + fullStream.ReadInt32()) & mask, + posIndexes = (headerBaseOffs + fullStream.ReadInt32()) & mask, + posData = (headerBaseOffs + fullStream.ReadInt32()) & mask, + shift = fullStream.ReadUInt16(), + }; + header.mask = (1U << header.shift) - 1; + tableHeaders[i] = header; + } + // Ignore exceptions. The CLR only reads these values when needed. Assume + // that this was invalid data that the CLR will never read anyway. + catch (AccessViolationException) { + } + catch (IOException) { + } + } + } + + /// + protected override bool GetRowOffset(MDTable table, uint rid, out long offset) { + offset = 0; + if ((uint)table.Table >= (uint)tableHeaders.Length) + return false; + var header = tableHeaders[(int)table.Table]; + if (header == null) + return false; + + // Check whether the whole table is in memory + if (header.posTable1 == 0) { + offset = header.posData + (rid - 1) * table.RowSize; + return true; + } + + fullStream.Position = header.posTable1 + (rid & header.mask) * 2; + int index = fullStream.ReadUInt16(); + int stop = fullStream.ReadUInt16(); + fullStream.Position = header.posTable2 + index; + byte highBits = (byte)(rid >> header.shift); + while (index < stop) { + if (fullStream.ReadByte() == highBits) { + index = fullStream.ReadUInt16At(header.posIndexes + index * 2); + offset = header.posData + index * table.RowSize; + return true; + } + index++; + } + + offset = 0; + return false; + } + } +} diff --git a/dnlib/DotNet/MD/IMetaData.cs b/dnlib/DotNet/MD/IMetaData.cs new file mode 100644 index 0000000..41d0ec6 --- /dev/null +++ b/dnlib/DotNet/MD/IMetaData.cs @@ -0,0 +1,329 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.PE; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet.MD { + /// + /// Interface to access the .NET metadata + /// + public interface IMetaData : IDisposable { + /// + /// true if the compressed (normal) metadata is used, false if the non-compressed + /// (Edit N' Continue) metadata is used. This can be false even if the table stream + /// is #~ but that's very uncommon. + /// + bool IsCompressed { get; } + + /// + /// Gets the .NET header + /// + ImageCor20Header ImageCor20Header { get; } + + /// + /// Gets the major version number found in the MetaData header + /// + ushort MajorVersion { get; } + + /// + /// Gets the minor version number found in the MetaData header + /// + ushort MinorVersion { get; } + + /// + /// Gets the version string found in the MetaData header + /// + string VersionString { get; } + + /// + /// Gets the + /// + IPEImage PEImage { get; } + + /// + /// Gets the metadata header + /// + MetaDataHeader MetaDataHeader { get; } + + /// + /// Returns the #Strings stream or a default empty one if it's not present + /// + StringsStream StringsStream { get; } + + /// + /// Returns the #US stream or a default empty one if it's not present + /// + USStream USStream { get; } + + /// + /// Returns the #Blob stream or a default empty one if it's not present + /// + BlobStream BlobStream { get; } + + /// + /// Returns the #GUID stream or a default empty one if it's not present + /// + GuidStream GuidStream { get; } + + /// + /// Returns the #~ or #- tables stream + /// + TablesStream TablesStream { get; } + + /// + /// Gets all streams + /// + ThreadSafe.IList AllStreams { get; } + + /// + /// Gets a list of all the valid TypeDef rids. It's usually every rid in the + /// TypeDef table, but could be less if a type has been deleted. + /// + RidList GetTypeDefRidList(); + + /// + /// Gets a list of all the valid ExportedType rids. It's usually every rid in the + /// ExportedType table, but could be less if a type has been deleted. + /// + RidList GetExportedTypeRidList(); + + /// + /// Gets the Field rid list + /// + /// TypeDef rid + /// A new instance + RidList GetFieldRidList(uint typeDefRid); + + /// + /// Gets the Method rid list + /// + /// TypeDef rid + /// A new instance + RidList GetMethodRidList(uint typeDefRid); + + /// + /// Gets the Param rid list + /// + /// Method rid + /// A new instance + RidList GetParamRidList(uint methodRid); + + /// + /// Gets the Event rid list + /// + /// EventMap rid + /// A new instance + RidList GetEventRidList(uint eventMapRid); + + /// + /// Gets the Property rid list + /// + /// PropertyMap rid + /// A new instance + RidList GetPropertyRidList(uint propertyMapRid); + + /// + /// Finds all InterfaceImpl rids owned by + /// + /// Owner TypeDef rid + /// A instance containing the valid InterfaceImpl rids + RidList GetInterfaceImplRidList(uint typeDefRid); + + /// + /// Finds all GenericParam rids owned by in table + /// + /// A TypeOrMethodDef table + /// Owner rid + /// A instance containing the valid GenericParam rids + RidList GetGenericParamRidList(Table table, uint rid); + + /// + /// Finds all GenericParamConstraint rids owned by + /// + /// Owner GenericParam rid + /// A instance containing the valid GenericParamConstraint rids + RidList GetGenericParamConstraintRidList(uint genericParamRid); + + /// + /// Finds all CustomAttribute rids owned by in table + /// + /// A HasCustomAttribute table + /// Owner rid + /// A instance containing the valid CustomAttribute rids + RidList GetCustomAttributeRidList(Table table, uint rid); + + /// + /// Finds all DeclSecurity rids owned by in table + /// + /// A HasDeclSecurity table + /// Owner rid + /// A instance containing the valid DeclSecurity rids + RidList GetDeclSecurityRidList(Table table, uint rid); + + /// + /// Finds all MethodSemantics rids owned by in table + /// + /// A HasSemantic table + /// Owner rid + /// A instance containing the valid MethodSemantics rids + RidList GetMethodSemanticsRidList(Table table, uint rid); + + /// + /// Finds all MethodImpl rids owned by + /// + /// Owner TypeDef rid + /// A instance containing the valid MethodImpl rids + RidList GetMethodImplRidList(uint typeDefRid); + + /// + /// Finds a ClassLayout rid + /// + /// Owner TypeDef rid + /// The ClassLayout rid or 0 if is invalid + /// or if it has no row in the ClassLayout table. + uint GetClassLayoutRid(uint typeDefRid); + + /// + /// Finds a FieldLayout rid + /// + /// Owner Field rid + /// The FieldLayout rid or 0 if is invalid + /// or if it has no row in the FieldLayout table. + uint GetFieldLayoutRid(uint fieldRid); + + /// + /// Finds a FieldMarshal rid + /// + /// A HasFieldMarshal table + /// Owner rid + /// The FieldMarshal rid or 0 if is invalid + /// or if it has no row in the FieldMarshal table. + uint GetFieldMarshalRid(Table table, uint rid); + + /// + /// Finds a FieldRVA rid + /// + /// Owner Field rid + /// The FieldRVA rid or 0 if is invalid + /// or if it has no row in the FieldRVA table. + uint GetFieldRVARid(uint fieldRid); + + /// + /// Finds an ImplMap rid + /// + /// A MemberForwarded table + /// Owner rid + /// The ImplMap rid or 0 if is invalid + /// or if it has no row in the ImplMap table. + uint GetImplMapRid(Table table, uint rid); + + /// + /// Finds a NestedClass rid + /// + /// Owner TypeDef rid + /// The NestedClass rid or 0 if is invalid + /// or if it has no row in the NestedClass table. + uint GetNestedClassRid(uint typeDefRid); + + /// + /// Finds an EventMap rid + /// + /// Owner TypeDef rid + /// The EventMap rid or 0 if is invalid + /// or if it has no row in the EventMap table. + uint GetEventMapRid(uint typeDefRid); + + /// + /// Finds a PropertyMap rid + /// + /// Owner TypeDef rid + /// The PropertyMap rid or 0 if is invalid + /// or if it has no row in the PropertyMap table. + uint GetPropertyMapRid(uint typeDefRid); + + /// + /// Finds a Constant rid + /// + /// A HasConstant table + /// Owner rid + /// The Constant rid or 0 if is invalid + /// or if it has no row in the Constant table. + uint GetConstantRid(Table table, uint rid); + + /// + /// Returns the owner TypeDef rid + /// + /// A Field rid + /// The owner TypeDef rid or 0 if is invalid + /// or if it has no owner. + uint GetOwnerTypeOfField(uint fieldRid); + + /// + /// Returns the owner TypeDef rid + /// + /// A Method rid + /// The owner TypeDef rid or 0 if is invalid + /// or if it has no owner. + uint GetOwnerTypeOfMethod(uint methodRid); + + /// + /// Returns the owner TypeDef rid + /// + /// A Event rid + /// The owner TypeDef rid or 0 if is invalid + /// or if it has no owner. + uint GetOwnerTypeOfEvent(uint eventRid); + + /// + /// Returns the owner TypeDef rid + /// + /// A Property rid + /// The owner TypeDef rid or 0 if is invalid + /// or if it has no owner. + uint GetOwnerTypeOfProperty(uint propertyRid); + + /// + /// Returns the owner TypeOrMethodDef rid + /// + /// A GenericParam rid + /// The owner TypeOrMethodDef rid or 0 if is + /// invalid or if it has no owner. + uint GetOwnerOfGenericParam(uint gpRid); + + /// + /// Returns the owner GenericParam rid + /// + /// A GenericParamConstraint rid + /// The owner GenericParam rid or 0 if is + /// invalid or if it has no owner. + uint GetOwnerOfGenericParamConstraint(uint gpcRid); + + /// + /// Returns the owner Method rid + /// + /// A Param rid + /// The owner Method rid or 0 if is invalid + /// or if it has no owner. + uint GetOwnerOfParam(uint paramRid); + + /// + /// Gets a list of all nested classes owned by + /// + /// A TypeDef rid + /// A new instance + RidList GetNestedClassRidList(uint typeDefRid); + + /// + /// Gets a list of all non-nested classes. A type is a non-nested type if + /// returns an empty list. + /// + /// A new instance + RidList GetNonNestedClassRidList(); + } +} diff --git a/dnlib/DotNet/MD/IRowReaders.cs b/dnlib/DotNet/MD/IRowReaders.cs new file mode 100644 index 0000000..474e892 --- /dev/null +++ b/dnlib/DotNet/MD/IRowReaders.cs @@ -0,0 +1,33 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// Reads metadata table columns + /// + public interface IColumnReader { + /// + /// Reads a column + /// + /// The table to read from + /// Table row id + /// The column to read + /// Result + /// true if was updated, false if + /// the column should be read from the original table. + bool ReadColumn(MDTable table, uint rid, ColumnInfo column, out uint value); + } + + /// + /// Reads table rows + /// + /// Raw row + public interface IRowReader where TRow : class, IRawRow { + /// + /// Reads a table row + /// + /// Row id + /// The table row or null if its row should be read from the original + /// table + TRow ReadRow(uint rid); + } +} diff --git a/dnlib/DotNet/MD/ImageCor20Header.cs b/dnlib/DotNet/MD/ImageCor20Header.cs new file mode 100644 index 0000000..5f80199 --- /dev/null +++ b/dnlib/DotNet/MD/ImageCor20Header.cs @@ -0,0 +1,141 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.MD { + /// + /// Represents the IMAGE_COR20_HEADER structure + /// + public sealed class ImageCor20Header : FileSection { + readonly uint cb; + readonly ushort majorRuntimeVersion; + readonly ushort minorRuntimeVersion; + readonly ImageDataDirectory metaData; + readonly ComImageFlags flags; + readonly uint entryPointToken_or_RVA; + readonly ImageDataDirectory resources; + readonly ImageDataDirectory strongNameSignature; + readonly ImageDataDirectory codeManagerTable; + readonly ImageDataDirectory vtableFixups; + readonly ImageDataDirectory exportAddressTableJumps; + readonly ImageDataDirectory managedNativeHeader; + + /// + /// Returns true if it has a native header + /// + public bool HasNativeHeader { + get { return (flags & ComImageFlags.ILLibrary) != 0; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.cb field + /// + public uint CB { + get { return cb; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.MajorRuntimeVersion field + /// + public ushort MajorRuntimeVersion { + get { return majorRuntimeVersion; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.MinorRuntimeVersion field + /// + public ushort MinorRuntimeVersion { + get { return minorRuntimeVersion; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.MetaData field + /// + public ImageDataDirectory MetaData { + get { return metaData; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.Flags field + /// + public ComImageFlags Flags { + get { return flags; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.EntryPointToken/EntryPointTokenRVA field + /// + public uint EntryPointToken_or_RVA { + get { return entryPointToken_or_RVA; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.Resources field + /// + public ImageDataDirectory Resources { + get { return resources; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.StrongNameSignature field + /// + public ImageDataDirectory StrongNameSignature { + get { return strongNameSignature; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.CodeManagerTable field + /// + public ImageDataDirectory CodeManagerTable { + get { return codeManagerTable; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.VTableFixups field + /// + public ImageDataDirectory VTableFixups { + get { return vtableFixups; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.ExportAddressTableJumps field + /// + public ImageDataDirectory ExportAddressTableJumps { + get { return exportAddressTableJumps; } + } + + /// + /// Returns the IMAGE_COR20_HEADER.ManagedNativeHeader field + /// + public ImageDataDirectory ManagedNativeHeader { + get { return managedNativeHeader; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public ImageCor20Header(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.cb = reader.ReadUInt32(); + if (verify && this.cb < 0x48) + throw new BadImageFormatException("Invalid IMAGE_COR20_HEADER.cb value"); + this.majorRuntimeVersion = reader.ReadUInt16(); + this.minorRuntimeVersion = reader.ReadUInt16(); + this.metaData = new ImageDataDirectory(reader, verify); + this.flags = (ComImageFlags)reader.ReadUInt32(); + this.entryPointToken_or_RVA = reader.ReadUInt32(); + this.resources = new ImageDataDirectory(reader, verify); + this.strongNameSignature = new ImageDataDirectory(reader, verify); + this.codeManagerTable = new ImageDataDirectory(reader, verify); + this.vtableFixups = new ImageDataDirectory(reader, verify); + this.exportAddressTableJumps = new ImageDataDirectory(reader, verify); + this.managedNativeHeader = new ImageDataDirectory(reader, verify); + SetEndoffset(reader); + } + } +} diff --git a/dnlib/DotNet/MD/MDHeaderRuntimeVersion.cs b/dnlib/DotNet/MD/MDHeaderRuntimeVersion.cs new file mode 100644 index 0000000..8b04f34 --- /dev/null +++ b/dnlib/DotNet/MD/MDHeaderRuntimeVersion.cs @@ -0,0 +1,78 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// Version strings found in the meta data header + /// + public static class MDHeaderRuntimeVersion { + /// + /// MS CLR 1.0 version string (.NET 1.0) + /// + public const string MS_CLR_10 = "v1.0.3705"; + + /// + /// MS CLR 1.0 version string (.NET 1.0). This is an incorrect version that shouldn't be used. + /// + public const string MS_CLR_10_X86RETAIL = "v1.x86ret"; + + /// + /// MS CLR 1.0 version string (.NET 1.0). This is an incorrect version that shouldn't be used. + /// + public const string MS_CLR_10_RETAIL = "retail"; + + /// + /// MS CLR 1.0 version string (.NET 1.0). This is an incorrect version that shouldn't be used. + /// + public const string MS_CLR_10_COMPLUS = "COMPLUS"; + + /// + /// MS CLR 1.1 version string (.NET 1.1) + /// + public const string MS_CLR_11 = "v1.1.4322"; + + /// + /// MS CLR 2.0 version string (.NET 2.0-3.5) + /// + public const string MS_CLR_20 = "v2.0.50727"; + + /// + /// MS CLR 4.0 version string (.NET 4.0-4.5) + /// + public const string MS_CLR_40 = "v4.0.30319"; + + /// + /// MS CLR 1.0 any version + /// + public const string MS_CLR_10_PREFIX = "v1.0"; + + /// + /// MS CLR 1.0 any version + /// + public const string MS_CLR_10_PREFIX_X86RETAIL = "v1.x86"; + + /// + /// MS CLR 1.1 any version + /// + public const string MS_CLR_11_PREFIX = "v1.1"; + + /// + /// MS CLR 2.0 any version + /// + public const string MS_CLR_20_PREFIX = "v2.0"; + + /// + /// MS CLR 4.0 any version + /// + public const string MS_CLR_40_PREFIX = "v4.0"; + + /// + /// ECMA 2002 version string + /// + public const string ECMA_2002 = "Standard CLI 2002"; + + /// + /// ECMA 2005 version string + /// + public const string ECMA_2005 = "Standard CLI 2005"; + } +} diff --git a/dnlib/DotNet/MD/MDStreamFlags.cs b/dnlib/DotNet/MD/MDStreamFlags.cs new file mode 100644 index 0000000..6393efa --- /dev/null +++ b/dnlib/DotNet/MD/MDStreamFlags.cs @@ -0,0 +1,26 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.MD { + /// + /// MDStream flags + /// + [Flags] + public enum MDStreamFlags : byte { + /// #Strings stream is big and requires 4 byte offsets + BigStrings = 1, + /// #GUID stream is big and requires 4 byte offsets + BigGUID = 2, + /// #Blob stream is big and requires 4 byte offsets + BigBlob = 4, + /// + Padding = 8, + /// + DeltaOnly = 0x20, + /// Extra data follows the row counts + ExtraData = 0x40, + /// Set if certain tables can contain deleted rows. The name column (if present) is set to "_Deleted" + HasDelete = 0x80, + } +} diff --git a/dnlib/DotNet/MD/MDTable.cs b/dnlib/DotNet/MD/MDTable.cs new file mode 100644 index 0000000..9d97122 --- /dev/null +++ b/dnlib/DotNet/MD/MDTable.cs @@ -0,0 +1,140 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// A MD table (eg. Method table) + /// + [DebuggerDisplay("DL:{imageStream.Length} R:{numRows} RS:{tableInfo.RowSize} C:{Count} {tableInfo.Name}")] + public sealed class MDTable : IDisposable, IFileSection { + readonly Table table; + uint numRows; + TableInfo tableInfo; + IImageStream imageStream; + + // Fix for VS2015 expression evaluator: "The debugger is unable to evaluate this expression" + int Count { + get { return tableInfo.Columns.Count; } + } + + /// + public FileOffset StartOffset { + get { return imageStream.FileOffset; } + } + + /// + public FileOffset EndOffset { + get { return imageStream.FileOffset + imageStream.Length; } + } + + /// + /// Gets the table + /// + public Table Table { + get { return table; } + } + + /// + /// Gets the name of this table + /// + public string Name { + get { return tableInfo.Name; } + } + + /// + /// Returns total number of rows + /// + public uint Rows { + get { return numRows; } + } + + /// + /// Gets the total size in bytes of one row in this table + /// + public uint RowSize { + get { return (uint)tableInfo.RowSize; } + } + + /// + /// Returns all the columns + /// + public IList Columns { + get { return tableInfo.Columns; } + } + + /// + /// Returns true if there are no valid rows + /// + public bool IsEmpty { + get { return numRows == 0; } + } + + /// + /// Returns info about this table + /// + public TableInfo TableInfo { + get { return tableInfo; } + } + + /// + /// The stream that can access all the rows in this table + /// + internal IImageStream ImageStream { + get { return imageStream; } + set { + var ims = imageStream; + if (ims == value) + return; + if (ims != null) + ims.Dispose(); + imageStream = value; + } + } + + /// + /// Constructor + /// + /// The table + /// Number of rows in this table + /// Info about this table + internal MDTable(Table table, uint numRows, TableInfo tableInfo) { + this.table = table; + this.numRows = numRows; + this.tableInfo = tableInfo; + } + + internal IImageStream CloneImageStream() { + return imageStream.Clone(); + } + + /// + /// Checks whether the row exists + /// + /// Row ID + public bool IsValidRID(uint rid) { + return rid != 0 && rid <= numRows; + } + + /// + /// Checks whether the row does not exist + /// + /// Row ID + public bool IsInvalidRID(uint rid) { + return rid == 0 || rid > numRows; + } + + /// + public void Dispose() { + var ims = imageStream; + if (ims != null) + ims.Dispose(); + numRows = 0; + tableInfo = null; + imageStream = null; + } + } +} diff --git a/dnlib/DotNet/MD/MetaData.cs b/dnlib/DotNet/MD/MetaData.cs new file mode 100644 index 0000000..fd5b03e --- /dev/null +++ b/dnlib/DotNet/MD/MetaData.cs @@ -0,0 +1,863 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using dnlib.PE; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet.MD { + /// + /// Common base class for #~ and #- metadata classes + /// + abstract class MetaData : IMetaData { + /// + /// The PE image + /// + protected IPEImage peImage; + + /// + /// The .NET header + /// + protected ImageCor20Header cor20Header; + + /// + /// The MD header + /// + protected MetaDataHeader mdHeader; + + /// + /// The #Strings stream + /// + protected StringsStream stringsStream; + + /// + /// The #US stream + /// + protected USStream usStream; + + /// + /// The #Blob stream + /// + protected BlobStream blobStream; + + /// + /// The #GUID stream + /// + protected GuidStream guidStream; + + /// + /// The #~ or #- stream + /// + protected TablesStream tablesStream; + + /// + /// All the streams that are present in the PE image + /// + protected ThreadSafe.IList allStreams; + + uint[] fieldRidToTypeDefRid; + uint[] methodRidToTypeDefRid; + uint[] eventRidToTypeDefRid; + uint[] propertyRidToTypeDefRid; + uint[] gpRidToOwnerRid; + uint[] gpcRidToOwnerRid; + uint[] paramRidToOwnerRid; + Dictionary typeDefRidToNestedClasses; + RandomRidList nonNestedTypes; + + /// + /// Sorts a table by key column + /// + protected sealed class SortedTable { + RowInfo[] rows; + + /// + /// Remembers rid and key + /// + [DebuggerDisplay("{rid} {key}")] + struct RowInfo : IComparable { + public readonly uint rid; + public readonly uint key; + + /// + /// Constructor + /// + /// Row ID + /// Key + public RowInfo(uint rid, uint key) { + this.rid = rid; + this.key = key; + } + + /// + public int CompareTo(RowInfo other) { + if (key < other.key) + return -1; + if (key > other.key) + return 1; + return rid.CompareTo(other.rid); + } + } + + /// + /// Constructor + /// + /// The MD table + /// Index of key column + public SortedTable(MDTable mdTable, int keyColIndex) { + InitializeKeys(mdTable, keyColIndex); + Array.Sort(rows); + } + + void InitializeKeys(MDTable mdTable, int keyColIndex) { + var keyColumn = mdTable.TableInfo.Columns[keyColIndex]; + rows = new RowInfo[mdTable.Rows + 1]; + if (mdTable.Rows == 0) + return; + using (var reader = mdTable.CloneImageStream()) { + reader.Position = keyColumn.Offset; + int increment = mdTable.TableInfo.RowSize - keyColumn.Size; + for (uint i = 1; i <= mdTable.Rows; i++) { + rows[i] = new RowInfo(i, keyColumn.Read(reader)); + if (i < mdTable.Rows) + reader.Position += increment; + } + } + } + + /// + /// Binary searches for a row with a certain key + /// + /// The key + /// The row or 0 if not found + int BinarySearch(uint key) { + int lo = 1, hi = rows.Length - 1; + while (lo <= hi && hi != -1) { + int curr = (lo + hi) / 2; + uint key2 = rows[curr].key; + if (key == key2) + return curr; + if (key2 > key) + hi = curr - 1; + else + lo = curr + 1; + } + + return 0; + } + + /// + /// Find all rids that contain + /// + /// The key + /// A new instance + public RidList FindAllRows(uint key) { + int startIndex = BinarySearch(key); + if (startIndex == 0) + return RidList.Empty; + int endIndex = startIndex + 1; + for (; startIndex > 1; startIndex--) { + if (key != rows[startIndex - 1].key) + break; + } + for (; endIndex < rows.Length; endIndex++) { + if (key != rows[endIndex].key) + break; + } + var list = new RandomRidList(endIndex - startIndex); + for (int i = startIndex; i < endIndex; i++) + list.Add(rows[i].rid); + return list; + } + } + SortedTable eventMapSortedTable; + SortedTable propertyMapSortedTable; + + /// + public abstract bool IsCompressed { get; } + + /// + public ImageCor20Header ImageCor20Header { + get { return cor20Header; } + } + + /// + public ushort MajorVersion { + get { return mdHeader.MajorVersion; } + } + + /// + public ushort MinorVersion { + get { return mdHeader.MinorVersion; } + } + + /// + public string VersionString { + get { return mdHeader.VersionString; } + } + + /// + public IPEImage PEImage { + get { return peImage; } + } + + /// + public MetaDataHeader MetaDataHeader { + get { return mdHeader; } + } + + /// + public StringsStream StringsStream { + get { return stringsStream; } + } + + /// + public USStream USStream { + get { return usStream; } + } + + /// + public BlobStream BlobStream { + get { return blobStream; } + } + + /// + public GuidStream GuidStream { + get { return guidStream; } + } + + /// + public TablesStream TablesStream { + get { return tablesStream; } + } + + /// + public ThreadSafe.IList AllStreams { + get { return allStreams; } + } + + /// + /// Constructor + /// + /// The PE image + /// The .NET header + /// The MD header + protected MetaData(IPEImage peImage, ImageCor20Header cor20Header, MetaDataHeader mdHeader) { + try { + this.allStreams = ThreadSafeListCreator.Create(); + this.peImage = peImage; + this.cor20Header = cor20Header; + this.mdHeader = mdHeader; + } + catch { + if (peImage != null) + peImage.Dispose(); + throw; + } + } + + /// + /// Initializes the metadata, tables, streams + /// + public void Initialize() { + InitializeInternal(); + + if (tablesStream == null) + throw new BadImageFormatException("Missing MD stream"); + InitializeNonExistentHeaps(); + } + + /// + /// Creates empty heap objects if they're not present in the metadata + /// + protected void InitializeNonExistentHeaps() { + if (stringsStream == null) + stringsStream = new StringsStream(); + if (usStream == null) + usStream = new USStream(); + if (blobStream == null) + blobStream = new BlobStream(); + if (guidStream == null) + guidStream = new GuidStream(); + } + + /// + /// Called by + /// + protected abstract void InitializeInternal(); + + /// + public virtual RidList GetTypeDefRidList() { + return new ContiguousRidList(1, tablesStream.TypeDefTable.Rows); + } + + /// + public virtual RidList GetExportedTypeRidList() { + return new ContiguousRidList(1, tablesStream.ExportedTypeTable.Rows); + } + + /// + public abstract RidList GetFieldRidList(uint typeDefRid); + + /// + public abstract RidList GetMethodRidList(uint typeDefRid); + + /// + public abstract RidList GetParamRidList(uint methodRid); + + /// + public abstract RidList GetEventRidList(uint eventMapRid); + + /// + public abstract RidList GetPropertyRidList(uint propertyMapRid); + + /// + /// Binary searches the table for a rid whose key column at index + /// is equal to . The + /// has acquired its lock so only *_NoLock methods + /// may be called. + /// + /// Table to search + /// Key column index + /// Key + /// The rid of the found row, or 0 if none found + protected abstract uint BinarySearch_NoLock(MDTable tableSource, int keyColIndex, uint key); + + /// + /// Finds all rows owned by in table + /// whose index is + /// + /// Table to search + /// Key column index + /// Key + /// A instance + protected RidList FindAllRows(MDTable tableSource, int keyColIndex, uint key) { +#if THREAD_SAFE + tablesStream.theLock.EnterWriteLock(); try { +#endif + uint startRid = BinarySearch_NoLock(tableSource, keyColIndex, key); + if (tableSource.IsInvalidRID(startRid)) + return RidList.Empty; + uint endRid = startRid + 1; + var column = tableSource.TableInfo.Columns[keyColIndex]; + for (; startRid > 1; startRid--) { + uint key2; + if (!tablesStream.ReadColumn_NoLock(tableSource, startRid - 1, column, out key2)) + break; // Should never happen since startRid is valid + if (key != key2) + break; + } + for (; endRid <= tableSource.Rows; endRid++) { + uint key2; + if (!tablesStream.ReadColumn_NoLock(tableSource, endRid, column, out key2)) + break; // Should never happen since endRid is valid + if (key != key2) + break; + } + return new ContiguousRidList(startRid, endRid - startRid); +#if THREAD_SAFE + } finally { tablesStream.theLock.ExitWriteLock(); } +#endif + } + + /// + /// Finds all rows owned by in table + /// whose index is . Should be called if + /// could be unsorted. + /// + /// Table to search + /// Key column index + /// Key + /// A instance + protected virtual RidList FindAllRowsUnsorted(MDTable tableSource, int keyColIndex, uint key) { + return FindAllRows(tableSource, keyColIndex, key); + } + + /// + public RidList GetInterfaceImplRidList(uint typeDefRid) { + return FindAllRowsUnsorted(tablesStream.InterfaceImplTable, 0, typeDefRid); + } + + /// + public RidList GetGenericParamRidList(Table table, uint rid) { + uint codedToken; + if (!CodedToken.TypeOrMethodDef.Encode(new MDToken(table, rid), out codedToken)) + return RidList.Empty; + return FindAllRowsUnsorted(tablesStream.GenericParamTable, 2, codedToken); + } + + /// + public RidList GetGenericParamConstraintRidList(uint genericParamRid) { + return FindAllRowsUnsorted(tablesStream.GenericParamConstraintTable, 0, genericParamRid); + } + + /// + public RidList GetCustomAttributeRidList(Table table, uint rid) { + uint codedToken; + if (!CodedToken.HasCustomAttribute.Encode(new MDToken(table, rid), out codedToken)) + return RidList.Empty; + return FindAllRowsUnsorted(tablesStream.CustomAttributeTable, 0, codedToken); + } + + /// + public RidList GetDeclSecurityRidList(Table table, uint rid) { + uint codedToken; + if (!CodedToken.HasDeclSecurity.Encode(new MDToken(table, rid), out codedToken)) + return RidList.Empty; + return FindAllRowsUnsorted(tablesStream.DeclSecurityTable, 1, codedToken); + } + + /// + public RidList GetMethodSemanticsRidList(Table table, uint rid) { + uint codedToken; + if (!CodedToken.HasSemantic.Encode(new MDToken(table, rid), out codedToken)) + return RidList.Empty; + return FindAllRowsUnsorted(tablesStream.MethodSemanticsTable, 2, codedToken); + } + + /// + public RidList GetMethodImplRidList(uint typeDefRid) { + return FindAllRowsUnsorted(tablesStream.MethodImplTable, 0, typeDefRid); + } + + /// + public uint GetClassLayoutRid(uint typeDefRid) { + var list = FindAllRowsUnsorted(tablesStream.ClassLayoutTable, 2, typeDefRid); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetFieldLayoutRid(uint fieldRid) { + var list = FindAllRowsUnsorted(tablesStream.FieldLayoutTable, 1, fieldRid); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetFieldMarshalRid(Table table, uint rid) { + uint codedToken; + if (!CodedToken.HasFieldMarshal.Encode(new MDToken(table, rid), out codedToken)) + return 0; + var list = FindAllRowsUnsorted(tablesStream.FieldMarshalTable, 0, codedToken); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetFieldRVARid(uint fieldRid) { + var list = FindAllRowsUnsorted(tablesStream.FieldRVATable, 1, fieldRid); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetImplMapRid(Table table, uint rid) { + uint codedToken; + if (!CodedToken.MemberForwarded.Encode(new MDToken(table, rid), out codedToken)) + return 0; + var list = FindAllRowsUnsorted(tablesStream.ImplMapTable, 1, codedToken); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetNestedClassRid(uint typeDefRid) { + var list = FindAllRowsUnsorted(tablesStream.NestedClassTable, 0, typeDefRid); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetEventMapRid(uint typeDefRid) { + // The EventMap and PropertyMap tables can only be trusted to be sorted if it's + // an NGen image and it's the normal #- stream. The IsSorted bit must not be used + // to check whether the tables are sorted. See coreclr: md/inc/metamodel.h / IsVerified() + if (eventMapSortedTable == null) + Interlocked.CompareExchange(ref eventMapSortedTable, new SortedTable(tablesStream.EventMapTable, 0), null); + var list = eventMapSortedTable.FindAllRows(typeDefRid); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetPropertyMapRid(uint typeDefRid) { + // Always unsorted, see comment in GetEventMapRid() above + if (propertyMapSortedTable == null) + Interlocked.CompareExchange(ref propertyMapSortedTable, new SortedTable(tablesStream.PropertyMapTable, 0), null); + var list = propertyMapSortedTable.FindAllRows(typeDefRid); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetConstantRid(Table table, uint rid) { + uint codedToken; + if (!CodedToken.HasConstant.Encode(new MDToken(table, rid), out codedToken)) + return 0; + var list = FindAllRowsUnsorted(tablesStream.ConstantTable, 1, codedToken); + return list.Length == 0 ? 0 : list[0]; + } + + /// + public uint GetOwnerTypeOfField(uint fieldRid) { + if (fieldRidToTypeDefRid == null) + InitializeInverseFieldOwnerRidList(); + uint index = fieldRid - 1; + if (index >= fieldRidToTypeDefRid.LongLength) + return 0; + return fieldRidToTypeDefRid[index]; + } + + void InitializeInverseFieldOwnerRidList() { + if (fieldRidToTypeDefRid != null) + return; + var newFieldRidToTypeDefRid = new uint[tablesStream.FieldTable.Rows]; + var ownerList = GetTypeDefRidList(); + for (uint i = 0; i < ownerList.Length; i++) { + var ownerRid = ownerList[i]; + var fieldList = GetFieldRidList(ownerRid); + for (uint j = 0; j < fieldList.Length; j++) { + uint ridIndex = fieldList[j] - 1; + if (newFieldRidToTypeDefRid[ridIndex] != 0) + continue; + newFieldRidToTypeDefRid[ridIndex] = ownerRid; + } + } + Interlocked.CompareExchange(ref fieldRidToTypeDefRid, newFieldRidToTypeDefRid, null); + } + + /// + public uint GetOwnerTypeOfMethod(uint methodRid) { + if (methodRidToTypeDefRid == null) + InitializeInverseMethodOwnerRidList(); + uint index = methodRid - 1; + if (index >= methodRidToTypeDefRid.LongLength) + return 0; + return methodRidToTypeDefRid[index]; + } + + void InitializeInverseMethodOwnerRidList() { + if (methodRidToTypeDefRid != null) + return; + var newMethodRidToTypeDefRid = new uint[tablesStream.MethodTable.Rows]; + var ownerList = GetTypeDefRidList(); + for (uint i = 0; i < ownerList.Length; i++) { + var ownerRid = ownerList[i]; + var methodList = GetMethodRidList(ownerRid); + for (uint j = 0; j < methodList.Length; j++) { + uint ridIndex = methodList[j] - 1; + if (newMethodRidToTypeDefRid[ridIndex] != 0) + continue; + newMethodRidToTypeDefRid[ridIndex] = ownerRid; + } + } + Interlocked.CompareExchange(ref methodRidToTypeDefRid, newMethodRidToTypeDefRid, null); + } + + /// + public uint GetOwnerTypeOfEvent(uint eventRid) { + if (eventRidToTypeDefRid == null) + InitializeInverseEventOwnerRidList(); + uint index = eventRid - 1; + if (index >= eventRidToTypeDefRid.LongLength) + return 0; + return eventRidToTypeDefRid[index]; + } + + void InitializeInverseEventOwnerRidList() { + if (eventRidToTypeDefRid != null) + return; + var newEventRidToTypeDefRid = new uint[tablesStream.EventTable.Rows]; + var ownerList = GetTypeDefRidList(); + for (uint i = 0; i < ownerList.Length; i++) { + var ownerRid = ownerList[i]; + var eventList = GetEventRidList(GetEventMapRid(ownerRid)); + for (uint j = 0; j < eventList.Length; j++) { + uint ridIndex = eventList[j] - 1; + if (newEventRidToTypeDefRid[ridIndex] != 0) + continue; + newEventRidToTypeDefRid[ridIndex] = ownerRid; + } + } + Interlocked.CompareExchange(ref eventRidToTypeDefRid, newEventRidToTypeDefRid, null); + } + + /// + public uint GetOwnerTypeOfProperty(uint propertyRid) { + if (propertyRidToTypeDefRid == null) + InitializeInversePropertyOwnerRidList(); + uint index = propertyRid - 1; + if (index >= propertyRidToTypeDefRid.LongLength) + return 0; + return propertyRidToTypeDefRid[index]; + } + + void InitializeInversePropertyOwnerRidList() { + if (propertyRidToTypeDefRid != null) + return; + var newPropertyRidToTypeDefRid = new uint[tablesStream.PropertyTable.Rows]; + var ownerList = GetTypeDefRidList(); + for (uint i = 0; i < ownerList.Length; i++) { + var ownerRid = ownerList[i]; + var propertyList = GetPropertyRidList(GetPropertyMapRid(ownerRid)); + for (uint j = 0; j < propertyList.Length; j++) { + uint ridIndex = propertyList[j] - 1; + if (newPropertyRidToTypeDefRid[ridIndex] != 0) + continue; + newPropertyRidToTypeDefRid[ridIndex] = ownerRid; + } + } + Interlocked.CompareExchange(ref propertyRidToTypeDefRid, newPropertyRidToTypeDefRid, null); + } + + /// + public uint GetOwnerOfGenericParam(uint gpRid) { + // Don't use GenericParam.Owner column. If the GP table is sorted, it's + // possible to have two blocks of GPs with the same owner. Only one of the + // blocks is the "real" generic params for the owner. Of course, rarely + // if ever will this occur, but could happen if some obfuscator has + // added it. + + if (gpRidToOwnerRid == null) + InitializeInverseGenericParamOwnerRidList(); + uint index = gpRid - 1; + if (index >= gpRidToOwnerRid.LongLength) + return 0; + return gpRidToOwnerRid[index]; + } + + void InitializeInverseGenericParamOwnerRidList() { + if (gpRidToOwnerRid != null) + return; + var gpTable = tablesStream.GenericParamTable; + var newGpRidToOwnerRid = new uint[gpTable.Rows]; + + // Find all owners by reading the GenericParam.Owner column + var ownerCol = gpTable.TableInfo.Columns[2]; + var ownersDict = new Dictionary(); +#if THREAD_SAFE + tablesStream.theLock.EnterWriteLock(); try { +#endif + for (uint rid = 1; rid <= gpTable.Rows; rid++) { + uint owner; + if (!tablesStream.ReadColumn_NoLock(gpTable, rid, ownerCol, out owner)) + continue; + ownersDict[owner] = true; + } +#if THREAD_SAFE + } finally { tablesStream.theLock.ExitWriteLock(); } +#endif + + // Now that we have the owners, find all the generic params they own. An obfuscated + // module could have 2+ owners pointing to the same generic param row. + var owners = new List(ownersDict.Keys); + owners.Sort(); + for (int i = 0; i < owners.Count; i++) { + uint ownerToken; + if (!CodedToken.TypeOrMethodDef.Decode(owners[i], out ownerToken)) + continue; + var ridList = GetGenericParamRidList(MDToken.ToTable(ownerToken), MDToken.ToRID(ownerToken)); + for (uint j = 0; j < ridList.Length; j++) { + uint ridIndex = ridList[j] - 1; + if (newGpRidToOwnerRid[ridIndex] != 0) + continue; + newGpRidToOwnerRid[ridIndex] = owners[i]; + } + } + Interlocked.CompareExchange(ref gpRidToOwnerRid, newGpRidToOwnerRid, null); + } + + /// + public uint GetOwnerOfGenericParamConstraint(uint gpcRid) { + // Don't use GenericParamConstraint.Owner column for the same reason + // as described in GetOwnerOfGenericParam(). + + if (gpcRidToOwnerRid == null) + InitializeInverseGenericParamConstraintOwnerRidList(); + uint index = gpcRid - 1; + if (index >= gpcRidToOwnerRid.LongLength) + return 0; + return gpcRidToOwnerRid[index]; + } + + void InitializeInverseGenericParamConstraintOwnerRidList() { + if (gpcRidToOwnerRid != null) + return; + var gpcTable = tablesStream.GenericParamConstraintTable; + var newGpcRidToOwnerRid = new uint[gpcTable.Rows]; + + var ownerCol = gpcTable.TableInfo.Columns[0]; + var ownersDict = new Dictionary(); +#if THREAD_SAFE + tablesStream.theLock.EnterWriteLock(); try { +#endif + for (uint rid = 1; rid <= gpcTable.Rows; rid++) { + uint owner; + if (!tablesStream.ReadColumn_NoLock(gpcTable, rid, ownerCol, out owner)) + continue; + ownersDict[owner] = true; + } +#if THREAD_SAFE + } finally { tablesStream.theLock.ExitWriteLock(); } +#endif + + var owners = new List(ownersDict.Keys); + owners.Sort(); + for (int i = 0; i < owners.Count; i++) { + uint ownerToken = owners[i]; + var ridList = GetGenericParamConstraintRidList(ownerToken); + for (uint j = 0; j < ridList.Length; j++) { + uint ridIndex = ridList[j] - 1; + if (newGpcRidToOwnerRid[ridIndex] != 0) + continue; + newGpcRidToOwnerRid[ridIndex] = ownerToken; + } + } + Interlocked.CompareExchange(ref gpcRidToOwnerRid, newGpcRidToOwnerRid, null); + } + + /// + public uint GetOwnerOfParam(uint paramRid) { + if (paramRidToOwnerRid == null) + InitializeInverseParamOwnerRidList(); + uint index = paramRid - 1; + if (index >= paramRidToOwnerRid.LongLength) + return 0; + return paramRidToOwnerRid[index]; + } + + void InitializeInverseParamOwnerRidList() { + if (paramRidToOwnerRid != null) + return; + + var newParamRidToOwnerRid = new uint[tablesStream.ParamTable.Rows]; + var table = tablesStream.MethodTable; + for (uint rid = 1; rid <= table.Rows; rid++) { + var ridList = GetParamRidList(rid); + for (uint j = 0; j < ridList.Length; j++) { + uint ridIndex = ridList[j] - 1; + if (newParamRidToOwnerRid[ridIndex] != 0) + continue; + newParamRidToOwnerRid[ridIndex] = rid; + } + } + Interlocked.CompareExchange(ref paramRidToOwnerRid, newParamRidToOwnerRid, null); + } + + /// + public RidList GetNestedClassRidList(uint typeDefRid) { + if (typeDefRidToNestedClasses == null) + InitializeNestedClassesDictionary(); + RandomRidList ridList; + if (typeDefRidToNestedClasses.TryGetValue(typeDefRid, out ridList)) + return ridList; + return RidList.Empty; + } + + void InitializeNestedClassesDictionary() { + var table = tablesStream.NestedClassTable; + var destTable = tablesStream.TypeDefTable; + + Dictionary validTypeDefRids = null; + var typeDefRidList = GetTypeDefRidList(); + if (typeDefRidList.Length != destTable.Rows) { + validTypeDefRids = new Dictionary((int)typeDefRidList.Length); + for (uint i = 0; i < typeDefRidList.Length; i++) + validTypeDefRids[typeDefRidList[i]] = true; + } + + var nestedRidsDict = new Dictionary((int)table.Rows); + var nestedRids = new List((int)table.Rows); // Need it so we add the rids in correct order + for (uint rid = 1; rid <= table.Rows; rid++) { + if (validTypeDefRids != null && !validTypeDefRids.ContainsKey(rid)) + continue; + var row = tablesStream.ReadNestedClassRow(rid); + if (row == null) + continue; // Should never happen since rid is valid + if (!destTable.IsValidRID(row.NestedClass) || !destTable.IsValidRID(row.EnclosingClass)) + continue; + if (nestedRidsDict.ContainsKey(row.NestedClass)) + continue; + nestedRidsDict[row.NestedClass] = true; + nestedRids.Add(row.NestedClass); + } + + var newTypeDefRidToNestedClasses = new Dictionary(); + foreach (var nestedRid in nestedRids) { + var row = tablesStream.ReadNestedClassRow(GetNestedClassRid(nestedRid)); + if (row == null) + continue; + RandomRidList ridList; + if (!newTypeDefRidToNestedClasses.TryGetValue(row.EnclosingClass, out ridList)) + newTypeDefRidToNestedClasses[row.EnclosingClass] = ridList = new RandomRidList(); + ridList.Add(nestedRid); + } + + var newNonNestedTypes = new RandomRidList((int)(destTable.Rows - nestedRidsDict.Count)); + for (uint rid = 1; rid <= destTable.Rows; rid++) { + if (validTypeDefRids != null && !validTypeDefRids.ContainsKey(rid)) + continue; + if (nestedRidsDict.ContainsKey(rid)) + continue; + newNonNestedTypes.Add(rid); + } + + Interlocked.CompareExchange(ref nonNestedTypes, newNonNestedTypes, null); + + // Initialize this one last since it's tested by the callers of this method + Interlocked.CompareExchange(ref typeDefRidToNestedClasses, newTypeDefRidToNestedClasses, null); + } + + public RidList GetNonNestedClassRidList() { + // Check typeDefRidToNestedClasses and not nonNestedTypes since + // InitializeNestedClassesDictionary() writes to typeDefRidToNestedClasses last. + if (typeDefRidToNestedClasses == null) + InitializeNestedClassesDictionary(); + return nonNestedTypes; + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (!disposing) + return; + Dispose(peImage); + Dispose(stringsStream); + Dispose(usStream); + Dispose(blobStream); + Dispose(guidStream); + Dispose(tablesStream); + var as2 = allStreams; + if (as2 != null) { + foreach (var stream in as2.GetSafeEnumerable()) + Dispose(stream); + } + peImage = null; + cor20Header = null; + mdHeader = null; + stringsStream = null; + usStream = null; + blobStream = null; + guidStream = null; + tablesStream = null; + allStreams = null; + fieldRidToTypeDefRid = null; + methodRidToTypeDefRid = null; + typeDefRidToNestedClasses = null; + } + + static void Dispose(IDisposable id) { + if (id != null) + id.Dispose(); + } + } +} diff --git a/dnlib/DotNet/MD/MetaDataCreator.cs b/dnlib/DotNet/MD/MetaDataCreator.cs new file mode 100644 index 0000000..7353794 --- /dev/null +++ b/dnlib/DotNet/MD/MetaDataCreator.cs @@ -0,0 +1,203 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.MD { + /// + /// Low level access to a .NET file's metadata + /// + public static class MetaDataCreator { + enum MetaDataType { + Unknown, + Compressed, // #~ (normal) + ENC, // #- (edit and continue) + } + + /// + /// Create a instance + /// + /// The file to load + /// A new instance + internal static MetaData Load(string fileName) { + IPEImage peImage = null; + try { + return Load(peImage = new PEImage(fileName)); + } + catch { + if (peImage != null) + peImage.Dispose(); + throw; + } + } + + /// + /// Create a instance + /// + /// The .NET file data + /// A new instance + internal static MetaData Load(byte[] data) { + IPEImage peImage = null; + try { + return Load(peImage = new PEImage(data)); + } + catch { + if (peImage != null) + peImage.Dispose(); + throw; + } + } + + /// + /// Create a instance + /// + /// Address of a .NET file in memory + /// A new instance + internal static MetaData Load(IntPtr addr) { + IPEImage peImage = null; + + // We don't know what layout it is. Memory is more common so try that first. + try { + return Load(peImage = new PEImage(addr, ImageLayout.Memory, true)); + } + catch { + if (peImage != null) + peImage.Dispose(); + peImage = null; + } + + try { + return Load(peImage = new PEImage(addr, ImageLayout.File, true)); + } + catch { + if (peImage != null) + peImage.Dispose(); + throw; + } + } + + /// + /// Create a instance + /// + /// Address of a .NET file in memory + /// Image layout of the file in memory + /// A new instance + internal static MetaData Load(IntPtr addr, ImageLayout imageLayout) { + IPEImage peImage = null; + try { + return Load(peImage = new PEImage(addr, imageLayout, true)); + } + catch { + if (peImage != null) + peImage.Dispose(); + throw; + } + } + + /// + /// Create a instance + /// + /// The PE image + /// A new instance + internal static MetaData Load(IPEImage peImage) { + return Create(peImage, true); + } + + /// + /// Create a instance + /// + /// The PE image + /// A new instance + public static IMetaData CreateMetaData(IPEImage peImage) { + return Create(peImage, true); + } + + /// + /// Create a instance + /// + /// The PE image + /// true if we should verify that it's a .NET PE file + /// A new instance + public static IMetaData CreateMetaData(IPEImage peImage, bool verify) { + return Create(peImage, verify); + } + + /// + /// Create a instance + /// + /// The PE image + /// true if we should verify that it's a .NET PE file + /// A new instance + internal static MetaData Create(IPEImage peImage, bool verify) { + IImageStream cor20HeaderStream = null, mdHeaderStream = null; + MetaData md = null; + try { + var dotNetDir = peImage.ImageNTHeaders.OptionalHeader.DataDirectories[14]; + if (dotNetDir.VirtualAddress == 0) + throw new BadImageFormatException(".NET data directory RVA is 0"); + if (dotNetDir.Size < 0x48) + throw new BadImageFormatException(".NET data directory size < 0x48"); + var cor20Header = new ImageCor20Header(cor20HeaderStream = peImage.CreateStream(dotNetDir.VirtualAddress, 0x48), verify); + if (cor20Header.MetaData.VirtualAddress == 0) + throw new BadImageFormatException(".NET MetaData RVA is 0"); + if (cor20Header.MetaData.Size < 16) + throw new BadImageFormatException(".NET MetaData size is too small"); + var mdSize = cor20Header.MetaData.Size; + var mdRva = cor20Header.MetaData.VirtualAddress; + var mdHeader = new MetaDataHeader(mdHeaderStream = peImage.CreateStream(mdRva, mdSize), verify); + if (verify) { + foreach (var sh in mdHeader.StreamHeaders) { + if (sh.Offset + sh.StreamSize < sh.Offset || sh.Offset + sh.StreamSize > mdSize) + throw new BadImageFormatException("Invalid stream header"); + } + } + + switch (GetMetaDataType(mdHeader.StreamHeaders)) { + case MetaDataType.Compressed: + md = new CompressedMetaData(peImage, cor20Header, mdHeader); + break; + + case MetaDataType.ENC: + md = new ENCMetaData(peImage, cor20Header, mdHeader); + break; + + default: + throw new BadImageFormatException("No #~ or #- stream found"); + } + md.Initialize(); + + return md; + } + catch { + if (md != null) + md.Dispose(); + throw; + } + finally { + if (cor20HeaderStream != null) + cor20HeaderStream.Dispose(); + if (mdHeaderStream != null) + mdHeaderStream.Dispose(); + } + } + + static MetaDataType GetMetaDataType(IList streamHeaders) { + MetaDataType? mdType = null; + foreach (var sh in streamHeaders) { + if (mdType == null) { + if (sh.Name == "#~") + mdType = MetaDataType.Compressed; + else if (sh.Name == "#-") + mdType = MetaDataType.ENC; + } + if (sh.Name == "#Schema") + mdType = MetaDataType.ENC; + } + if (mdType == null) + return MetaDataType.Unknown; + return mdType.Value; + } + } +} diff --git a/dnlib/DotNet/MD/MetaDataHeader.cs b/dnlib/DotNet/MD/MetaDataHeader.cs new file mode 100644 index 0000000..54bd5d6 --- /dev/null +++ b/dnlib/DotNet/MD/MetaDataHeader.cs @@ -0,0 +1,147 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Text; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Represents the .NET metadata header + /// + /// IMAGE_COR20_HEADER.MetaData points to this header + public sealed class MetaDataHeader : FileSection { + readonly uint signature; + readonly ushort majorVersion; + readonly ushort minorVersion; + readonly uint reserved1; + readonly uint stringLength; + readonly string versionString; + readonly FileOffset offset2ndPart; + readonly StorageFlags flags; + readonly byte reserved2; + readonly ushort streams; + readonly IList streamHeaders; + + /// + /// Returns the signature (should be 0x424A5342) + /// + public uint Signature { + get { return signature; } + } + + /// + /// Returns the major version + /// + public ushort MajorVersion { + get { return majorVersion; } + } + + /// + /// Returns the minor version + /// + public ushort MinorVersion { + get { return minorVersion; } + } + + /// + /// Returns the reserved dword (pointer to extra header data) + /// + public uint Reserved1 { + get { return reserved1; } + } + + /// + /// Returns the version string length value + /// + public uint StringLength { + get { return stringLength; } + } + + /// + /// Returns the version string + /// + public string VersionString { + get { return versionString; } + } + + /// + /// Returns the offset of STORAGEHEADER + /// + public FileOffset StorageHeaderOffset { + get { return offset2ndPart; } + } + + /// + /// Returns the flags (reserved) + /// + public StorageFlags Flags { + get { return flags; } + } + + /// + /// Returns the reserved byte (padding) + /// + public byte Reserved2 { + get { return reserved2; } + } + + /// + /// Returns the number of streams + /// + public ushort Streams { + get { return streams; } + } + + /// + /// Returns all stream headers + /// + public IList StreamHeaders { + get { return streamHeaders; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public MetaDataHeader(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.signature = reader.ReadUInt32(); + if (verify && this.signature != 0x424A5342) + throw new BadImageFormatException("Invalid MetaData header signature"); + this.majorVersion = reader.ReadUInt16(); + this.minorVersion = reader.ReadUInt16(); + if (verify && !((majorVersion == 1 && minorVersion == 1) || (majorVersion == 0 && minorVersion >= 19))) + throw new BadImageFormatException(string.Format("Unknown MetaData header version: {0}.{1}", majorVersion, minorVersion)); + this.reserved1 = reader.ReadUInt32(); + this.stringLength = reader.ReadUInt32(); + this.versionString = ReadString(reader, stringLength); + this.offset2ndPart = reader.FileOffset + reader.Position; + this.flags = (StorageFlags)reader.ReadByte(); + this.reserved2 = reader.ReadByte(); + this.streams = reader.ReadUInt16(); + this.streamHeaders = new StreamHeader[streams]; + for (int i = 0; i < streamHeaders.Count; i++) + streamHeaders[i] = new StreamHeader(reader, verify); + SetEndoffset(reader); + } + + static string ReadString(IImageStream reader, uint maxLength) { + long endPos = reader.Position + maxLength; + if (endPos < reader.Position || endPos > reader.Length) + throw new BadImageFormatException("Invalid MD version string"); + byte[] utf8Bytes = new byte[maxLength]; + uint i; + for (i = 0; i < maxLength; i++) { + byte b = reader.ReadByte(); + if (b == 0) + break; + utf8Bytes[i] = b; + } + reader.Position = endPos; + return Encoding.UTF8.GetString(utf8Bytes, 0, (int)i); + } + } +} diff --git a/dnlib/DotNet/MD/RawRowEqualityComparer.cs b/dnlib/DotNet/MD/RawRowEqualityComparer.cs new file mode 100644 index 0000000..0bcaa01 --- /dev/null +++ b/dnlib/DotNet/MD/RawRowEqualityComparer.cs @@ -0,0 +1,578 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; + +#pragma warning disable 1591 // XML doc comments + +namespace dnlib.DotNet.MD { + /// + /// Equality comparer for all raw rows + /// + public sealed class RawRowEqualityComparer : IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer, + IEqualityComparer, IEqualityComparer { + + /// + /// Default instance + /// + public static readonly RawRowEqualityComparer Instance = new RawRowEqualityComparer(); + + static int rol(uint val, int shift) { + return (int)((val << shift) | (val >> (32 - shift))); + } + + public bool Equals(RawModuleRow x, RawModuleRow y) { + return x.Generation == y.Generation && + x.Name == y.Name && + x.Mvid == y.Mvid && + x.EncId == y.EncId && + x.EncBaseId == y.EncBaseId; + } + + public int GetHashCode(RawModuleRow obj) { + return obj.Generation + + rol(obj.Name, 3) + + rol(obj.Mvid, 7) + + rol(obj.EncId, 11) + + rol(obj.EncBaseId, 15); + } + + public bool Equals(RawTypeRefRow x, RawTypeRefRow y) { + return x.ResolutionScope == y.ResolutionScope && + x.Name == y.Name && + x.Namespace == y.Namespace; + } + + public int GetHashCode(RawTypeRefRow obj) { + return (int)obj.ResolutionScope + + rol(obj.Name, 3) + + rol(obj.Namespace, 7); + } + + public bool Equals(RawTypeDefRow x, RawTypeDefRow y) { + return x.Flags == y.Flags && + x.Name == y.Name && + x.Namespace == y.Namespace && + x.Extends == y.Extends && + x.FieldList == y.FieldList && + x.MethodList == y.MethodList; + } + + public int GetHashCode(RawTypeDefRow obj) { + return (int)obj.Flags + + rol(obj.Name, 3) + + rol(obj.Namespace, 7) + + rol(obj.Extends, 11) + + rol(obj.FieldList, 15) + + rol(obj.MethodList, 19); + } + + public bool Equals(RawFieldPtrRow x, RawFieldPtrRow y) { + return x.Field == y.Field; + } + + public int GetHashCode(RawFieldPtrRow obj) { + return (int)obj.Field; + } + + public bool Equals(RawFieldRow x, RawFieldRow y) { + return x.Flags == y.Flags && + x.Name == y.Name && + x.Signature == y.Signature; + } + + public int GetHashCode(RawFieldRow obj) { + return (int)obj.Flags + + rol(obj.Name, 3) + + rol(obj.Signature, 7); + } + + public bool Equals(RawMethodPtrRow x, RawMethodPtrRow y) { + return x.Method == y.Method; + } + + public int GetHashCode(RawMethodPtrRow obj) { + return (int)obj.Method; + } + + public bool Equals(RawMethodRow x, RawMethodRow y) { + return x.RVA == y.RVA && + x.ImplFlags == y.ImplFlags && + x.Flags == y.Flags && + x.Name == y.Name && + x.Signature == y.Signature && + x.ParamList == y.ParamList; + } + + public int GetHashCode(RawMethodRow obj) { + return (int)obj.RVA + + rol(obj.ImplFlags, 3) + + rol(obj.Flags, 7) + + rol(obj.Name, 11) + + rol(obj.Signature, 15) + + rol(obj.ParamList, 19); + } + + public bool Equals(RawParamPtrRow x, RawParamPtrRow y) { + return x.Param == y.Param; + } + + public int GetHashCode(RawParamPtrRow obj) { + return (int)obj.Param; + } + + public bool Equals(RawParamRow x, RawParamRow y) { + return x.Flags == y.Flags && + x.Sequence == y.Sequence && + x.Name == y.Name; + } + + public int GetHashCode(RawParamRow obj) { + return (int)obj.Flags + + rol(obj.Sequence, 3) + + rol(obj.Name, 7); + } + + public bool Equals(RawInterfaceImplRow x, RawInterfaceImplRow y) { + return x.Class == y.Class && + x.Interface == y.Interface; + } + + public int GetHashCode(RawInterfaceImplRow obj) { + return (int)obj.Class + + rol(obj.Interface, 3); + } + + public bool Equals(RawMemberRefRow x, RawMemberRefRow y) { + return x.Class == y.Class && + x.Name == y.Name && + x.Signature == y.Signature; + } + + public int GetHashCode(RawMemberRefRow obj) { + return (int)obj.Class + + rol(obj.Name, 3) + + rol(obj.Signature, 7); + } + + public bool Equals(RawConstantRow x, RawConstantRow y) { + return x.Type == y.Type && + x.Padding == y.Padding && + x.Parent == y.Parent && + x.Value == y.Value; + } + + public int GetHashCode(RawConstantRow obj) { + return (int)obj.Type + + rol(obj.Padding, 3) + + rol(obj.Parent, 7) + + rol(obj.Value, 11); + } + + public bool Equals(RawCustomAttributeRow x, RawCustomAttributeRow y) { + return x.Parent == y.Parent && + x.Type == y.Type && + x.Value == y.Value; + } + + public int GetHashCode(RawCustomAttributeRow obj) { + return (int)obj.Parent + + rol(obj.Type, 3) + + rol(obj.Value, 7); + } + + public bool Equals(RawFieldMarshalRow x, RawFieldMarshalRow y) { + return x.Parent == y.Parent && + x.NativeType == y.NativeType; + } + + public int GetHashCode(RawFieldMarshalRow obj) { + return (int)obj.Parent + + rol(obj.NativeType, 3); + } + + public bool Equals(RawDeclSecurityRow x, RawDeclSecurityRow y) { + return x.Action == y.Action && + x.Parent == y.Parent && + x.PermissionSet == y.PermissionSet; + } + + public int GetHashCode(RawDeclSecurityRow obj) { + return (int)obj.Action + + rol(obj.Parent, 3) + + rol(obj.PermissionSet, 7); + } + + public bool Equals(RawClassLayoutRow x, RawClassLayoutRow y) { + return x.PackingSize == y.PackingSize && + x.ClassSize == y.ClassSize && + x.Parent == y.Parent; + } + + public int GetHashCode(RawClassLayoutRow obj) { + return (int)obj.PackingSize + + rol(obj.ClassSize, 3) + + rol(obj.Parent, 7); + } + + public bool Equals(RawFieldLayoutRow x, RawFieldLayoutRow y) { + return x.OffSet == y.OffSet && + x.Field == y.Field; + } + + public int GetHashCode(RawFieldLayoutRow obj) { + return (int)obj.OffSet + + rol(obj.Field, 3); + } + + public bool Equals(RawStandAloneSigRow x, RawStandAloneSigRow y) { + return x.Signature == y.Signature; + } + + public int GetHashCode(RawStandAloneSigRow obj) { + return (int)obj.Signature; + } + + public bool Equals(RawEventMapRow x, RawEventMapRow y) { + return x.Parent == y.Parent && + x.EventList == y.EventList; + } + + public int GetHashCode(RawEventMapRow obj) { + return (int)obj.Parent + + rol(obj.EventList, 3); + } + + public bool Equals(RawEventPtrRow x, RawEventPtrRow y) { + return x.Event == y.Event; + } + + public int GetHashCode(RawEventPtrRow obj) { + return (int)obj.Event; + } + + public bool Equals(RawEventRow x, RawEventRow y) { + return x.EventFlags == y.EventFlags && + x.Name == y.Name && + x.EventType == y.EventType; + } + + public int GetHashCode(RawEventRow obj) { + return (int)obj.EventFlags + + rol(obj.Name, 3) + + rol(obj.EventType, 7); + } + + public bool Equals(RawPropertyMapRow x, RawPropertyMapRow y) { + return x.Parent == y.Parent && + x.PropertyList == y.PropertyList; + } + + public int GetHashCode(RawPropertyMapRow obj) { + return (int)obj.Parent + + rol(obj.PropertyList, 3); + } + + public bool Equals(RawPropertyPtrRow x, RawPropertyPtrRow y) { + return x.Property == y.Property; + } + + public int GetHashCode(RawPropertyPtrRow obj) { + return (int)obj.Property; + } + + public bool Equals(RawPropertyRow x, RawPropertyRow y) { + return x.PropFlags == y.PropFlags && + x.Name == y.Name && + x.Type == y.Type; + } + + public int GetHashCode(RawPropertyRow obj) { + return (int)obj.PropFlags + + rol(obj.Name, 3) + + rol(obj.Type, 7); + } + + public bool Equals(RawMethodSemanticsRow x, RawMethodSemanticsRow y) { + return x.Semantic == y.Semantic && + x.Method == y.Method && + x.Association == y.Association; + } + + public int GetHashCode(RawMethodSemanticsRow obj) { + return (int)obj.Semantic + + rol(obj.Method, 3) + + rol(obj.Association, 7); + } + + public bool Equals(RawMethodImplRow x, RawMethodImplRow y) { + return x.Class == y.Class && + x.MethodBody == y.MethodBody && + x.MethodDeclaration == y.MethodDeclaration; + } + + public int GetHashCode(RawMethodImplRow obj) { + return (int)obj.Class + + rol(obj.MethodBody, 3) + + rol(obj.MethodDeclaration, 7); + } + + public bool Equals(RawModuleRefRow x, RawModuleRefRow y) { + return x.Name == y.Name; + } + + public int GetHashCode(RawModuleRefRow obj) { + return (int)obj.Name; + } + + public bool Equals(RawTypeSpecRow x, RawTypeSpecRow y) { + return x.Signature == y.Signature; + } + + public int GetHashCode(RawTypeSpecRow obj) { + return (int)obj.Signature; + } + + public bool Equals(RawImplMapRow x, RawImplMapRow y) { + return x.MappingFlags == y.MappingFlags && + x.MemberForwarded == y.MemberForwarded && + x.ImportName == y.ImportName && + x.ImportScope == y.ImportScope; + } + + public int GetHashCode(RawImplMapRow obj) { + return (int)obj.MappingFlags + + rol(obj.MemberForwarded, 3) + + rol(obj.ImportName, 7) + + rol(obj.ImportScope, 11); + } + + public bool Equals(RawFieldRVARow x, RawFieldRVARow y) { + return x.RVA == y.RVA && + x.Field == y.Field; + } + + public int GetHashCode(RawFieldRVARow obj) { + return (int)obj.RVA + + rol(obj.Field, 3); + } + + public bool Equals(RawENCLogRow x, RawENCLogRow y) { + return x.Token == y.Token && + x.FuncCode == y.FuncCode; + } + + public int GetHashCode(RawENCLogRow obj) { + return (int)obj.Token + + rol(obj.FuncCode, 3); + } + + public bool Equals(RawENCMapRow x, RawENCMapRow y) { + return x.Token == y.Token; + } + + public int GetHashCode(RawENCMapRow obj) { + return (int)obj.Token; + } + + public bool Equals(RawAssemblyRow x, RawAssemblyRow y) { + return x.HashAlgId == y.HashAlgId && + x.MajorVersion == y.MajorVersion && + x.MinorVersion == y.MinorVersion && + x.BuildNumber == y.BuildNumber && + x.RevisionNumber == y.RevisionNumber && + x.Flags == y.Flags && + x.PublicKey == y.PublicKey && + x.Name == y.Name && + x.Locale == y.Locale; + } + + public int GetHashCode(RawAssemblyRow obj) { + return (int)obj.HashAlgId + + rol(obj.MajorVersion, 3) + + rol(obj.MinorVersion, 7) + + rol(obj.BuildNumber, 11) + + rol(obj.RevisionNumber, 15) + + rol(obj.Flags, 19) + + rol(obj.PublicKey, 23) + + rol(obj.Name, 27) + + rol(obj.Locale, 31); + } + + public bool Equals(RawAssemblyProcessorRow x, RawAssemblyProcessorRow y) { + return x.Processor == y.Processor; + } + + public int GetHashCode(RawAssemblyProcessorRow obj) { + return (int)obj.Processor; + } + + public bool Equals(RawAssemblyOSRow x, RawAssemblyOSRow y) { + return x.OSPlatformId == y.OSPlatformId && + x.OSMajorVersion == y.OSMajorVersion && + x.OSMinorVersion == y.OSMinorVersion; + } + + public int GetHashCode(RawAssemblyOSRow obj) { + return (int)obj.OSPlatformId + + rol(obj.OSMajorVersion, 3) + + rol(obj.OSMinorVersion, 7); + } + + public bool Equals(RawAssemblyRefRow x, RawAssemblyRefRow y) { + return x.MajorVersion == y.MajorVersion && + x.MinorVersion == y.MinorVersion && + x.BuildNumber == y.BuildNumber && + x.RevisionNumber == y.RevisionNumber && + x.Flags == y.Flags && + x.PublicKeyOrToken == y.PublicKeyOrToken && + x.Name == y.Name && + x.Locale == y.Locale && + x.HashValue == y.HashValue; + } + + public int GetHashCode(RawAssemblyRefRow obj) { + return (int)obj.MajorVersion + + rol(obj.MinorVersion, 3) + + rol(obj.BuildNumber, 7) + + rol(obj.RevisionNumber, 11) + + rol(obj.Flags, 15) + + rol(obj.PublicKeyOrToken, 19) + + rol(obj.Name, 23) + + rol(obj.Locale, 27) + + rol(obj.HashValue, 31); + } + + public bool Equals(RawAssemblyRefProcessorRow x, RawAssemblyRefProcessorRow y) { + return x.Processor == y.Processor && + x.AssemblyRef == y.AssemblyRef; + } + + public int GetHashCode(RawAssemblyRefProcessorRow obj) { + return (int)obj.Processor + + rol(obj.AssemblyRef, 3); + } + + public bool Equals(RawAssemblyRefOSRow x, RawAssemblyRefOSRow y) { + return x.OSPlatformId == y.OSPlatformId && + x.OSMajorVersion == y.OSMajorVersion && + x.OSMinorVersion == y.OSMinorVersion && + x.AssemblyRef == y.AssemblyRef; + } + + public int GetHashCode(RawAssemblyRefOSRow obj) { + return (int)obj.OSPlatformId + + rol(obj.OSMajorVersion, 3) + + rol(obj.OSMinorVersion, 7) + + rol(obj.AssemblyRef, 11); + } + + public bool Equals(RawFileRow x, RawFileRow y) { + return x.Flags == y.Flags && + x.Name == y.Name && + x.HashValue == y.HashValue; + } + + public int GetHashCode(RawFileRow obj) { + return (int)obj.Flags + + rol(obj.Name, 3) + + rol(obj.HashValue, 7); + } + + public bool Equals(RawExportedTypeRow x, RawExportedTypeRow y) { + return x.Flags == y.Flags && + x.TypeDefId == y.TypeDefId && + x.TypeName == y.TypeName && + x.TypeNamespace == y.TypeNamespace && + x.Implementation == y.Implementation; + } + + public int GetHashCode(RawExportedTypeRow obj) { + return (int)obj.Flags + + rol(obj.TypeDefId, 3) + + rol(obj.TypeName, 7) + + rol(obj.TypeNamespace, 11) + + rol(obj.Implementation, 15); + } + + public bool Equals(RawManifestResourceRow x, RawManifestResourceRow y) { + return x.Offset == y.Offset && + x.Flags == y.Flags && + x.Name == y.Name && + x.Implementation == y.Implementation; + } + + public int GetHashCode(RawManifestResourceRow obj) { + return (int)obj.Offset + + rol(obj.Flags, 3) + + rol(obj.Name, 7) + + rol(obj.Implementation, 11); + } + + public bool Equals(RawNestedClassRow x, RawNestedClassRow y) { + return x.NestedClass == y.NestedClass && + x.EnclosingClass == y.EnclosingClass; + } + + public int GetHashCode(RawNestedClassRow obj) { + return (int)obj.NestedClass + + rol(obj.EnclosingClass, 3); + } + + public bool Equals(RawGenericParamRow x, RawGenericParamRow y) { + return x.Number == y.Number && + x.Flags == y.Flags && + x.Owner == y.Owner && + x.Name == y.Name && + x.Kind == y.Kind; + } + + public int GetHashCode(RawGenericParamRow obj) { + return (int)obj.Number + + rol(obj.Flags, 3) + + rol(obj.Owner, 7) + + rol(obj.Name, 11) + + rol(obj.Kind, 15); + } + + public bool Equals(RawMethodSpecRow x, RawMethodSpecRow y) { + return x.Method == y.Method && + x.Instantiation == y.Instantiation; + } + + public int GetHashCode(RawMethodSpecRow obj) { + return (int)obj.Method + + rol(obj.Instantiation, 3); + } + + public bool Equals(RawGenericParamConstraintRow x, RawGenericParamConstraintRow y) { + return x.Owner == y.Owner && + x.Constraint == y.Constraint; + } + + public int GetHashCode(RawGenericParamConstraintRow obj) { + return (int)obj.Owner + + rol(obj.Constraint, 3); + } + } +} diff --git a/dnlib/DotNet/MD/RawTableRows.cs b/dnlib/DotNet/MD/RawTableRows.cs new file mode 100644 index 0000000..255bab4 --- /dev/null +++ b/dnlib/DotNet/MD/RawTableRows.cs @@ -0,0 +1,1948 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// A raw table row + /// + public interface IRawRow { + /// + /// Reads a column + /// + /// Column index + /// Column value + uint Read(int index); + + /// + /// Writes a column + /// + /// Column index + /// New value + void Write(int index, uint value); + } + + /// + /// Raw contents of an uncompressed Module table row + /// + public sealed class RawModuleRow : IRawRow { + /// + public ushort Generation; + /// + public uint Name; + /// + public uint Mvid; + /// + public uint EncId; + /// + public uint EncBaseId; + + /// Default constructor + public RawModuleRow() { + } + + /// Constructor + public RawModuleRow(ushort Generation, uint Name, uint Mvid, uint EncId, uint EncBaseId) { + this.Generation = Generation; + this.Name = Name; + this.Mvid = Mvid; + this.EncId = EncId; + this.EncBaseId = EncBaseId; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Generation; + case 1: return Name; + case 2: return Mvid; + case 3: return EncId; + case 4: return EncBaseId; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Generation = (ushort)value; break; + case 1: Name = value; break; + case 2: Mvid = value; break; + case 3: EncId = value; break; + case 4: EncBaseId = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed TypeRef table row + /// + public sealed class RawTypeRefRow : IRawRow { + /// + public uint ResolutionScope; + /// + public uint Name; + /// + public uint Namespace; + + /// Default constructor + public RawTypeRefRow() { + } + + /// Constructor + public RawTypeRefRow(uint ResolutionScope, uint Name, uint Namespace) { + this.ResolutionScope = ResolutionScope; + this.Name = Name; + this.Namespace = Namespace; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return ResolutionScope; + case 1: return Name; + case 2: return Namespace; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: ResolutionScope = value; break; + case 1: Name = value; break; + case 2: Namespace = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed TypeDef table row + /// + public sealed class RawTypeDefRow : IRawRow { + /// + public uint Flags; + /// + public uint Name; + /// + public uint Namespace; + /// + public uint Extends; + /// + public uint FieldList; + /// + public uint MethodList; + + /// Default constructor + public RawTypeDefRow() { + } + + /// Constructor + public RawTypeDefRow(uint Flags, uint Name, uint Namespace, uint Extends, uint FieldList, uint MethodList) { + this.Flags = Flags; + this.Name = Name; + this.Namespace = Namespace; + this.Extends = Extends; + this.FieldList = FieldList; + this.MethodList = MethodList; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Flags; + case 1: return Name; + case 2: return Namespace; + case 3: return Extends; + case 4: return FieldList; + case 5: return MethodList; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Flags = value; break; + case 1: Name = value; break; + case 2: Namespace = value; break; + case 3: Extends = value; break; + case 4: FieldList = value; break; + case 5: MethodList = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed FieldPtr table row + /// + public sealed class RawFieldPtrRow : IRawRow { + /// + public uint Field; + + /// Default constructor + public RawFieldPtrRow() { + } + + /// Constructor + public RawFieldPtrRow(uint Field) { + this.Field = Field; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Field; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Field = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Field table row + /// + public sealed class RawFieldRow : IRawRow { + /// + public ushort Flags; + /// + public uint Name; + /// + public uint Signature; + + /// Default constructor + public RawFieldRow() { + } + + /// Constructor + public RawFieldRow(ushort Flags, uint Name, uint Signature) { + this.Flags = Flags; + this.Name = Name; + this.Signature = Signature; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Flags; + case 1: return Name; + case 2: return Signature; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Flags = (ushort)value; break; + case 1: Name = value; break; + case 2: Signature = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed MethodPtr table row + /// + public sealed class RawMethodPtrRow : IRawRow { + /// + public uint Method; + + /// Default constructor + public RawMethodPtrRow() { + } + + /// Constructor + public RawMethodPtrRow(uint Method) { + this.Method = Method; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Method; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Method = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Method table row + /// + public sealed class RawMethodRow : IRawRow { + /// + public uint RVA; + /// + public ushort ImplFlags; + /// + public ushort Flags; + /// + public uint Name; + /// + public uint Signature; + /// + public uint ParamList; + + /// Default constructor + public RawMethodRow() { + } + + /// Constructor + public RawMethodRow(uint RVA, ushort ImplFlags, ushort Flags, uint Name, uint Signature, uint ParamList) { + this.RVA = RVA; + this.ImplFlags = ImplFlags; + this.Flags = Flags; + this.Name = Name; + this.Signature = Signature; + this.ParamList = ParamList; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return RVA; + case 1: return ImplFlags; + case 2: return Flags; + case 3: return Name; + case 4: return Signature; + case 5: return ParamList; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: RVA = value; break; + case 1: ImplFlags = (ushort)value; break; + case 2: Flags = (ushort)value; break; + case 3: Name = value; break; + case 4: Signature = value; break; + case 5: ParamList = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ParamPtr table row + /// + public sealed class RawParamPtrRow : IRawRow { + /// + public uint Param; + + /// Default constructor + public RawParamPtrRow() { + } + + /// Constructor + public RawParamPtrRow(uint Param) { + this.Param = Param; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Param; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Param = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Param table row + /// + public sealed class RawParamRow : IRawRow { + /// + public ushort Flags; + /// + public ushort Sequence; + /// + public uint Name; + + /// Default constructor + public RawParamRow() { + } + + /// Constructor + public RawParamRow(ushort Flags, ushort Sequence, uint Name) { + this.Flags = Flags; + this.Sequence = Sequence; + this.Name = Name; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Flags; + case 1: return Sequence; + case 2: return Name; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Flags = (ushort)value; break; + case 1: Sequence = (ushort)value; break; + case 2: Name = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed InterfaceImpl table row + /// + public sealed class RawInterfaceImplRow : IRawRow { + /// + public uint Class; + /// + public uint Interface; + + /// Default constructor + public RawInterfaceImplRow() { + } + + /// Constructor + public RawInterfaceImplRow(uint Class, uint Interface) { + this.Class = Class; + this.Interface = Interface; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Class; + case 1: return Interface; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Class = value; break; + case 1: Interface = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed MemberRef table row + /// + public sealed class RawMemberRefRow : IRawRow { + /// + public uint Class; + /// + public uint Name; + /// + public uint Signature; + + /// Default constructor + public RawMemberRefRow() { + } + + /// Constructor + public RawMemberRefRow(uint Class, uint Name, uint Signature) { + this.Class = Class; + this.Name = Name; + this.Signature = Signature; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Class; + case 1: return Name; + case 2: return Signature; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Class = value; break; + case 1: Name = value; break; + case 2: Signature = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Constant table row + /// + public sealed class RawConstantRow : IRawRow { + /// + public byte Type; + /// + public byte Padding; + /// + public uint Parent; + /// + public uint Value; + + /// Default constructor + public RawConstantRow() { + } + + /// Constructor + public RawConstantRow(byte Type, byte Padding, uint Parent, uint Value) { + this.Type = Type; + this.Padding = Padding; + this.Parent = Parent; + this.Value = Value; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Type; + case 1: return Parent; + case 2: return Value; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Type = (byte)value; break; + case 1: Parent = value; break; + case 2: Value = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed CustomAttribute table row + /// + public sealed class RawCustomAttributeRow : IRawRow { + /// + public uint Parent; + /// + public uint Type; + /// + public uint Value; + + /// Default constructor + public RawCustomAttributeRow() { + } + + /// Constructor + public RawCustomAttributeRow(uint Parent, uint Type, uint Value) { + this.Parent = Parent; + this.Type = Type; + this.Value = Value; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Parent; + case 1: return Type; + case 2: return Value; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Parent = value; break; + case 1: Type = value; break; + case 2: Value = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed FieldMarshal table row + /// + public sealed class RawFieldMarshalRow : IRawRow { + /// + public uint Parent; + /// + public uint NativeType; + + /// Default constructor + public RawFieldMarshalRow() { + } + + /// Constructor + public RawFieldMarshalRow(uint Parent, uint NativeType) { + this.Parent = Parent; + this.NativeType = NativeType; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Parent; + case 1: return NativeType; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Parent = value; break; + case 1: NativeType = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed DeclSecurity table row + /// + public sealed class RawDeclSecurityRow : IRawRow { + /// + public short Action; + /// + public uint Parent; + /// + public uint PermissionSet; + + /// Default constructor + public RawDeclSecurityRow() { + } + + /// Constructor + public RawDeclSecurityRow(short Action, uint Parent, uint PermissionSet) { + this.Action = Action; + this.Parent = Parent; + this.PermissionSet = PermissionSet; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return (uint)(int)Action; + case 1: return Parent; + case 2: return PermissionSet; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Action = (short)value; break; + case 1: Parent = value; break; + case 2: PermissionSet = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ClassLayout table row + /// + public sealed class RawClassLayoutRow : IRawRow { + /// + public ushort PackingSize; + /// + public uint ClassSize; + /// + public uint Parent; + + /// Default constructor + public RawClassLayoutRow() { + } + + /// Constructor + public RawClassLayoutRow(ushort PackingSize, uint ClassSize, uint Parent) { + this.PackingSize = PackingSize; + this.ClassSize = ClassSize; + this.Parent = Parent; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return PackingSize; + case 1: return ClassSize; + case 2: return Parent; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: PackingSize = (ushort)value; break; + case 1: ClassSize = value; break; + case 2: Parent = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed FieldLayout table row + /// + public sealed class RawFieldLayoutRow : IRawRow { + /// + public uint OffSet; + /// + public uint Field; + + /// Default constructor + public RawFieldLayoutRow() { + } + + /// Constructor + public RawFieldLayoutRow(uint OffSet, uint Field) { + this.OffSet = OffSet; + this.Field = Field; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return OffSet; + case 1: return Field; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: OffSet = value; break; + case 1: Field = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed StandAloneSig table row + /// + public sealed class RawStandAloneSigRow : IRawRow { + /// + public uint Signature; + + /// Default constructor + public RawStandAloneSigRow() { + } + + /// Constructor + public RawStandAloneSigRow(uint Signature) { + this.Signature = Signature; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Signature; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Signature = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed EventMap table row + /// + public sealed class RawEventMapRow : IRawRow { + /// + public uint Parent; + /// + public uint EventList; + + /// Default constructor + public RawEventMapRow() { + } + + /// Constructor + public RawEventMapRow(uint Parent, uint EventList) { + this.Parent = Parent; + this.EventList = EventList; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Parent; + case 1: return EventList; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Parent = value; break; + case 1: EventList = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed EventPtr table row + /// + public sealed class RawEventPtrRow : IRawRow { + /// + public uint Event; + + /// Default constructor + public RawEventPtrRow() { + } + + /// Constructor + public RawEventPtrRow(uint Event) { + this.Event = Event; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Event; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Event = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Event table row + /// + public sealed class RawEventRow : IRawRow { + /// + public ushort EventFlags; + /// + public uint Name; + /// + public uint EventType; + + /// Default constructor + public RawEventRow() { + } + + /// Constructor + public RawEventRow(ushort EventFlags, uint Name, uint EventType) { + this.EventFlags = EventFlags; + this.Name = Name; + this.EventType = EventType; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return EventFlags; + case 1: return Name; + case 2: return EventType; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: EventFlags = (ushort)value; break; + case 1: Name = value; break; + case 2: EventType = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed PropertyMap table row + /// + public sealed class RawPropertyMapRow : IRawRow { + /// + public uint Parent; + /// + public uint PropertyList; + + /// Default constructor + public RawPropertyMapRow() { + } + + /// Constructor + public RawPropertyMapRow(uint Parent, uint PropertyList) { + this.Parent = Parent; + this.PropertyList = PropertyList; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Parent; + case 1: return PropertyList; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Parent = value; break; + case 1: PropertyList = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed PropertyPtr table row + /// + public sealed class RawPropertyPtrRow : IRawRow { + /// + public uint Property; + + /// Default constructor + public RawPropertyPtrRow() { + } + + /// Constructor + public RawPropertyPtrRow(uint Property) { + this.Property = Property; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Property; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Property = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Property table row + /// + public sealed class RawPropertyRow : IRawRow { + /// + public ushort PropFlags; + /// + public uint Name; + /// + public uint Type; + + /// Default constructor + public RawPropertyRow() { + } + + /// Constructor + public RawPropertyRow(ushort PropFlags, uint Name, uint Type) { + this.PropFlags = PropFlags; + this.Name = Name; + this.Type = Type; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return PropFlags; + case 1: return Name; + case 2: return Type; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: PropFlags = (ushort)value; break; + case 1: Name = value; break; + case 2: Type = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed MethodSemantics table row + /// + public sealed class RawMethodSemanticsRow : IRawRow { + /// + public ushort Semantic; + /// + public uint Method; + /// + public uint Association; + + /// Default constructor + public RawMethodSemanticsRow() { + } + + /// Constructor + public RawMethodSemanticsRow(ushort Semantic, uint Method, uint Association) { + this.Semantic = Semantic; + this.Method = Method; + this.Association = Association; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Semantic; + case 1: return Method; + case 2: return Association; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Semantic = (ushort)value; break; + case 1: Method = value; break; + case 2: Association = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed MethodImpl table row + /// + public sealed class RawMethodImplRow : IRawRow { + /// + public uint Class; + /// + public uint MethodBody; + /// + public uint MethodDeclaration; + + /// Default constructor + public RawMethodImplRow() { + } + + /// Constructor + public RawMethodImplRow(uint Class, uint MethodBody, uint MethodDeclaration) { + this.Class = Class; + this.MethodBody = MethodBody; + this.MethodDeclaration = MethodDeclaration; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Class; + case 1: return MethodBody; + case 2: return MethodDeclaration; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Class = value; break; + case 1: MethodBody = value; break; + case 2: MethodDeclaration = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ModuleRef table row + /// + public sealed class RawModuleRefRow : IRawRow { + /// + public uint Name; + + /// Default constructor + public RawModuleRefRow() { + } + + /// Constructor + public RawModuleRefRow(uint Name) { + this.Name = Name; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Name; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Name = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed TypeSpec table row + /// + public sealed class RawTypeSpecRow : IRawRow { + /// + public uint Signature; + + /// Default constructor + public RawTypeSpecRow() { + } + + /// Constructor + public RawTypeSpecRow(uint Signature) { + this.Signature = Signature; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Signature; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Signature = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ImplMap table row + /// + public sealed class RawImplMapRow : IRawRow { + /// + public ushort MappingFlags; + /// + public uint MemberForwarded; + /// + public uint ImportName; + /// + public uint ImportScope; + + /// Default constructor + public RawImplMapRow() { + } + + /// Constructor + public RawImplMapRow(ushort MappingFlags, uint MemberForwarded, uint ImportName, uint ImportScope) { + this.MappingFlags = MappingFlags; + this.MemberForwarded = MemberForwarded; + this.ImportName = ImportName; + this.ImportScope = ImportScope; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return MappingFlags; + case 1: return MemberForwarded; + case 2: return ImportName; + case 3: return ImportScope; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: MappingFlags = (ushort)value; break; + case 1: MemberForwarded = value; break; + case 2: ImportName = value; break; + case 3: ImportScope = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed FieldRVA table row + /// + public sealed class RawFieldRVARow : IRawRow { + /// + public uint RVA; + /// + public uint Field; + + /// Default constructor + public RawFieldRVARow() { + } + + /// Constructor + public RawFieldRVARow(uint RVA, uint Field) { + this.RVA = RVA; + this.Field = Field; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return RVA; + case 1: return Field; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: RVA = value; break; + case 1: Field = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ENCLog table row + /// + public sealed class RawENCLogRow : IRawRow { + /// + public uint Token; + /// + public uint FuncCode; + + /// Default constructor + public RawENCLogRow() { + } + + /// Constructor + public RawENCLogRow(uint Token, uint FuncCode) { + this.Token = Token; + this.FuncCode = FuncCode; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Token; + case 1: return FuncCode; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Token = value; break; + case 1: FuncCode = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ENCMap table row + /// + public sealed class RawENCMapRow : IRawRow { + /// + public uint Token; + + /// Default constructor + public RawENCMapRow() { + } + + /// Constructor + public RawENCMapRow(uint Token) { + this.Token = Token; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Token; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Token = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed Assembly table row + /// + public sealed class RawAssemblyRow : IRawRow { + /// + public uint HashAlgId; + /// + public ushort MajorVersion; + /// + public ushort MinorVersion; + /// + public ushort BuildNumber; + /// + public ushort RevisionNumber; + /// + public uint Flags; + /// + public uint PublicKey; + /// + public uint Name; + /// + public uint Locale; + + /// Default constructor + public RawAssemblyRow() { + } + + /// Constructor + public RawAssemblyRow(uint HashAlgId, ushort MajorVersion, ushort MinorVersion, ushort BuildNumber, ushort RevisionNumber, uint Flags, uint PublicKey, uint Name, uint Locale) { + this.HashAlgId = HashAlgId; + this.MajorVersion = MajorVersion; + this.MinorVersion = MinorVersion; + this.BuildNumber = BuildNumber; + this.RevisionNumber = RevisionNumber; + this.Flags = Flags; + this.PublicKey = PublicKey; + this.Name = Name; + this.Locale = Locale; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return HashAlgId; + case 1: return MajorVersion; + case 2: return MinorVersion; + case 3: return BuildNumber; + case 4: return RevisionNumber; + case 5: return Flags; + case 6: return PublicKey; + case 7: return Name; + case 8: return Locale; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: HashAlgId = value; break; + case 1: MajorVersion = (ushort)value; break; + case 2: MinorVersion = (ushort)value; break; + case 3: BuildNumber = (ushort)value; break; + case 4: RevisionNumber = (ushort)value; break; + case 5: Flags = value; break; + case 6: PublicKey = value; break; + case 7: Name = value; break; + case 8: Locale = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed AssemblyProcessor table row + /// + public sealed class RawAssemblyProcessorRow : IRawRow { + /// + public uint Processor; + + /// Default constructor + public RawAssemblyProcessorRow() { + } + + /// Constructor + public RawAssemblyProcessorRow(uint Processor) { + this.Processor = Processor; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Processor; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Processor = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed AssemblyOS table row + /// + public sealed class RawAssemblyOSRow : IRawRow { + /// + public uint OSPlatformId; + /// + public uint OSMajorVersion; + /// + public uint OSMinorVersion; + + /// Default constructor + public RawAssemblyOSRow() { + } + + /// Constructor + public RawAssemblyOSRow(uint OSPlatformId, uint OSMajorVersion, uint OSMinorVersion) { + this.OSPlatformId = OSPlatformId; + this.OSMajorVersion = OSMajorVersion; + this.OSMinorVersion = OSMinorVersion; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return OSPlatformId; + case 1: return OSMajorVersion; + case 2: return OSMinorVersion; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: OSPlatformId = value; break; + case 1: OSMajorVersion = value; break; + case 2: OSMinorVersion = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed AssemblyRef table row + /// + public sealed class RawAssemblyRefRow : IRawRow { + /// + public ushort MajorVersion; + /// + public ushort MinorVersion; + /// + public ushort BuildNumber; + /// + public ushort RevisionNumber; + /// + public uint Flags; + /// + public uint PublicKeyOrToken; + /// + public uint Name; + /// + public uint Locale; + /// + public uint HashValue; + + /// Default constructor + public RawAssemblyRefRow() { + } + + /// Constructor + public RawAssemblyRefRow(ushort MajorVersion, ushort MinorVersion, ushort BuildNumber, ushort RevisionNumber, uint Flags, uint PublicKeyOrToken, uint Name, uint Locale, uint HashValue) { + this.MajorVersion = MajorVersion; + this.MinorVersion = MinorVersion; + this.BuildNumber = BuildNumber; + this.RevisionNumber = RevisionNumber; + this.Flags = Flags; + this.PublicKeyOrToken = PublicKeyOrToken; + this.Name = Name; + this.Locale = Locale; + this.HashValue = HashValue; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return MajorVersion; + case 1: return MinorVersion; + case 2: return BuildNumber; + case 3: return RevisionNumber; + case 4: return Flags; + case 5: return PublicKeyOrToken; + case 6: return Name; + case 7: return Locale; + case 8: return HashValue; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: MajorVersion = (ushort)value; break; + case 1: MinorVersion = (ushort)value; break; + case 2: BuildNumber = (ushort)value; break; + case 3: RevisionNumber = (ushort)value; break; + case 4: Flags = value; break; + case 5: PublicKeyOrToken = value; break; + case 6: Name = value; break; + case 7: Locale = value; break; + case 8: HashValue = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed AssemblyRefProcessor table row + /// + public sealed class RawAssemblyRefProcessorRow : IRawRow { + /// + public uint Processor; + /// + public uint AssemblyRef; + + /// Default constructor + public RawAssemblyRefProcessorRow() { + } + + /// Constructor + public RawAssemblyRefProcessorRow(uint Processor, uint AssemblyRef) { + this.Processor = Processor; + this.AssemblyRef = AssemblyRef; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Processor; + case 1: return AssemblyRef; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Processor = value; break; + case 1: AssemblyRef = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed AssemblyRefOS table row + /// + public sealed class RawAssemblyRefOSRow : IRawRow { + /// + public uint OSPlatformId; + /// + public uint OSMajorVersion; + /// + public uint OSMinorVersion; + /// + public uint AssemblyRef; + + /// Default constructor + public RawAssemblyRefOSRow() { + } + + /// Constructor + public RawAssemblyRefOSRow(uint OSPlatformId, uint OSMajorVersion, uint OSMinorVersion, uint AssemblyRef) { + this.OSPlatformId = OSPlatformId; + this.OSMajorVersion = OSMajorVersion; + this.OSMinorVersion = OSMinorVersion; + this.AssemblyRef = AssemblyRef; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return OSPlatformId; + case 1: return OSMajorVersion; + case 2: return OSMinorVersion; + case 3: return AssemblyRef; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: OSPlatformId = value; break; + case 1: OSMajorVersion = value; break; + case 2: OSMinorVersion = value; break; + case 3: AssemblyRef = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed File table row + /// + public sealed class RawFileRow : IRawRow { + /// + public uint Flags; + /// + public uint Name; + /// + public uint HashValue; + + /// Default constructor + public RawFileRow() { + } + + /// Constructor + public RawFileRow(uint Flags, uint Name, uint HashValue) { + this.Flags = Flags; + this.Name = Name; + this.HashValue = HashValue; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Flags; + case 1: return Name; + case 2: return HashValue; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Flags = value; break; + case 1: Name = value; break; + case 2: HashValue = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ExportedType table row + /// + public sealed class RawExportedTypeRow : IRawRow { + /// + public uint Flags; + /// + public uint TypeDefId; + /// + public uint TypeName; + /// + public uint TypeNamespace; + /// + public uint Implementation; + + /// Default constructor + public RawExportedTypeRow() { + } + + /// Constructor + public RawExportedTypeRow(uint Flags, uint TypeDefId, uint TypeName, uint TypeNamespace, uint Implementation) { + this.Flags = Flags; + this.TypeDefId = TypeDefId; + this.TypeName = TypeName; + this.TypeNamespace = TypeNamespace; + this.Implementation = Implementation; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Flags; + case 1: return TypeDefId; + case 2: return TypeName; + case 3: return TypeNamespace; + case 4: return Implementation; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Flags = value; break; + case 1: TypeDefId = value; break; + case 2: TypeName = value; break; + case 3: TypeNamespace = value; break; + case 4: Implementation = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed ManifestResource table row + /// + public sealed class RawManifestResourceRow : IRawRow { + /// + public uint Offset; + /// + public uint Flags; + /// + public uint Name; + /// + public uint Implementation; + + /// Default constructor + public RawManifestResourceRow() { + } + + /// Constructor + public RawManifestResourceRow(uint Offset, uint Flags, uint Name, uint Implementation) { + this.Offset = Offset; + this.Flags = Flags; + this.Name = Name; + this.Implementation = Implementation; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Offset; + case 1: return Flags; + case 2: return Name; + case 3: return Implementation; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Offset = value; break; + case 1: Flags = value; break; + case 2: Name = value; break; + case 3: Implementation = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed NestedClass table row + /// + public sealed class RawNestedClassRow : IRawRow { + /// + public uint NestedClass; + /// + public uint EnclosingClass; + + /// Default constructor + public RawNestedClassRow() { + } + + /// Constructor + public RawNestedClassRow(uint NestedClass, uint EnclosingClass) { + this.NestedClass = NestedClass; + this.EnclosingClass = EnclosingClass; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return NestedClass; + case 1: return EnclosingClass; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: NestedClass = value; break; + case 1: EnclosingClass = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed GenericParam table row + /// + public sealed class RawGenericParamRow : IRawRow { + /// + public ushort Number; + /// + public ushort Flags; + /// + public uint Owner; + /// + public uint Name; + /// + public uint Kind; + + /// Default constructor + public RawGenericParamRow() { + } + + /// Constructor + public RawGenericParamRow(ushort Number, ushort Flags, uint Owner, uint Name, uint Kind) { + this.Number = Number; + this.Flags = Flags; + this.Owner = Owner; + this.Name = Name; + this.Kind = Kind; + } + + /// Constructor + public RawGenericParamRow(ushort Number, ushort Flags, uint Owner, uint Name) { + this.Number = Number; + this.Flags = Flags; + this.Owner = Owner; + this.Name = Name; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Number; + case 1: return Flags; + case 2: return Owner; + case 3: return Name; + case 4: return Kind; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Number = (ushort)value; break; + case 1: Flags = (ushort)value; break; + case 2: Owner = value; break; + case 3: Name = value; break; + case 4: Kind = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed MethodSpec table row + /// + public sealed class RawMethodSpecRow : IRawRow { + /// + public uint Method; + /// + public uint Instantiation; + + /// Default constructor + public RawMethodSpecRow() { + } + + /// Constructor + public RawMethodSpecRow(uint Method, uint Instantiation) { + this.Method = Method; + this.Instantiation = Instantiation; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Method; + case 1: return Instantiation; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Method = value; break; + case 1: Instantiation = value; break; + default: break; + } + } + } + + /// + /// Raw contents of an uncompressed GenericParamConstraint table row + /// + public sealed class RawGenericParamConstraintRow : IRawRow { + /// + public uint Owner; + /// + public uint Constraint; + + /// Default constructor + public RawGenericParamConstraintRow() { + } + + /// Constructor + public RawGenericParamConstraintRow(uint Owner, uint Constraint) { + this.Owner = Owner; + this.Constraint = Constraint; + } + + /// + public uint Read(int index) { + switch (index) { + case 0: return Owner; + case 1: return Constraint; + default: return 0; + } + } + + /// + public void Write(int index, uint value) { + switch (index) { + case 0: Owner = value; break; + case 1: Constraint = value; break; + default: break; + } + } + } +} diff --git a/dnlib/DotNet/MD/RidList.cs b/dnlib/DotNet/MD/RidList.cs new file mode 100644 index 0000000..7cd9ccc --- /dev/null +++ b/dnlib/DotNet/MD/RidList.cs @@ -0,0 +1,145 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.Diagnostics; + +namespace dnlib.DotNet.MD { + /// + /// Stores a list of rids + /// + [DebuggerDisplay("Length = {Length}")] + public abstract class RidList { + /// + /// The empty + /// + public static readonly RidList Empty = new ContiguousRidList(0, 0); + + /// + /// Gets the number of rids it will iterate over (UInt32) + /// + public abstract uint Length { get; } + + /// + /// Gets the number of rids it will iterate over (Int32) + /// + public abstract int Count { get; } + + /// + /// Gets the 'th rid + /// + /// Index. Must be < + /// A rid or 0 if is invalid + public abstract uint this[uint index] { get; } + + /// + /// Gets the 'th rid + /// + /// Index. Must be < + /// A rid or 0 if is invalid + public abstract uint this[int index] { get; } + } + + /// + /// A where the rids are contiguous + /// + sealed class ContiguousRidList : RidList { + readonly uint startRid; + readonly uint length; + + /// + /// Gets the start rid + /// + public uint StartRID { + get { return startRid; } + } + + /// + public override uint Length { + get { return length; } + } + + /// + public override int Count { + get { return (int)length; } + } + + /// + public override uint this[uint index] { + get { + if (index >= length) + return 0; + return startRid + index; + } + } + + /// + public override uint this[int index] { + get { return this[(uint)index]; } + } + + /// + /// Constructor + /// + /// First rid to return + /// Number of rids to return + public ContiguousRidList(uint startRid, uint length) { + this.startRid = startRid; + this.length = length; + } + } + + /// + /// A where the returned rids aren't necessarily contiguous. + /// This should be used if eg. the pointer tables are present. + /// + sealed class RandomRidList : RidList { + readonly IList indexToRid; + + /// + public override uint Length { + get { return (uint)indexToRid.Count; } + } + + /// + public override int Count { + get { return indexToRid.Count; } + } + + /// + public override uint this[uint index] { + get { + if (index >= (uint)indexToRid.Count) + return 0; + return indexToRid[(int)index]; + } + } + + /// + public override uint this[int index] { + get { return this[(uint)index]; } + } + + /// + /// Default constructor + /// + public RandomRidList() { + this.indexToRid = new List(); + } + + /// + /// Constructor + /// + /// Approximate number of rids that will be returned + public RandomRidList(int capacity) { + this.indexToRid = new List(capacity); + } + + /// + /// Add a new rid that should be returned + /// + /// The rid + public void Add(uint rid) { + indexToRid.Add(rid); + } + } +} diff --git a/dnlib/DotNet/MD/StorageFlags.cs b/dnlib/DotNet/MD/StorageFlags.cs new file mode 100644 index 0000000..7f9ced4 --- /dev/null +++ b/dnlib/DotNet/MD/StorageFlags.cs @@ -0,0 +1,22 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.MD { + /// + /// Storage flags found in the MD header + /// + [Flags] + public enum StorageFlags : byte { + /// + /// Normal flags + /// + Normal = 0, + + /// + /// More data after the header but before the streams. + /// + /// The CLR will fail to load the file if this flag (or any other bits) is set. + ExtraData = 1, + } +} diff --git a/dnlib/DotNet/MD/StreamHeader.cs b/dnlib/DotNet/MD/StreamHeader.cs new file mode 100644 index 0000000..5cc5817 --- /dev/null +++ b/dnlib/DotNet/MD/StreamHeader.cs @@ -0,0 +1,72 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Text; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// A metadata stream header + /// + [DebuggerDisplay("O:{offset} L:{streamSize} {name}")] + public sealed class StreamHeader : FileSection { + readonly uint offset; + readonly uint streamSize; + readonly string name; + + /// + /// The offset of the stream relative to the start of the MetaData header + /// + public uint Offset { + get { return offset; } + } + + /// + /// The size of the stream + /// + public uint StreamSize { + get { return streamSize; } + } + + /// + /// The name of the stream + /// + public string Name { + get { return name; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public StreamHeader(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.offset = reader.ReadUInt32(); + this.streamSize = reader.ReadUInt32(); + this.name = ReadString(reader, 32, verify); + SetEndoffset(reader); + if (verify && offset + size < offset) + throw new BadImageFormatException("Invalid stream header"); + } + + static string ReadString(IImageStream reader, int maxLen, bool verify) { + var origPos = reader.Position; + var sb = new StringBuilder(maxLen); + int i; + for (i = 0; i < maxLen; i++) { + byte b = reader.ReadByte(); + if (b == 0) + break; + sb.Append((char)b); + } + if (verify && i == maxLen) + throw new BadImageFormatException("Invalid stream name string"); + if (i != maxLen) + reader.Position = origPos + ((i + 1 + 3) & ~3); + return sb.ToString(); + } + } +} diff --git a/dnlib/DotNet/MD/StringsStream.cs b/dnlib/DotNet/MD/StringsStream.cs new file mode 100644 index 0000000..5c9093b --- /dev/null +++ b/dnlib/DotNet/MD/StringsStream.cs @@ -0,0 +1,51 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Represents the #Strings stream + /// + public sealed class StringsStream : HeapStream { + /// + public StringsStream() { + } + + /// + public StringsStream(IImageStream imageStream, StreamHeader streamHeader) + : base(imageStream, streamHeader) { + } + + /// + /// Reads a + /// + /// Offset of string + /// A instance or null if invalid offset + public UTF8String Read(uint offset) { + if (offset >= ImageStreamLength) + return null; + byte[] data; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(offset); + data = reader.ReadBytesUntilByte(0); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + if (data == null) + return null; + return new UTF8String(data); + } + + /// + /// Reads a . The empty string is returned if + /// is invalid. + /// + /// Offset of string + /// A instance + public UTF8String ReadNoNull(uint offset) { + return Read(offset) ?? UTF8String.Empty; + } + } +} diff --git a/dnlib/DotNet/MD/Table.cs b/dnlib/DotNet/MD/Table.cs new file mode 100644 index 0000000..2682c22 --- /dev/null +++ b/dnlib/DotNet/MD/Table.cs @@ -0,0 +1,99 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.MD { + /// + /// The metadata tables + /// + public enum Table : byte { + /// Module table (00h) + Module, + /// TypeRef table (01h) + TypeRef, + /// TypeDef table (02h) + TypeDef, + /// FieldPtr table (03h) + FieldPtr, + /// Field table (04h) + Field, + /// MethodPtr table (05h) + MethodPtr, + /// Method table (06h) + Method, + /// ParamPtr table (07h) + ParamPtr, + /// Param table (08h) + Param, + /// InterfaceImpl table (09h) + InterfaceImpl, + /// MemberRef table (0Ah) + MemberRef, + /// Constant table (0Bh) + Constant, + /// CustomAttribute table (0Ch) + CustomAttribute, + /// FieldMarshal table (0Dh) + FieldMarshal, + /// DeclSecurity table (0Eh) + DeclSecurity, + /// ClassLayout table (0Fh) + ClassLayout, + /// FieldLayout table (10h) + FieldLayout, + /// StandAloneSig table (11h) + StandAloneSig, + /// EventMap table (12h) + EventMap, + /// EventPtr table (13h) + EventPtr, + /// Event table (14h) + Event, + /// PropertyMap table (15h) + PropertyMap, + /// PropertyPtr table (16h) + PropertyPtr, + /// Property table (17h) + Property, + /// MethodSemantics table (18h) + MethodSemantics, + /// MethodImpl table (19h) + MethodImpl, + /// ModuleRef table (1Ah) + ModuleRef, + /// TypeSpec table (1Bh) + TypeSpec, + /// ImplMap table (1Ch) + ImplMap, + /// FieldRVA table (1Dh) + FieldRVA, + /// ENCLog table (1Eh) + ENCLog, + /// ENCMap table (1Fh) + ENCMap, + /// Assembly table (20h) + Assembly, + /// AssemblyProcessor table (21h) + AssemblyProcessor, + /// AssemblyOS table (22h) + AssemblyOS, + /// AssemblyRef table (23h) + AssemblyRef, + /// AssemblyRefProcessor table (24h) + AssemblyRefProcessor, + /// AssemblyRefOS table (25h) + AssemblyRefOS, + /// File table (26h) + File, + /// ExportedType table (27h) + ExportedType, + /// ManifestResource table (28h) + ManifestResource, + /// NestedClass table (29h) + NestedClass, + /// GenericParam table (2Ah) + GenericParam, + /// MethodSpec table (2Bh) + MethodSpec, + /// GenericParamConstraint table (2Ch) + GenericParamConstraint, + } +} diff --git a/dnlib/DotNet/MD/TableInfo.cs b/dnlib/DotNet/MD/TableInfo.cs new file mode 100644 index 0000000..0c4a0c4 --- /dev/null +++ b/dnlib/DotNet/MD/TableInfo.cs @@ -0,0 +1,72 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.Diagnostics; + +namespace dnlib.DotNet.MD { + /// + /// Info about one MD table + /// + [DebuggerDisplay("{rowSize} {name}")] + public sealed class TableInfo { + readonly Table table; + int rowSize; + readonly IList columns; + readonly string name; + + /// + /// Returns the table type + /// + public Table Table { + get { return table; } + } + + /// + /// Returns the total size of a row in bytes + /// + public int RowSize { + get { return rowSize; } + internal set { rowSize = value; } + } + + /// + /// Returns all the columns + /// + public IList Columns { + get { return columns; } + } + + /// + /// Returns the name of the table + /// + public string Name { + get { return name; } + } + + /// + /// Constructor + /// + /// Table type + /// Table name + /// All columns + public TableInfo(Table table, string name, IList columns) { + this.table = table; + this.name = name; + this.columns = columns; + } + + /// + /// Constructor + /// + /// Table type + /// Table name + /// All columns + /// Row size + public TableInfo(Table table, string name, IList columns, int rowSize) { + this.table = table; + this.name = name; + this.columns = columns; + this.rowSize = rowSize; + } + } +} diff --git a/dnlib/DotNet/MD/TablesStream.cs b/dnlib/DotNet/MD/TablesStream.cs new file mode 100644 index 0000000..3b09a2a --- /dev/null +++ b/dnlib/DotNet/MD/TablesStream.cs @@ -0,0 +1,357 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; +using dnlib.PE; +using dnlib.Threading; + +namespace dnlib.DotNet.MD { + /// + /// .NET metadata tables stream + /// + public sealed partial class TablesStream : DotNetStream { + bool initialized; + uint reserved1; + byte majorVersion; + byte minorVersion; + MDStreamFlags flags; + byte log2Rid; + ulong validMask; + ulong sortedMask; + uint extraData; + MDTable[] mdTables; + + HotTableStream hotTableStream; + IColumnReader columnReader; + IRowReader methodRowReader; + +#pragma warning disable 1591 // XML doc comment + public MDTable ModuleTable { get; private set; } + public MDTable TypeRefTable { get; private set; } + public MDTable TypeDefTable { get; private set; } + public MDTable FieldPtrTable { get; private set; } + public MDTable FieldTable { get; private set; } + public MDTable MethodPtrTable { get; private set; } + public MDTable MethodTable { get; private set; } + public MDTable ParamPtrTable { get; private set; } + public MDTable ParamTable { get; private set; } + public MDTable InterfaceImplTable { get; private set; } + public MDTable MemberRefTable { get; private set; } + public MDTable ConstantTable { get; private set; } + public MDTable CustomAttributeTable { get; private set; } + public MDTable FieldMarshalTable { get; private set; } + public MDTable DeclSecurityTable { get; private set; } + public MDTable ClassLayoutTable { get; private set; } + public MDTable FieldLayoutTable { get; private set; } + public MDTable StandAloneSigTable { get; private set; } + public MDTable EventMapTable { get; private set; } + public MDTable EventPtrTable { get; private set; } + public MDTable EventTable { get; private set; } + public MDTable PropertyMapTable { get; private set; } + public MDTable PropertyPtrTable { get; private set; } + public MDTable PropertyTable { get; private set; } + public MDTable MethodSemanticsTable { get; private set; } + public MDTable MethodImplTable { get; private set; } + public MDTable ModuleRefTable { get; private set; } + public MDTable TypeSpecTable { get; private set; } + public MDTable ImplMapTable { get; private set; } + public MDTable FieldRVATable { get; private set; } + public MDTable ENCLogTable { get; private set; } + public MDTable ENCMapTable { get; private set; } + public MDTable AssemblyTable { get; private set; } + public MDTable AssemblyProcessorTable { get; private set; } + public MDTable AssemblyOSTable { get; private set; } + public MDTable AssemblyRefTable { get; private set; } + public MDTable AssemblyRefProcessorTable { get; private set; } + public MDTable AssemblyRefOSTable { get; private set; } + public MDTable FileTable { get; private set; } + public MDTable ExportedTypeTable { get; private set; } + public MDTable ManifestResourceTable { get; private set; } + public MDTable NestedClassTable { get; private set; } + public MDTable GenericParamTable { get; private set; } + public MDTable MethodSpecTable { get; private set; } + public MDTable GenericParamConstraintTable { get; private set; } +#pragma warning restore + +#if THREAD_SAFE + internal readonly Lock theLock = Lock.Create(); +#endif + + internal HotTableStream HotTableStream { + set { hotTableStream = value; } + } + + /// + /// Gets/sets the column reader + /// + public IColumnReader ColumnReader { + get { return columnReader; } + set { columnReader = value; } + } + + /// + /// Gets/sets the Method table reader + /// + public IRowReader MethodRowReader { + get { return methodRowReader; } + set { methodRowReader = value; } + } + + /// + /// Gets the reserved field + /// + public uint Reserved1 { + get { return reserved1; } + } + + /// + /// Gets the version. The major version is in the upper 8 bits, and the minor version + /// is in the lower 8 bits. + /// + public ushort Version { + get { return (ushort)((majorVersion << 8) | minorVersion); } + } + + /// + /// Gets + /// + public MDStreamFlags Flags { + get { return flags; } + } + + /// + /// Gets the reserved log2 rid field + /// + public byte Log2Rid { + get { return log2Rid; } + } + + /// + /// Gets the valid mask + /// + public ulong ValidMask { + get { return validMask; } + } + + /// + /// Gets the sorted mask + /// + public ulong SortedMask { + get { return sortedMask; } + } + + /// + /// Gets the extra data + /// + public uint ExtraData { + get { return extraData; } + } + + /// + /// Gets the MD tables + /// + public MDTable[] MDTables { + get { return mdTables; } + } + + /// + /// Gets the bit + /// + public bool HasBigStrings { + get { return (flags & MDStreamFlags.BigStrings) != 0; } + } + + /// + /// Gets the bit + /// + public bool HasBigGUID { + get { return (flags & MDStreamFlags.BigGUID) != 0; } + } + + /// + /// Gets the bit + /// + public bool HasBigBlob { + get { return (flags & MDStreamFlags.BigBlob) != 0; } + } + + /// + /// Gets the bit + /// + public bool HasPadding { + get { return (flags & MDStreamFlags.Padding) != 0; } + } + + /// + /// Gets the bit + /// + public bool HasDeltaOnly { + get { return (flags & MDStreamFlags.DeltaOnly) != 0; } + } + + /// + /// Gets the bit + /// + public bool HasExtraData { + get { return (flags & MDStreamFlags.ExtraData) != 0; } + } + + /// + /// Gets the bit + /// + public bool HasDelete { + get { return (flags & MDStreamFlags.HasDelete) != 0; } + } + + /// + public TablesStream(IImageStream imageStream, StreamHeader streamHeader) + : base(imageStream, streamHeader) { + } + + /// + /// Initializes MD tables + /// + /// The PEImage + public void Initialize(IPEImage peImage) { + if (initialized) + throw new Exception("Initialize() has already been called"); + initialized = true; + + reserved1 = imageStream.ReadUInt32(); + majorVersion = imageStream.ReadByte(); + minorVersion = imageStream.ReadByte(); + flags = (MDStreamFlags)imageStream.ReadByte(); + log2Rid = imageStream.ReadByte(); + validMask = imageStream.ReadUInt64(); + sortedMask = imageStream.ReadUInt64(); + + int maxPresentTables; + var dnTableSizes = new DotNetTableSizes(); + var tableInfos = dnTableSizes.CreateTables(majorVersion, minorVersion, out maxPresentTables); + mdTables = new MDTable[tableInfos.Length]; + + ulong valid = validMask; + var sizes = new uint[64]; + for (int i = 0; i < 64; valid >>= 1, i++) { + uint rows = (valid & 1) == 0 ? 0 : imageStream.ReadUInt32(); + if (i >= maxPresentTables) + rows = 0; + sizes[i] = rows; + if (i < mdTables.Length) + mdTables[i] = new MDTable((Table)i, rows, tableInfos[i]); + } + + if (HasExtraData) + extraData = imageStream.ReadUInt32(); + + dnTableSizes.InitializeSizes(HasBigStrings, HasBigGUID, HasBigBlob, sizes); + + var currentRva = peImage.ToRVA(imageStream.FileOffset) + (uint)imageStream.Position; + foreach (var mdTable in mdTables) { + var dataLen = (long)mdTable.TableInfo.RowSize * (long)mdTable.Rows; + mdTable.ImageStream = peImage.CreateStream(currentRva, dataLen); + var newRva = currentRva + (uint)dataLen; + if (newRva < currentRva) + throw new BadImageFormatException("Too big MD table"); + currentRva = newRva; + } + + InitializeTables(); + } + + void InitializeTables() { + ModuleTable = mdTables[(int)Table.Module]; + TypeRefTable = mdTables[(int)Table.TypeRef]; + TypeDefTable = mdTables[(int)Table.TypeDef]; + FieldPtrTable = mdTables[(int)Table.FieldPtr]; + FieldTable = mdTables[(int)Table.Field]; + MethodPtrTable = mdTables[(int)Table.MethodPtr]; + MethodTable = mdTables[(int)Table.Method]; + ParamPtrTable = mdTables[(int)Table.ParamPtr]; + ParamTable = mdTables[(int)Table.Param]; + InterfaceImplTable = mdTables[(int)Table.InterfaceImpl]; + MemberRefTable = mdTables[(int)Table.MemberRef]; + ConstantTable = mdTables[(int)Table.Constant]; + CustomAttributeTable = mdTables[(int)Table.CustomAttribute]; + FieldMarshalTable = mdTables[(int)Table.FieldMarshal]; + DeclSecurityTable = mdTables[(int)Table.DeclSecurity]; + ClassLayoutTable = mdTables[(int)Table.ClassLayout]; + FieldLayoutTable = mdTables[(int)Table.FieldLayout]; + StandAloneSigTable = mdTables[(int)Table.StandAloneSig]; + EventMapTable = mdTables[(int)Table.EventMap]; + EventPtrTable = mdTables[(int)Table.EventPtr]; + EventTable = mdTables[(int)Table.Event]; + PropertyMapTable = mdTables[(int)Table.PropertyMap]; + PropertyPtrTable = mdTables[(int)Table.PropertyPtr]; + PropertyTable = mdTables[(int)Table.Property]; + MethodSemanticsTable = mdTables[(int)Table.MethodSemantics]; + MethodImplTable = mdTables[(int)Table.MethodImpl]; + ModuleRefTable = mdTables[(int)Table.ModuleRef]; + TypeSpecTable = mdTables[(int)Table.TypeSpec]; + ImplMapTable = mdTables[(int)Table.ImplMap]; + FieldRVATable = mdTables[(int)Table.FieldRVA]; + ENCLogTable = mdTables[(int)Table.ENCLog]; + ENCMapTable = mdTables[(int)Table.ENCMap]; + AssemblyTable = mdTables[(int)Table.Assembly]; + AssemblyProcessorTable = mdTables[(int)Table.AssemblyProcessor]; + AssemblyOSTable = mdTables[(int)Table.AssemblyOS]; + AssemblyRefTable = mdTables[(int)Table.AssemblyRef]; + AssemblyRefProcessorTable = mdTables[(int)Table.AssemblyRefProcessor]; + AssemblyRefOSTable = mdTables[(int)Table.AssemblyRefOS]; + FileTable = mdTables[(int)Table.File]; + ExportedTypeTable = mdTables[(int)Table.ExportedType]; + ManifestResourceTable = mdTables[(int)Table.ManifestResource]; + NestedClassTable = mdTables[(int)Table.NestedClass]; + GenericParamTable = mdTables[(int)Table.GenericParam]; + MethodSpecTable = mdTables[(int)Table.MethodSpec]; + GenericParamConstraintTable = mdTables[(int)Table.GenericParamConstraint]; + } + + /// + protected override void Dispose(bool disposing) { + if (disposing) { + var mt = mdTables; + if (mt != null) { + foreach (var mdTable in mt) { + if (mdTable != null) + mdTable.Dispose(); + } + mdTables = null; + } + } + base.Dispose(disposing); + } + + /// + /// Returns a MD table + /// + /// The table type + /// A or null if table doesn't exist + public MDTable Get(Table table) { + int index = (int)table; + if ((uint)index >= (uint)mdTables.Length) + return null; + return mdTables[index]; + } + + /// + /// Checks whether a table exists + /// + /// The table type + /// true if the table exists + public bool HasTable(Table table) { + return (uint)table < (uint)mdTables.Length; + } + + /// + /// Checks whether table is sorted + /// + /// The table + public bool IsSorted(MDTable table) { + int index = (int)table.Table; + if ((uint)index >= 64) + return false; + return (sortedMask & (1UL << index)) != 0; + } + } +} diff --git a/dnlib/DotNet/MD/TablesStream_Read.cs b/dnlib/DotNet/MD/TablesStream_Read.cs new file mode 100644 index 0000000..91315fc --- /dev/null +++ b/dnlib/DotNet/MD/TablesStream_Read.cs @@ -0,0 +1,1755 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.MD { + public partial class TablesStream { + IBinaryReader GetReader_NoLock(MDTable table, uint rid) { + IBinaryReader reader; + if (hotTableStream != null) { + reader = hotTableStream.GetTableReader(table, rid); + if (reader != null) + return reader; + } + reader = table.ImageStream; + reader.Position = (rid - 1) * table.TableInfo.RowSize; + return reader; + } + + /// + /// Reads a raw Module row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawModuleRow ReadModuleRow(uint rid) { + var table = ModuleTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawModuleRow(reader.ReadUInt16(), + columns[1].Read(reader), + columns[2].Read(reader), + columns[3].Read(reader), + columns[4].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Module row + /// + /// Row ID + /// + /// + /// + /// + /// + internal uint ReadModuleRow(uint rid, out ushort generation, out uint name, out uint mvid, out uint encId) { + var table = ModuleTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + generation = reader.ReadUInt16(); + name = columns[1].Read(reader); + mvid = columns[2].Read(reader); + encId = columns[3].Read(reader); + return columns[4].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw TypeRef row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawTypeRefRow ReadTypeRefRow(uint rid) { + var table = TypeRefTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawTypeRefRow(columns[0].Read(reader), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw TypeRef row + /// + /// Row ID + /// + /// + /// + internal uint ReadTypeRefRow(uint rid, out uint resolutionScope, out uint name) { + var table = TypeRefTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + resolutionScope = columns[0].Read(reader); + name = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw TypeDef row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawTypeDefRow ReadTypeDefRow(uint rid) { + var table = TypeDefTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawTypeDefRow(reader.ReadUInt32(), + columns[1].Read(reader), + columns[2].Read(reader), + columns[3].Read(reader), + columns[4].Read(reader), + columns[5].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw TypeDef row. Doesn't read field/method rid list. + /// + /// Row ID + /// + /// + /// + /// + internal uint ReadTypeDefRow(uint rid, out int flags, out uint name, out uint @namespace) { + var table = TypeDefTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + flags = reader.ReadInt32(); + name = columns[1].Read(reader); + @namespace = columns[2].Read(reader); + return columns[3].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw FieldPtr row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawFieldPtrRow ReadFieldPtrRow(uint rid) { + var table = FieldPtrTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawFieldPtrRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Field row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawFieldRow ReadFieldRow(uint rid) { + var table = FieldTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawFieldRow(reader.ReadUInt16(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Field row + /// + /// Row ID + /// + /// + /// + internal uint ReadFieldRow(uint rid, out int flags, out uint name) { + var table = FieldTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + flags = reader.ReadUInt16(); + name = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodPtr row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawMethodPtrRow ReadMethodPtrRow(uint rid) { + var table = MethodPtrTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawMethodPtrRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Method row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawMethodRow ReadMethodRow(uint rid) { + var table = MethodTable; + if (table.IsInvalidRID(rid)) + return null; + var mrr = methodRowReader; + if (mrr != null) { + var row = mrr.ReadRow(rid); + if (row != null) + return row; + } +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawMethodRow(reader.ReadUInt32(), + reader.ReadUInt16(), + reader.ReadUInt16(), + columns[3].Read(reader), + columns[4].Read(reader), + columns[5].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Method row but not ParamList + /// + /// Row ID + /// + /// + /// + /// + /// + internal uint ReadMethodRow(uint rid, out RVA rva, out int implFlags, out int flags, out uint name) { + var table = MethodTable; + var mrr = methodRowReader; + if (mrr != null) { + var row = mrr.ReadRow(rid); + if (row != null) { + rva = (RVA)row.RVA; + implFlags = row.ImplFlags; + flags = row.Flags; + name = row.Name; + return row.Signature; + } + } +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + rva = (RVA)reader.ReadUInt32(); + implFlags = reader.ReadUInt16(); + flags = reader.ReadUInt16(); + name = columns[3].Read(reader); + return columns[4].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ParamPtr row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawParamPtrRow ReadParamPtrRow(uint rid) { + var table = ParamPtrTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawParamPtrRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Param row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawParamRow ReadParamRow(uint rid) { + var table = ParamTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawParamRow(reader.ReadUInt16(), + reader.ReadUInt16(), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Param row + /// + /// Row ID + /// + /// + /// + internal uint ReadParamRow(uint rid, out int flags, out ushort sequence) { + var table = ParamTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + flags = reader.ReadUInt16(); + sequence = reader.ReadUInt16(); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw InterfaceImpl row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawInterfaceImplRow ReadInterfaceImplRow(uint rid) { + var table = InterfaceImplTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawInterfaceImplRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw InterfaceImpl row + /// + /// Row ID + /// The Interface field + internal uint ReadInterfaceImplRow2(uint rid) { + var table = InterfaceImplTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + reader.Position += columns[0].Size; + return columns[1].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MemberRef row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawMemberRefRow ReadMemberRefRow(uint rid) { + var table = MemberRefTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawMemberRefRow(columns[0].Read(reader), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MemberRef row + /// + /// Row ID + /// + /// + /// + internal uint ReadMemberRefRow(uint rid, out uint @class, out uint name) { + var table = MemberRefTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + @class = columns[0].Read(reader); + name = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Constant row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawConstantRow ReadConstantRow(uint rid) { + var table = ConstantTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawConstantRow(reader.ReadByte(), + reader.ReadByte(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Constant row + /// + /// Row ID + /// + /// + internal uint ReadConstantRow(uint rid, out ElementType type) { + var table = ConstantTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + type = (ElementType)reader.ReadByte(); + reader.Position += 1 + columns[1].Size; + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw CustomAttribute row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawCustomAttributeRow ReadCustomAttributeRow(uint rid) { + var table = CustomAttributeTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawCustomAttributeRow(columns[0].Read(reader), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw FieldMarshal row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawFieldMarshalRow ReadFieldMarshalRow(uint rid) { + var table = FieldMarshalTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawFieldMarshalRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw DeclSecurity row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawDeclSecurityRow ReadDeclSecurityRow(uint rid) { + var table = DeclSecurityTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawDeclSecurityRow(reader.ReadInt16(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw DeclSecurity row + /// + /// Row ID + /// + /// + internal uint ReadDeclSecurityRow(uint rid, out SecurityAction action) { + var table = DeclSecurityTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + action = (SecurityAction)reader.ReadInt16(); + reader.Position += columns[1].Size; + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ClassLayout row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawClassLayoutRow ReadClassLayoutRow(uint rid) { + var table = ClassLayoutTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawClassLayoutRow(reader.ReadUInt16(), + reader.ReadUInt32(), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ClassLayout row + /// + /// Row ID + /// + /// + internal uint ReadClassLayoutRow(uint rid, out ushort packingSize) { + var table = ClassLayoutTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + packingSize = reader.ReadUInt16(); + return reader.ReadUInt32(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw FieldLayout row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawFieldLayoutRow ReadFieldLayoutRow(uint rid) { + var table = FieldLayoutTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawFieldLayoutRow(reader.ReadUInt32(), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw FieldLayout row + /// + /// Row ID + /// + internal uint? ReadFieldLayoutRow2(uint rid) { + var table = FieldLayoutTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return reader.ReadUInt32(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw StandAloneSig row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawStandAloneSigRow ReadStandAloneSigRow(uint rid) { + var table = StandAloneSigTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawStandAloneSigRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw StandAloneSig row + /// + /// Row ID + /// + internal uint ReadStandAloneSigRow2(uint rid) { + var table = StandAloneSigTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return columns[0].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw EventMap row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawEventMapRow ReadEventMapRow(uint rid) { + var table = EventMapTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawEventMapRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw EventPtr row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawEventPtrRow ReadEventPtrRow(uint rid) { + var table = EventPtrTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawEventPtrRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Event row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawEventRow ReadEventRow(uint rid) { + var table = EventTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawEventRow(reader.ReadUInt16(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Event row + /// + /// Row ID + /// + /// + /// + internal uint ReadEventRow(uint rid, out int eventFlags, out uint name) { + var table = EventTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + eventFlags = reader.ReadUInt16(); + name = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw PropertyMap row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawPropertyMapRow ReadPropertyMapRow(uint rid) { + var table = PropertyMapTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawPropertyMapRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw PropertyPtr row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawPropertyPtrRow ReadPropertyPtrRow(uint rid) { + var table = PropertyPtrTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawPropertyPtrRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Property row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawPropertyRow ReadPropertyRow(uint rid) { + var table = PropertyTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawPropertyRow(reader.ReadUInt16(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Property row + /// + /// Row ID + /// + /// + /// + internal uint ReadPropertyRow(uint rid, out int propFlags, out uint name) { + var table = PropertyTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + propFlags = reader.ReadUInt16(); + name = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodSemantics row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawMethodSemanticsRow ReadMethodSemanticsRow(uint rid) { + var table = MethodSemanticsTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawMethodSemanticsRow(reader.ReadUInt16(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodSemantics row + /// + /// Row ID + /// + /// + internal uint ReadMethodSemanticsRow(uint rid, out MethodSemanticsAttributes semantic) { + var table = MethodSemanticsTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + semantic = (MethodSemanticsAttributes)reader.ReadUInt16(); + return columns[1].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodImpl row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawMethodImplRow ReadMethodImplRow(uint rid) { + var table = MethodImplTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawMethodImplRow(columns[0].Read(reader), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodImpl row + /// + /// Row ID + /// + /// + internal uint ReadMethodImplRow(uint rid, out uint methodBody) { + var table = MethodImplTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + reader.Position += columns[0].Size; + methodBody = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ModuleRef row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawModuleRefRow ReadModuleRefRow(uint rid) { + var table = ModuleRefTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawModuleRefRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ModuleRef row + /// + /// Row ID + /// + internal uint ReadModuleRefRow2(uint rid) { + var table = ModuleRefTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return columns[0].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw TypeSpec row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawTypeSpecRow ReadTypeSpecRow(uint rid) { + var table = TypeSpecTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawTypeSpecRow(columns[0].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw TypeSpec row + /// + /// Row ID + /// + internal uint ReadTypeSpecRow2(uint rid) { + var table = TypeSpecTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return columns[0].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ImplMap row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawImplMapRow ReadImplMapRow(uint rid) { + var table = ImplMapTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawImplMapRow(reader.ReadUInt16(), + columns[1].Read(reader), + columns[2].Read(reader), + columns[3].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ImplMap row + /// + /// Row ID + /// + /// + /// + internal uint ReadImplMapRow(uint rid, out int attributes, out uint name) { + var table = ImplMapTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + attributes = reader.ReadUInt16(); + reader.Position += columns[1].Size; + name = columns[2].Read(reader); + return columns[3].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw FieldRVA row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawFieldRVARow ReadFieldRVARow(uint rid) { + var table = FieldRVATable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawFieldRVARow(reader.ReadUInt32(), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw FieldRVA row + /// + /// Row ID + /// + /// + internal bool ReadFieldRVARow(uint rid, out RVA rva) { + var table = FieldRVATable; + if (table.IsInvalidRID(rid)) { + rva = 0; + return false; + } +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + rva = (RVA)reader.ReadUInt32(); + return true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ENCLog row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawENCLogRow ReadENCLogRow(uint rid) { + var table = ENCLogTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + return new RawENCLogRow(reader.ReadUInt32(), + reader.ReadUInt32()); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ENCMap row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawENCMapRow ReadENCMapRow(uint rid) { + var table = ENCMapTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + return new RawENCMapRow(reader.ReadUInt32()); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Assembly row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawAssemblyRow ReadAssemblyRow(uint rid) { + var table = AssemblyTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawAssemblyRow(reader.ReadUInt32(), + reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt32(), + columns[6].Read(reader), + columns[7].Read(reader), + columns[8].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw Assembly row + /// + /// Row ID + /// + /// + /// + /// + /// + /// + internal uint ReadAssemblyRow(uint rid, out AssemblyHashAlgorithm hashAlgId, out Version version, out int attributes, out uint publicKey, out uint name) { + var table = AssemblyTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + hashAlgId = (AssemblyHashAlgorithm)reader.ReadUInt32(); + version = new Version(reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16()); + attributes = reader.ReadInt32(); + publicKey = columns[6].Read(reader); + name = columns[7].Read(reader); + return columns[8].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw AssemblyProcessor row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawAssemblyProcessorRow ReadAssemblyProcessorRow(uint rid) { + var table = AssemblyProcessorTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + return new RawAssemblyProcessorRow(reader.ReadUInt32()); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw AssemblyOS row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawAssemblyOSRow ReadAssemblyOSRow(uint rid) { + var table = AssemblyOSTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + return new RawAssemblyOSRow(reader.ReadUInt32(), + reader.ReadUInt32(), + reader.ReadUInt32()); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw AssemblyRef row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawAssemblyRefRow ReadAssemblyRefRow(uint rid) { + var table = AssemblyRefTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawAssemblyRefRow(reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt16(), + reader.ReadUInt32(), + columns[5].Read(reader), + columns[6].Read(reader), + columns[7].Read(reader), + columns[8].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw AssemblyRef row + /// + /// Row ID + /// + /// + /// + /// + /// + /// + internal uint ReadAssemblyRefRow(uint rid, out Version version, out int attributes, out uint publicKeyOrToken, out uint name, out uint culture) { + var table = AssemblyRefTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + version = new Version(reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16()); + attributes = reader.ReadInt32(); + publicKeyOrToken = columns[5].Read(reader); + name = columns[6].Read(reader); + culture = columns[7].Read(reader); + return columns[8].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw AssemblyRefProcessor row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawAssemblyRefProcessorRow ReadAssemblyRefProcessorRow(uint rid) { + var table = AssemblyRefProcessorTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawAssemblyRefProcessorRow(reader.ReadUInt32(), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw AssemblyRefOS row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawAssemblyRefOSRow ReadAssemblyRefOSRow(uint rid) { + var table = AssemblyRefOSTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawAssemblyRefOSRow(reader.ReadUInt32(), + reader.ReadUInt32(), + reader.ReadUInt32(), + columns[3].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw File row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawFileRow ReadFileRow(uint rid) { + var table = FileTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawFileRow(reader.ReadUInt32(), + columns[1].Read(reader), + columns[2].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw File row + /// + /// Row ID + /// + /// + /// + internal uint ReadFileRow(uint rid, out int attributes, out uint name) { + var table = FileTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + attributes = reader.ReadInt32(); + name = columns[1].Read(reader); + return columns[2].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ExportedType row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawExportedTypeRow ReadExportedTypeRow(uint rid) { + var table = ExportedTypeTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawExportedTypeRow(reader.ReadUInt32(), + reader.ReadUInt32(), + columns[2].Read(reader), + columns[3].Read(reader), + columns[4].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ExportedType row + /// + /// Row ID + /// + /// + /// + /// + /// + internal uint ReadExportedTypeRow(uint rid, out int attributes, out uint typeDefId, out uint name, out uint @namespace) { + var table = ExportedTypeTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + attributes = reader.ReadInt32(); + typeDefId = reader.ReadUInt32(); + name = columns[2].Read(reader); + @namespace = columns[3].Read(reader); + return columns[4].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ManifestResource row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawManifestResourceRow ReadManifestResourceRow(uint rid) { + var table = ManifestResourceTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawManifestResourceRow(reader.ReadUInt32(), + reader.ReadUInt32(), + columns[2].Read(reader), + columns[3].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw ManifestResource row + /// + /// Row ID + /// + /// + /// + /// + internal uint ReadManifestResourceRow(uint rid, out uint offset, out int attributes, out uint name) { + var table = ManifestResourceTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + offset = reader.ReadUInt32(); + attributes = reader.ReadInt32(); + name = columns[2].Read(reader); + return columns[3].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw NestedClass row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawNestedClassRow ReadNestedClassRow(uint rid) { + var table = NestedClassTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawNestedClassRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw NestedClass row + /// + /// Row ID + /// + internal uint ReadNestedClassRow2(uint rid) { + var table = NestedClassTable; + if (table.IsInvalidRID(rid)) + return 0; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + reader.Position += columns[0].Size; + return columns[1].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw GenericParam row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawGenericParamRow ReadGenericParamRow(uint rid) { + var table = GenericParamTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + if (columns.Count == 4) { + return new RawGenericParamRow(reader.ReadUInt16(), + reader.ReadUInt16(), + columns[2].Read(reader), + columns[3].Read(reader)); + } + return new RawGenericParamRow(reader.ReadUInt16(), + reader.ReadUInt16(), + columns[2].Read(reader), + columns[3].Read(reader), + columns[4].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw GenericParam row + /// + /// Row ID + /// + /// + /// + /// + internal uint ReadGenericParamRow(uint rid, out ushort number, out int attributes, out uint name) { + var table = GenericParamTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + number = reader.ReadUInt16(); + attributes = reader.ReadUInt16(); + reader.Position += columns[2].Size; + name = columns[3].Read(reader); + if (columns.Count == 4) + return 0; + return columns[4].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodSpec row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawMethodSpecRow ReadMethodSpecRow(uint rid) { + var table = MethodSpecTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawMethodSpecRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw MethodSpec row + /// + /// Row ID + /// + /// + internal uint ReadMethodSpecRow(uint rid, out uint method) { + var table = MethodSpecTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + method = columns[0].Read(reader); + return columns[1].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw GenericParamConstraint row + /// + /// Row ID + /// The row or null if table doesn't exist or if is invalid + public RawGenericParamConstraintRow ReadGenericParamConstraintRow(uint rid) { + var table = GenericParamConstraintTable; + if (table.IsInvalidRID(rid)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + return new RawGenericParamConstraintRow(columns[0].Read(reader), + columns[1].Read(reader)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a raw GenericParamConstraint row + /// + /// Row ID + /// + internal uint ReadGenericParamConstraintRow2(uint rid) { + var table = GenericParamConstraintTable; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + var columns = table.TableInfo.Columns; + reader.Position += columns[0].Size; + return columns[1].Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads a column + /// + /// The table + /// Row ID + /// Column index in + /// Result is put here or 0 if we return false + /// true if we could read the column, false otherwise + public bool ReadColumn(MDTable table, uint rid, int colIndex, out uint value) { + return ReadColumn(table, rid, table.TableInfo.Columns[colIndex], out value); + } + + /// + /// Reads a column + /// + /// The table + /// Row ID + /// Column + /// Result is put here or 0 if we return false + /// true if we could read the column, false otherwise + public bool ReadColumn(MDTable table, uint rid, ColumnInfo column, out uint value) { + if (table.IsInvalidRID(rid)) { + value = 0; + return false; + } + var cr = columnReader; + if (cr != null && cr.ReadColumn(table, rid, column, out value)) + return true; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(table, rid); + reader.Position += column.Offset; + value = column.Read(reader); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + return true; + } + + /// + /// Reads a column + /// + /// The table + /// Row ID + /// Column + /// Result is put here or 0 if we return false + /// true if we could read the column, false otherwise + internal bool ReadColumn_NoLock(MDTable table, uint rid, ColumnInfo column, out uint value) { + if (table.IsInvalidRID(rid)) { + value = 0; + return false; + } + var cr = columnReader; + if (cr != null && cr.ReadColumn(table, rid, column, out value)) + return true; + var reader = GetReader_NoLock(table, rid); + reader.Position += column.Offset; + value = column.Read(reader); + return true; + } + } +} diff --git a/dnlib/DotNet/MD/USStream.cs b/dnlib/DotNet/MD/USStream.cs new file mode 100644 index 0000000..4acd075 --- /dev/null +++ b/dnlib/DotNet/MD/USStream.cs @@ -0,0 +1,65 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.DotNet.MD { + /// + /// Represents the #US stream + /// + public sealed class USStream : HeapStream { + /// + public USStream() { + } + + /// + public USStream(IImageStream imageStream, StreamHeader streamHeader) + : base(imageStream, streamHeader) { + } + + /// + /// Reads a unicode string + /// + /// Offset of unicode string + /// A string or null if is invalid + public string Read(uint offset) { + if (offset == 0) + return string.Empty; + if (!IsValidOffset(offset)) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var reader = GetReader_NoLock(offset); + uint length; + if (!reader.ReadCompressedUInt32(out length)) + return null; + if (reader.Position + length < length || reader.Position + length > reader.Length) + return null; + try { + return reader.ReadString((int)(length / 2)); + } + catch (OutOfMemoryException) { + throw; + } + catch { + // It's possible that an exception is thrown when converting a char* to + // a string. If so, return an empty string. + return string.Empty; + } +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Reads data just like , but returns an empty string if + /// offset is invalid + /// + /// Offset of unicode string + /// The string + public string ReadNoNull(uint offset) { + return Read(offset) ?? string.Empty; + } + } +} diff --git a/dnlib/DotNet/MDToken.cs b/dnlib/DotNet/MDToken.cs new file mode 100644 index 0000000..d898ade --- /dev/null +++ b/dnlib/DotNet/MDToken.cs @@ -0,0 +1,199 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// MetaData token + /// + [DebuggerDisplay("{Table} {Rid}")] + public struct MDToken : IEquatable, IComparable { + /// + /// Mask to get the rid from a raw metadata token + /// + public const uint RID_MASK = 0x00FFFFFF; + + /// + /// Max rid value + /// + public const uint RID_MAX = RID_MASK; + + /// + /// Number of bits to right shift a raw metadata token to get the table index + /// + public const int TABLE_SHIFT = 24; + + readonly uint token; + + /// + /// Returns the table type + /// + public Table Table { + get { return ToTable(token); } + } + + /// + /// Returns the row id + /// + public uint Rid { + get { return ToRID(token); } + } + + /// + /// Returns the raw token + /// + public uint Raw { + get { return token; } + } + + /// + /// Returns true if it's a null token + /// + public bool IsNull { + get { return Rid == 0; } + } + + /// + /// Constructor + /// + /// Raw token + public MDToken(uint token) { + this.token = token; + } + + /// + /// Constructor + /// + /// Raw token + public MDToken(int token) + : this((uint)token) { + } + + /// + /// Constructor + /// + /// The table type + /// Row id + public MDToken(Table table, uint rid) + : this(((uint)table << TABLE_SHIFT) | rid) { + } + + /// + /// Constructor + /// + /// The table type + /// Row id + public MDToken(Table table, int rid) + : this(((uint)table << TABLE_SHIFT) | (uint)rid) { + } + + /// + /// Returns the rid (row ID) + /// + /// A raw metadata token + /// A rid + public static uint ToRID(uint token) { + return token & RID_MASK; + } + + /// + /// Returns the rid (row ID) + /// + /// A raw metadata token + /// A rid + public static uint ToRID(int token) { + return ToRID((uint)token); + } + + /// + /// Returns the table + /// + /// A raw metadata token + /// A metadata table index + public static Table ToTable(uint token) { + return (Table)(token >> TABLE_SHIFT); + } + + /// + /// Returns the table + /// + /// A raw metadata token + /// A metadata table index + public static Table ToTable(int token) { + return ToTable((uint)token); + } + + /// + /// Gets the token as a raw 32-bit signed integer + /// + public int ToInt32() { + return (int)token; + } + + /// + /// Gets the token as a raw 32-bit unsigned integer + /// + public uint ToUInt32() { + return token; + } + + /// Overloaded operator + public static bool operator ==(MDToken left, MDToken right) { + return left.CompareTo(right) == 0; + } + + /// Overloaded operator + public static bool operator !=(MDToken left, MDToken right) { + return left.CompareTo(right) != 0; + } + + /// Overloaded operator + public static bool operator <(MDToken left, MDToken right) { + return left.CompareTo(right) < 0; + } + + /// Overloaded operator + public static bool operator >(MDToken left, MDToken right) { + return left.CompareTo(right) > 0; + } + + /// Overloaded operator + public static bool operator <=(MDToken left, MDToken right) { + return left.CompareTo(right) <= 0; + } + + /// Overloaded operator + public static bool operator >=(MDToken left, MDToken right) { + return left.CompareTo(right) >= 0; + } + + /// + public int CompareTo(MDToken other) { + return token.CompareTo(other.token); + } + + /// + public bool Equals(MDToken other) { + return CompareTo(other) == 0; + } + + /// + public override bool Equals(object obj) { + if (!(obj is MDToken)) + return false; + return Equals((MDToken)obj); + } + + /// + public override int GetHashCode() { + return (int)token; + } + + /// + public override string ToString() { + return string.Format("{0:X8}", token); + } + } +} diff --git a/dnlib/DotNet/ManifestResource.cs b/dnlib/DotNet/ManifestResource.cs new file mode 100644 index 0000000..896d904 --- /dev/null +++ b/dnlib/DotNet/ManifestResource.cs @@ -0,0 +1,226 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the ManifestResource table + /// + [DebuggerDisplay("{Offset} {Name.String} {Implementation}")] + public abstract class ManifestResource : IHasCustomAttribute { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.ManifestResource, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 18; } + } + + /// + /// From column ManifestResource.Offset + /// + public uint Offset { + get { return offset; } + set { offset = value; } + } + /// + protected uint offset; + + /// + /// From column ManifestResource.Flags + /// + public ManifestResourceAttributes Flags { + get { return (ManifestResourceAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column ManifestResource.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column ManifestResource.Implementation + /// + public IImplementation Implementation { + get { return implementation; } + set { implementation = value; } + } + /// + protected IImplementation implementation; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(ManifestResourceAttributes andMask, ManifestResourceAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Gets/sets the visibility + /// + public ManifestResourceAttributes Visibility { + get { return (ManifestResourceAttributes)attributes & ManifestResourceAttributes.VisibilityMask; } + set { ModifyAttributes(~ManifestResourceAttributes.VisibilityMask, value & ManifestResourceAttributes.VisibilityMask); } + } + + /// + /// true if is set + /// + public bool IsPublic { + get { return ((ManifestResourceAttributes)attributes & ManifestResourceAttributes.VisibilityMask) == ManifestResourceAttributes.Public; } + } + + /// + /// true if is set + /// + public bool IsPrivate { + get { return ((ManifestResourceAttributes)attributes & ManifestResourceAttributes.VisibilityMask) == ManifestResourceAttributes.Private; } + } + } + + /// + /// A ManifestResource row created by the user and not present in the original .NET file + /// + public class ManifestResourceUser : ManifestResource { + /// + /// Default constructor + /// + public ManifestResourceUser() { + } + + /// + /// Constructor + /// + /// Name + /// Implementation + public ManifestResourceUser(UTF8String name, IImplementation implementation) + : this(name, implementation, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Implementation + /// Flags + public ManifestResourceUser(UTF8String name, IImplementation implementation, ManifestResourceAttributes flags) + : this(name, implementation, flags, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Implementation + /// Flags + /// Offset + public ManifestResourceUser(UTF8String name, IImplementation implementation, ManifestResourceAttributes flags, uint offset) { + this.name = name; + this.implementation = implementation; + this.attributes = (int)flags; + this.offset = offset; + } + } + + /// + /// Created from a row in the ManifestResource table + /// + sealed class ManifestResourceMD : ManifestResource, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.ManifestResource, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this ManifestResource row + /// Row ID + /// If is null + /// If is invalid + public ManifestResourceMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ManifestResourceTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("ManifestResource rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint implementation = readerModule.TablesStream.ReadManifestResourceRow(origRid, out this.offset, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.implementation = readerModule.ResolveImplementation(implementation); + } + } +} diff --git a/dnlib/DotNet/ManifestResourceAttributes.cs b/dnlib/DotNet/ManifestResourceAttributes.cs new file mode 100644 index 0000000..100d64e --- /dev/null +++ b/dnlib/DotNet/ManifestResourceAttributes.cs @@ -0,0 +1,18 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// ManifestResource flags. See CorHdr.h/CorManifestResourceFlags + /// + [Flags] + public enum ManifestResourceAttributes : uint { + /// + VisibilityMask = 0x0007, + /// The Resource is exported from the Assembly. + Public = 0x0001, + /// The Resource is private to the Assembly. + Private = 0x0002, + } +} diff --git a/dnlib/DotNet/MarshalBlobReader.cs b/dnlib/DotNet/MarshalBlobReader.cs new file mode 100644 index 0000000..e59bb91 --- /dev/null +++ b/dnlib/DotNet/MarshalBlobReader.cs @@ -0,0 +1,160 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.DotNet { + /// + /// Reads s + /// + public struct MarshalBlobReader : IDisposable { + readonly ModuleDef module; + readonly IBinaryReader reader; + readonly GenericParamContext gpContext; + + /// + /// Reads a from the #Blob heap + /// + /// Module + /// Blob offset + /// A new instance + public static MarshalType Read(ModuleDefMD module, uint sig) { + return Read(module, module.BlobStream.CreateStream(sig), new GenericParamContext()); + } + + /// + /// Reads a from the #Blob heap + /// + /// Module + /// Blob offset + /// Generic parameter context + /// A new instance + public static MarshalType Read(ModuleDefMD module, uint sig, GenericParamContext gpContext) { + return Read(module, module.BlobStream.CreateStream(sig), gpContext); + } + + /// + /// Reads a from + /// + /// Owner module + /// Marshal data + /// A new instance + public static MarshalType Read(ModuleDef module, byte[] data) { + return Read(module, MemoryImageStream.Create(data), new GenericParamContext()); + } + + /// + /// Reads a from + /// + /// Owner module + /// Marshal data + /// Generic parameter context + /// A new instance + public static MarshalType Read(ModuleDef module, byte[] data, GenericParamContext gpContext) { + return Read(module, MemoryImageStream.Create(data), gpContext); + } + + /// + /// Reads a from + /// + /// Owner module + /// A reader that will be owned by us + /// A new instance + public static MarshalType Read(ModuleDef module, IBinaryReader reader) { + return Read(module, reader, new GenericParamContext()); + } + + /// + /// Reads a from + /// + /// Owner module + /// A reader that will be owned by us + /// Generic parameter context + /// A new instance + public static MarshalType Read(ModuleDef module, IBinaryReader reader, GenericParamContext gpContext) { + using (var marshalReader = new MarshalBlobReader(module, reader, gpContext)) + return marshalReader.Read(); + } + + MarshalBlobReader(ModuleDef module, IBinaryReader reader, GenericParamContext gpContext) { + this.module = module; + this.reader = reader; + this.gpContext = gpContext; + } + + MarshalType Read() { + MarshalType returnValue; + try { + var nativeType = (NativeType)reader.ReadByte(); + NativeType nt; + int size; + switch (nativeType) { + case NativeType.FixedSysString: + size = CanRead() ? (int)reader.ReadCompressedUInt32() : -1; + returnValue = new FixedSysStringMarshalType(size); + break; + + case NativeType.SafeArray: + var vt = CanRead() ? (VariantType)reader.ReadCompressedUInt32() : VariantType.NotInitialized; + var udtName = CanRead() ? ReadUTF8String() : null; + var udtRef = (object)udtName == null ? null : TypeNameParser.ParseReflection(module, UTF8String.ToSystemStringOrEmpty(udtName), null, gpContext); + returnValue = new SafeArrayMarshalType(vt, udtRef); + break; + + case NativeType.FixedArray: + size = CanRead() ? (int)reader.ReadCompressedUInt32() : -1; + nt = CanRead() ? (NativeType)reader.ReadCompressedUInt32() : NativeType.NotInitialized; + returnValue = new FixedArrayMarshalType(size, nt); + break; + + case NativeType.Array: + nt = CanRead() ? (NativeType)reader.ReadCompressedUInt32() : NativeType.NotInitialized; + int paramNum = CanRead() ? (int)reader.ReadCompressedUInt32() : -1; + size = CanRead() ? (int)reader.ReadCompressedUInt32() : -1; + int flags = CanRead() ? (int)reader.ReadCompressedUInt32() : -1; + returnValue = new ArrayMarshalType(nt, paramNum, size, flags); + break; + + case NativeType.CustomMarshaler: + var guid = ReadUTF8String(); + var nativeTypeName = ReadUTF8String(); + var custMarshalerName = ReadUTF8String(); + var cmRef = TypeNameParser.ParseReflection(module, UTF8String.ToSystemStringOrEmpty(custMarshalerName), new CAAssemblyRefFinder(module), gpContext); + var cookie = ReadUTF8String(); + returnValue = new CustomMarshalType(guid, nativeTypeName, cmRef, cookie); + break; + + case NativeType.IUnknown: + case NativeType.IDispatch: + case NativeType.IntF: + int iidParamIndex = CanRead() ? (int)reader.ReadCompressedUInt32() : -1; + return new InterfaceMarshalType(nativeType, iidParamIndex); + + default: + returnValue = new MarshalType(nativeType); + break; + } + } + catch { + returnValue = new RawMarshalType(reader.ReadAllBytes()); + } + + return returnValue; + } + + bool CanRead() { + return reader.Position < reader.Length; + } + + UTF8String ReadUTF8String() { + uint len = reader.ReadCompressedUInt32(); + return len == 0 ? UTF8String.Empty : new UTF8String(reader.ReadBytes((int)len)); + } + + /// + public void Dispose() { + if (reader != null) + reader.Dispose(); + } + } +} diff --git a/dnlib/DotNet/MarshalType.cs b/dnlib/DotNet/MarshalType.cs new file mode 100644 index 0000000..788b6ec --- /dev/null +++ b/dnlib/DotNet/MarshalType.cs @@ -0,0 +1,541 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Base class of all marshal types + /// + public class MarshalType { + /// + /// The native type + /// + protected readonly NativeType nativeType; + + /// + /// Gets the + /// + public NativeType NativeType { + get { return nativeType; } + } + + /// + /// Constructor + /// + /// Native type + public MarshalType(NativeType nativeType) { + this.nativeType = nativeType; + } + + /// + public override string ToString() { + return nativeType.ToString(); + } + } + + /// + /// Contains the raw marshal blob data + /// + public sealed class RawMarshalType : MarshalType { + byte[] data; + + /// + /// Gets/sets the raw data + /// + public byte[] Data { + get { return data; } + set { data = value; } + } + + /// + /// Constructor + /// + /// Raw data + public RawMarshalType(byte[] data) + : base(NativeType.RawBlob) { + this.data = data; + } + } + + /// + /// A marshal type + /// + public sealed class FixedSysStringMarshalType : MarshalType { + int size; + + /// + /// Gets/sets the size + /// + public int Size { + get { return size; } + set { size = value; } + } + + /// + /// true if is valid + /// + public bool IsSizeValid { + get { return size >= 0; } + } + + /// + /// Default constructor + /// + public FixedSysStringMarshalType() + : this(-1) { + } + + /// + /// Constructor + /// + /// Size + public FixedSysStringMarshalType(int size) + : base(NativeType.FixedSysString) { + this.size = size; + } + + /// + public override string ToString() { + if (IsSizeValid) + return string.Format("{0} ({1})", nativeType, size); + return string.Format("{0} ()", nativeType); + } + } + + /// + /// A marshal type + /// + public sealed class SafeArrayMarshalType : MarshalType { + VariantType vt; + ITypeDefOrRef userDefinedSubType; + + /// + /// Gets/sets the variant type + /// + public VariantType VariantType { + get { return vt; } + set { vt = value; } + } + + /// + /// Gets/sets the user-defined sub type (it's usually null) + /// + public ITypeDefOrRef UserDefinedSubType { + get { return userDefinedSubType; } + set { userDefinedSubType = value; } + } + + /// + /// true if is valid + /// + public bool IsVariantTypeValid { + get { return vt != VariantType.NotInitialized; } + } + + /// + /// true if is valid + /// + public bool IsUserDefinedSubTypeValid { + get { return userDefinedSubType != null; } + } + + /// + /// Default constructor + /// + public SafeArrayMarshalType() + : this(VariantType.NotInitialized, null) { + } + + /// + /// Constructor + /// + /// Variant type + public SafeArrayMarshalType(VariantType vt) + : this(vt, null) { + } + + /// + /// Constructor + /// + /// User-defined sub type + public SafeArrayMarshalType(ITypeDefOrRef userDefinedSubType) + : this(VariantType.NotInitialized, userDefinedSubType) { + } + + /// + /// Constructor + /// + /// Variant type + /// User-defined sub type + public SafeArrayMarshalType(VariantType vt, ITypeDefOrRef userDefinedSubType) + : base(NativeType.SafeArray) { + this.vt = vt; + this.userDefinedSubType = userDefinedSubType; + } + + /// + public override string ToString() { + var udt = userDefinedSubType; + if (udt != null) + return string.Format("{0} ({1}, {2})", nativeType, vt, udt); + return string.Format("{0} ({1})", nativeType, vt); + } + } + + /// + /// A marshal type + /// + public sealed class FixedArrayMarshalType : MarshalType { + int size; + NativeType elementType; + + /// + /// Gets/sets the element type + /// + public NativeType ElementType { + get { return elementType; } + set { elementType = value; } + } + + /// + /// Gets/sets the size + /// + public int Size { + get { return size; } + set { size = value; } + } + + /// + /// true if is valid + /// + public bool IsElementTypeValid { + get { return elementType != NativeType.NotInitialized; } + } + + /// + /// true if is valid + /// + public bool IsSizeValid { + get { return size >= 0; } + } + + /// + /// Default constructor + /// + public FixedArrayMarshalType() + : this(0) { + } + + /// + /// Constructor + /// + /// Size + public FixedArrayMarshalType(int size) + : this(size, NativeType.NotInitialized) { + } + + /// + /// Constructor + /// + /// Size + /// Element type + public FixedArrayMarshalType(int size, NativeType elementType) + : base(NativeType.FixedArray) { + this.size = size; + this.elementType = elementType; + } + + /// + public override string ToString() { + return string.Format("{0} ({1}, {2})", nativeType, size, elementType); + } + } + + /// + /// A marshal type + /// + public sealed class ArrayMarshalType : MarshalType { + NativeType elementType; + int paramNum; + int numElems; + int flags; + + /// + /// Gets/sets the element type + /// + public NativeType ElementType { + get { return elementType; } + set { elementType = value; } + } + + /// + /// Gets/sets the parameter number + /// + public int ParamNumber { + get { return paramNum; } + set { paramNum = value; } + } + + /// + /// Gets/sets the size of the array + /// + public int Size { + get { return numElems; } + set { numElems = value; } + } + + /// + /// Gets/sets the flags + /// + public int Flags { + get { return flags; } + set { flags = value; } + } + + /// + /// true if is valid + /// + public bool IsElementTypeValid { + get { return elementType != NativeType.NotInitialized; } + } + + /// + /// true if is valid + /// + public bool IsParamNumberValid { + get { return paramNum >= 0; } + } + + /// + /// true if is valid + /// + public bool IsSizeValid { + get { return numElems >= 0; } + } + + /// + /// true if is valid + /// + public bool IsFlagsValid { + get { return flags >= 0; } + } + + const int ntaSizeParamIndexSpecified = 1; + + /// + /// true if ntaSizeParamIndexSpecified bit is set, false if it's not + /// set or if is invalid. + /// + public bool IsSizeParamIndexSpecified { + get { return IsFlagsValid && (flags & ntaSizeParamIndexSpecified) != 0; } + } + + /// + /// true if ntaSizeParamIndexSpecified bit is not set, false if it's + /// set or if is invalid. + /// + public bool IsSizeParamIndexNotSpecified { + get { return IsFlagsValid && (flags & ntaSizeParamIndexSpecified) == 0; } + } + + /// + /// Default constructor + /// + public ArrayMarshalType() + : this(NativeType.NotInitialized, -1, -1, -1) { + } + + /// + /// Constructor + /// + /// Element type + public ArrayMarshalType(NativeType elementType) + : this(elementType, -1, -1, -1) { + } + + /// + /// Constructor + /// + /// Element type + /// Parameter number + public ArrayMarshalType(NativeType elementType, int paramNum) + : this(elementType, paramNum, -1, -1) { + } + + /// + /// Constructor + /// + /// Element type + /// Parameter number + /// Number of elements + public ArrayMarshalType(NativeType elementType, int paramNum, int numElems) + : this(elementType, paramNum, numElems, -1) { + } + + /// + /// Constructor + /// + /// Element type + /// Parameter number + /// Number of elements + /// Flags + public ArrayMarshalType(NativeType elementType, int paramNum, int numElems, int flags) + : base(NativeType.Array) { + this.elementType = elementType; + this.paramNum = paramNum; + this.numElems = numElems; + this.flags = flags; + } + + /// + public override string ToString() { + return string.Format("{0} ({1}, {2}, {3}, {4})", nativeType, elementType, paramNum, numElems, flags); + } + } + + /// + /// A marshal type + /// + public sealed class CustomMarshalType : MarshalType { + UTF8String guid; + UTF8String nativeTypeName; + ITypeDefOrRef custMarshaler; + UTF8String cookie; + + /// + /// Gets/sets the GUID string + /// + public UTF8String Guid { + get { return guid; } + set { guid = value; } + } + + /// + /// Gets/sets the native type name string + /// + public UTF8String NativeTypeName { + get { return nativeTypeName; } + set { nativeTypeName = value; } + } + + /// + /// Gets/sets the custom marshaler + /// + public ITypeDefOrRef CustomMarshaler { + get { return custMarshaler; } + set { custMarshaler = value; } + } + + /// + /// Gets/sets the cookie string + /// + public UTF8String Cookie { + get { return cookie; } + set { cookie = value; } + } + + /// + /// Default constructor + /// + public CustomMarshalType() + : this(null, null, null, null) { + } + + /// + /// Constructor + /// + /// GUID string + public CustomMarshalType(UTF8String guid) + : this(guid, null, null, null) { + } + + /// + /// Constructor + /// + /// GUID string + /// Native type name string + public CustomMarshalType(UTF8String guid, UTF8String nativeTypeName) + : this(guid, nativeTypeName, null, null) { + } + + /// + /// Constructor + /// + /// GUID string + /// Native type name string + /// Custom marshaler name string + public CustomMarshalType(UTF8String guid, UTF8String nativeTypeName, ITypeDefOrRef custMarshaler) + : this(guid, nativeTypeName, custMarshaler, null) { + } + + /// + /// Constructor + /// + /// GUID string + /// Native type name string + /// Custom marshaler name string + /// Cookie string + public CustomMarshalType(UTF8String guid, UTF8String nativeTypeName, ITypeDefOrRef custMarshaler, UTF8String cookie) + : base(NativeType.CustomMarshaler) { + this.guid = guid; + this.nativeTypeName = nativeTypeName; + this.custMarshaler = custMarshaler; + this.cookie = cookie; + } + + /// + public override string ToString() { + return string.Format("{0} ({1}, {2}, {3}, {4})", nativeType, guid, nativeTypeName, custMarshaler, cookie); + } + } + + /// + /// A , or a + /// marshal type + /// + public sealed class InterfaceMarshalType : MarshalType { + int iidParamIndex; + + /// + /// Gets/sets the IID parameter index + /// + public int IidParamIndex { + get { return iidParamIndex; } + set { iidParamIndex = value; } + } + + /// + /// true if is valid + /// + public bool IsIidParamIndexValid { + get { return iidParamIndex >= 0; } + } + + /// + /// Constructor + /// + /// Native type + public InterfaceMarshalType(NativeType nativeType) + : this(nativeType, -1) { + } + + /// + /// Constructor + /// + /// Native type + /// IID parameter index + public InterfaceMarshalType(NativeType nativeType, int iidParamIndex) + : base(nativeType) { + if (nativeType != NativeType.IUnknown && + nativeType != NativeType.IDispatch && + nativeType != NativeType.IntF) + throw new ArgumentException("Invalid nativeType"); + this.iidParamIndex = iidParamIndex; + } + + /// + public override string ToString() { + return string.Format("{0} ({1})", nativeType, iidParamIndex); + } + } +} diff --git a/dnlib/DotNet/MemberFinder.cs b/dnlib/DotNet/MemberFinder.cs new file mode 100644 index 0000000..32d645c --- /dev/null +++ b/dnlib/DotNet/MemberFinder.cs @@ -0,0 +1,762 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.DotNet.Emit; + +namespace dnlib.DotNet { + /// + /// Finds types, fields, methods, etc in a module. If nothing has been added to the module, it's + /// faster to call ResolveMethodDef(), ResolveTypeRef() etc. + /// + public class MemberFinder { + enum ObjectType { + Unknown, + EventDef, + FieldDef, + GenericParam, + MemberRef, + MethodDef, + MethodSpec, + PropertyDef, + TypeDef, + TypeRef, + TypeSig, + TypeSpec, + ExportedType, + } + + /// + /// All found s + /// + public readonly Dictionary CustomAttributes = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary EventDefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary FieldDefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary GenericParams = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary MemberRefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary MethodDefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary MethodSpecs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary PropertyDefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary TypeDefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary TypeRefs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary TypeSigs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary TypeSpecs = new Dictionary(); + + /// + /// All found s + /// + public readonly Dictionary ExportedTypes = new Dictionary(); + + Stack objectStack; + ModuleDef validModule; + + /// + /// Finds all types, fields, etc + /// + /// The module to scan + /// Itself + public MemberFinder FindAll(ModuleDef module) { + validModule = module; + + // This needs to be big. About 2048 entries should be enough for most though... + objectStack = new Stack(0x1000); + + Add(module); + ProcessAll(); + + objectStack = null; + + return this; + } + + void Push(object mr) { + if (mr == null) + return; + objectStack.Push(mr); + } + + void ProcessAll() { + while (objectStack.Count > 0) { + var o = objectStack.Pop(); + switch (GetObjectType(o)) { + case ObjectType.Unknown: break; + case ObjectType.EventDef: Add((EventDef)o); break; + case ObjectType.FieldDef: Add((FieldDef)o); break; + case ObjectType.GenericParam: Add((GenericParam)o); break; + case ObjectType.MemberRef: Add((MemberRef)o); break; + case ObjectType.MethodDef: Add((MethodDef)o); break; + case ObjectType.MethodSpec: Add((MethodSpec)o); break; + case ObjectType.PropertyDef: Add((PropertyDef)o); break; + case ObjectType.TypeDef: Add((TypeDef)o); break; + case ObjectType.TypeRef: Add((TypeRef)o); break; + case ObjectType.TypeSig: Add((TypeSig)o); break; + case ObjectType.TypeSpec: Add((TypeSpec)o); break; + case ObjectType.ExportedType: Add((ExportedType)o); break; + default: throw new InvalidOperationException(string.Format("Unknown type: {0}", o.GetType())); + } + } + } + + readonly Dictionary toObjectType = new Dictionary(); + ObjectType GetObjectType(object o) { + if (o == null) + return ObjectType.Unknown; + var type = o.GetType(); + ObjectType mrType; + if (toObjectType.TryGetValue(type, out mrType)) + return mrType; + mrType = GetObjectType2(o); + toObjectType[type] = mrType; + return mrType; + } + + static ObjectType GetObjectType2(object o) { + if (o is EventDef) return ObjectType.EventDef; + if (o is FieldDef) return ObjectType.FieldDef; + if (o is GenericParam) return ObjectType.GenericParam; + if (o is MemberRef) return ObjectType.MemberRef; + if (o is MethodDef) return ObjectType.MethodDef; + if (o is MethodSpec) return ObjectType.MethodSpec; + if (o is PropertyDef) return ObjectType.PropertyDef; + if (o is TypeDef) return ObjectType.TypeDef; + if (o is TypeRef) return ObjectType.TypeRef; + if (o is TypeSig) return ObjectType.TypeSig; + if (o is TypeSpec) return ObjectType.TypeSpec; + if (o is ExportedType) return ObjectType.ExportedType; + return ObjectType.Unknown; + } + + void Add(ModuleDef mod) { + Push(mod.ManagedEntryPoint); + Add(mod.CustomAttributes); + Add(mod.Types); + Add(mod.ExportedTypes); + if (mod.IsManifestModule) + Add(mod.Assembly); + Add(mod.VTableFixups); + } + + void Add(VTableFixups fixups) { + if (fixups == null) + return; + foreach (var fixup in fixups) { + foreach (var method in fixup) + Push(method); + } + } + + void Add(AssemblyDef asm) { + if (asm == null) + return; + Add(asm.DeclSecurities); + Add(asm.CustomAttributes); + } + + void Add(CallingConventionSig sig) { + if (sig == null) + return; + + var fs = sig as FieldSig; + if (fs != null) { + Add(fs); + return; + } + + var mbs = sig as MethodBaseSig; + if (mbs != null) { + Add(mbs); + return; + } + + var ls = sig as LocalSig; + if (ls != null) { + Add(ls); + return; + } + + var gims = sig as GenericInstMethodSig; + if (gims != null) { + Add(gims); + return; + } + } + + void Add(FieldSig sig) { + if (sig == null) + return; + Add(sig.Type); + } + + void Add(MethodBaseSig sig) { + if (sig == null) + return; + Add(sig.RetType); + Add(sig.Params); + Add(sig.ParamsAfterSentinel); + } + + void Add(LocalSig sig) { + if (sig == null) + return; + Add(sig.Locals); + } + + void Add(GenericInstMethodSig sig) { + if (sig == null) + return; + Add(sig.GenericArguments); + } + + void Add(IEnumerable cas) { + if (cas == null) + return; + foreach (var ca in cas) + Add(ca); + } + + void Add(CustomAttribute ca) { + if (ca == null || CustomAttributes.ContainsKey(ca)) + return; + CustomAttributes[ca] = true; + Push(ca.Constructor); + Add(ca.ConstructorArguments); + Add(ca.NamedArguments); + } + + void Add(IEnumerable args) { + if (args == null) + return; + foreach (var arg in args) + Add(arg); + } + + void Add(CAArgument arg) { + // It's a struct so can't be null + Add(arg.Type); + } + + void Add(IEnumerable args) { + if (args == null) + return; + foreach (var arg in args) + Add(arg); + } + + void Add(CANamedArgument arg) { + if (arg == null) + return; + Add(arg.Type); + Add(arg.Argument); + } + + void Add(IEnumerable decls) { + if (decls == null) + return; + foreach (var decl in decls) + Add(decl); + } + + void Add(DeclSecurity decl) { + if (decl == null) + return; + Add(decl.SecurityAttributes); + Add(decl.CustomAttributes); + } + + void Add(IEnumerable secAttrs) { + if (secAttrs == null) + return; + foreach (var secAttr in secAttrs) + Add(secAttr); + } + + void Add(SecurityAttribute secAttr) { + if (secAttr == null) + return; + Add(secAttr.AttributeType); + Add(secAttr.NamedArguments); + } + + void Add(ITypeDefOrRef tdr) { + var td = tdr as TypeDef; + if (td != null) { + Add(td); + return; + } + + var tr = tdr as TypeRef; + if (tr != null) { + Add(tr); + return; + } + + var ts = tdr as TypeSpec; + if (ts != null) { + Add(ts); + return; + } + } + + void Add(IEnumerable eds) { + if (eds == null) + return; + foreach (var ed in eds) + Add(ed); + } + + void Add(EventDef ed) { + if (ed == null || EventDefs.ContainsKey(ed)) + return; + if (ed.DeclaringType != null && ed.DeclaringType.Module != validModule) + return; + EventDefs[ed] = true; + Push(ed.EventType); + Add(ed.CustomAttributes); + Add(ed.AddMethod); + Add(ed.InvokeMethod); + Add(ed.RemoveMethod); + Add(ed.OtherMethods); + Add(ed.DeclaringType); + } + + void Add(IEnumerable fds) { + if (fds == null) + return; + foreach (var fd in fds) + Add(fd); + } + + void Add(FieldDef fd) { + if (fd == null || FieldDefs.ContainsKey(fd)) + return; + if (fd.DeclaringType != null && fd.DeclaringType.Module != validModule) + return; + FieldDefs[fd] = true; + Add(fd.CustomAttributes); + Add(fd.Signature); + Add(fd.DeclaringType); + Add(fd.MarshalType); + } + + void Add(IEnumerable gps) { + if (gps == null) + return; + foreach (var gp in gps) + Add(gp); + } + + void Add(GenericParam gp) { + if (gp == null || GenericParams.ContainsKey(gp)) + return; + GenericParams[gp] = true; + Push(gp.Owner); + Push(gp.Kind); + Add(gp.GenericParamConstraints); + Add(gp.CustomAttributes); + } + + void Add(IEnumerable gpcs) { + if (gpcs == null) + return; + foreach (var gpc in gpcs) + Add(gpc); + } + + void Add(GenericParamConstraint gpc) { + if (gpc == null) + return; + Add(gpc.Owner); + Push(gpc.Constraint); + Add(gpc.CustomAttributes); + } + + void Add(MemberRef mr) { + if (mr == null || MemberRefs.ContainsKey(mr)) + return; + if (mr.Module != validModule) + return; + MemberRefs[mr] = true; + Push(mr.Class); + Add(mr.Signature); + Add(mr.CustomAttributes); + } + + void Add(IEnumerable methods) { + if (methods == null) + return; + foreach (var m in methods) + Add(m); + } + + void Add(MethodDef md) { + if (md == null || MethodDefs.ContainsKey(md)) + return; + if (md.DeclaringType != null && md.DeclaringType.Module != validModule) + return; + MethodDefs[md] = true; + Add(md.Signature); + Add(md.ParamDefs); + Add(md.GenericParameters); + Add(md.DeclSecurities); + Add(md.MethodBody); + Add(md.CustomAttributes); + Add(md.Overrides); + Add(md.DeclaringType); + } + + void Add(MethodBody mb) { + var cb = mb as CilBody; + if (cb != null) + Add(cb); + } + + void Add(CilBody cb) { + if (cb == null) + return; + Add(cb.Instructions); + Add(cb.ExceptionHandlers); + Add(cb.Variables); + } + + void Add(IEnumerable instrs) { + if (instrs == null) + return; + foreach (var instr in instrs) { + if (instr == null) + continue; + switch (instr.OpCode.OperandType) { + case OperandType.InlineTok: + case OperandType.InlineType: + case OperandType.InlineMethod: + case OperandType.InlineField: + Push(instr.Operand); + break; + + case OperandType.InlineSig: + Add(instr.Operand as CallingConventionSig); + break; + + case OperandType.InlineVar: + case OperandType.ShortInlineVar: + var local = instr.Operand as Local; + if (local != null) { + Add(local); + break; + } + var arg = instr.Operand as Parameter; + if (arg != null) { + Add(arg); + break; + } + break; + } + } + } + + void Add(IEnumerable ehs) { + if (ehs == null) + return; + foreach (var eh in ehs) + Push(eh.CatchType); + } + + void Add(IEnumerable locals) { + if (locals == null) + return; + foreach (var local in locals) + Add(local); + } + + void Add(Local local) { + if (local == null) + return; + Add(local.Type); + } + + void Add(IEnumerable ps) { + if (ps == null) + return; + foreach (var p in ps) + Add(p); + } + + void Add(Parameter param) { + if (param == null) + return; + Add(param.Type); + Add(param.Method); + } + + void Add(IEnumerable pds) { + if (pds == null) + return; + foreach (var pd in pds) + Add(pd); + } + + void Add(ParamDef pd) { + if (pd == null) + return; + Add(pd.DeclaringMethod); + Add(pd.CustomAttributes); + Add(pd.MarshalType); + } + + void Add(MarshalType mt) { + if (mt == null) + return; + + switch (mt.NativeType) { + case NativeType.SafeArray: + Add(((SafeArrayMarshalType)mt).UserDefinedSubType); + break; + + case NativeType.CustomMarshaler: + Add(((CustomMarshalType)mt).CustomMarshaler); + break; + } + } + + void Add(IEnumerable mos) { + if (mos == null) + return; + foreach (var mo in mos) + Add(mo); + } + + void Add(MethodOverride mo) { + // It's a struct so can't be null + Push(mo.MethodBody); + Push(mo.MethodDeclaration); + } + + void Add(MethodSpec ms) { + if (ms == null || MethodSpecs.ContainsKey(ms)) + return; + if (ms.Method != null && ms.Method.DeclaringType != null && ms.Method.DeclaringType.Module != validModule) + return; + MethodSpecs[ms] = true; + Push(ms.Method); + Add(ms.Instantiation); + Add(ms.CustomAttributes); + } + + void Add(IEnumerable pds) { + if (pds == null) + return; + foreach (var pd in pds) + Add(pd); + } + + void Add(PropertyDef pd) { + if (pd == null || PropertyDefs.ContainsKey(pd)) + return; + if (pd.DeclaringType != null && pd.DeclaringType.Module != validModule) + return; + PropertyDefs[pd] = true; + Add(pd.Type); + Add(pd.CustomAttributes); + Add(pd.GetMethods); + Add(pd.SetMethods); + Add(pd.OtherMethods); + Add(pd.DeclaringType); + } + + void Add(IEnumerable tds) { + if (tds == null) + return; + foreach (var td in tds) + Add(td); + } + + void Add(TypeDef td) { + if (td == null || TypeDefs.ContainsKey(td)) + return; + if (td.Module != validModule) + return; + TypeDefs[td] = true; + Push(td.BaseType); + Add(td.Fields); + Add(td.Methods); + Add(td.GenericParameters); + Add(td.Interfaces); + Add(td.DeclSecurities); + Add(td.DeclaringType); + Add(td.Events); + Add(td.Properties); + Add(td.NestedTypes); + Add(td.CustomAttributes); + } + + void Add(IEnumerable iis) { + if (iis == null) + return; + foreach (var ii in iis) + Add(ii); + } + + void Add(InterfaceImpl ii) { + if (ii == null) + return; + Push(ii.Interface); + Add(ii.CustomAttributes); + } + + void Add(TypeRef tr) { + if (tr == null || TypeRefs.ContainsKey(tr)) + return; + if (tr.Module != validModule) + return; + TypeRefs[tr] = true; + Push(tr.ResolutionScope); + Add(tr.CustomAttributes); + } + + void Add(IEnumerable tss) { + if (tss == null) + return; + foreach (var ts in tss) + Add(ts); + } + + void Add(TypeSig ts) { + if (ts == null || TypeSigs.ContainsKey(ts)) + return; + if (ts.Module != validModule) + return; + TypeSigs[ts] = true; + + for (; ts != null; ts = ts.Next) { + switch (ts.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.ValueType: + case ElementType.Class: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + var tdrs = (TypeDefOrRefSig)ts; + Push(tdrs.TypeDefOrRef); + break; + + case ElementType.FnPtr: + var fps = (FnPtrSig)ts; + Add(fps.Signature); + break; + + case ElementType.GenericInst: + var gis = (GenericInstSig)ts; + Add(gis.GenericType); + Add(gis.GenericArguments); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + var ms = (ModifierSig)ts; + Push(ms.Modifier); + break; + + case ElementType.End: + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Var: + case ElementType.Array: + case ElementType.ValueArray: + case ElementType.R: + case ElementType.SZArray: + case ElementType.MVar: + case ElementType.Internal: + case ElementType.Module: + case ElementType.Sentinel: + case ElementType.Pinned: + default: + break; + } + } + } + + void Add(TypeSpec ts) { + if (ts == null || TypeSpecs.ContainsKey(ts)) + return; + if (ts.Module != validModule) + return; + TypeSpecs[ts] = true; + Add(ts.TypeSig); + Add(ts.CustomAttributes); + } + + void Add(IEnumerable ets) { + if (ets == null) + return; + foreach (var et in ets) + Add(et); + } + + void Add(ExportedType et) { + if (et == null || ExportedTypes.ContainsKey(et)) + return; + if (et.Module != validModule) + return; + ExportedTypes[et] = true; + Add(et.CustomAttributes); + Push(et.Implementation); + } + } +} diff --git a/dnlib/DotNet/MemberMDInitializer.cs b/dnlib/DotNet/MemberMDInitializer.cs new file mode 100644 index 0000000..e7dc82e --- /dev/null +++ b/dnlib/DotNet/MemberMDInitializer.cs @@ -0,0 +1,30 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Methods to load properties to make sure they're initialized + /// + static class MemberMDInitializer { + /// + /// Read every collection element + /// + /// Collection element type + /// Collection + public static void Initialize(IEnumerable coll) { + if (coll == null) + return; + foreach (var c in coll.GetSafeEnumerable()) { + } + } + + /// + /// Load the object instance + /// + /// The value (ignored) + public static void Initialize(object o) { + } + } +} diff --git a/dnlib/DotNet/MemberRef.cs b/dnlib/DotNet/MemberRef.cs new file mode 100644 index 0000000..9b5d371 --- /dev/null +++ b/dnlib/DotNet/MemberRef.cs @@ -0,0 +1,546 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the MemberRef table + /// + public abstract class MemberRef : IHasCustomAttribute, IMethodDefOrRef, ICustomAttributeType, IField, IContainsGenericParameter { + /// + /// The row id in its table + /// + protected uint rid; + + /// + /// The owner module + /// + protected ModuleDef module; + + /// + public MDToken MDToken { + get { return new MDToken(Table.MemberRef, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 6; } + } + + /// + public int MethodDefOrRefTag { + get { return 1; } + } + + /// + public int CustomAttributeTypeTag { + get { return 3; } + } + + /// + /// From column MemberRef.Class + /// + public IMemberRefParent Class { + get { return @class; } + set { @class = value; } + } + /// + protected IMemberRefParent @class; + + /// + /// From column MemberRef.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column MemberRef.Signature + /// + public CallingConventionSig Signature { + get { return signature; } + set { signature = value; } + } + /// + protected CallingConventionSig signature; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public ITypeDefOrRef DeclaringType { + get { + var owner = @class; + + var tdr = owner as ITypeDefOrRef; + if (tdr != null) + return tdr; + + var method = owner as MethodDef; + if (method != null) + return method.DeclaringType; + + var mr = owner as ModuleRef; + if (mr != null) { + var tr = GetGlobalTypeRef(mr); + if (module != null) + return module.UpdateRowId(tr); + return tr; + } + + return null; + } + } + + TypeRefUser GetGlobalTypeRef(ModuleRef mr) { + if (module == null) + return CreateDefaultGlobalTypeRef(mr); + var globalType = module.GlobalType; + if (globalType != null && new SigComparer().Equals(module, mr)) + return new TypeRefUser(module, globalType.Namespace, globalType.Name, mr); + var asm = module.Assembly; + if (asm == null) + return CreateDefaultGlobalTypeRef(mr); + var mod = asm.FindModule(mr.Name); + if (mod == null) + return CreateDefaultGlobalTypeRef(mr); + globalType = mod.GlobalType; + if (globalType == null) + return CreateDefaultGlobalTypeRef(mr); + return new TypeRefUser(module, globalType.Namespace, globalType.Name, mr); + } + + TypeRefUser CreateDefaultGlobalTypeRef(ModuleRef mr) { + var tr = new TypeRefUser(module, string.Empty, "", mr); + if (module != null) + module.UpdateRowId(tr); + return tr; + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return IsMethodRef; } + } + + bool IMemberRef.IsField { + get { return IsFieldRef; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return true; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// true if this is a method reference ( != null) + /// + public bool IsMethodRef { + get { return MethodSig != null; } + } + + /// + /// true if this is a field reference ( != null) + /// + public bool IsFieldRef { + get { return FieldSig != null; } + } + + /// + /// Gets/sets the method sig + /// + public MethodSig MethodSig { + get { return signature as MethodSig; } + set { signature = value; } + } + + /// + /// Gets/sets the field sig + /// + public FieldSig FieldSig { + get { return signature as FieldSig; } + set { signature = value; } + } + + /// + public ModuleDef Module { + get { return module; } + } + + /// + /// true if the method has a hidden 'this' parameter + /// + public bool HasThis { + get { + var ms = MethodSig; + return ms == null ? false : ms.HasThis; + } + } + + /// + /// true if the method has an explicit 'this' parameter + /// + public bool ExplicitThis { + get { + var ms = MethodSig; + return ms == null ? false : ms.ExplicitThis; + } + } + + /// + /// Gets the calling convention + /// + public CallingConvention CallingConvention { + get { + var ms = MethodSig; + return ms == null ? 0 : ms.CallingConvention & CallingConvention.Mask; + } + } + + /// + /// Gets/sets the method return type + /// + public TypeSig ReturnType { + get { + var ms = MethodSig; + return ms == null ? null : ms.RetType; + } + set { + var ms = MethodSig; + if (ms != null) + ms.RetType = value; + } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { + var sig = MethodSig; + return sig == null ? 0 : (int)sig.GenParamCount; + } + } + + /// + /// Gets the full name + /// + public string FullName { + get { + var parent = @class; + IList typeGenArgs = null; + if (parent is TypeSpec) { + var sig = ((TypeSpec)parent).TypeSig as GenericInstSig; + if (sig != null) + typeGenArgs = sig.GenericArguments; + } + var methodSig = MethodSig; + if (methodSig != null) + return FullNameCreator.MethodFullName(GetDeclaringTypeFullName(parent), name, methodSig, typeGenArgs, null); + var fieldSig = FieldSig; + if (fieldSig != null) + return FullNameCreator.FieldFullName(GetDeclaringTypeFullName(parent), name, fieldSig, typeGenArgs); + return string.Empty; + } + } + + /// + /// Get the declaring type's full name + /// + /// Full name or null if there's no declaring type + public string GetDeclaringTypeFullName() { + return GetDeclaringTypeFullName(@class); + } + + string GetDeclaringTypeFullName(IMemberRefParent parent) { + if (parent == null) + return null; + if (parent is ITypeDefOrRef) + return ((ITypeDefOrRef)parent).FullName; + if (parent is ModuleRef) + return string.Format("[module:{0}]", ((ModuleRef)parent).ToString()); + if (parent is MethodDef) { + var declaringType = ((MethodDef)parent).DeclaringType; + return declaringType == null ? null : declaringType.FullName; + } + return null; // Should never be reached + } + + /// + /// Resolves the method/field + /// + /// A or a instance or null + /// if it couldn't be resolved. + public IMemberForwarded Resolve() { + if (module == null) + return null; + return module.Context.Resolver.Resolve(this); + } + + /// + /// Resolves the method/field + /// + /// A or a instance + /// If the method/field couldn't be resolved + public IMemberForwarded ResolveThrow() { + var memberDef = Resolve(); + if (memberDef != null) + return memberDef; + throw new MemberRefResolveException(string.Format("Could not resolve method/field: {0} ({1})", this, this.GetDefinitionAssembly())); + } + + /// + /// Resolves the field + /// + /// A instance or null if it couldn't be resolved. + public FieldDef ResolveField() { + return Resolve() as FieldDef; + } + + /// + /// Resolves the field + /// + /// A instance + /// If the field couldn't be resolved + public FieldDef ResolveFieldThrow() { + var field = ResolveField(); + if (field != null) + return field; + throw new MemberRefResolveException(string.Format("Could not resolve field: {0} ({1})", this, this.GetDefinitionAssembly())); + } + + /// + /// Resolves the method + /// + /// A instance or null if it couldn't be resolved. + public MethodDef ResolveMethod() { + return Resolve() as MethodDef; + } + + /// + /// Resolves the method + /// + /// A instance + /// If the method couldn't be resolved + public MethodDef ResolveMethodThrow() { + var method = ResolveMethod(); + if (method != null) + return method; + throw new MemberRefResolveException(string.Format("Could not resolve method: {0} ({1})", this, this.GetDefinitionAssembly())); + } + + bool IContainsGenericParameter.ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + + /// + /// Gets a that can be used as signature context + /// + /// Context passed to the constructor + /// Field/method class owner + /// + protected static GenericParamContext GetSignatureGenericParamContext(GenericParamContext gpContext, IMemberRefParent @class) { + TypeDef type = null; + MethodDef method = gpContext.Method; + + var ts = @class as TypeSpec; + if (ts != null) { + var gis = ts.TypeSig as GenericInstSig; + if (gis != null) + type = gis.GenericType.ToTypeDefOrRef().ResolveTypeDef(); + } + + return new GenericParamContext(type, method); + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A MemberRef row created by the user and not present in the original .NET file + /// + public class MemberRefUser : MemberRef { + /// + /// Constructor + /// + /// Owner module + public MemberRefUser(ModuleDef module) { + this.module = module; + } + + /// + /// Constructor + /// + /// Owner module + /// Name of ref + public MemberRefUser(ModuleDef module, UTF8String name) { + this.module = module; + this.name = name; + } + + /// + /// Constructor + /// + /// Owner module + /// Name of field ref + /// Field sig + public MemberRefUser(ModuleDef module, UTF8String name, FieldSig sig) + : this(module, name, sig, null) { + } + + /// + /// Constructor + /// + /// Owner module + /// Name of field ref + /// Field sig + /// Owner of field + public MemberRefUser(ModuleDef module, UTF8String name, FieldSig sig, IMemberRefParent @class) { + this.module = module; + this.name = name; + this.@class = @class; + this.signature = sig; + } + + /// + /// Constructor + /// + /// Owner module + /// Name of method ref + /// Method sig + public MemberRefUser(ModuleDef module, UTF8String name, MethodSig sig) + : this(module, name, sig, null) { + } + + /// + /// Constructor + /// + /// Owner module + /// Name of method ref + /// Method sig + /// Owner of method + public MemberRefUser(ModuleDef module, UTF8String name, MethodSig sig, IMemberRefParent @class) { + this.module = module; + this.name = name; + this.@class = @class; + this.signature = sig; + } + } + + /// + /// Created from a row in the MemberRef table + /// + sealed class MemberRefMD : MemberRef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.MemberRef, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this MemberRef row + /// Row ID + /// Generic parameter context + /// If is null + /// If is invalid + public MemberRefMD(ModuleDefMD readerModule, uint rid, GenericParamContext gpContext) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.MemberRefTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("MemberRef rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.module = readerModule; + uint @class, name; + uint signature = readerModule.TablesStream.ReadMemberRefRow(origRid, out @class, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.@class = readerModule.ResolveMemberRefParent(@class, gpContext); + this.signature = readerModule.ReadSignature(signature, GetSignatureGenericParamContext(gpContext, this.@class)); + } + } +} diff --git a/dnlib/DotNet/MethodAttributes.cs b/dnlib/DotNet/MethodAttributes.cs new file mode 100644 index 0000000..abd7a3c --- /dev/null +++ b/dnlib/DotNet/MethodAttributes.cs @@ -0,0 +1,67 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Method attributes, see CorHdr.h/CorMethodAttr + /// + [Flags] + public enum MethodAttributes : ushort { + /// member access mask - Use this mask to retrieve accessibility information. + MemberAccessMask = 0x0007, + /// Member not referenceable. + PrivateScope = 0x0000, + /// Member not referenceable. + CompilerControlled = PrivateScope, + /// Accessible only by the parent type. + Private = 0x0001, + /// Accessible by sub-types only in this Assembly. + FamANDAssem = 0x0002, + /// Accessibly by anyone in the Assembly. + Assembly = 0x0003, + /// Accessible only by type and sub-types. + Family = 0x0004, + /// Accessibly by sub-types anywhere, plus anyone in assembly. + FamORAssem = 0x0005, + /// Accessibly by anyone who has visibility to this scope. + Public = 0x0006, + + /// Defined on type, else per instance. + Static = 0x0010, + /// Method may not be overridden. + Final = 0x0020, + /// Method virtual. + Virtual = 0x0040, + /// Method hides by name+sig, else just by name. + HideBySig = 0x0080, + + /// vtable layout mask - Use this mask to retrieve vtable attributes. + VtableLayoutMask = 0x0100, + /// The default. + ReuseSlot = 0x0000, + /// Method always gets a new slot in the vtable. + NewSlot = 0x0100, + + /// Overridability is the same as the visibility. + CheckAccessOnOverride = 0x0200, + /// Method does not provide an implementation. + Abstract = 0x0400, + /// Method is special. Name describes how. + SpecialName = 0x0800, + + /// Implementation is forwarded through pinvoke. + PinvokeImpl = 0x2000, + /// Implementation is forwarded through pinvoke. + PInvokeImpl = PinvokeImpl, + /// Managed method exported via thunk to unmanaged code. + UnmanagedExport = 0x0008, + + /// Runtime should check name encoding. + RTSpecialName = 0x1000, + /// Method has security associate with it. + HasSecurity = 0x4000, + /// Method calls another method containing security code. + RequireSecObject = 0x8000, + } +} diff --git a/dnlib/DotNet/MethodDef.cs b/dnlib/DotNet/MethodDef.cs new file mode 100644 index 0000000..52e47f5 --- /dev/null +++ b/dnlib/DotNet/MethodDef.cs @@ -0,0 +1,1338 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.Utils; +using dnlib.PE; +using dnlib.DotNet.MD; +using dnlib.DotNet.Emit; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Method table + /// + public abstract class MethodDef : IHasCustomAttribute, IHasDeclSecurity, IMemberRefParent, IMethodDefOrRef, IMemberForwarded, ICustomAttributeType, ITypeOrMethodDef, IManagedEntryPoint, IListListener, IListListener, IMemberDef { + internal static readonly UTF8String StaticConstructorName = ".cctor"; + internal static readonly UTF8String InstanceConstructorName = ".ctor"; + + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// All parameters + /// + protected ParameterList parameterList; + + /// + public MDToken MDToken { + get { return new MDToken(Table.Method, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 0; } + } + + /// + public int HasDeclSecurityTag { + get { return 1; } + } + + /// + public int MemberRefParentTag { + get { return 3; } + } + + /// + public int MethodDefOrRefTag { + get { return 0; } + } + + /// + public int MemberForwardedTag { + get { return 1; } + } + + /// + public int CustomAttributeTypeTag { + get { return 2; } + } + + /// + public int TypeOrMethodDefTag { + get { return 1; } + } + + /// + /// From column Method.RVA + /// + public RVA RVA { + get { return rva; } + set { rva = value; } + } + /// + protected RVA rva; + + /// + /// From column Method.ImplFlags + /// + public MethodImplAttributes ImplAttributes { + get { return (MethodImplAttributes)implAttributes; } + set { implAttributes = (int)value; } + } + /// Implementation attributes + protected int implAttributes; + + /// + /// From column Method.Flags + /// + public MethodAttributes Attributes { + get { return (MethodAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column Method.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column Method.Signature + /// + public CallingConventionSig Signature { + get { return signature; } + set { signature = value; } + } + /// + protected CallingConventionSig signature; + + /// + /// From column Method.ParamList + /// + public ThreadSafe.IList ParamDefs { + get { + if (paramDefs == null) + InitializeParamDefs(); + return paramDefs; + } + } + /// + protected LazyList paramDefs; + /// Initializes + protected virtual void InitializeParamDefs() { + Interlocked.CompareExchange(ref paramDefs, new LazyList(this), null); + } + + /// + public ThreadSafe.IList GenericParameters { + get { + if (genericParameters == null) + InitializeGenericParameters(); + return genericParameters; + } + } + /// + protected LazyList genericParameters; + /// Initializes + protected virtual void InitializeGenericParameters() { + Interlocked.CompareExchange(ref genericParameters, new LazyList(this), null); + } + + /// + public ThreadSafe.IList DeclSecurities { + get { + if (declSecurities == null) + InitializeDeclSecurities(); + return declSecurities; + } + } + /// + protected ThreadSafe.IList declSecurities; + /// Initializes + protected virtual void InitializeDeclSecurities() { + Interlocked.CompareExchange(ref declSecurities, ThreadSafeListCreator.Create(), null); + } + + /// + public ImplMap ImplMap { + get { + if (!implMap_isInitialized) + InitializeImplMap(); + return implMap; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + implMap = value; + implMap_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected ImplMap implMap; + /// + protected bool implMap_isInitialized; + + void InitializeImplMap() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (implMap_isInitialized) + return; + implMap = GetImplMap_NoLock(); + implMap_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual ImplMap GetImplMap_NoLock() { + return null; + } + + /// Reset + protected void ResetImplMap() { + implMap_isInitialized = false; + } + + /// + /// Gets/sets the method body. See also + /// + public MethodBody MethodBody { + get { + if (!methodBody_isInitialized) + InitializeMethodBody(); + return methodBody; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + methodBody = value; + methodBody_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected MethodBody methodBody; + /// + protected bool methodBody_isInitialized; + + void InitializeMethodBody() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (methodBody_isInitialized) + return; + methodBody = GetMethodBody_NoLock(); + methodBody_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Frees the method body if it has been loaded. This does nothing if + /// returns false. + /// + public void FreeMethodBody() { + if (!CanFreeMethodBody) + return; + if (!methodBody_isInitialized) + return; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + methodBody = null; + methodBody_isInitialized = false; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual MethodBody GetMethodBody_NoLock() { + return null; + } + + /// + /// true if can free the method body + /// + protected virtual bool CanFreeMethodBody { + get { return true; } + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + /// Gets the methods this method implements + /// + public ThreadSafe.IList Overrides { + get { + if (overrides == null) + InitializeOverrides(); + return overrides; + } + } + /// + protected ThreadSafe.IList overrides; + /// Initializes + protected virtual void InitializeOverrides() { + Interlocked.CompareExchange(ref overrides, ThreadSafeListCreator.Create(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public bool HasDeclSecurities { + get { return DeclSecurities.Count > 0; } + } + + /// + /// true if is not empty + /// + public bool HasParamDefs { + get { return ParamDefs.Count > 0; } + } + + /// + /// Gets/sets the declaring type (owner type) + /// + public TypeDef DeclaringType { + get { return declaringType2; } + set { + var currentDeclaringType = DeclaringType2; + if (currentDeclaringType == value) + return; + if (currentDeclaringType != null) + currentDeclaringType.Methods.Remove(this); // Will set DeclaringType2 = null + if (value != null) + value.Methods.Add(this); // Will set DeclaringType2 = value + } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return declaringType2; } + } + + /// + /// Called by and should normally not be called by any user + /// code. Use instead. Only call this if you must set the + /// declaring type without inserting it in the declaring type's method list. + /// + public TypeDef DeclaringType2 { + get { return declaringType2; } + set { declaringType2 = value; } + } + /// + protected TypeDef declaringType2; + + /// + public ModuleDef Module { + get { + var dt = declaringType2; + return dt == null ? null : dt.Module; + } + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return true; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return true; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// Gets/sets the CIL method body. See also + /// + public CilBody Body { + get { + if (!methodBody_isInitialized) + InitializeMethodBody(); + return methodBody as CilBody; + } + set { MethodBody = value; } + } + + /// + /// Gets/sets the native method body + /// + public NativeMethodBody NativeBody { + get { + if (!methodBody_isInitialized) + InitializeMethodBody(); + return methodBody as NativeMethodBody; + } + set { MethodBody = value; } + } + + /// + /// true if there's at least one in + /// + public bool HasGenericParameters { + get { return GenericParameters.Count > 0; } + } + + /// + /// true if it has a + /// + public bool HasBody { + get { return Body != null; } + } + + /// + /// true if there's at least one in + /// + public bool HasOverrides { + get { return Overrides.Count > 0; } + } + + /// + /// true if is not null + /// + public bool HasImplMap { + get { return ImplMap != null; } + } + + /// + /// Gets the full name + /// + public string FullName { + get { + var dt = declaringType2; + return FullNameCreator.MethodFullName(dt == null ? null : dt.FullName, name, MethodSig, null, null, this); + } + } + + /// + /// Gets/sets the + /// + public MethodSig MethodSig { + get { return signature as MethodSig; } + set { signature = value; } + } + + /// + /// Gets the parameters + /// + public ParameterList Parameters { + get { return parameterList; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { + var sig = MethodSig; + return sig == null ? 0 : (int)sig.GenParamCount; + } + } + + /// + /// true if the method has a hidden 'this' parameter + /// + public bool HasThis { + get { + var ms = MethodSig; + return ms == null ? false : ms.HasThis; + } + } + + /// + /// true if the method has an explicit 'this' parameter + /// + public bool ExplicitThis { + get { + var ms = MethodSig; + return ms == null ? false : ms.ExplicitThis; + } + } + + /// + /// Gets the calling convention + /// + public CallingConvention CallingConvention { + get { + var ms = MethodSig; + return ms == null ? 0 : ms.CallingConvention & CallingConvention.Mask; + } + } + + /// + /// Gets/sets the method return type + /// + public TypeSig ReturnType { + get { + var ms = MethodSig; + return ms == null ? null : ms.RetType; + } + set { + var ms = MethodSig; + if (ms != null) + ms.RetType = value; + } + } + + /// + /// true if the method returns a value (i.e., return type is not ) + /// + public bool HasReturnType { + get { return ReturnType.RemovePinnedAndModifiers().GetElementType() != ElementType.Void; } + } + + /// + /// Gets/sets the method semantics attributes. If you remove/add a method to a property or + /// an event, you must manually update this property or eg. won't + /// work as expected. + /// + public MethodSemanticsAttributes SemanticsAttributes { + get { + if ((semAttrs & SEMATTRS_INITD) == 0) + InitializeSemanticsAttributes(); + return (MethodSemanticsAttributes)semAttrs; + } + set { semAttrs = (ushort)value | SEMATTRS_INITD; } + } + /// Set when has been initialized + protected internal static int SEMATTRS_INITD = unchecked((int)0x80000000); + /// + protected internal int semAttrs; + /// Initializes + protected virtual void InitializeSemanticsAttributes() { + semAttrs = 0 | SEMATTRS_INITD; + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, MethodSemanticsAttributes flags) { + if ((semAttrs & SEMATTRS_INITD) == 0) + InitializeSemanticsAttributes(); +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = semAttrs; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref semAttrs, newVal, origVal) != origVal); +#else + if (set) + semAttrs |= (int)flags; + else + semAttrs &= ~(int)flags; +#endif + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(MethodAttributes andMask, MethodAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, MethodAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyImplAttributes(MethodImplAttributes andMask, MethodImplAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = implAttributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref implAttributes, newVal, origVal) != origVal); +#else + implAttributes = (implAttributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyImplAttributes(bool set, MethodImplAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = implAttributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref implAttributes, newVal, origVal) != origVal); +#else + if (set) + implAttributes |= (int)flags; + else + implAttributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the method access + /// + public MethodAttributes Access { + get { return (MethodAttributes)attributes & MethodAttributes.MemberAccessMask; } + set { ModifyAttributes(~MethodAttributes.MemberAccessMask, value & MethodAttributes.MemberAccessMask); } + } + + /// + /// true if is set + /// + public bool IsCompilerControlled { + get { return IsPrivateScope; } + } + + /// + /// true if is set + /// + public bool IsPrivateScope { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.PrivateScope; } + } + + /// + /// true if is set + /// + public bool IsPrivate { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Private; } + } + + /// + /// true if is set + /// + public bool IsFamilyAndAssembly { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.FamANDAssem; } + } + + /// + /// true if is set + /// + public bool IsAssembly { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Assembly; } + } + + /// + /// true if is set + /// + public bool IsFamily { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Family; } + } + + /// + /// true if is set + /// + public bool IsFamilyOrAssembly { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.FamORAssem; } + } + + /// + /// true if is set + /// + public bool IsPublic { + get { return ((MethodAttributes)attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Public; } + } + + /// + /// Gets/sets the bit + /// + public bool IsStatic { + get { return ((MethodAttributes)attributes & MethodAttributes.Static) != 0; } + set { ModifyAttributes(value, MethodAttributes.Static); } + } + + /// + /// Gets/sets the bit + /// + public bool IsFinal { + get { return ((MethodAttributes)attributes & MethodAttributes.Final) != 0; } + set { ModifyAttributes(value, MethodAttributes.Final); } + } + + /// + /// Gets/sets the bit + /// + public bool IsVirtual { + get { return ((MethodAttributes)attributes & MethodAttributes.Virtual) != 0; } + set { ModifyAttributes(value, MethodAttributes.Virtual); } + } + + /// + /// Gets/sets the bit + /// + public bool IsHideBySig { + get { return ((MethodAttributes)attributes & MethodAttributes.HideBySig) != 0; } + set { ModifyAttributes(value, MethodAttributes.HideBySig); } + } + + /// + /// Gets/sets the bit + /// + public bool IsNewSlot { + get { return ((MethodAttributes)attributes & MethodAttributes.NewSlot) != 0; } + set { ModifyAttributes(value, MethodAttributes.NewSlot); } + } + + /// + /// Gets/sets the bit + /// + public bool IsReuseSlot { + get { return ((MethodAttributes)attributes & MethodAttributes.NewSlot) == 0; } + set { ModifyAttributes(!value, MethodAttributes.NewSlot); } + } + + /// + /// Gets/sets the bit + /// + public bool IsCheckAccessOnOverride { + get { return ((MethodAttributes)attributes & MethodAttributes.CheckAccessOnOverride) != 0; } + set { ModifyAttributes(value, MethodAttributes.CheckAccessOnOverride); } + } + + /// + /// Gets/sets the bit + /// + public bool IsAbstract { + get { return ((MethodAttributes)attributes & MethodAttributes.Abstract) != 0; } + set { ModifyAttributes(value, MethodAttributes.Abstract); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSpecialName { + get { return ((MethodAttributes)attributes & MethodAttributes.SpecialName) != 0; } + set { ModifyAttributes(value, MethodAttributes.SpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool IsPinvokeImpl { + get { return ((MethodAttributes)attributes & MethodAttributes.PinvokeImpl) != 0; } + set { ModifyAttributes(value, MethodAttributes.PinvokeImpl); } + } + + /// + /// Gets/sets the bit + /// + public bool IsUnmanagedExport { + get { return ((MethodAttributes)attributes & MethodAttributes.UnmanagedExport) != 0; } + set { ModifyAttributes(value, MethodAttributes.UnmanagedExport); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRuntimeSpecialName { + get { return ((MethodAttributes)attributes & MethodAttributes.RTSpecialName) != 0; } + set { ModifyAttributes(value, MethodAttributes.RTSpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool HasSecurity { + get { return ((MethodAttributes)attributes & MethodAttributes.HasSecurity) != 0; } + set { ModifyAttributes(value, MethodAttributes.HasSecurity); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRequireSecObject { + get { return ((MethodAttributes)attributes & MethodAttributes.RequireSecObject) != 0; } + set { ModifyAttributes(value, MethodAttributes.RequireSecObject); } + } + + /// + /// Gets/sets the code type + /// + public MethodImplAttributes CodeType { + get { return (MethodImplAttributes)implAttributes & MethodImplAttributes.CodeTypeMask; } + set { ModifyImplAttributes(~MethodImplAttributes.CodeTypeMask, value & MethodImplAttributes.CodeTypeMask); } + } + + /// + /// true if is set + /// + public bool IsIL { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.CodeTypeMask) == MethodImplAttributes.IL; } + } + + /// + /// true if is set + /// + public bool IsNative { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.CodeTypeMask) == MethodImplAttributes.Native; } + } + + /// + /// true if is set + /// + public bool IsOPTIL { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.CodeTypeMask) == MethodImplAttributes.OPTIL; } + } + + /// + /// true if is set + /// + public bool IsRuntime { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.CodeTypeMask) == MethodImplAttributes.Runtime; } + } + + /// + /// Gets/sets the bit + /// + public bool IsUnmanaged { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.Unmanaged) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.Unmanaged); } + } + + /// + /// Gets/sets the bit + /// + public bool IsManaged { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.Unmanaged) == 0; } + set { ModifyImplAttributes(!value, MethodImplAttributes.Unmanaged); } + } + + /// + /// Gets/sets the bit + /// + public bool IsForwardRef { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.ForwardRef) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.ForwardRef); } + } + + /// + /// Gets/sets the bit + /// + public bool IsPreserveSig { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.PreserveSig) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.PreserveSig); } + } + + /// + /// Gets/sets the bit + /// + public bool IsInternalCall { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.InternalCall) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.InternalCall); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSynchronized { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.Synchronized) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.Synchronized); } + } + + /// + /// Gets/sets the bit + /// + public bool IsNoInlining { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.NoInlining) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.NoInlining); } + } + + /// + /// Gets/sets the bit + /// + public bool IsAggressiveInlining { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.AggressiveInlining) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.AggressiveInlining); } + } + + /// + /// Gets/sets the bit + /// + public bool IsNoOptimization { + get { return ((MethodImplAttributes)implAttributes & MethodImplAttributes.NoOptimization) != 0; } + set { ModifyImplAttributes(value, MethodImplAttributes.NoOptimization); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSetter { + get { return (SemanticsAttributes & MethodSemanticsAttributes.Setter) != 0; } + set { ModifyAttributes(value, MethodSemanticsAttributes.Setter); } + } + + /// + /// Gets/sets the bit + /// + public bool IsGetter { + get { return (SemanticsAttributes & MethodSemanticsAttributes.Getter) != 0; } + set { ModifyAttributes(value, MethodSemanticsAttributes.Getter); } + } + + /// + /// Gets/sets the bit + /// + public bool IsOther { + get { return (SemanticsAttributes & MethodSemanticsAttributes.Other) != 0; } + set { ModifyAttributes(value, MethodSemanticsAttributes.Other); } + } + + /// + /// Gets/sets the bit + /// + public bool IsAddOn { + get { return (SemanticsAttributes & MethodSemanticsAttributes.AddOn) != 0; } + set { ModifyAttributes(value, MethodSemanticsAttributes.AddOn); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRemoveOn { + get { return (SemanticsAttributes & MethodSemanticsAttributes.RemoveOn) != 0; } + set { ModifyAttributes(value, MethodSemanticsAttributes.RemoveOn); } + } + + /// + /// Gets/sets the bit + /// + public bool IsFire { + get { return (SemanticsAttributes & MethodSemanticsAttributes.Fire) != 0; } + set { ModifyAttributes(value, MethodSemanticsAttributes.Fire); } + } + + /// + /// true if this is the static type constructor + /// + public bool IsStaticConstructor { + get { return IsRuntimeSpecialName && UTF8String.Equals(name, StaticConstructorName); } + } + + /// + /// true if this is an instance constructor + /// + public bool IsInstanceConstructor { + get { return IsRuntimeSpecialName && UTF8String.Equals(name, InstanceConstructorName); } + } + + /// + /// true if this is a static or an instance constructor + /// + public bool IsConstructor { + get { return IsStaticConstructor || IsInstanceConstructor; } + } + + /// + void IListListener.OnLazyAdd(int index, ref GenericParam value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref GenericParam value) { +#if DEBUG + if (value.Owner != this) + throw new InvalidOperationException("Added generic param's Owner != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, GenericParam value) { + if (value.Owner != null) + throw new InvalidOperationException("Generic param is already owned by another type/method. Set Owner to null first."); + value.Owner = this; + } + + /// + void IListListener.OnRemove(int index, GenericParam value) { + value.Owner = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var gp in GenericParameters.GetEnumerable_NoLock()) + gp.Owner = null; + } + + /// + void IListListener.OnLazyAdd(int index, ref ParamDef value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref ParamDef value) { +#if DEBUG + if (value.DeclaringMethod != this) + throw new InvalidOperationException("Added param's DeclaringMethod != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, ParamDef value) { + if (value.DeclaringMethod != null) + throw new InvalidOperationException("Param is already owned by another method. Set DeclaringMethod to null first."); + value.DeclaringMethod = this; + } + + /// + void IListListener.OnRemove(int index, ParamDef value) { + value.DeclaringMethod = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var pd in ParamDefs.GetEnumerable_NoLock()) + pd.DeclaringMethod = null; + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A Method row created by the user and not present in the original .NET file + /// + public class MethodDefUser : MethodDef { + /// + /// Default constructor + /// + public MethodDefUser() { + this.paramDefs = new LazyList(this); + this.genericParameters = new LazyList(this); + this.parameterList = new ParameterList(this, null); + this.semAttrs = 0 | SEMATTRS_INITD; + } + + /// + /// Constructor + /// + /// Method name + public MethodDefUser(UTF8String name) + : this(name, null, 0, 0) { + } + + /// + /// Constructor + /// + /// Method name + /// Method sig + public MethodDefUser(UTF8String name, MethodSig methodSig) + : this(name, methodSig, 0, 0) { + } + + /// + /// Constructor + /// + /// Method name + /// Method sig + /// Flags + public MethodDefUser(UTF8String name, MethodSig methodSig, MethodAttributes flags) + : this(name, methodSig, 0, flags) { + } + + /// + /// Constructor + /// + /// Method name + /// Method sig + /// Impl flags + public MethodDefUser(UTF8String name, MethodSig methodSig, MethodImplAttributes implFlags) + : this(name, methodSig, implFlags, 0) { + } + + /// + /// Constructor + /// + /// Method name + /// Method sig + /// Impl flags + /// Flags + public MethodDefUser(UTF8String name, MethodSig methodSig, MethodImplAttributes implFlags, MethodAttributes flags) { + this.name = name; + this.signature = methodSig; + this.paramDefs = new LazyList(this); + this.genericParameters = new LazyList(this); + this.implAttributes = (int)implFlags; + this.attributes = (int)flags; + this.parameterList = new ParameterList(this, null); + this.semAttrs = 0 | SEMATTRS_INITD; + } + } + + /// + /// Created from a row in the Method table + /// + sealed class MethodDefMD : MethodDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + readonly RVA origRva; + readonly MethodImplAttributes origImplAttributes; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeParamDefs() { + var list = readerModule.MetaData.GetParamRidList(origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveParam(((RidList)list2)[index])); + Interlocked.CompareExchange(ref paramDefs, tmp, null); + } + + /// + protected override void InitializeGenericParameters() { + var list = readerModule.MetaData.GetGenericParamRidList(Table.Method, origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveGenericParam(((RidList)list2)[index])); + Interlocked.CompareExchange(ref genericParameters, tmp, null); + } + + /// + protected override void InitializeDeclSecurities() { + var list = readerModule.MetaData.GetDeclSecurityRidList(Table.Method, origRid); + var tmp = new LazyList((int)list.Length, list, (list2, index) => readerModule.ResolveDeclSecurity(((RidList)list2)[index])); + Interlocked.CompareExchange(ref declSecurities, tmp, null); + } + + /// + protected override ImplMap GetImplMap_NoLock() { + return readerModule.ResolveImplMap(readerModule.MetaData.GetImplMapRid(Table.Method, origRid)); + } + + /// + protected override MethodBody GetMethodBody_NoLock() { + return readerModule.ReadMethodBody(this, origRva, origImplAttributes, new GenericParamContext(declaringType2, this)); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Method, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + protected override void InitializeOverrides() { + var dt = declaringType2 as TypeDefMD; + var tmp = dt == null ? ThreadSafeListCreator.Create() : dt.GetMethodOverrides(this, new GenericParamContext(declaringType2, this)); + Interlocked.CompareExchange(ref overrides, tmp, null); + } + + /// + protected override void InitializeSemanticsAttributes() { + var dt = DeclaringType as TypeDefMD; + if (dt != null) + dt.InitializeMethodSemanticsAttributes(); + semAttrs |= SEMATTRS_INITD; + } + + /// + /// Constructor + /// + /// The module which contains this Method row + /// Row ID + /// If is null + /// If is invalid + public MethodDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.MethodTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Method rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint signature = readerModule.TablesStream.ReadMethodRow(origRid, out this.rva, out this.implAttributes, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.origRva = rva; + this.origImplAttributes = (MethodImplAttributes)implAttributes; + this.declaringType2 = readerModule.GetOwnerType(this); + this.signature = readerModule.ReadSignature(signature, new GenericParamContext(declaringType2, this)); + this.parameterList = new ParameterList(this, declaringType2); + } + + internal MethodDefMD InitializeAll() { + MemberMDInitializer.Initialize(RVA); + MemberMDInitializer.Initialize(Attributes); + MemberMDInitializer.Initialize(ImplAttributes); + MemberMDInitializer.Initialize(Name); + MemberMDInitializer.Initialize(Signature); + MemberMDInitializer.Initialize(ImplMap); + MemberMDInitializer.Initialize(MethodBody); + MemberMDInitializer.Initialize(DeclaringType); + MemberMDInitializer.Initialize(CustomAttributes); + MemberMDInitializer.Initialize(Overrides); + MemberMDInitializer.Initialize(ParamDefs); + MemberMDInitializer.Initialize(GenericParameters); + MemberMDInitializer.Initialize(DeclSecurities); + return this; + } + + /// + internal override void OnLazyAdd2(int index, ref GenericParam value) { + if (value.Owner != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadGenericParam(value.Rid).InitializeAll()); + value.Owner = this; + } + } + + /// + internal override void OnLazyAdd2(int index, ref ParamDef value) { + if (value.DeclaringMethod != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadParam(value.Rid).InitializeAll()); + value.DeclaringMethod = this; + } + } + } +} diff --git a/dnlib/DotNet/MethodImplAttributes.cs b/dnlib/DotNet/MethodImplAttributes.cs new file mode 100644 index 0000000..06b1b45 --- /dev/null +++ b/dnlib/DotNet/MethodImplAttributes.cs @@ -0,0 +1,46 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Method impl attributes, see CorHdr.h/CorMethodImpl + /// + [Flags] + public enum MethodImplAttributes : ushort { + /// Flags about code type. + CodeTypeMask = 0x0003, + /// Method impl is IL. + IL = 0x0000, + /// Method impl is native. + Native = 0x0001, + /// Method impl is OPTIL + OPTIL = 0x0002, + /// Method impl is provided by the runtime. + Runtime = 0x0003, + + /// Flags specifying whether the code is managed or unmanaged. + ManagedMask = 0x0004, + /// Method impl is unmanaged, otherwise managed. + Unmanaged = 0x0004, + /// Method impl is managed. + Managed = 0x0000, + + /// Indicates method is defined; used primarily in merge scenarios. + ForwardRef = 0x0010, + /// Indicates method sig is not to be mangled to do HRESULT conversion. + PreserveSig = 0x0080, + + /// Reserved for internal use. + InternalCall = 0x1000, + + /// Method is single threaded through the body. + Synchronized = 0x0020, + /// Method may not be inlined. + NoInlining = 0x0008, + /// Method should be inlined if possible. + AggressiveInlining = 0x0100, + /// Method may not be optimized. + NoOptimization = 0x0040, + } +} diff --git a/dnlib/DotNet/MethodOverride.cs b/dnlib/DotNet/MethodOverride.cs new file mode 100644 index 0000000..b5d2fee --- /dev/null +++ b/dnlib/DotNet/MethodOverride.cs @@ -0,0 +1,28 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Describes which method some method implements + /// + public struct MethodOverride { + /// + /// The method body. Usually a but could be a + /// + public IMethodDefOrRef MethodBody; + + /// + /// The method implements + /// + public IMethodDefOrRef MethodDeclaration; + + /// + /// Constructor + /// + /// Method body + /// The method implements + public MethodOverride(IMethodDefOrRef methodBody, IMethodDefOrRef methodDeclaration) { + this.MethodBody = methodBody; + this.MethodDeclaration = methodDeclaration; + } + } +} diff --git a/dnlib/DotNet/MethodSemanticsAttributes.cs b/dnlib/DotNet/MethodSemanticsAttributes.cs new file mode 100644 index 0000000..9780bba --- /dev/null +++ b/dnlib/DotNet/MethodSemanticsAttributes.cs @@ -0,0 +1,26 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Method semantics flags, see CorHdr.h/CorMethodSemanticsAttr + /// + [Flags] + public enum MethodSemanticsAttributes : ushort { + /// No bit is set + None = 0, + /// Setter for property + Setter = 0x0001, + /// Getter for property + Getter = 0x0002, + /// other method for property or event + Other = 0x0004, + /// AddOn method for event + AddOn = 0x0008, + /// RemoveOn method for event + RemoveOn = 0x0010, + /// Fire method for event + Fire = 0x0020, + } +} diff --git a/dnlib/DotNet/MethodSpec.cs b/dnlib/DotNet/MethodSpec.cs new file mode 100644 index 0000000..5e1903b --- /dev/null +++ b/dnlib/DotNet/MethodSpec.cs @@ -0,0 +1,298 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the MethodSpec table + /// + public abstract class MethodSpec : IHasCustomAttribute, IMethod, IContainsGenericParameter { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.MethodSpec, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 21; } + } + + /// + /// From column MethodSpec.Method + /// + public IMethodDefOrRef Method { + get { return method; } + set { method = value; } + } + /// + protected IMethodDefOrRef method; + + /// + /// From column MethodSpec.Instantiation + /// + public CallingConventionSig Instantiation { + get { return instantiation; } + set { instantiation = value; } + } + /// + protected CallingConventionSig instantiation; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + MethodSig IMethod.MethodSig { + get { + var m = method; + return m == null ? null : m.MethodSig; + } + set { + var m = method; + if (m != null) + m.MethodSig = value; + } + } + + /// + public UTF8String Name { + get { + var m = method; + return m == null ? UTF8String.Empty : m.Name; + } + set { + var m = method; + if (m != null) + m.Name = value; + } + } + + /// + public ITypeDefOrRef DeclaringType { + get { + var m = method; + return m == null ? null : m.DeclaringType; + } + } + + /// + /// Gets/sets the generic instance method sig + /// + public GenericInstMethodSig GenericInstMethodSig { + get { return instantiation as GenericInstMethodSig; } + set { instantiation = value; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { + var sig = GenericInstMethodSig; + return sig == null ? 0 : sig.GenericArguments.Count; + } + } + + /// + public ModuleDef Module { + get { + var m = method; + return m == null ? null : m.Module; + } + } + + /// + /// Gets the full name + /// + public string FullName { + get { + var gims = GenericInstMethodSig; + var methodGenArgs = gims == null ? null : gims.GenericArguments; + var m = method; + var methodDef = m as MethodDef; + if (methodDef != null) { + var declaringType = methodDef.DeclaringType; + return FullNameCreator.MethodFullName(declaringType == null ? null : declaringType.FullName, methodDef.Name, methodDef.MethodSig, null, methodGenArgs); + } + + var memberRef = m as MemberRef; + if (memberRef != null) { + var methodSig = memberRef.MethodSig; + if (methodSig != null) { + var tsOwner = memberRef.Class as TypeSpec; + var gis = tsOwner == null ? null : tsOwner.TypeSig as GenericInstSig; + var typeGenArgs = gis == null ? null : gis.GenericArguments; + return FullNameCreator.MethodFullName(memberRef.GetDeclaringTypeFullName(), memberRef.Name, methodSig, typeGenArgs, methodGenArgs); + } + } + + return string.Empty; + } + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return true; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return true; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + bool IContainsGenericParameter.ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A MethodSpec row created by the user and not present in the original .NET file + /// + public class MethodSpecUser : MethodSpec { + /// + /// Default constructor + /// + public MethodSpecUser() { + } + + /// + /// Constructor + /// + /// The generic method + public MethodSpecUser(IMethodDefOrRef method) + : this(method, null) { + } + + /// + /// Constructor + /// + /// The generic method + /// The instantiated method sig + public MethodSpecUser(IMethodDefOrRef method, GenericInstMethodSig sig) { + this.method = method; + this.instantiation = sig; + } + } + + /// + /// Created from a row in the MethodSpec table + /// + sealed class MethodSpecMD : MethodSpec, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.MethodSpec, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this MethodSpec row + /// Row ID + /// Generic parameter context + /// If is null + /// If is invalid + public MethodSpecMD(ModuleDefMD readerModule, uint rid, GenericParamContext gpContext) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.MethodSpecTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("MethodSpec rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint method; + uint instantiation = readerModule.TablesStream.ReadMethodSpecRow(origRid, out method); + this.method = readerModule.ResolveMethodDefOrRef(method, gpContext); + this.instantiation = readerModule.ReadSignature(instantiation, gpContext); + } + } +} diff --git a/dnlib/DotNet/ModuleContext.cs b/dnlib/DotNet/ModuleContext.cs new file mode 100644 index 0000000..3071923 --- /dev/null +++ b/dnlib/DotNet/ModuleContext.cs @@ -0,0 +1,71 @@ +// dnlib: See LICENSE.txt for more info + +using System.Threading; + +namespace dnlib.DotNet { + /// + /// context + /// + public class ModuleContext { + IAssemblyResolver assemblyResolver; + IResolver resolver; + + /// + /// Gets/sets the assembly resolver. This is never null. + /// + public IAssemblyResolver AssemblyResolver { + get { + if (assemblyResolver == null) + Interlocked.CompareExchange(ref assemblyResolver, NullResolver.Instance, null); + return assemblyResolver; + } + set { assemblyResolver = value; } + } + + /// + /// Gets/sets the resolver. This is never null. + /// + public IResolver Resolver { + get { + if (resolver == null) + Interlocked.CompareExchange(ref resolver, NullResolver.Instance, null); + return resolver; + } + set { resolver = value; } + } + + /// + /// Default constructor + /// + public ModuleContext() { + } + + /// + /// Constructor + /// + /// Assembly resolver or null + public ModuleContext(IAssemblyResolver assemblyResolver) + : this(assemblyResolver, new Resolver(assemblyResolver)) { + } + + /// + /// Constructor + /// + /// Type/method/field resolver or null + public ModuleContext(IResolver resolver) + : this(null, resolver) { + } + + /// + /// Constructor + /// + /// Assembly resolver or null + /// Type/method/field resolver or null + public ModuleContext(IAssemblyResolver assemblyResolver, IResolver resolver) { + this.assemblyResolver = assemblyResolver; + this.resolver = resolver; + if (resolver == null && assemblyResolver != null) + this.resolver = new Resolver(assemblyResolver); + } + } +} diff --git a/dnlib/DotNet/ModuleCreationOptions.cs b/dnlib/DotNet/ModuleCreationOptions.cs new file mode 100644 index 0000000..8172d1a --- /dev/null +++ b/dnlib/DotNet/ModuleCreationOptions.cs @@ -0,0 +1,74 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics.SymbolStore; +using dnlib.IO; +using dnlib.DotNet.Pdb; + +namespace dnlib.DotNet { + /// + /// creation options + /// + public sealed class ModuleCreationOptions { + internal static readonly ModuleCreationOptions Default = new ModuleCreationOptions(); + + /// + /// Module context + /// + public ModuleContext Context { get; set; } + + /// + /// Set this if you want to decide how to create the PDB symbol reader. You don't need to + /// initialize or . + /// + public CreateSymbolReaderDelegate CreateSymbolReader { get; set; } + + /// + /// Which PDB reader to use. Default is . + /// + public PdbImplType PdbImplementation { get; set; } + + /// + /// Set it to A) the path (string) of the PDB file, B) the data (byte[]) of the PDB file or + /// C) to an of the PDB data. The will + /// be owned by the module. You don't need to initialize + /// or + /// + public object PdbFileOrData { get; set; } + + /// + /// If true, will load the PDB file from disk if present. You don't need to + /// initialize or . + /// + public bool TryToLoadPdbFromDisk { get; set; } + + /// + /// corlib assembly reference to use or null if the default one from the opened + /// module should be used. + /// + public AssemblyRef CorLibAssemblyRef { get; set; } + + /// + /// Default constructor + /// + public ModuleCreationOptions() { + this.PdbImplementation = PdbImplType.Default; + } + + /// + /// Constructor + /// + /// Module context + public ModuleCreationOptions(ModuleContext context) { + this.Context = context; + this.PdbImplementation = PdbImplType.Default; + } + } + + /// + /// Creates a + /// + /// Module + /// A instance for (and now owned by) + /// or null. + public delegate ISymbolReader CreateSymbolReaderDelegate(ModuleDefMD module); +} diff --git a/dnlib/DotNet/ModuleDef.cs b/dnlib/DotNet/ModuleDef.cs new file mode 100644 index 0000000..231269a --- /dev/null +++ b/dnlib/DotNet/ModuleDef.cs @@ -0,0 +1,1656 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Threading; +using dnlib.Utils; +using dnlib.DotNet.MD; +using dnlib.DotNet.Pdb; +using dnlib.DotNet.Writer; +using dnlib.PE; +using dnlib.Threading; +using dnlib.W32Resources; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Module table + /// + public abstract class ModuleDef : IHasCustomAttribute, IResolutionScope, IDisposable, IListListener, IModule, ITypeDefFinder, IDnlibDef, ITokenResolver { + /// Default characteristics + protected const Characteristics DefaultCharacteristics = Characteristics.ExecutableImage | Characteristics._32BitMachine; + + /// Default DLL characteristics + protected const DllCharacteristics DefaultDllCharacteristics = DllCharacteristics.TerminalServerAware | DllCharacteristics.NoSeh | DllCharacteristics.NxCompat | DllCharacteristics.DynamicBase; + + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Initialize this in the ctor + /// + protected ICorLibTypes corLibTypes; + + /// + /// PDB state + /// + protected PdbState pdbState; + + TypeDefFinder typeDefFinder; + + /// + /// Array of last used rid in each table. I.e., next free rid is value + 1 + /// + protected readonly int[] lastUsedRids = new int[64]; + + /// Module context + protected ModuleContext context; + + /// + public MDToken MDToken { + get { return new MDToken(Table.Module, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 7; } + } + + /// + public int ResolutionScopeTag { + get { return 0; } + } + + /// + /// Gets/sets a user value. This is never used by dnlib. This property isn't thread safe. + /// + public object Tag { + get { return tag; } + set { tag = value; } + } + object tag; + + /// + public ScopeType ScopeType { + get { return ScopeType.ModuleDef; } + } + + /// + public string ScopeName { + get { return FullName; } + } + + /// + /// Gets/sets Module.Generation column + /// + public ushort Generation { + get { return generation; } + set { generation = value; } + } + /// + protected ushort generation; + + /// + /// Gets/sets Module.Name column + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// Gets/sets Module.Mvid column + /// + public Guid? Mvid { + get { return mvid; } + set { mvid = value; } + } + /// + protected Guid? mvid; + + /// + /// Gets/sets Module.EncId column + /// + public Guid? EncId { + get { return encId; } + set { encId = value; } + } + /// + protected Guid? encId; + + /// + /// Gets/sets Module.EncBaseId column + /// + public Guid? EncBaseId { + get { return encBaseId; } + set { encBaseId = value; } + } + /// + protected Guid? encBaseId; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + /// Gets the module's assembly. To set this value, add this + /// to . + /// + public AssemblyDef Assembly { + get { return assembly; } + internal set { assembly = value; } + } + /// + protected AssemblyDef assembly; + + /// + /// Gets a list of all non-nested s. See also + /// + public ThreadSafe.IList Types { + get { + if (types == null) + InitializeTypes(); + return types; + } + } + /// + protected LazyList types; + /// Initializes + protected virtual void InitializeTypes() { + Interlocked.CompareExchange(ref types, new LazyList(this), null); + } + + /// + /// Gets a list of all s + /// + public ThreadSafe.IList ExportedTypes { + get { + if (exportedTypes == null) + InitializeExportedTypes(); + return exportedTypes; + } + } + /// + protected ThreadSafe.IList exportedTypes; + /// Initializes + protected virtual void InitializeExportedTypes() { + Interlocked.CompareExchange(ref exportedTypes, ThreadSafeListCreator.Create(), null); + } + + /// + /// Gets/sets the native entry point. Only one of and + /// can be set. You write to one and the other one gets cleared. + /// + public RVA NativeEntryPoint { + get { + if (!nativeAndManagedEntryPoint_initialized) + InitializeNativeAndManagedEntryPoint(); + return nativeEntryPoint; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + nativeEntryPoint = value; + managedEntryPoint = null; + nativeAndManagedEntryPoint_initialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + /// Gets/sets the managed entry point. Only one of and + /// can be set. You write to one and the other one gets cleared. + /// + public IManagedEntryPoint ManagedEntryPoint { + get { + if (!nativeAndManagedEntryPoint_initialized) + InitializeNativeAndManagedEntryPoint(); + return managedEntryPoint; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + nativeEntryPoint = 0; + managedEntryPoint = value; + nativeAndManagedEntryPoint_initialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected RVA nativeEntryPoint; + /// + protected IManagedEntryPoint managedEntryPoint; + /// + protected bool nativeAndManagedEntryPoint_initialized; + + void InitializeNativeAndManagedEntryPoint() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (nativeAndManagedEntryPoint_initialized) + return; + nativeEntryPoint = GetNativeEntryPoint_NoLock(); + managedEntryPoint = GetManagedEntryPoint_NoLock(); + nativeAndManagedEntryPoint_initialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + /// Called to initialize + protected virtual RVA GetNativeEntryPoint_NoLock() { + return 0; + } + /// Called to initialize + protected virtual IManagedEntryPoint GetManagedEntryPoint_NoLock() { + return null; + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// Gets/sets the entry point method + /// + public MethodDef EntryPoint { + get { return ManagedEntryPoint as MethodDef; } + set { ManagedEntryPoint = value; } + } + + /// + /// true if is non-zero + /// + public bool IsNativeEntryPointValid { + get { return NativeEntryPoint != 0; } + } + + /// + /// true if is non-null + /// + public bool IsManagedEntryPointValid { + get { return ManagedEntryPoint != null; } + } + + /// + /// true if is non-null + /// + public bool IsEntryPointValid { + get { return EntryPoint != null; } + } + + /// + /// Gets a list of all s + /// + public ResourceCollection Resources { + get { + if (resources == null) + InitializeResources(); + return resources; + } + } + /// + protected ResourceCollection resources; + /// Initializes + protected virtual void InitializeResources() { + Interlocked.CompareExchange(ref resources, new ResourceCollection(), null); + } + + /// + /// Gets/sets the . This is null if there are no + /// vtable fixups. + /// + public VTableFixups VTableFixups { + get { + if (!vtableFixups_isInitialized) + InitializeVTableFixups(); + return vtableFixups; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + vtableFixups = value; + vtableFixups_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected VTableFixups vtableFixups; + /// + protected bool vtableFixups_isInitialized; + + void InitializeVTableFixups() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (vtableFixups_isInitialized) + return; + vtableFixups = GetVTableFixups_NoLock(); + vtableFixups_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual VTableFixups GetVTableFixups_NoLock() { + return null; + } + + /// + /// true if there's at least one in + /// + public bool HasTypes { + get { return Types.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasExportedTypes { + get { return ExportedTypes.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasResources { + get { return Resources.Count > 0; } + } + + /// + public string FullName { + get { return UTF8String.ToSystemStringOrEmpty(name); } + } + + /// + /// Gets/sets the path of the module or an empty string if it wasn't loaded from disk + /// + public string Location { + get { return location; } + set { location = value; } + } + /// + protected string location; + + /// + /// Gets the + /// + public ICorLibTypes CorLibTypes { + get { return corLibTypes; } + } + + /// + /// Gets the instance + /// + TypeDefFinder TypeDefFinder { + get { + if (typeDefFinder == null) + Interlocked.CompareExchange(ref typeDefFinder, new TypeDefFinder(Types), null); + return typeDefFinder; + } + } + + /// + /// Gets/sets the module context. This is never null. + /// + public ModuleContext Context { + get { + if (context == null) + Interlocked.CompareExchange(ref context, new ModuleContext(), null); + return context; + } + set { context = value ?? new ModuleContext(); } + } + + /// + /// If true, the cache is enabled. The cache is used by + /// and to find types. + ///

    + /// IMPORTANT: Only enable the cache if this module's types keep their exact + /// name, namespace, and declaring type and if no type is either added or + /// removed from or from any type that is reachable from the + /// top-level types in (i.e., any type owned by this module). + /// This is disabled by default. When disabled, all calls to + /// and will result in a slow O(n) (linear) search. + ///
    + /// + public bool EnableTypeDefFindCache { + get { return TypeDefFinder.IsCacheEnabled; } + set { TypeDefFinder.IsCacheEnabled = value; } + } + + /// + /// true if this is the manifest (main) module + /// + public bool IsManifestModule { + get { + var asm = assembly; + return asm != null && asm.ManifestModule == this; + } + } + + /// + /// Gets the global (aka. <Module>) type or null if there are no types + /// + public TypeDef GlobalType { + get { return Types.Get(0, null); } + } + + /// + /// Gets/sets the Win32 resources + /// + public Win32Resources Win32Resources { + get { + if (!win32Resources_isInitialized) + InitializeWin32Resources(); + return win32Resources; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + win32Resources = value; + win32Resources_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected Win32Resources win32Resources; + /// + protected bool win32Resources_isInitialized; + + void InitializeWin32Resources() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (win32Resources_isInitialized) + return; + win32Resources = GetWin32Resources_NoLock(); + win32Resources_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual Win32Resources GetWin32Resources_NoLock() { + return null; + } + + /// + /// Gets the . This is null if no PDB file + /// has been loaded or if no PDB file could be found. + /// + public PdbState PdbState { + get { return pdbState; } + } + + /// + /// Module kind + /// + public ModuleKind Kind { get; set; } + + /// + /// Gets/sets the characteristics (from PE file header) + /// + public Characteristics Characteristics { get; set; } + + /// + /// Gets/sets the DLL characteristics (from PE optional header) + /// + public DllCharacteristics DllCharacteristics { get; set; } + + /// + /// Gets/sets the runtime version which is stored in the MetaData header. + /// See . + /// + /// Not thread safe + public string RuntimeVersion { + get { return runtimeVersion; } + set { + if (runtimeVersion != value) { + runtimeVersion = value; + cachedWinMDStatus = null; + runtimeVersionWinMD = null; + winMDVersion = null; + } + } + } + string runtimeVersion; + + /// + /// Gets the WinMD status + /// + /// Not thread safe + public WinMDStatus WinMDStatus { + get { + var cval = cachedWinMDStatus; + if (cval != null) + return cval.Value; + cachedWinMDStatus = cval = CalculateWinMDStatus(RuntimeVersion); + return cval.Value; + } + } + WinMDStatus? cachedWinMDStatus; + + /// + /// true if this is a WinMD file + /// + public bool IsWinMD { + get { return WinMDStatus != WinMDStatus.None; } + } + + /// + /// true if this is a managed WinMD file + /// + public bool IsManagedWinMD { + get { return WinMDStatus == WinMDStatus.Managed; } + } + + /// + /// true if this is a pure (non-managed) WinMD file + /// + public bool IsPureWinMD { + get { return WinMDStatus == WinMDStatus.Pure; } + } + + /// + /// Gets the CLR runtime version of the managed WinMD file or null if none. This is + /// similar to for normal non-WinMD files. + /// + /// Not thread safe + public string RuntimeVersionWinMD { + get { + var rtver = runtimeVersionWinMD; + if (rtver != null) + return rtver; + runtimeVersionWinMD = rtver = CalculateRuntimeVersionWinMD(RuntimeVersion); + return rtver; + } + } + string runtimeVersionWinMD; + + /// + /// Gets the WinMD version or null if none + /// + /// Not thread safe + public string WinMDVersion { + get { + var ver = winMDVersion; + if (ver != null) + return ver; + winMDVersion = ver = CalculateWinMDVersion(RuntimeVersion); + return ver; + } + } + string winMDVersion; + + static WinMDStatus CalculateWinMDStatus(string version) { + if (version == null) + return WinMDStatus.None; + if (!version.StartsWith("WindowsRuntime ", StringComparison.Ordinal)) + return WinMDStatus.None; + + return version.IndexOf(';') < 0 ? WinMDStatus.Pure : WinMDStatus.Managed; + } + + static string CalculateRuntimeVersionWinMD(string version) { + // Original parser code: + // CoreCLR file: src/md/winmd/adapter.cpp + // Func: WinMDAdapter::Create(IMDCommon *pRawMDCommon, /*[out]*/ WinMDAdapter **ppAdapter) + if (version == null) + return null; + if (!version.StartsWith("WindowsRuntime ", StringComparison.Ordinal)) + return null; + int index = version.IndexOf(';'); + if (index < 0) + return null; + var s = version.Substring(index + 1); + if (s.StartsWith("CLR", StringComparison.OrdinalIgnoreCase)) + s = s.Substring(3); + s = s.TrimStart(' '); + + return s; + } + + static string CalculateWinMDVersion(string version) { + if (version == null) + return null; + if (!version.StartsWith("WindowsRuntime ", StringComparison.Ordinal)) + return null; + int index = version.IndexOf(';'); + if (index < 0) + return version; + return version.Substring(0, index); + } + + /// + /// true if is the CLR v1.0 string (only the major + /// and minor version numbers are checked) + /// + public bool IsClr10 { + get { + var ver = RuntimeVersion ?? string.Empty; + return ver.StartsWith(MDHeaderRuntimeVersion.MS_CLR_10_PREFIX) || + ver.StartsWith(MDHeaderRuntimeVersion.MS_CLR_10_PREFIX_X86RETAIL) || + ver == MDHeaderRuntimeVersion.MS_CLR_10_RETAIL || + ver == MDHeaderRuntimeVersion.MS_CLR_10_COMPLUS; + } + } + + /// + /// true if is the CLR v1.0 string + /// + public bool IsClr10Exactly { + get { + return RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_10 || + RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_10_X86RETAIL || + RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_10_RETAIL || + RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_10_COMPLUS; + } + } + + /// + /// true if is the CLR v1.1 string (only the major + /// and minor version numbers are checked) + /// + public bool IsClr11 { + get { return (RuntimeVersion ?? string.Empty).StartsWith(MDHeaderRuntimeVersion.MS_CLR_11_PREFIX); } + } + + /// + /// true if is the CLR v1.1 string + /// + public bool IsClr11Exactly { + get { return RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_11; } + } + + /// + /// true if is the CLR v1.0 or v1.1 string (only the + /// major and minor version numbers are checked) + /// + public bool IsClr1x { + get { return IsClr10 || IsClr11; } + } + + /// + /// true if is the CLR v1.0 or v1.1 string + /// + public bool IsClr1xExactly { + get { return IsClr10Exactly || IsClr11Exactly; } + } + + /// + /// true if is the CLR v2.0 string (only the major + /// and minor version numbers are checked) + /// + public bool IsClr20 { + get { return (RuntimeVersion ?? string.Empty).StartsWith(MDHeaderRuntimeVersion.MS_CLR_20_PREFIX); } + } + + /// + /// true if is the CLR v2.0 string + /// + public bool IsClr20Exactly { + get { return RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_20; } + } + + /// + /// true if is the CLR v4.0 string (only the major + /// and minor version numbers are checked) + /// + public bool IsClr40 { + get { return (RuntimeVersion ?? string.Empty).StartsWith(MDHeaderRuntimeVersion.MS_CLR_40_PREFIX); } + } + + /// + /// true if is the CLR v4.0 string + /// + public bool IsClr40Exactly { + get { return RuntimeVersion == MDHeaderRuntimeVersion.MS_CLR_40; } + } + + /// + /// true if is the ECMA 2002 string + /// + public bool IsEcma2002 { + get { return RuntimeVersion == MDHeaderRuntimeVersion.ECMA_2002; } + } + + /// + /// true if is the ECMA 2005 string + /// + public bool IsEcma2005 { + get { return RuntimeVersion == MDHeaderRuntimeVersion.ECMA_2005; } + } + + /// + /// Gets/sets the (from PE header) + /// + public Machine Machine { get; set; } + + /// + /// true if is + /// + public bool IsI386 { + get { return Machine == Machine.I386; } + } + + /// + /// true if is + /// + public bool IsIA64 { + get { return Machine == Machine.IA64; } + } + + /// + /// true if is + /// + public bool IsAMD64 { + get { return Machine == Machine.AMD64; } + } + + /// + /// true if is + /// + public bool IsARM64 { + get { return Machine == Machine.ARM64; } + } + + /// + /// Gets/sets the (from .NET header) + /// + public ComImageFlags Cor20HeaderFlags { + get { return (ComImageFlags)cor20HeaderFlags; } + set { cor20HeaderFlags = (int)value; } + } + /// + protected int cor20HeaderFlags; + + /// + /// Gets/sets the runtime version number in the COR20 header. The major version is + /// in the high 16 bits. The minor version is in the low 16 bits. This is normally 2.5 + /// (0x00020005), but if it's .NET 1.x, it should be 2.0 (0x00020000). If this is + /// null, the default value will be used when saving the module (2.0 if CLR 1.x, + /// and 2.5 if not CLR 1.x). + /// + public uint? Cor20HeaderRuntimeVersion { get; set; } + + /// + /// Gets the tables header version. The major version is in the upper 8 bits and the + /// minor version is in the lower 8 bits. .NET 1.0/1.1 use version 1.0 (0x0100) and + /// .NET 2.x and later use version 2.0 (0x0200). 1.0 has no support for generics, + /// 1.1 has support for generics (GenericParam rows have an extra Kind column), + /// and 2.0 has support for generics (GenericParam rows have the standard 4 columns). + /// No other version is supported. If this is null, the default version is + /// used (1.0 if .NET 1.x, else 2.0). + /// + public ushort? TablesHeaderVersion { get; set; } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyComImageFlags(bool set, ComImageFlags flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = cor20HeaderFlags; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref cor20HeaderFlags, newVal, origVal) != origVal); +#else + if (set) + cor20HeaderFlags |= (int)flags; + else + cor20HeaderFlags &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool IsILOnly { + get { return ((ComImageFlags)cor20HeaderFlags & ComImageFlags.ILOnly) != 0; } + set { ModifyComImageFlags(value, ComImageFlags.ILOnly); } + } + + /// + /// Gets/sets the bit + /// + public bool Is32BitRequired { + get { return ((ComImageFlags)cor20HeaderFlags & ComImageFlags._32BitRequired) != 0; } + set { ModifyComImageFlags(value, ComImageFlags._32BitRequired); } + } + + /// + /// Gets/sets the bit + /// + public bool IsStrongNameSigned { + get { return ((ComImageFlags)cor20HeaderFlags & ComImageFlags.StrongNameSigned) != 0; } + set { ModifyComImageFlags(value, ComImageFlags.StrongNameSigned); } + } + + /// + /// Gets/sets the bit + /// + public bool HasNativeEntryPoint { + get { return ((ComImageFlags)cor20HeaderFlags & ComImageFlags.NativeEntryPoint) != 0; } + set { ModifyComImageFlags(value, ComImageFlags.NativeEntryPoint); } + } + + /// + /// Gets/sets the bit + /// + public bool Is32BitPreferred { + get { return ((ComImageFlags)cor20HeaderFlags & ComImageFlags._32BitPreferred) != 0; } + set { ModifyComImageFlags(value, ComImageFlags._32BitPreferred); } + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (!disposing) + return; + foreach (var resource in Resources.GetInitializedElements(true)) { + if (resource != null) + resource.Dispose(); + } + var tdf = typeDefFinder; + if (tdf != null) { + tdf.Dispose(); + typeDefFinder = null; + } + } + + /// + /// Gets all the types (including nested types) present in this module + /// + public IEnumerable GetTypes() { + return AllTypesHelper.Types(Types); + } + + /// + /// Adds as a non-nested type. If it's already nested, its + /// will be set to null. + /// + /// The to insert + public void AddAsNonNestedType(TypeDef typeDef) { + if (typeDef == null) + return; + typeDef.DeclaringType = null; + Types.Add(typeDef); + } + + /// + /// Updates the rid to the next free rid available. It's only updated if + /// the original rid is 0. + /// + /// IMDTokenProvider + /// The row that should be updated + /// Returns the input + public T UpdateRowId(T tableRow) where T : IMDTokenProvider { + if (tableRow != null && tableRow.Rid == 0) + tableRow.Rid = GetNextFreeRid(tableRow.MDToken.Table); + return tableRow; + } + + /// + /// Updates the rid to the next free rid available. + /// + /// IMDTokenProvider + /// The row that should be updated + /// Returns the input + public T ForceUpdateRowId(T tableRow) where T : IMDTokenProvider { + if (tableRow != null) + tableRow.Rid = GetNextFreeRid(tableRow.MDToken.Table); + return tableRow; + } + + uint GetNextFreeRid(Table table) { + if ((uint)table >= lastUsedRids.Length) + return 0; + return (uint)Interlocked.Increment(ref lastUsedRids[(int)table]); + } + + /// + /// Imports a as a + /// + /// The type + /// The imported type or null if is invalid + public ITypeDefOrRef Import(Type type) { + return new Importer(this).Import(type); + } + + /// + /// Imports a as a + /// + /// The type + /// The imported type or null if is invalid + public TypeSig ImportAsTypeSig(Type type) { + return new Importer(this).ImportAsTypeSig(type); + } + + /// + /// Imports a as a + /// + /// The field + /// The imported field or null if is invalid + /// or if we failed to import the field + public MemberRef Import(FieldInfo fieldInfo) { + return (MemberRef)new Importer(this).Import(fieldInfo); + } + + /// + /// Imports a as a . This will be either + /// a or a . + /// + /// The method + /// The imported method or null if is invalid + /// or if we failed to import the method + public IMethod Import(MethodBase methodBase) { + return new Importer(this).Import(methodBase); + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public IType Import(IType type) { + return new Importer(this).Import(type); + } + + /// + /// Imports a as a + /// + /// The type + /// The imported type or null + public TypeRef Import(TypeDef type) { + return (TypeRef)new Importer(this).Import(type); + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public TypeRef Import(TypeRef type) { + return (TypeRef)new Importer(this).Import(type); + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public TypeSpec Import(TypeSpec type) { + return new Importer(this).Import(type); + } + + /// + /// Imports a + /// + /// The type + /// The imported type or null + public TypeSig Import(TypeSig type) { + return new Importer(this).Import(type); + } + + /// + /// Imports a + /// + /// The field + /// The imported type or null if is invalid + public IField Import(IField field) { + return (MemberRef)new Importer(this).Import(field); + } + + /// + /// Imports a as a + /// + /// The field + /// The imported type or null if is invalid + public IField Import(FieldDef field) { + return (MemberRef)new Importer(this).Import(field); + } + + /// + /// Imports a + /// + /// The method + /// The imported method or null if is invalid + public IMethod Import(IMethod method) { + return new Importer(this).Import(method); + } + + /// + /// Imports a as a + /// + /// The method + /// The imported method or null if is invalid + public IMethod Import(MethodDef method) { + return (MemberRef)new Importer(this).Import(method); + } + + /// + /// Imports a + /// + /// The method + /// The imported method or null if is invalid + public MethodSpec Import(MethodSpec method) { + return new Importer(this).Import(method); + } + + /// + /// Imports a + /// + /// The member ref + /// The imported member ref or null if is invalid + public MemberRef Import(MemberRef memberRef) { + return new Importer(this).Import(memberRef); + } + + /// + /// Writes the module to a file on disk. If the file exists, it will be overwritten. + /// + /// Filename + public void Write(string filename) { + Write(filename, null); + } + + /// + /// Writes the module to a file on disk. If the file exists, it will be overwritten. + /// + /// Filename + /// Writer options + public void Write(string filename, ModuleWriterOptions options) { + var writer = new ModuleWriter(this, options ?? new ModuleWriterOptions(this)); + writer.Write(filename); + } + + /// + /// Writes the module to a stream. + /// + /// Destination stream + public void Write(Stream dest) { + Write(dest, null); + } + + /// + /// Writes the module to a stream. + /// + /// Destination stream + /// Writer options + public void Write(Stream dest, ModuleWriterOptions options) { + var writer = new ModuleWriter(this, options ?? new ModuleWriterOptions(this)); + writer.Write(dest); + } + + /// + /// Resets the cache which can be enabled by setting + /// to true. Use this method if the cache is + /// enabled but some of the types have been modified (eg. removed, added, renamed). + /// + public void ResetTypeDefFindCache() { + TypeDefFinder.ResetCache(); + } + + /// + /// Finds a + /// + /// Type + /// Name + /// Language ID + /// The or null if none found + public ResourceData FindWin32ResourceData(ResourceName type, ResourceName name, ResourceName langId) { + var w32Resources = Win32Resources; + return w32Resources == null ? null : w32Resources.Find(type, name, langId); + } + + /// + /// Creates a new + /// + public void CreatePdbState() { + SetPdbState(new PdbState()); + } + + /// + /// Sets a + /// + /// New + public void SetPdbState(PdbState pdbState) { + if (pdbState == null) + throw new ArgumentNullException("pdbState"); + var orig = Interlocked.CompareExchange(ref this.pdbState, pdbState, null); + if (orig != null) + throw new InvalidOperationException("PDB file has already been initialized"); + } + + uint GetCor20RuntimeVersion() { + var rtVer = Cor20HeaderRuntimeVersion; + if (rtVer != null) + return rtVer.Value; + return IsClr1x ? 0x00020000U : 0x00020005; + } + + /// + /// Returns the size of a pointer. Assumes it's 32-bit if pointer size is unknown or + /// if it can be 32-bit or 64-bit. + /// + /// Size of a pointer (4 or 8) + public int GetPointerSize() { + return GetPointerSize(4); + } + + /// + /// Returns the size of a pointer + /// + /// Default pointer size if it's not known or if it + /// can be 32-bit or 64-bit + /// Size of a pointer (4 or 8) + public int GetPointerSize(int defaultPointerSize) { + var machine = Machine; + if (machine == Machine.AMD64 || machine == Machine.IA64 || machine == Machine.ARM64) + return 8; + if (machine != Machine.I386) + return 4; + + // Machine is I386 so it's either x86 or platform neutral + + // If the runtime version is < 2.5, then it's always loaded as a 32-bit process. + if (GetCor20RuntimeVersion() < 0x00020005) + return 4; + + // If it's a 32-bit PE header, and ILOnly is cleared, it's always loaded as a + // 32-bit process. + var flags = (ComImageFlags)cor20HeaderFlags; + if ((flags & ComImageFlags.ILOnly) == 0) + return 4; + + // 32-bit Preferred flag is new in .NET 4.5. See CorHdr.h in Windows SDK for more info + switch (flags & (ComImageFlags._32BitRequired | ComImageFlags._32BitPreferred)) { + case 0: + // Machine and ILOnly flag should be checked + break; + + case ComImageFlags._32BitPreferred: + // Illegal + break; + + case ComImageFlags._32BitRequired: + // x86 image (32-bit process) + return 4; + + case ComImageFlags._32BitRequired | ComImageFlags._32BitPreferred: + // Platform neutral but prefers to be 32-bit + return defaultPointerSize; + } + + return defaultPointerSize; + } + + /// + void IListListener.OnLazyAdd(int index, ref TypeDef value) { +#if DEBUG + if (value.DeclaringType != null) + throw new InvalidOperationException("Added type's DeclaringType != null"); +#endif + value.Module2 = this; + } + + /// + void IListListener.OnAdd(int index, TypeDef value) { + if (value.DeclaringType != null) + throw new InvalidOperationException("Nested type is already owned by another type. Set DeclaringType to null first."); + if (value.Module != null) + throw new InvalidOperationException("Type is already owned by another module. Remove it from that module's type list."); + value.Module2 = this; + } + + /// + void IListListener.OnRemove(int index, TypeDef value) { + value.Module2 = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var type in Types.GetEnumerable_NoLock()) + type.Module2 = null; + } + + /// + /// Finds a . For speed, enable + /// if possible (read the documentation first). + /// + /// Full name of the type (no assembly information) + /// true if it's a reflection name, and nested + /// type names are separated by a + character. If false, nested type names + /// are separated by a / character. + /// An existing or null if it wasn't found. + public TypeDef Find(string fullName, bool isReflectionName) { + return TypeDefFinder.Find(fullName, isReflectionName); + } + + /// + /// Finds a . Its scope (i.e., module or assembly) is ignored when + /// looking up the type. For speed, enable if possible + /// (read the documentation first). + /// + /// The type ref + /// An existing or null if it wasn't found. + public TypeDef Find(TypeRef typeRef) { + return TypeDefFinder.Find(typeRef); + } + + /// + /// Finds a + /// + /// The type + /// A or null if it wasn't found + public TypeDef Find(ITypeDefOrRef typeRef) { + var td = typeRef as TypeDef; + if (td != null) + return td.Module == this ? td : null; + + var tr = typeRef as TypeRef; + if (tr != null) + return Find(tr); + + var ts = typeRef as TypeSpec; + if (ts == null) + return null; + var sig = ts.TypeSig as TypeDefOrRefSig; + if (sig == null) + return null; + + td = sig.TypeDef; + if (td != null) + return td.Module == this ? td : null; + + tr = sig.TypeRef; + if (tr != null) + return Find(tr); + + return null; + } + + /// + /// Creates a new instance. There should normally only be one + /// instance shared by all s. + /// + /// A new instance + public static ModuleContext CreateModuleContext() { + return CreateModuleContext(true); + } + + /// + /// Creates a new instance. There should normally only be one + /// instance shared by all s. + /// + /// If true, add other common assembly search + /// paths, not just the module search paths and the GAC. + /// A new instance + public static ModuleContext CreateModuleContext(bool addOtherSearchPaths) { + var ctx = new ModuleContext(); + var asmRes = new AssemblyResolver(ctx, addOtherSearchPaths); + var res = new Resolver(asmRes); + ctx.AssemblyResolver = asmRes; + ctx.Resolver = res; + return ctx; + } + + /// + /// Load everything in this module. All types, fields, asm refs, etc are loaded, all their + /// properties are read to make sure everything is cached. + /// + public void LoadEverything() { + LoadEverything(null); + } + + /// + /// Load everything in this module. All types, fields, asm refs, etc are loaded, all their + /// properties are read to make sure everything is cached. + /// + /// Cancellation token or null + public virtual void LoadEverything(ICancellationToken cancellationToken) { + ModuleLoader.LoadAll(this, cancellationToken); + } + + /// + public override string ToString() { + return FullName; + } + + /// + /// Resolves a token + /// + /// The metadata token + /// A or null if is invalid + public IMDTokenProvider ResolveToken(MDToken mdToken) { + return ResolveToken(mdToken.Raw, new GenericParamContext()); + } + + /// + /// Resolves a token + /// + /// The metadata token + /// Generic parameter context + /// A or null if is invalid + public IMDTokenProvider ResolveToken(MDToken mdToken, GenericParamContext gpContext) { + return ResolveToken(mdToken.Raw, gpContext); + } + + /// + /// Resolves a token + /// + /// The metadata token + /// A or null if is invalid + public IMDTokenProvider ResolveToken(uint token) { + return ResolveToken(token, new GenericParamContext()); + } + + /// + /// Resolves a token + /// + /// The metadata token + /// Generic parameter context + /// A or null if is invalid + public virtual IMDTokenProvider ResolveToken(uint token, GenericParamContext gpContext) { + return null; + } + + /// + /// Gets all s + /// + public IEnumerable GetAssemblyRefs() { + for (uint rid = 1; ; rid++) { + var asmRef = ResolveToken(new MDToken(Table.AssemblyRef, rid).Raw) as AssemblyRef; + if (asmRef == null) + break; + yield return asmRef; + } + } + + /// + /// Gets all s + /// + public IEnumerable GetModuleRefs() { + for (uint rid = 1; ; rid++) { + var modRef = ResolveToken(new MDToken(Table.ModuleRef, rid).Raw) as ModuleRef; + if (modRef == null) + break; + yield return modRef; + } + } + + /// + /// Gets all s. s with generic parameters + /// aren't cached and a new copy is always returned. + /// + public IEnumerable GetMemberRefs() { + return GetMemberRefs(new GenericParamContext()); + } + + /// + /// Gets all s. s with generic parameters + /// aren't cached and a new copy is always returned. + /// + /// Generic parameter context + public IEnumerable GetMemberRefs(GenericParamContext gpContext) { + for (uint rid = 1; ; rid++) { + var mr = ResolveToken(new MDToken(Table.MemberRef, rid).Raw, gpContext) as MemberRef; + if (mr == null) + break; + yield return mr; + } + } + + /// + /// Gets all s + /// + public IEnumerable GetTypeRefs() { + for (uint rid = 1; ; rid++) { + var mr = ResolveToken(new MDToken(Table.TypeRef, rid).Raw) as TypeRef; + if (mr == null) + break; + yield return mr; + } + } + + /// + /// Finds an assembly reference by name. If there's more than one, pick the one with + /// the greatest version number. + /// + /// Simple name of assembly (eg. "mscorlib") + /// The found or null if there's no such + /// assembly reference. + public AssemblyRef GetAssemblyRef(UTF8String simpleName) { + AssemblyRef found = null; + foreach (var asmRef in GetAssemblyRefs()) { + if (asmRef.Name != simpleName) + continue; + if (IsGreaterAssemblyRefVersion(found, asmRef)) + found = asmRef; + } + return found; + } + + /// + /// Compare asm refs' version + /// + /// First asm ref + /// New asm ref + /// + protected static bool IsGreaterAssemblyRefVersion(AssemblyRef found, AssemblyRef newOne) { + if (found == null) + return true; + var foundVer = found.Version; + var newVer = newOne.Version; + return foundVer == null || (newVer != null && newVer >= foundVer); + } + } + + /// + /// A Module row created by the user and not present in the original .NET file + /// + public class ModuleDefUser : ModuleDef { + /// + /// Default constructor + /// + public ModuleDefUser() + : this(null, null) { + } + + /// + /// Constructor + /// + /// is initialized to a random + /// Module nam + public ModuleDefUser(UTF8String name) + : this(name, Guid.NewGuid()) { + } + + /// + /// Constructor + /// + /// Module name + /// Module version ID + public ModuleDefUser(UTF8String name, Guid? mvid) + : this(name, mvid, null) { + } + + /// + /// Constructor + /// + /// Module name + /// Module version ID + /// Corlib assembly ref or null + public ModuleDefUser(UTF8String name, Guid? mvid, AssemblyRef corLibAssemblyRef) { + this.Kind = ModuleKind.Windows; + this.Characteristics = DefaultCharacteristics; + this.DllCharacteristics = DefaultDllCharacteristics; + this.RuntimeVersion = MDHeaderRuntimeVersion.MS_CLR_20; + this.Machine = Machine.I386; + this.cor20HeaderFlags = (int)ComImageFlags.ILOnly; + this.Cor20HeaderRuntimeVersion = 0x00020005; // .NET 2.0 or later should use 2.5 + this.TablesHeaderVersion = 0x0200; // .NET 2.0 or later should use 2.0 + this.types = new LazyList(this); + this.exportedTypes = new LazyList(); + this.resources = new ResourceCollection(); + this.corLibTypes = new CorLibTypes(this, corLibAssemblyRef); + this.types = new LazyList(this); + this.name = name; + this.mvid = mvid; + types.Add(CreateModuleType()); + UpdateRowId(this); + } + + TypeDef CreateModuleType() { + var type = UpdateRowId(new TypeDefUser(UTF8String.Empty, "", null)); + type.Attributes = TypeAttributes.NotPublic | TypeAttributes.AutoLayout | TypeAttributes.Class | TypeAttributes.AnsiClass; + return type; + } + } + + /// + /// Created from a row in the Module table + /// + public class ModuleDefMD2 : ModuleDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Module, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + protected override RVA GetNativeEntryPoint_NoLock() { + return readerModule.GetNativeEntryPoint(); + } + + /// + protected override IManagedEntryPoint GetManagedEntryPoint_NoLock() { + return readerModule.GetManagedEntryPoint(); + } + + /// + /// Constructor + /// + /// The module which contains this Module row + /// Row ID + /// If is null + /// If is invalid + internal ModuleDefMD2(ModuleDefMD readerModule, uint rid) { + if (rid == 1 && readerModule == null) + readerModule = (ModuleDefMD)this; +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (rid != 1 && readerModule.TablesStream.ModuleTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Module rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + if (rid != 1) { + this.Kind = ModuleKind.Windows; + this.Characteristics = DefaultCharacteristics; + this.DllCharacteristics = DefaultDllCharacteristics; + this.RuntimeVersion = MDHeaderRuntimeVersion.MS_CLR_20; + this.Machine = Machine.I386; + this.cor20HeaderFlags = (int)ComImageFlags.ILOnly; + this.Cor20HeaderRuntimeVersion = 0x00020005; // .NET 2.0 or later should use 2.5 + this.TablesHeaderVersion = 0x0200; // .NET 2.0 or later should use 2.0 + this.corLibTypes = new CorLibTypes(this); + this.location = string.Empty; + InitializeFromRawRow(); + } + } + + /// + /// Initialize fields from the raw Module row + /// + protected void InitializeFromRawRow() { + uint name, mvid, encId; + uint encBaseId = readerModule.TablesStream.ReadModuleRow(origRid, out generation, out name, out mvid, out encId); + this.mvid = readerModule.GuidStream.Read(mvid); + this.encId = readerModule.GuidStream.Read(encId); + this.encBaseId = readerModule.GuidStream.Read(encBaseId); + this.name = readerModule.StringsStream.ReadNoNull(name); + if (origRid == 1) + assembly = readerModule.ResolveAssembly(origRid); + } + } +} diff --git a/dnlib/DotNet/ModuleDefMD.cs b/dnlib/DotNet/ModuleDefMD.cs new file mode 100644 index 0000000..79334ad --- /dev/null +++ b/dnlib/DotNet/ModuleDefMD.cs @@ -0,0 +1,2060 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using System.IO; +using System.Runtime.ExceptionServices; +using System.Runtime.InteropServices; +using System.Security; +using System.Threading; +using dnlib.PE; +using dnlib.Utils; +using dnlib.IO; +using dnlib.DotNet.MD; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Pdb; +using dnlib.W32Resources; + +using DNW = dnlib.DotNet.Writer; + +namespace dnlib.DotNet { + /// + /// Created from a row in the Module table + /// + public sealed class ModuleDefMD : ModuleDefMD2, IInstructionOperandResolver, ISignatureReaderHelper { + /// The file that contains all .NET metadata + MetaData metaData; + IMethodDecrypter methodDecrypter; + IStringDecrypter stringDecrypter; + + RandomRidList moduleRidList; + + SimpleLazyList listModuleDefMD; + SimpleLazyList listTypeRefMD; + SimpleLazyList listTypeDefMD; + SimpleLazyList listFieldDefMD; + SimpleLazyList listMethodDefMD; + SimpleLazyList listParamDefMD; + SimpleLazyList2 listInterfaceImplMD; + SimpleLazyList2 listMemberRefMD; + SimpleLazyList listConstantMD; + SimpleLazyList listDeclSecurityMD; + SimpleLazyList listClassLayoutMD; + SimpleLazyList2 listStandAloneSigMD; + SimpleLazyList listEventDefMD; + SimpleLazyList listPropertyDefMD; + SimpleLazyList listModuleRefMD; + SimpleLazyList2 listTypeSpecMD; + SimpleLazyList listImplMapMD; + SimpleLazyList listAssemblyDefMD; + SimpleLazyList listAssemblyRefMD; + SimpleLazyList listFileDefMD; + SimpleLazyList listExportedTypeMD; + SimpleLazyList listManifestResourceMD; + SimpleLazyList listGenericParamMD; + SimpleLazyList2 listMethodSpecMD; + SimpleLazyList2 listGenericParamConstraintMD; + + /// + /// Gets/sets the method decrypter + /// + public IMethodDecrypter MethodDecrypter { + get { return methodDecrypter; } + set { methodDecrypter = value; } + } + + /// + /// Gets/sets the string decrypter + /// + public IStringDecrypter StringDecrypter { + get { return stringDecrypter; } + set { stringDecrypter = value; } + } + + /// + /// Returns the .NET metadata interface + /// + public IMetaData MetaData { + get { return metaData; } + } + + /// + /// Returns the #~ or #- tables stream + /// + public TablesStream TablesStream { + get { return metaData.TablesStream; } + } + + /// + /// Returns the #Strings stream + /// + public StringsStream StringsStream { + get { return metaData.StringsStream; } + } + + /// + /// Returns the #Blob stream + /// + public BlobStream BlobStream { + get { return metaData.BlobStream; } + } + + /// + /// Returns the #GUID stream + /// + public GuidStream GuidStream { + get { return metaData.GuidStream; } + } + + /// + /// Returns the #US stream + /// + public USStream USStream { + get { return metaData.USStream; } + } + + /// + protected override void InitializeTypes() { + var list = MetaData.GetNonNestedClassRidList(); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => ResolveTypeDef(((RidList)list2)[index])); + Interlocked.CompareExchange(ref types, tmp, null); + } + + /// + protected override void InitializeExportedTypes() { + var list = MetaData.GetExportedTypeRidList(); + var tmp = new LazyList((int)list.Length, list, (list2, i) => ResolveExportedType(((RidList)list2)[i])); + Interlocked.CompareExchange(ref exportedTypes, tmp, null); + } + + /// + protected override void InitializeResources() { + var table = TablesStream.ManifestResourceTable; + var tmp = new ResourceCollection((int)table.Rows, null, (ctx, i) => CreateResource(i + 1)); + Interlocked.CompareExchange(ref resources, tmp, null); + } + + /// + protected override Win32Resources GetWin32Resources_NoLock() { + return metaData.PEImage.Win32Resources; + } + + /// + protected override VTableFixups GetVTableFixups_NoLock() { + var vtableFixupsInfo = metaData.ImageCor20Header.VTableFixups; + if (vtableFixupsInfo.VirtualAddress == 0 || vtableFixupsInfo.Size == 0) + return null; + return new VTableFixups(this); + } + + /// + /// Creates a instance from a file + /// + /// File name of an existing .NET module/assembly + /// A new instance + public static ModuleDefMD Load(string fileName) { + return Load(fileName, (ModuleCreationOptions)null); + } + + /// + /// Creates a instance from a file + /// + /// File name of an existing .NET module/assembly + /// Module context or null + /// A new instance + public static ModuleDefMD Load(string fileName, ModuleContext context) { + return Load(fileName, new ModuleCreationOptions(context)); + } + + /// + /// Creates a instance from a file + /// + /// File name of an existing .NET module/assembly + /// Module creation options or null + /// A new instance + public static ModuleDefMD Load(string fileName, ModuleCreationOptions options) { + return Load(MetaDataCreator.Load(fileName), options); + } + + /// + /// Creates a instance from a byte[] + /// + /// Contents of a .NET module/assembly + /// A new instance + public static ModuleDefMD Load(byte[] data) { + return Load(data, (ModuleCreationOptions)null); + } + + /// + /// Creates a instance from a byte[] + /// + /// Contents of a .NET module/assembly + /// Module context or null + /// A new instance + public static ModuleDefMD Load(byte[] data, ModuleContext context) { + return Load(data, new ModuleCreationOptions(context)); + } + + /// + /// Creates a instance from a byte[] + /// + /// Contents of a .NET module/assembly + /// Module creation options or null + /// A new instance + public static ModuleDefMD Load(byte[] data, ModuleCreationOptions options) { + return Load(MetaDataCreator.Load(data), options); + } + + /// + /// Creates a instance from a reflection module + /// + /// An existing reflection module + /// A new instance + public static ModuleDefMD Load(System.Reflection.Module mod) { + return Load(mod, (ModuleCreationOptions)null, GetImageLayout(mod)); + } + + /// + /// Creates a instance from a reflection module + /// + /// An existing reflection module + /// Module context or null + /// A new instance + public static ModuleDefMD Load(System.Reflection.Module mod, ModuleContext context) { + return Load(mod, new ModuleCreationOptions(context), GetImageLayout(mod)); + } + + /// + /// Creates a instance from a reflection module + /// + /// An existing reflection module + /// Module creation options or null + /// A new instance + public static ModuleDefMD Load(System.Reflection.Module mod, ModuleCreationOptions options) { + return Load(mod, options, GetImageLayout(mod)); + } + + static ImageLayout GetImageLayout(System.Reflection.Module mod) { + var fqn = mod.FullyQualifiedName; + if (fqn.Length > 0 && fqn[0] == '<' && fqn[fqn.Length - 1] == '>') + return ImageLayout.File; + return ImageLayout.Memory; + } + + /// + /// Creates a instance from a reflection module + /// + /// An existing reflection module + /// Module context or null + /// Image layout of the module in memory + /// A new instance + public static ModuleDefMD Load(System.Reflection.Module mod, ModuleContext context, ImageLayout imageLayout) { + return Load(mod, new ModuleCreationOptions(context), imageLayout); + } + + /// + /// Creates a instance from a reflection module + /// + /// An existing reflection module + /// Module creation options or null + /// Image layout of the module in memory + /// A new instance + public static ModuleDefMD Load(System.Reflection.Module mod, ModuleCreationOptions options, ImageLayout imageLayout) { + IntPtr addr = Marshal.GetHINSTANCE(mod); + if (addr == new IntPtr(-1)) + throw new InvalidOperationException(string.Format("Module {0} has no HINSTANCE", mod)); + return Load(addr, options, imageLayout); + } + + /// + /// Creates a instance from a memory location + /// + /// Address of a .NET module/assembly + /// A new instance + public static ModuleDefMD Load(IntPtr addr) { + return Load(MetaDataCreator.Load(addr), (ModuleCreationOptions)null); + } + + /// + /// Creates a instance from a memory location + /// + /// Address of a .NET module/assembly + /// Module context or null + /// A new instance + public static ModuleDefMD Load(IntPtr addr, ModuleContext context) { + return Load(MetaDataCreator.Load(addr), new ModuleCreationOptions(context)); + } + + /// + /// Creates a instance from a memory location + /// + /// Address of a .NET module/assembly + /// Module creation options or null + /// A new instance + public static ModuleDefMD Load(IntPtr addr, ModuleCreationOptions options) { + return Load(MetaDataCreator.Load(addr), options); + } + + /// + /// Creates a instance + /// + /// PE image + /// A new instance + public static ModuleDefMD Load(IPEImage peImage) { + return Load(MetaDataCreator.Load(peImage), (ModuleCreationOptions)null); + } + + /// + /// Creates a instance + /// + /// PE image + /// Module context or null + /// A new instance + public static ModuleDefMD Load(IPEImage peImage, ModuleContext context) { + return Load(MetaDataCreator.Load(peImage), new ModuleCreationOptions(context)); + } + + /// + /// Creates a instance + /// + /// PE image + /// Module creation options or null + /// A new instance + public static ModuleDefMD Load(IPEImage peImage, ModuleCreationOptions options) { + return Load(MetaDataCreator.Load(peImage), options); + } + + /// + /// Creates a instance from a memory location + /// + /// Address of a .NET module/assembly + /// Module context or null + /// Image layout of the file in memory + /// A new instance + public static ModuleDefMD Load(IntPtr addr, ModuleContext context, ImageLayout imageLayout) { + return Load(MetaDataCreator.Load(addr, imageLayout), new ModuleCreationOptions(context)); + } + + /// + /// Creates a instance from a memory location + /// + /// Address of a .NET module/assembly + /// Module creation options or null + /// Image layout of the file in memory + /// A new instance + public static ModuleDefMD Load(IntPtr addr, ModuleCreationOptions options, ImageLayout imageLayout) { + return Load(MetaDataCreator.Load(addr, imageLayout), options); + } + + /// + /// Creates a instance from a stream + /// + /// This will read all bytes from the stream and call . + /// It's better to use one of the other Load() methods. + /// The stream (owned by caller) + /// A new instance + /// If is null + public static ModuleDefMD Load(Stream stream) { + return Load(stream, (ModuleCreationOptions)null); + } + + /// + /// Creates a instance from a stream + /// + /// This will read all bytes from the stream and call . + /// It's better to use one of the other Load() methods. + /// The stream (owned by caller) + /// Module context or null + /// A new instance + /// If is null + public static ModuleDefMD Load(Stream stream, ModuleContext context) { + return Load(stream, new ModuleCreationOptions(context)); + } + + /// + /// Creates a instance from a stream + /// + /// This will read all bytes from the stream and call . + /// It's better to use one of the other Load() methods. + /// The stream (owned by caller) + /// Module creation options or null + /// A new instance + /// If is null + public static ModuleDefMD Load(Stream stream, ModuleCreationOptions options) { + if (stream == null) + throw new ArgumentNullException("stream"); + if (stream.Length > int.MaxValue) + throw new ArgumentException("Stream is too big"); + var data = new byte[(int)stream.Length]; + stream.Position = 0; + if (stream.Read(data, 0, data.Length) != data.Length) + throw new IOException("Could not read all bytes from the stream"); + return Load(data, options); + } + + /// + /// Creates a instance from a + /// + /// The metadata + /// Module creation options or null + /// A new instance that now owns + internal static ModuleDefMD Load(MetaData metaData, ModuleCreationOptions options) { + return new ModuleDefMD(metaData, options); + } + + /// + /// Constructor + /// + /// The metadata + /// Module creation options or null + /// If is null + ModuleDefMD(MetaData metaData, ModuleCreationOptions options) + : base(null, 1) { +#if DEBUG + if (metaData == null) + throw new ArgumentNullException("metaData"); +#endif + if (options == null) + options = ModuleCreationOptions.Default; + this.metaData = metaData; + this.context = options.Context; + Initialize(); + InitializeFromRawRow(); + location = metaData.PEImage.FileName ?? string.Empty; + + this.Kind = GetKind(); + this.Characteristics = MetaData.PEImage.ImageNTHeaders.FileHeader.Characteristics; + this.DllCharacteristics = MetaData.PEImage.ImageNTHeaders.OptionalHeader.DllCharacteristics; + this.RuntimeVersion = MetaData.VersionString; + this.Machine = MetaData.PEImage.ImageNTHeaders.FileHeader.Machine; + this.Cor20HeaderFlags = MetaData.ImageCor20Header.Flags; + this.Cor20HeaderRuntimeVersion = (uint)(MetaData.ImageCor20Header.MajorRuntimeVersion << 16) | MetaData.ImageCor20Header.MinorRuntimeVersion; + this.TablesHeaderVersion = MetaData.TablesStream.Version; + corLibTypes = new CorLibTypes(this, options.CorLibAssemblyRef ?? FindCorLibAssemblyRef() ?? CreateDefaultCorLibAssemblyRef()); + InitializePdb(options); + } + + void InitializePdb(ModuleCreationOptions options) { + if (options == null) + return; + LoadPdb(CreateSymbolReader(options)); + } + + ISymbolReader CreateSymbolReader(ModuleCreationOptions options) { + if (options.CreateSymbolReader != null) { + var symReader = options.CreateSymbolReader(this); + if (symReader != null) + return symReader; + } + + if (options.PdbFileOrData != null) { + var pdbFileName = options.PdbFileOrData as string; + if (!string.IsNullOrEmpty(pdbFileName)) { + var symReader = SymbolReaderCreator.Create(options.PdbImplementation, metaData, pdbFileName); + if (symReader != null) + return symReader; + } + + var pdbData = options.PdbFileOrData as byte[]; + if (pdbData != null) + return SymbolReaderCreator.Create(options.PdbImplementation, metaData, pdbData); + + var pdbStream = options.PdbFileOrData as IImageStream; + if (pdbStream != null) + return SymbolReaderCreator.Create(options.PdbImplementation, metaData, pdbStream); + } + + if (options.TryToLoadPdbFromDisk && !string.IsNullOrEmpty(location)) + return SymbolReaderCreator.Create(options.PdbImplementation, location); + + return null; + } + + /// + /// Loads symbols using + /// + /// PDB symbol reader + public void LoadPdb(ISymbolReader symbolReader) { + if (symbolReader == null) + return; + if (pdbState != null) + throw new InvalidOperationException("PDB file has already been initialized"); + + var orig = Interlocked.CompareExchange(ref pdbState, new PdbState(symbolReader, this), null); + if (orig != null) + throw new InvalidOperationException("PDB file has already been initialized"); + } + + /// + /// Loads symbols from a PDB file + /// + /// PDB file name + public void LoadPdb(string pdbFileName) { + LoadPdb(PdbImplType.Default, pdbFileName); + } + + /// + /// Loads symbols from a PDB file + /// + /// PDB implementation to use + /// PDB file name + public void LoadPdb(PdbImplType pdbImpl, string pdbFileName) { + LoadPdb(SymbolReaderCreator.Create(pdbImpl, metaData, pdbFileName)); + } + + /// + /// Loads symbols from a byte array + /// + /// PDB data + public void LoadPdb(byte[] pdbData) { + LoadPdb(PdbImplType.Default, pdbData); + } + + /// + /// Loads symbols from a byte array + /// + /// PDB implementation to use + /// PDB data + public void LoadPdb(PdbImplType pdbImpl, byte[] pdbData) { + LoadPdb(SymbolReaderCreator.Create(pdbImpl, metaData, pdbData)); + } + + /// + /// Loads symbols from a stream + /// + /// PDB file stream which is now owned by us + public void LoadPdb(IImageStream pdbStream) { + LoadPdb(PdbImplType.Default, pdbStream); + } + + /// + /// Loads symbols from a stream + /// + /// PDB implementation to use + /// PDB file stream which is now owned by us + public void LoadPdb(PdbImplType pdbImpl, IImageStream pdbStream) { + LoadPdb(SymbolReaderCreator.Create(pdbImpl, metaData, pdbStream)); + } + + /// + /// Loads symbols if a PDB file is available + /// + public void LoadPdb() { + LoadPdb(PdbImplType.Default); + } + + /// + /// Loads symbols if a PDB file is available + /// + /// PDB implementation to use + public void LoadPdb(PdbImplType pdbImpl) { + var loc = location; + if (string.IsNullOrEmpty(loc)) + return; + LoadPdb(SymbolReaderCreator.Create(pdbImpl, loc)); + } + + ModuleKind GetKind() { + if (TablesStream.AssemblyTable.Rows < 1) + return ModuleKind.NetModule; + + var peImage = MetaData.PEImage; + if ((peImage.ImageNTHeaders.FileHeader.Characteristics & Characteristics.Dll) != 0) + return ModuleKind.Dll; + + switch (peImage.ImageNTHeaders.OptionalHeader.Subsystem) { + default: + case Subsystem.WindowsGui: + return ModuleKind.Windows; + + case Subsystem.WindowsCui: + return ModuleKind.Console; + } + } + + void Initialize() { + var ts = metaData.TablesStream; + + listModuleDefMD = new SimpleLazyList(ts.ModuleTable.Rows, rid2 => rid2 == 1 ? this : new ModuleDefMD2(this, rid2)); + listTypeRefMD = new SimpleLazyList(ts.TypeRefTable.Rows, rid2 => new TypeRefMD(this, rid2)); + listTypeDefMD = new SimpleLazyList(ts.TypeDefTable.Rows, rid2 => new TypeDefMD(this, rid2)); + listFieldDefMD = new SimpleLazyList(ts.FieldTable.Rows, rid2 => new FieldDefMD(this, rid2)); + listMethodDefMD = new SimpleLazyList(ts.MethodTable.Rows, rid2 => new MethodDefMD(this, rid2)); + listParamDefMD = new SimpleLazyList(ts.ParamTable.Rows, rid2 => new ParamDefMD(this, rid2)); + listInterfaceImplMD = new SimpleLazyList2(ts.InterfaceImplTable.Rows, (rid2, gpContext) => new InterfaceImplMD(this, rid2, gpContext)); + listMemberRefMD = new SimpleLazyList2(ts.MemberRefTable.Rows, (rid2, gpContext) => new MemberRefMD(this, rid2, gpContext)); + listConstantMD = new SimpleLazyList(ts.ConstantTable.Rows, rid2 => new ConstantMD(this, rid2)); + listDeclSecurityMD = new SimpleLazyList(ts.DeclSecurityTable.Rows, rid2 => new DeclSecurityMD(this, rid2)); + listClassLayoutMD = new SimpleLazyList(ts.ClassLayoutTable.Rows, rid2 => new ClassLayoutMD(this, rid2)); + listStandAloneSigMD = new SimpleLazyList2(ts.StandAloneSigTable.Rows, (rid2, gpContext) => new StandAloneSigMD(this, rid2, gpContext)); + listEventDefMD = new SimpleLazyList(ts.EventTable.Rows, rid2 => new EventDefMD(this, rid2)); + listPropertyDefMD = new SimpleLazyList(ts.PropertyTable.Rows, rid2 => new PropertyDefMD(this, rid2)); + listModuleRefMD = new SimpleLazyList(ts.ModuleRefTable.Rows, rid2 => new ModuleRefMD(this, rid2)); + listTypeSpecMD = new SimpleLazyList2(ts.TypeSpecTable.Rows, (rid2, gpContext) => new TypeSpecMD(this, rid2, gpContext)); + listImplMapMD = new SimpleLazyList(ts.ImplMapTable.Rows, rid2 => new ImplMapMD(this, rid2)); + listAssemblyDefMD = new SimpleLazyList(ts.AssemblyTable.Rows, rid2 => new AssemblyDefMD(this, rid2)); + listFileDefMD = new SimpleLazyList(ts.FileTable.Rows, rid2 => new FileDefMD(this, rid2)); + listAssemblyRefMD = new SimpleLazyList(ts.AssemblyRefTable.Rows, rid2 => new AssemblyRefMD(this, rid2)); + listExportedTypeMD = new SimpleLazyList(ts.ExportedTypeTable.Rows, rid2 => new ExportedTypeMD(this, rid2)); + listManifestResourceMD = new SimpleLazyList(ts.ManifestResourceTable.Rows, rid2 => new ManifestResourceMD(this, rid2)); + listGenericParamMD = new SimpleLazyList(ts.GenericParamTable.Rows, rid2 => new GenericParamMD(this, rid2)); + listMethodSpecMD = new SimpleLazyList2(ts.MethodSpecTable.Rows, (rid2, gpContext) => new MethodSpecMD(this, rid2, gpContext)); + listGenericParamConstraintMD = new SimpleLazyList2(ts.GenericParamConstraintTable.Rows, (rid2, gpContext) => new GenericParamConstraintMD(this, rid2, gpContext)); + + for (int i = 0; i < 64; i++) { + var tbl = TablesStream.Get((Table)i); + lastUsedRids[i] = tbl == null ? 0 : (int)tbl.Rows; + } + } + + static readonly Dictionary preferredCorLibs = new Dictionary(StringComparer.OrdinalIgnoreCase) { + // .NET Framework + { "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 100 }, + { "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 90 }, + { "mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 60 }, + { "mscorlib, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 50 }, + + // Silverlight + { "mscorlib, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", 80 }, + { "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", 70 }, + + // Zune + { "mscorlib, Version=3.5.0.0, Culture=neutral, PublicKeyToken=e92a8b81eba7ceb7", 60 }, + + // Compact Framework + { "mscorlib, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac", 60 }, + { "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac", 50 }, + }; + + /// + /// Finds a mscorlib + /// + /// An existing instance or null if it wasn't found + AssemblyRef FindCorLibAssemblyRef() { + var numAsmRefs = TablesStream.AssemblyRefTable.Rows; + AssemblyRef corLibAsmRef = null; + + int currentPriority = int.MinValue; + for (uint i = 1; i <= numAsmRefs; i++) { + var asmRef = ResolveAssemblyRef(i); + int priority; + if (!preferredCorLibs.TryGetValue(asmRef.FullName, out priority)) + continue; + if (priority > currentPriority) { + currentPriority = priority; + corLibAsmRef = asmRef; + } + } + if (corLibAsmRef != null) + return corLibAsmRef; + + for (uint i = 1; i <= numAsmRefs; i++) { + var asmRef = ResolveAssemblyRef(i); + if (!UTF8String.ToSystemStringOrEmpty(asmRef.Name).Equals("mscorlib", StringComparison.OrdinalIgnoreCase)) + continue; + if (IsGreaterAssemblyRefVersion(corLibAsmRef, asmRef)) + corLibAsmRef = asmRef; + } + if (corLibAsmRef != null) + return corLibAsmRef; + + // If we've loaded mscorlib itself, it won't have any AssemblyRefs to itself. + var asm = Assembly; + if (asm != null && asm.IsCorLib()) + return UpdateRowId(new AssemblyRefUser(asm)); + + return corLibAsmRef; + } + + /// + /// Called when no corlib assembly reference was found + /// + /// + AssemblyRef CreateDefaultCorLibAssemblyRef() { + AssemblyRef asmRef; + var asm = Assembly; + if (asm != null && Find("System.Int32", false) != null) + asmRef = new AssemblyRefUser(asm); + else if (this.IsClr40) + asmRef = AssemblyRefUser.CreateMscorlibReferenceCLR40(); + else if (this.IsClr20) + asmRef = AssemblyRefUser.CreateMscorlibReferenceCLR20(); + else if (this.IsClr11) + asmRef = AssemblyRefUser.CreateMscorlibReferenceCLR11(); + else if (this.IsClr10) + asmRef = AssemblyRefUser.CreateMscorlibReferenceCLR10(); + else + asmRef = AssemblyRefUser.CreateMscorlibReferenceCLR40(); + return UpdateRowId(asmRef); + } + + /// + protected override void Dispose(bool disposing) { + // Call base first since it will dispose of all the resources, which will + // eventually use metaData that we will dispose + base.Dispose(disposing); + if (disposing) { + var md = metaData; + if (md != null) + md.Dispose(); + metaData = null; + } + } + + /// + /// Resolves a token + /// + /// The metadata token + /// A or null if is invalid + public IMDTokenProvider ResolveToken(int token) { + return ResolveToken((uint)token, new GenericParamContext()); + } + + /// + /// Resolves a token + /// + /// The metadata token + /// Generic parameter context + /// A or null if is invalid + public IMDTokenProvider ResolveToken(int token, GenericParamContext gpContext) { + return ResolveToken((uint)token, gpContext); + } + + /// + /// Resolves a token + /// + /// The metadata token + /// Generic parameter context + /// A or null if is invalid + public override IMDTokenProvider ResolveToken(uint token, GenericParamContext gpContext) { + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Module: return ResolveModule(rid); + case Table.TypeRef: return ResolveTypeRef(rid); + case Table.TypeDef: return ResolveTypeDef(rid); + case Table.Field: return ResolveField(rid); + case Table.Method: return ResolveMethod(rid); + case Table.Param: return ResolveParam(rid); + case Table.InterfaceImpl: return ResolveInterfaceImpl(rid, gpContext); + case Table.MemberRef: return ResolveMemberRef(rid, gpContext); + case Table.Constant: return ResolveConstant(rid); + case Table.DeclSecurity: return ResolveDeclSecurity(rid); + case Table.ClassLayout: return ResolveClassLayout(rid); + case Table.StandAloneSig: return ResolveStandAloneSig(rid, gpContext); + case Table.Event: return ResolveEvent(rid); + case Table.Property: return ResolveProperty(rid); + case Table.ModuleRef: return ResolveModuleRef(rid); + case Table.TypeSpec: return ResolveTypeSpec(rid, gpContext); + case Table.ImplMap: return ResolveImplMap(rid); + case Table.Assembly: return ResolveAssembly(rid); + case Table.AssemblyRef: return ResolveAssemblyRef(rid); + case Table.File: return ResolveFile(rid); + case Table.ExportedType: return ResolveExportedType(rid); + case Table.ManifestResource:return ResolveManifestResource(rid); + case Table.GenericParam: return ResolveGenericParam(rid); + case Table.MethodSpec: return ResolveMethodSpec(rid, gpContext); + case Table.GenericParamConstraint: return ResolveGenericParamConstraint(rid, gpContext); + } + return null; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public ModuleDef ResolveModule(uint rid) { + return listModuleDefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public TypeRef ResolveTypeRef(uint rid) { + return listTypeRefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public TypeDef ResolveTypeDef(uint rid) { + return listTypeDefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public FieldDef ResolveField(uint rid) { + return listFieldDefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public MethodDef ResolveMethod(uint rid) { + return listMethodDefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public ParamDef ResolveParam(uint rid) { + return listParamDefMD[rid - 1]; + } + + /// + /// Resolves an + /// + /// The row ID + /// A instance or null if is invalid + public InterfaceImpl ResolveInterfaceImpl(uint rid) { + return listInterfaceImplMD[rid - 1, new GenericParamContext()]; + } + + /// + /// Resolves an + /// + /// The row ID + /// Generic parameter context + /// A instance or null if is invalid + public InterfaceImpl ResolveInterfaceImpl(uint rid, GenericParamContext gpContext) { + return listInterfaceImplMD[rid - 1, gpContext]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public MemberRef ResolveMemberRef(uint rid) { + return listMemberRefMD[rid - 1, new GenericParamContext()]; + } + + /// + /// Resolves a + /// + /// The row ID + /// Generic parameter context + /// A instance or null if is invalid + public MemberRef ResolveMemberRef(uint rid, GenericParamContext gpContext) { + return listMemberRefMD[rid - 1, gpContext]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public Constant ResolveConstant(uint rid) { + return listConstantMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public DeclSecurity ResolveDeclSecurity(uint rid) { + return listDeclSecurityMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public ClassLayout ResolveClassLayout(uint rid) { + return listClassLayoutMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public StandAloneSig ResolveStandAloneSig(uint rid) { + return listStandAloneSigMD[rid - 1, new GenericParamContext()]; + } + + /// + /// Resolves a + /// + /// The row ID + /// Generic parameter context + /// A instance or null if is invalid + public StandAloneSig ResolveStandAloneSig(uint rid, GenericParamContext gpContext) { + return listStandAloneSigMD[rid - 1, gpContext]; + } + + /// + /// Resolves an + /// + /// The row ID + /// A instance or null if is invalid + public EventDef ResolveEvent(uint rid) { + return listEventDefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public PropertyDef ResolveProperty(uint rid) { + return listPropertyDefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public ModuleRef ResolveModuleRef(uint rid) { + return listModuleRefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public TypeSpec ResolveTypeSpec(uint rid) { + return listTypeSpecMD[rid - 1, new GenericParamContext()]; + } + + /// + /// Resolves a + /// + /// The row ID + /// Generic parameter context + /// A instance or null if is invalid + public TypeSpec ResolveTypeSpec(uint rid, GenericParamContext gpContext) { + return listTypeSpecMD[rid - 1, gpContext]; + } + + /// + /// Resolves an + /// + /// The row ID + /// A instance or null if is invalid + public ImplMap ResolveImplMap(uint rid) { + return listImplMapMD[rid - 1]; + } + + /// + /// Resolves an + /// + /// The row ID + /// A instance or null if is invalid + public AssemblyDef ResolveAssembly(uint rid) { + return listAssemblyDefMD[rid - 1]; + } + + /// + /// Resolves an + /// + /// The row ID + /// A instance or null if is invalid + public AssemblyRef ResolveAssemblyRef(uint rid) { + return listAssemblyRefMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public FileDef ResolveFile(uint rid) { + return listFileDefMD[rid - 1]; + } + + /// + /// Resolves an + /// + /// The row ID + /// A instance or null if is invalid + public ExportedType ResolveExportedType(uint rid) { + return listExportedTypeMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public ManifestResource ResolveManifestResource(uint rid) { + return listManifestResourceMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public GenericParam ResolveGenericParam(uint rid) { + return listGenericParamMD[rid - 1]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public MethodSpec ResolveMethodSpec(uint rid) { + return listMethodSpecMD[rid - 1, new GenericParamContext()]; + } + + /// + /// Resolves a + /// + /// The row ID + /// Generic parameter context + /// A instance or null if is invalid + public MethodSpec ResolveMethodSpec(uint rid, GenericParamContext gpContext) { + return listMethodSpecMD[rid - 1, gpContext]; + } + + /// + /// Resolves a + /// + /// The row ID + /// A instance or null if is invalid + public GenericParamConstraint ResolveGenericParamConstraint(uint rid) { + return listGenericParamConstraintMD[rid - 1, new GenericParamContext()]; + } + + /// + /// Resolves a + /// + /// The row ID + /// Generic parameter context + /// A instance or null if is invalid + public GenericParamConstraint ResolveGenericParamConstraint(uint rid, GenericParamContext gpContext) { + return listGenericParamConstraintMD[rid - 1, gpContext]; + } + + /// + /// Resolves a + /// + /// A TypeDefOrRef coded token + /// A or null if is invalid + public ITypeDefOrRef ResolveTypeDefOrRef(uint codedToken) { + return ResolveTypeDefOrRef(codedToken, new GenericParamContext()); + } + + /// + /// Resolves a + /// + /// A TypeDefOrRef coded token + /// Generic parameter context + /// A or null if is invalid + public ITypeDefOrRef ResolveTypeDefOrRef(uint codedToken, GenericParamContext gpContext) { + uint token; + if (!CodedToken.TypeDefOrRef.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.TypeDef: return ResolveTypeDef(rid); + case Table.TypeRef: return ResolveTypeRef(rid); + case Table.TypeSpec: return ResolveTypeSpec(rid, gpContext); + } + return null; + } + + /// + /// Resolves a + /// + /// A HasConstant coded token + /// A or null if is invalid + public IHasConstant ResolveHasConstant(uint codedToken) { + uint token; + if (!CodedToken.HasConstant.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Field: return ResolveField(rid); + case Table.Param: return ResolveParam(rid); + case Table.Property:return ResolveProperty(rid); + } + return null; + } + + /// + /// Resolves a + /// + /// A HasCustomAttribute coded token + /// A or null if is invalid + public IHasCustomAttribute ResolveHasCustomAttribute(uint codedToken) { + return ResolveHasCustomAttribute(codedToken, new GenericParamContext()); + } + + /// + /// Resolves a + /// + /// A HasCustomAttribute coded token + /// Generic parameter context + /// A or null if is invalid + public IHasCustomAttribute ResolveHasCustomAttribute(uint codedToken, GenericParamContext gpContext) { + uint token; + if (!CodedToken.HasCustomAttribute.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Method: return ResolveMethod(rid); + case Table.Field: return ResolveField(rid); + case Table.TypeRef: return ResolveTypeRef(rid); + case Table.TypeDef: return ResolveTypeDef(rid); + case Table.Param: return ResolveParam(rid); + case Table.InterfaceImpl: return ResolveInterfaceImpl(rid, gpContext); + case Table.MemberRef: return ResolveMemberRef(rid, gpContext); + case Table.Module: return ResolveModule(rid); + case Table.DeclSecurity:return ResolveDeclSecurity(rid); + case Table.Property: return ResolveProperty(rid); + case Table.Event: return ResolveEvent(rid); + case Table.StandAloneSig: return ResolveStandAloneSig(rid, gpContext); + case Table.ModuleRef: return ResolveModuleRef(rid); + case Table.TypeSpec: return ResolveTypeSpec(rid, gpContext); + case Table.Assembly: return ResolveAssembly(rid); + case Table.AssemblyRef: return ResolveAssemblyRef(rid); + case Table.File: return ResolveFile(rid); + case Table.ExportedType:return ResolveExportedType(rid); + case Table.ManifestResource: return ResolveManifestResource(rid); + case Table.GenericParam:return ResolveGenericParam(rid); + case Table.MethodSpec: return ResolveMethodSpec(rid, gpContext); + case Table.GenericParamConstraint: return ResolveGenericParamConstraint(rid, gpContext); + } + return null; + } + + /// + /// Resolves a + /// + /// A HasFieldMarshal coded token + /// A or null if is invalid + public IHasFieldMarshal ResolveHasFieldMarshal(uint codedToken) { + uint token; + if (!CodedToken.HasFieldMarshal.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Field: return ResolveField(rid); + case Table.Param: return ResolveParam(rid); + } + return null; + } + + /// + /// Resolves a + /// + /// A HasDeclSecurity coded token + /// A or null if is invalid + public IHasDeclSecurity ResolveHasDeclSecurity(uint codedToken) { + uint token; + if (!CodedToken.HasDeclSecurity.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.TypeDef: return ResolveTypeDef(rid); + case Table.Method: return ResolveMethod(rid); + case Table.Assembly: return ResolveAssembly(rid); + } + return null; + } + + /// + /// Resolves a + /// + /// A MemberRefParent coded token + /// A or null if is invalid + public IMemberRefParent ResolveMemberRefParent(uint codedToken) { + return ResolveMemberRefParent(codedToken, new GenericParamContext()); + } + + /// + /// Resolves a + /// + /// A MemberRefParent coded token + /// Generic parameter context + /// A or null if is invalid + public IMemberRefParent ResolveMemberRefParent(uint codedToken, GenericParamContext gpContext) { + uint token; + if (!CodedToken.MemberRefParent.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.TypeDef: return ResolveTypeDef(rid); + case Table.TypeRef: return ResolveTypeRef(rid); + case Table.ModuleRef: return ResolveModuleRef(rid); + case Table.Method: return ResolveMethod(rid); + case Table.TypeSpec: return ResolveTypeSpec(rid, gpContext); + } + return null; + } + + /// + /// Resolves a + /// + /// A HasSemantic coded token + /// A or null if is invalid + public IHasSemantic ResolveHasSemantic(uint codedToken) { + uint token; + if (!CodedToken.HasSemantic.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Event: return ResolveEvent(rid); + case Table.Property: return ResolveProperty(rid); + } + return null; + } + + /// + /// Resolves a + /// + /// A MethodDefOrRef coded token + /// A or null if is invalid + public IMethodDefOrRef ResolveMethodDefOrRef(uint codedToken) { + return ResolveMethodDefOrRef(codedToken, new GenericParamContext()); + } + + /// + /// Resolves a + /// + /// A MethodDefOrRef coded token + /// Generic parameter context + /// A or null if is invalid + public IMethodDefOrRef ResolveMethodDefOrRef(uint codedToken, GenericParamContext gpContext) { + uint token; + if (!CodedToken.MethodDefOrRef.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Method: return ResolveMethod(rid); + case Table.MemberRef: return ResolveMemberRef(rid, gpContext); + } + return null; + } + + /// + /// Resolves a + /// + /// A MemberForwarded coded token + /// A or null if is invalid + public IMemberForwarded ResolveMemberForwarded(uint codedToken) { + uint token; + if (!CodedToken.MemberForwarded.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Field: return ResolveField(rid); + case Table.Method: return ResolveMethod(rid); + } + return null; + } + + /// + /// Resolves an + /// + /// An Implementation coded token + /// A or null if is invalid + public IImplementation ResolveImplementation(uint codedToken) { + uint token; + if (!CodedToken.Implementation.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.File: return ResolveFile(rid); + case Table.AssemblyRef: return ResolveAssemblyRef(rid); + case Table.ExportedType: return ResolveExportedType(rid); + } + return null; + } + + /// + /// Resolves a + /// + /// A CustomAttributeType coded token + /// A or null if is invalid + public ICustomAttributeType ResolveCustomAttributeType(uint codedToken) { + return ResolveCustomAttributeType(codedToken, new GenericParamContext()); + } + + /// + /// Resolves a + /// + /// A CustomAttributeType coded token + /// Generic parameter context + /// A or null if is invalid + public ICustomAttributeType ResolveCustomAttributeType(uint codedToken, GenericParamContext gpContext) { + uint token; + if (!CodedToken.CustomAttributeType.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Method: return ResolveMethod(rid); + case Table.MemberRef: return ResolveMemberRef(rid, gpContext); + } + return null; + } + + /// + /// Resolves a + /// + /// A ResolutionScope coded token + /// A or null if is invalid + public IResolutionScope ResolveResolutionScope(uint codedToken) { + uint token; + if (!CodedToken.ResolutionScope.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Module: return ResolveModule(rid); + case Table.ModuleRef: return ResolveModuleRef(rid); + case Table.AssemblyRef: return ResolveAssemblyRef(rid); + case Table.TypeRef: return ResolveTypeRef(rid); + } + return null; + } + + /// + /// Resolves a + /// + /// A TypeOrMethodDef> coded token + /// A or null if is invalid + public ITypeOrMethodDef ResolveTypeOrMethodDef(uint codedToken) { + uint token; + if (!CodedToken.TypeOrMethodDef.Decode(codedToken, out token)) + return null; + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.TypeDef: return ResolveTypeDef(rid); + case Table.Method: return ResolveMethod(rid); + } + return null; + } + + /// + /// Reads a signature from the #Blob stream + /// + /// #Blob stream offset of signature + /// A new instance or null if + /// is invalid. + public CallingConventionSig ReadSignature(uint sig) { + return SignatureReader.ReadSig(this, sig, new GenericParamContext()); + } + + /// + /// Reads a signature from the #Blob stream + /// + /// #Blob stream offset of signature + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public CallingConventionSig ReadSignature(uint sig, GenericParamContext gpContext) { + return SignatureReader.ReadSig(this, sig, gpContext); + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// #Blob stream offset of signature + /// A new instance or null if + /// is invalid. + public TypeSig ReadTypeSignature(uint sig) { + return SignatureReader.ReadTypeSig(this, sig, new GenericParamContext()); + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// #Blob stream offset of signature + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public TypeSig ReadTypeSignature(uint sig, GenericParamContext gpContext) { + return SignatureReader.ReadTypeSig(this, sig, gpContext); + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// #Blob stream offset of signature + /// If there's any extra data after the signature, it's saved + /// here, else this will be null + /// A new instance or null if + /// is invalid. + public TypeSig ReadTypeSignature(uint sig, out byte[] extraData) { + return SignatureReader.ReadTypeSig(this, sig, new GenericParamContext(), out extraData); + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// #Blob stream offset of signature + /// If there's any extra data after the signature, it's saved + /// here, else this will be null + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public TypeSig ReadTypeSignature(uint sig, GenericParamContext gpContext, out byte[] extraData) { + return SignatureReader.ReadTypeSig(this, sig, gpContext, out extraData); + } + + /// + /// Reads a from the blob + /// + /// Table of owner + /// Row ID of owner + /// Generic parameter context + /// A new instance or null if there's no field + /// marshal for this owner. + internal MarshalType ReadMarshalType(Table table, uint rid, GenericParamContext gpContext) { + var row = TablesStream.ReadFieldMarshalRow(MetaData.GetFieldMarshalRid(table, rid)); + if (row == null) + return null; + return MarshalBlobReader.Read(this, row.NativeType, gpContext); + } + + /// + /// Reads a CIL method body + /// + /// Method parameters + /// RVA + /// A new instance. It's empty if RVA is invalid (eg. 0 or + /// it doesn't point to a CIL method body) + public CilBody ReadCilBody(IList parameters, RVA rva) { + return ReadCilBody(parameters, rva, new GenericParamContext()); + } + + /// + /// Reads a CIL method body + /// + /// Method parameters + /// RVA + /// Generic parameter context + /// A new instance. It's empty if RVA is invalid (eg. 0 or + /// it doesn't point to a CIL method body) + public CilBody ReadCilBody(IList parameters, RVA rva, GenericParamContext gpContext) { + if (rva == 0) + return new CilBody(); + + // Create a full stream so position will be the real position in the file. This + // is important when reading exception handlers since those must be 4-byte aligned. + // If we create a partial stream starting from rva, then position will be 0 and always + // 4-byte aligned. All fat method bodies should be 4-byte aligned, but the CLR doesn't + // seem to verify it. We must parse the method exactly the way the CLR parses it. + using (var reader = metaData.PEImage.CreateFullStream()) { + reader.Position = (long)metaData.PEImage.ToFileOffset(rva); + return MethodBodyReader.CreateCilBody(this, reader, parameters, gpContext); + } + } + + /// + /// Returns the owner type of a field + /// + /// The field + /// The owner type or null if none + internal TypeDef GetOwnerType(FieldDefMD field) { + return ResolveTypeDef(MetaData.GetOwnerTypeOfField(field.OrigRid)); + } + + /// + /// Returns the owner type of a method + /// + /// The method + /// The owner type or null if none + internal TypeDef GetOwnerType(MethodDefMD method) { + return ResolveTypeDef(MetaData.GetOwnerTypeOfMethod(method.OrigRid)); + } + + /// + /// Returns the owner type of an event + /// + /// The event + /// The owner type or null if none + internal TypeDef GetOwnerType(EventDefMD evt) { + return ResolveTypeDef(MetaData.GetOwnerTypeOfEvent(evt.OrigRid)); + } + + /// + /// Returns the owner type of a property + /// + /// The property + /// The owner type or null if none + internal TypeDef GetOwnerType(PropertyDefMD property) { + return ResolveTypeDef(MetaData.GetOwnerTypeOfProperty(property.OrigRid)); + } + + /// + /// Returns the owner type/method of a generic param + /// + /// The generic param + /// The owner type/method or null if none + internal ITypeOrMethodDef GetOwner(GenericParamMD gp) { + return ResolveTypeOrMethodDef(MetaData.GetOwnerOfGenericParam(gp.OrigRid)); + } + + /// + /// Returns the owner generic param of a generic param constraint + /// + /// The generic param constraint + /// The owner generic param or null if none + internal GenericParam GetOwner(GenericParamConstraintMD gpc) { + return ResolveGenericParam(MetaData.GetOwnerOfGenericParamConstraint(gpc.OrigRid)); + } + + /// + /// Returns the owner method of a param + /// + /// The param + /// The owner method or null if none + internal MethodDef GetOwner(ParamDefMD pd) { + return ResolveMethod(MetaData.GetOwnerOfParam(pd.OrigRid)); + } + + /// + /// Reads a module + /// + /// File rid + /// The assembly owning the module we should read + /// A new instance or null if + /// is invalid or if it's not a .NET module. + internal ModuleDefMD ReadModule(uint fileRid, AssemblyDef owner) { + var fileDef = ResolveFile(fileRid); + if (fileDef == null) + return null; + if (!fileDef.ContainsMetaData) + return null; + var fileName = GetValidFilename(GetBaseDirectoryOfImage(), UTF8String.ToSystemString(fileDef.Name)); + if (fileName == null) + return null; + ModuleDefMD module; + try { + module = ModuleDefMD.Load(fileName); + } + catch { + module = null; + } + if (module != null) { + // share context + module.context = context; + + var asm = module.Assembly; + if (asm != null && asm != owner) + asm.Modules.Remove(module); + } + return module; + } + + /// + /// Gets a list of all File rids that are .NET modules. Call + /// to read one of these modules. + /// + /// A new instance + internal RidList GetModuleRidList() { + if (moduleRidList == null) + InitializeModuleList(); + return moduleRidList; + } + + void InitializeModuleList() { + if (moduleRidList != null) + return; + uint rows = TablesStream.FileTable.Rows; + var newModuleRidList = new RandomRidList((int)rows); + + var baseDir = GetBaseDirectoryOfImage(); + for (uint fileRid = 1; fileRid <= rows; fileRid++) { + var fileDef = ResolveFile(fileRid); + if (fileDef == null) + continue; // Should never happen + if (!fileDef.ContainsMetaData) + continue; + var pathName = GetValidFilename(baseDir, UTF8String.ToSystemString(fileDef.Name)); + if (pathName != null) + newModuleRidList.Add(fileRid); + } + Interlocked.CompareExchange(ref moduleRidList, newModuleRidList, null); + } + + /// + /// Concatenates the inputs and returns the result if it's a valid path + /// + /// Base dir + /// File name + /// Full path to the file or null if one of the inputs is invalid + static string GetValidFilename(string baseDir, string name) { + if (baseDir == null) + return null; + + string pathName; + try { + if (name.IndexOfAny(Path.GetInvalidPathChars()) >= 0) + return null; + pathName = Path.Combine(baseDir, name); + if (pathName != Path.GetFullPath(pathName)) + return null; + if (!File.Exists(pathName)) + return null; + } + catch { + return null; + } + + return pathName; + } + + /// + /// Gets the base directory where this .NET module is located on disk + /// + /// Base directory or null if unknown or if an error occurred + string GetBaseDirectoryOfImage() { + var imageFileName = Location; + if (string.IsNullOrEmpty(imageFileName)) + return null; + try { + return Path.GetDirectoryName(imageFileName); + } + catch (IOException) { + } + catch (ArgumentException) { + } + return null; + } + + /// + /// Creates a instance + /// + /// ManifestResource rid + /// A new instance + Resource CreateResource(uint rid) { + var row = TablesStream.ReadManifestResourceRow(rid); + if (row == null) + return new EmbeddedResource(UTF8String.Empty, MemoryImageStream.CreateEmpty(), 0) { Rid = rid }; + + MDToken token; + if (!CodedToken.Implementation.Decode(row.Implementation, out token)) + return new EmbeddedResource(UTF8String.Empty, MemoryImageStream.CreateEmpty(), 0) { Rid = rid }; + + var mr = ResolveManifestResource(rid); + if (mr == null) + return new EmbeddedResource(UTF8String.Empty, MemoryImageStream.CreateEmpty(), 0) { Rid = rid }; + + if (token.Rid == 0) + return new EmbeddedResource(mr.Name, CreateResourceStream(mr.Offset), mr.Flags) { Rid = rid, Offset = mr.Offset }; + + var file = mr.Implementation as FileDef; + if (file != null) + return new LinkedResource(mr.Name, file, mr.Flags) { Rid = rid, Offset = mr.Offset }; + + var asmRef = mr.Implementation as AssemblyRef; + if (asmRef != null) + return new AssemblyLinkedResource(mr.Name, asmRef, mr.Flags) { Rid = rid, Offset = mr.Offset }; + + return new EmbeddedResource(mr.Name, MemoryImageStream.CreateEmpty(), mr.Flags) { Rid = rid, Offset = mr.Offset }; + } + + /// + /// Creates a resource stream that can access part of the resource section of this module + /// + /// Offset of resource relative to the .NET resources section + /// A stream the size of the resource + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + IImageStream CreateResourceStream(uint offset) { + IImageStream fs = null, imageStream = null; + try { + var peImage = metaData.PEImage; + var cor20Header = metaData.ImageCor20Header; + var resources = cor20Header.Resources; + if (resources.VirtualAddress == 0 || resources.Size == 0) + return MemoryImageStream.CreateEmpty(); + fs = peImage.CreateFullStream(); + + var resourceOffset = (long)peImage.ToFileOffset(resources.VirtualAddress); + if (resourceOffset <= 0 || resourceOffset + offset < resourceOffset) + return MemoryImageStream.CreateEmpty(); + if (offset + 3 <= offset || offset + 3 >= resources.Size) + return MemoryImageStream.CreateEmpty(); + if (resourceOffset + offset + 3 < resourceOffset || resourceOffset + offset + 3 >= fs.Length) + return MemoryImageStream.CreateEmpty(); + fs.Position = resourceOffset + offset; + uint length = fs.ReadUInt32(); // Could throw + if (length == 0 || fs.Position + length - 1 < fs.Position || fs.Position + length - 1 >= fs.Length) + return MemoryImageStream.CreateEmpty(); + if (fs.Position - resourceOffset + length - 1 >= resources.Size) + return MemoryImageStream.CreateEmpty(); + + imageStream = peImage.CreateStream((FileOffset)fs.Position, length); + if (peImage.MayHaveInvalidAddresses) { + for (; imageStream.Position < imageStream.Length; imageStream.Position += 0x1000) + imageStream.ReadByte(); // Could throw + imageStream.Position = imageStream.Length - 1; // length is never 0 if we're here + imageStream.ReadByte(); // Could throw + imageStream.Position = 0; + } + } + catch (AccessViolationException) { + if (imageStream != null) + imageStream.Dispose(); + return MemoryImageStream.CreateEmpty(); + } + finally { + if (fs != null) + fs.Dispose(); + } + return imageStream; + } + + /// + /// Reads a + /// + /// Custom attribute rid + /// A new instance or null if + /// is invalid + public CustomAttribute ReadCustomAttribute(uint caRid) { + return ReadCustomAttribute(caRid, new GenericParamContext()); + } + + /// + /// Reads a + /// + /// Custom attribute rid + /// Generic parameter context + /// A new instance or null if + /// is invalid + public CustomAttribute ReadCustomAttribute(uint caRid, GenericParamContext gpContext) { + var caRow = TablesStream.ReadCustomAttributeRow(caRid); + if (caRow == null) + return null; + return CustomAttributeReader.Read(this, ResolveCustomAttributeType(caRow.Type, gpContext), caRow.Value, gpContext); + } + + /// + /// Reads data somewhere in the address space of the image + /// + /// RVA of data + /// Size of data + /// All the data or null if or + /// is invalid + public byte[] ReadDataAt(RVA rva, int size) { + if (size < 0) + return null; + var peImage = MetaData.PEImage; + using (var reader = peImage.CreateStream(rva, size)) { + if (reader.Length < size) + return null; + return reader.ReadBytes(size); + } + } + + /// + /// Gets the native entry point or 0 if none + /// + public RVA GetNativeEntryPoint() { + var cor20Header = MetaData.ImageCor20Header; + if ((cor20Header.Flags & ComImageFlags.NativeEntryPoint) == 0) + return 0; + return (RVA)cor20Header.EntryPointToken_or_RVA; + } + + /// + /// Gets the managed entry point (a Method or a File) or null if none + /// + public IManagedEntryPoint GetManagedEntryPoint() { + var cor20Header = MetaData.ImageCor20Header; + if ((cor20Header.Flags & ComImageFlags.NativeEntryPoint) != 0) + return null; + return ResolveToken(cor20Header.EntryPointToken_or_RVA) as IManagedEntryPoint; + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal FieldDefMD ReadField(uint rid) { + return new FieldDefMD(this, rid); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal MethodDefMD ReadMethod(uint rid) { + return new MethodDefMD(this, rid); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal EventDefMD ReadEvent(uint rid) { + return new EventDefMD(this, rid); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal PropertyDefMD ReadProperty(uint rid) { + return new PropertyDefMD(this, rid); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal ParamDefMD ReadParam(uint rid) { + return new ParamDefMD(this, rid); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal GenericParamMD ReadGenericParam(uint rid) { + return new GenericParamMD(this, rid); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// A new instance + internal GenericParamConstraintMD ReadGenericParamConstraint(uint rid) { + return new GenericParamConstraintMD(this, rid, new GenericParamContext()); + } + + /// + /// Reads a new instance. This one is not cached. + /// + /// Row ID + /// Generic parameter context + /// A new instance + internal GenericParamConstraintMD ReadGenericParamConstraint(uint rid, GenericParamContext gpContext) { + return new GenericParamConstraintMD(this, rid, gpContext); + } + + /// + /// Reads a method body + /// + /// Method + /// Method RVA + /// Method impl attrs + /// Generic parameter context + /// A or null if none + internal MethodBody ReadMethodBody(MethodDefMD method, RVA rva, MethodImplAttributes implAttrs, GenericParamContext gpContext) { + MethodBody mb; + var mDec = methodDecrypter; + if (mDec != null && mDec.GetMethodBody(method.OrigRid, rva, method.Parameters, gpContext, out mb)) { + var cilBody = mb as CilBody; + if (cilBody != null) + return InitializeBodyFromPdb(cilBody, method.OrigRid); + return mb; + } + + if (rva == 0) + return null; + var codeType = implAttrs & MethodImplAttributes.CodeTypeMask; + if (codeType == MethodImplAttributes.IL) + return InitializeBodyFromPdb(ReadCilBody(method.Parameters, rva, gpContext), method.OrigRid); + if (codeType == MethodImplAttributes.Native) + return new NativeMethodBody(rva); + return null; + } + + /// + /// Updates with the PDB info (if any) + /// + /// Method body + /// Method rid + /// Returns originak value + CilBody InitializeBodyFromPdb(CilBody body, uint rid) { + if (pdbState != null) + pdbState.InitializeDontCall(body, rid); + return body; + } + + /// + /// Reads a string from the #US heap + /// + /// String token + /// A non-null string + public string ReadUserString(uint token) { + var sDec = stringDecrypter; + if (sDec != null) { + var s = sDec.ReadUserString(token); + if (s != null) + return s; + } + return USStream.ReadNoNull(token & 0x00FFFFFF); + } + + /// + /// Writes the mixed-mode module to a file on disk. If the file exists, it will be overwritten. + /// + /// Filename + public void NativeWrite(string filename) { + NativeWrite(filename, null); + } + + /// + /// Writes the mixed-mode module to a file on disk. If the file exists, it will be overwritten. + /// + /// Filename + /// Writer options + public void NativeWrite(string filename, DNW.NativeModuleWriterOptions options) { + var writer = new DNW.NativeModuleWriter(this, options ?? new DNW.NativeModuleWriterOptions(this)); + writer.Write(filename); + } + + /// + /// Writes the mixed-mode module to a stream. + /// + /// Destination stream + public void NativeWrite(Stream dest) { + NativeWrite(dest, null); + } + + /// + /// Writes the mixed-mode module to a stream. + /// + /// Destination stream + /// Writer options + public void NativeWrite(Stream dest, DNW.NativeModuleWriterOptions options) { + var writer = new DNW.NativeModuleWriter(this, options ?? new DNW.NativeModuleWriterOptions(this)); + writer.Write(dest); + } + + /// + /// Reads data from the #Blob. The following columns are returned: + /// Field.Signature + /// Method.Signature + /// MemberRef.Signature + /// Constant.Value + /// CustomAttribute.Value + /// FieldMarshal.NativeType + /// DeclSecurity.PermissionSet + /// StandAloneSig.Signature + /// Property.Type + /// TypeSpec.Signature + /// Assembly.PublicKey + /// AssemblyRef.PublicKeyOrToken + /// File.HashValue + /// MethodSpec.Instantiation + /// + /// A token + /// The value in the #Blob or null if is invalid + public byte[] ReadBlob(uint token) { + uint rid = MDToken.ToRID(token); + switch (MDToken.ToTable(token)) { + case Table.Field: + var fieldRow = TablesStream.ReadFieldRow(rid); + if (fieldRow == null) + break; + return BlobStream.Read(fieldRow.Signature); + + case Table.Method: + var methodRow = TablesStream.ReadMethodRow(rid); + if (methodRow == null) + break; + return BlobStream.Read(methodRow.Signature); + + case Table.MemberRef: + var mrRow = TablesStream.ReadMemberRefRow(rid); + if (mrRow == null) + break; + return BlobStream.Read(mrRow.Signature); + + case Table.Constant: + var constRow = TablesStream.ReadConstantRow(rid); + if (constRow == null) + break; + return BlobStream.Read(constRow.Value); + + case Table.CustomAttribute: + var caRow = TablesStream.ReadCustomAttributeRow(rid); + if (caRow == null) + break; + return BlobStream.Read(caRow.Value); + + case Table.FieldMarshal: + var fmRow = TablesStream.ReadFieldMarshalRow(rid); + if (fmRow == null) + break; + return BlobStream.Read(fmRow.NativeType); + + case Table.DeclSecurity: + var dsRow = TablesStream.ReadDeclSecurityRow(rid); + if (dsRow == null) + break; + return BlobStream.Read(dsRow.PermissionSet); + + case Table.StandAloneSig: + var sasRow = TablesStream.ReadStandAloneSigRow(rid); + if (sasRow == null) + break; + return BlobStream.Read(sasRow.Signature); + + case Table.Property: + var propRow = TablesStream.ReadPropertyRow(rid); + if (propRow == null) + break; + return BlobStream.Read(propRow.Type); + + case Table.TypeSpec: + var tsRow = TablesStream.ReadTypeSpecRow(rid); + if (tsRow == null) + break; + return BlobStream.Read(tsRow.Signature); + + case Table.Assembly: + var asmRow = TablesStream.ReadAssemblyRow(rid); + if (asmRow == null) + break; + return BlobStream.Read(asmRow.PublicKey); + + case Table.AssemblyRef: + // HashValue is also in the #Blob but the user has to read it some other way + var asmRefRow = TablesStream.ReadAssemblyRefRow(rid); + if (asmRefRow == null) + break; + return BlobStream.Read(asmRefRow.PublicKeyOrToken); + + case Table.File: + var fileRow = TablesStream.ReadFileRow(rid); + if (fileRow == null) + break; + return BlobStream.Read(fileRow.HashValue); + + case Table.MethodSpec: + var msRow = TablesStream.ReadMethodSpecRow(rid); + if (msRow == null) + break; + return BlobStream.Read(msRow.Instantiation); + } + + return null; + } + + TypeSig ISignatureReaderHelper.ConvertRTInternalAddress(IntPtr address) { + return null; + } + } +} diff --git a/dnlib/DotNet/ModuleKind.cs b/dnlib/DotNet/ModuleKind.cs new file mode 100644 index 0000000..3328682 --- /dev/null +++ b/dnlib/DotNet/ModuleKind.cs @@ -0,0 +1,28 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Module kind + /// + public enum ModuleKind { + /// + /// Console UI module + /// + Console, + + /// + /// Windows GUI module + /// + Windows, + + /// + /// DLL module + /// + Dll, + + /// + /// Netmodule (it has no assembly manifest) + /// + NetModule, + } +} diff --git a/dnlib/DotNet/ModuleLoader.cs b/dnlib/DotNet/ModuleLoader.cs new file mode 100644 index 0000000..f161fdc --- /dev/null +++ b/dnlib/DotNet/ModuleLoader.cs @@ -0,0 +1,995 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.DotNet.Emit; +using dnlib.DotNet.MD; +using dnlib.DotNet.Pdb; +using dnlib.IO; +using dnlib.PE; +using dnlib.Threading; +using dnlib.W32Resources; + +namespace dnlib.DotNet { + struct ModuleLoader { + readonly ModuleDef module; + readonly ICancellationToken cancellationToken; + readonly Dictionary seen; + readonly Stack stack; + + ModuleLoader(ModuleDef module, ICancellationToken cancellationToken) { + const int CAPACITY = 0x4000; + this.module = module; + this.cancellationToken = cancellationToken; + this.seen = new Dictionary(CAPACITY); + this.stack = new Stack(CAPACITY); + } + + public static void LoadAll(ModuleDef module, ICancellationToken cancellationToken) { + new ModuleLoader(module, cancellationToken).Load(); + } + + void Add(UTF8String a) { } + void Add(Guid? a) { } + void Add(ushort a) { } + void Add(AssemblyHashAlgorithm a) { } + void Add(Version a) { } + void Add(AssemblyAttributes a) { } + void Add(PublicKeyBase a) { } + void Add(RVA a) { } + void Add(IManagedEntryPoint a) { } + void Add(string a) { } + void Add(WinMDStatus a) { } + void Add(TypeAttributes a) { } + void Add(FieldAttributes a) { } + void Add(uint? a) { } + void Add(byte[] a) { } + void Add(MethodImplAttributes a) { } + void Add(MethodAttributes a) { } + void Add(MethodSemanticsAttributes a) { } + void Add(ParamAttributes a) { } + void Add(ElementType a) { } + void Add(SecurityAction a) { } + void Add(EventAttributes a) { } + void Add(PropertyAttributes a) { } + void Add(PInvokeAttributes a) { } + void Add(FileAttributes a) { } + void Add(ManifestResourceAttributes a) { } + void Add(GenericParamAttributes a) { } + void Add(NativeType a) { } + + void Load() { + LoadAllTables(); + Load(module); + Process(); + } + + void Process() { + while (stack.Count != 0) { + if (cancellationToken != null) + cancellationToken.ThrowIfCancellationRequested(); + var o = stack.Pop(); + LoadObj(o); + } + } + + void LoadAllTables() { + var resolver = module as ITokenResolver; + if (resolver == null) + return; + for (Table tbl = 0; tbl <= Table.GenericParamConstraint; tbl++) { + for (uint rid = 1; ; rid++) { + var o = resolver.ResolveToken(new MDToken(tbl, rid).Raw, new GenericParamContext()); + if (o == null) + break; + Add(o); + Process(); + } + } + } + + void LoadObj(object o) { + var ts = o as TypeSig; + if (ts != null) { + Load(ts); + return; + } + + var mdt = o as IMDTokenProvider; + if (mdt != null) { + Load(mdt); + return; + } + + var ca = o as CustomAttribute; + if (ca != null) { + Load(ca); + return; + } + + var sa = o as SecurityAttribute; + if (sa != null) { + Load(sa); + return; + } + + var na = o as CANamedArgument; + if (na != null) { + Load(na); + return; + } + + var p = o as Parameter; + if (p != null) { + Load(p); + return; + } + + var scope = o as PdbScope; + if (scope != null) { + Load(scope); + return; + } + + var rd = o as ResourceDirectory; + if (rd != null) { + Load(rd); + return; + } + + var rdata = o as ResourceData; + if (rdata != null) { + Load(rdata); + return; + } + + Debug.Fail("Unknown type"); + } + + void Load(TypeSig ts) { + if (ts == null) + return; + Add(ts.Next); + + switch (ts.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.ValueType: + case ElementType.Class: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + Add(((TypeDefOrRefSig)ts).TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + var vsig = (GenericSig)ts; + Add(vsig.OwnerType); + Add(vsig.OwnerMethod); + break; + + case ElementType.GenericInst: + var gis = (GenericInstSig)ts; + Add(gis.GenericType); + Add(gis.GenericArguments); + break; + + case ElementType.FnPtr: + var fpsig = (FnPtrSig)ts; + Add(fpsig.Signature); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + var cmod = (ModifierSig)ts; + Add(cmod.Modifier); + break; + + case ElementType.End: + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Array: + case ElementType.ValueArray: + case ElementType.SZArray: + case ElementType.Module: + case ElementType.Pinned: + case ElementType.Sentinel: + case ElementType.R: + case ElementType.Internal: + default: + break; + } + } + + void Load(IMDTokenProvider mdt) { + if (mdt == null) + return; + switch (mdt.MDToken.Table) { + case Table.Module: Load((ModuleDef)mdt); break; + case Table.TypeRef: Load((TypeRef)mdt); break; + case Table.TypeDef: Load((TypeDef)mdt); break; + case Table.Field: Load((FieldDef)mdt); break; + case Table.Method: Load((MethodDef)mdt); break; + case Table.Param: Load((ParamDef)mdt); break; + case Table.InterfaceImpl: Load((InterfaceImpl)mdt); break; + case Table.MemberRef: Load((MemberRef)mdt); break; + case Table.Constant: Load((Constant)mdt); break; + case Table.DeclSecurity: Load((DeclSecurity)mdt); break; + case Table.ClassLayout: Load((ClassLayout)mdt); break; + case Table.StandAloneSig: Load((StandAloneSig)mdt); break; + case Table.Event: Load((EventDef)mdt); break; + case Table.Property: Load((PropertyDef)mdt); break; + case Table.ModuleRef: Load((ModuleRef)mdt); break; + case Table.TypeSpec: Load((TypeSpec)mdt); break; + case Table.ImplMap: Load((ImplMap)mdt); break; + case Table.Assembly: Load((AssemblyDef)mdt); break; + case Table.AssemblyRef: Load((AssemblyRef)mdt); break; + case Table.File: Load((FileDef)mdt); break; + case Table.ExportedType: Load((ExportedType)mdt); break; + case Table.GenericParam: Load((GenericParam)mdt); break; + case Table.MethodSpec: Load((MethodSpec)mdt); break; + case Table.GenericParamConstraint: Load((GenericParamConstraint)mdt); break; + + case Table.ManifestResource: + var rsrc = mdt as Resource; + if (rsrc != null) { + Load(rsrc); + break; + } + + var mr = mdt as ManifestResource; + if (mr != null) { + Load(mr); + break; + } + + Debug.Fail("Unknown ManifestResource"); + break; + + case Table.FieldPtr: + case Table.MethodPtr: + case Table.ParamPtr: + case Table.CustomAttribute: + case Table.FieldMarshal: + case Table.FieldLayout: + case Table.EventMap: + case Table.EventPtr: + case Table.PropertyMap: + case Table.PropertyPtr: + case Table.MethodSemantics: + case Table.MethodImpl: + case Table.FieldRVA: + case Table.ENCLog: + case Table.ENCMap: + case Table.AssemblyProcessor: + case Table.AssemblyOS: + case Table.AssemblyRefProcessor: + case Table.AssemblyRefOS: + case Table.NestedClass: + break; + + default: + Debug.Fail("Unknown type"); + break; + } + } + + void Load(ModuleDef obj) { + if (obj == null || obj != this.module) + return; + Add(obj.Generation); + Add(obj.Name); + Add(obj.Mvid); + Add(obj.EncId); + Add(obj.EncBaseId); + Add(obj.CustomAttributes); + Add(obj.Assembly); + Add(obj.Types); + Add(obj.ExportedTypes); + Add(obj.NativeEntryPoint); + Add(obj.ManagedEntryPoint); + Add(obj.Resources); + Add(obj.VTableFixups); + Add(obj.Location); + Add(obj.Win32Resources); + Add(obj.RuntimeVersion); + Add(obj.WinMDStatus); + Add(obj.RuntimeVersionWinMD); + Add(obj.WinMDVersion); + Add(obj.PdbState); + } + + void Load(TypeRef obj) { + if (obj == null) + return; + Add(obj.ResolutionScope); + Add(obj.Name); + Add(obj.Namespace); + Add(obj.CustomAttributes); + } + + void Load(TypeDef obj) { + if (obj == null) + return; + Add(obj.Module2); + Add(obj.Attributes); + Add(obj.Name); + Add(obj.Namespace); + Add(obj.BaseType); + Add(obj.Fields); + Add(obj.Methods); + Add(obj.GenericParameters); + Add(obj.Interfaces); + Add(obj.DeclSecurities); + Add(obj.ClassLayout); + Add(obj.DeclaringType); + Add(obj.DeclaringType2); + Add(obj.NestedTypes); + Add(obj.Events); + Add(obj.Properties); + Add(obj.CustomAttributes); + } + + void Load(FieldDef obj) { + if (obj == null) + return; + Add(obj.CustomAttributes); + Add(obj.Attributes); + Add(obj.Name); + Add(obj.Signature); + Add(obj.FieldOffset); + Add(obj.MarshalType); + Add(obj.RVA); + Add(obj.InitialValue); + Add(obj.ImplMap); + Add(obj.Constant); + Add(obj.DeclaringType); + } + + void Load(MethodDef obj) { + if (obj == null) + return; + Add(obj.RVA); + Add(obj.ImplAttributes); + Add(obj.Attributes); + Add(obj.Name); + Add(obj.Signature); + Add(obj.ParamDefs); + Add(obj.GenericParameters); + Add(obj.DeclSecurities); + Add(obj.ImplMap); + Add(obj.MethodBody); + Add(obj.CustomAttributes); + Add(obj.Overrides); + Add(obj.DeclaringType); + Add(obj.Parameters); + Add(obj.SemanticsAttributes); + } + + void Load(ParamDef obj) { + if (obj == null) + return; + Add(obj.DeclaringMethod); + Add(obj.Attributes); + Add(obj.Sequence); + Add(obj.Name); + Add(obj.MarshalType); + Add(obj.Constant); + Add(obj.CustomAttributes); + } + + void Load(InterfaceImpl obj) { + if (obj == null) + return; + Add(obj.Interface); + Add(obj.CustomAttributes); + } + + void Load(MemberRef obj) { + if (obj == null) + return; + Add(obj.Class); + Add(obj.Name); + Add(obj.Signature); + Add(obj.CustomAttributes); + } + + void Load(Constant obj) { + if (obj == null) + return; + Add(obj.Type); + var o = obj.Value; + } + + void Load(DeclSecurity obj) { + if (obj == null) + return; + Add(obj.Action); + Add(obj.SecurityAttributes); + Add(obj.CustomAttributes); + obj.GetBlob(); + } + + void Load(ClassLayout obj) { + if (obj == null) + return; + Add(obj.PackingSize); + Add(obj.ClassSize); + } + + void Load(StandAloneSig obj) { + if (obj == null) + return; + Add(obj.Signature); + Add(obj.CustomAttributes); + } + + void Load(EventDef obj) { + if (obj == null) + return; + Add(obj.Attributes); + Add(obj.Name); + Add(obj.EventType); + Add(obj.CustomAttributes); + Add(obj.AddMethod); + Add(obj.InvokeMethod); + Add(obj.RemoveMethod); + Add(obj.OtherMethods); + Add(obj.DeclaringType); + } + + void Load(PropertyDef obj) { + if (obj == null) + return; + Add(obj.Attributes); + Add(obj.Name); + Add(obj.Type); + Add(obj.Constant); + Add(obj.CustomAttributes); + Add(obj.GetMethods); + Add(obj.SetMethods); + Add(obj.OtherMethods); + Add(obj.DeclaringType); + } + + void Load(ModuleRef obj) { + if (obj == null) + return; + Add(obj.Name); + Add(obj.CustomAttributes); + } + + void Load(TypeSpec obj) { + if (obj == null) + return; + Add(obj.TypeSig); + Add(obj.ExtraData); + Add(obj.CustomAttributes); + } + + void Load(ImplMap obj) { + if (obj == null) + return; + Add(obj.Attributes); + Add(obj.Name); + Add(obj.Module); + } + + void Load(AssemblyDef obj) { + if (obj == null) + return; + if (obj.ManifestModule != module) + return; + Add(obj.HashAlgorithm); + Add(obj.Version); + Add(obj.Attributes); + Add(obj.PublicKey); + Add(obj.Name); + Add(obj.Culture); + Add(obj.DeclSecurities); + Add(obj.Modules); + Add(obj.CustomAttributes); + } + + void Load(AssemblyRef obj) { + if (obj == null) + return; + Add(obj.Version); + Add(obj.Attributes); + Add(obj.PublicKeyOrToken); + Add(obj.Name); + Add(obj.Culture); + Add(obj.Hash); + Add(obj.CustomAttributes); + } + + void Load(FileDef obj) { + if (obj == null) + return; + Add(obj.Flags); + Add(obj.Name); + Add(obj.HashValue); + Add(obj.CustomAttributes); + } + + void Load(ExportedType obj) { + if (obj == null) + return; + Add(obj.CustomAttributes); + Add(obj.Attributes); + Add(obj.TypeDefId); + Add(obj.TypeName); + Add(obj.TypeNamespace); + Add(obj.Implementation); + } + + void Load(Resource obj) { + if (obj == null) + return; + + Add(obj.Offset); + Add(obj.Name); + Add(obj.Attributes); + + switch (obj.ResourceType) { + case ResourceType.Embedded: + var er = (EmbeddedResource)obj; + // Make sure data is cached + if (!(er.Data is MemoryImageStream)) + er.Data = MemoryImageStream.Create(er.GetClonedResourceStream().ReadAllBytes()); + break; + + case ResourceType.AssemblyLinked: + var ar = (AssemblyLinkedResource)obj; + Add(ar.Assembly); + break; + + case ResourceType.Linked: + var lr = (LinkedResource)obj; + Add(lr.File); + Add(lr.Hash); + break; + + default: + Debug.Fail("Unknown resource"); + break; + } + } + + void Load(ManifestResource obj) { + if (obj == null) + return; + Add(obj.Offset); + Add(obj.Flags); + Add(obj.Name); + Add(obj.Implementation); + Add(obj.CustomAttributes); + } + + void Load(GenericParam obj) { + if (obj == null) + return; + Add(obj.Owner); + Add(obj.Number); + Add(obj.Flags); + Add(obj.Name); + Add(obj.Kind); + Add(obj.GenericParamConstraints); + Add(obj.CustomAttributes); + } + + void Load(MethodSpec obj) { + if (obj == null) + return; + Add(obj.Method); + Add(obj.Instantiation); + Add(obj.CustomAttributes); + } + + void Load(GenericParamConstraint obj) { + if (obj == null) + return; + Add(obj.Owner); + Add(obj.Constraint); + Add(obj.CustomAttributes); + } + + void Load(CANamedArgument obj) { + if (obj == null) + return; + Add(obj.Type); + Add(obj.Name); + Load(obj.Argument); + } + + void Load(Parameter obj) { + if (obj == null) + return; + Add(obj.Type); + } + + void Load(SecurityAttribute obj) { + if (obj == null) + return; + Add(obj.AttributeType); + Add(obj.NamedArguments); + } + + void Load(CustomAttribute obj) { + if (obj == null) + return; + Add(obj.Constructor); + Add(obj.RawData); + Add(obj.ConstructorArguments); + Add(obj.NamedArguments); + } + + void Load(MethodOverride obj) { + Add(obj.MethodBody); + Add(obj.MethodDeclaration); + } + + void AddCAValue(object obj) { + if (obj is CAArgument) { + Load((CAArgument)obj); + return; + } + + var list = obj as IList; + if (list != null) { + Add(list); + return; + } + + var md = obj as IMDTokenProvider; + if (md != null) { + Add(md); + return; + } + } + + void Load(CAArgument obj) { + Add(obj.Type); + AddCAValue(obj.Value); + } + + void Load(PdbScope obj) { + if (obj == null) + return; + Add(obj.Start); + Add(obj.End); + Add(obj.Scopes); + Add(obj.Variables); + } + + void Load(ResourceDirectory obj) { + if (obj == null) + return; + Add(obj.Directories); + Add(obj.Data); + } + + void Load(ResourceData obj) { + if (obj == null) + return; + var data = obj.Data; + if (data != null && !(data is MemoryImageStream)) + obj.Data = MemoryImageStream.Create(data.ReadAllBytes()); + } + + void AddToStack(T t) where T : class { + if (t == null) + return; + if (seen.ContainsKey(t)) + return; + seen[t] = true; + stack.Push(t); + } + + void Add(CustomAttribute obj) { + AddToStack(obj); + } + + void Add(SecurityAttribute obj) { + AddToStack(obj); + } + + void Add(CANamedArgument obj) { + AddToStack(obj); + } + + void Add(Parameter obj) { + AddToStack(obj); + } + + void Add(IMDTokenProvider o) { + AddToStack(o); + } + + void Add(PdbScope scope) { + AddToStack(scope); + } + + void Add(TypeSig ts) { + AddToStack(ts); + } + + void Add(ResourceDirectory rd) { + AddToStack(rd); + } + + void Add(ResourceData rd) { + AddToStack(rd); + } + + void Add(IList list) where T : IMDTokenProvider { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Load(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Load(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(ParameterList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(IList list) { + if (list == null) + return; + foreach (var item in list.GetSafeEnumerable()) + Add(item); + } + + void Add(VTableFixups vtf) { + if (vtf == null) + return; + foreach (var fixup in vtf) { + foreach (var method in fixup) + Add(method); + } + } + + void Add(Win32Resources vtf) { + if (vtf == null) + return; + Add(vtf.Root); + } + + void Add(CallingConventionSig sig) { + var msig = sig as MethodBaseSig; + if (msig != null) { + Add(msig); + return; + } + + var fsig = sig as FieldSig; + if (fsig != null) { + Add(fsig); + return; + } + + var lsig = sig as LocalSig; + if (lsig != null) { + Add(lsig); + return; + } + + var gsig = sig as GenericInstMethodSig; + if (gsig != null) { + Add(gsig); + return; + } + + Debug.Assert(sig == null); + } + + void Add(MethodBaseSig msig) { + if (msig == null) + return; + Add(msig.ExtraData); + Add(msig.RetType); + Add(msig.Params); + Add(msig.ParamsAfterSentinel); + } + + void Add(FieldSig fsig) { + if (fsig == null) + return; + Add(fsig.ExtraData); + Add(fsig.Type); + } + + void Add(LocalSig lsig) { + if (lsig == null) + return; + Add(lsig.ExtraData); + Add(lsig.Locals); + } + + void Add(GenericInstMethodSig gsig) { + if (gsig == null) + return; + Add(gsig.ExtraData); + Add(gsig.GenericArguments); + } + + void Add(MarshalType mt) { + if (mt == null) + return; + Add(mt.NativeType); + } + + void Add(MethodBody mb) { + var cilBody = mb as CilBody; + if (cilBody != null) { + Add(cilBody); + return; + } + + var nb = mb as NativeMethodBody; + if (nb != null) { + Add(nb); + return; + } + + Debug.Assert(mb == null, "Unknown method body"); + } + + void Add(NativeMethodBody body) { + if (body == null) + return; + Add(body.RVA); + } + + void Add(CilBody body) { + if (body == null) + return; + Add(body.Instructions); + Add(body.ExceptionHandlers); + Add(body.Variables); + Add(body.Scope); + } + + void Add(Instruction instr) { + if (instr == null) + return; + + var mdt = instr.Operand as IMDTokenProvider; + if (mdt != null) { + Add(mdt); + return; + } + + var p = instr.Operand as Parameter; + if (p != null) { + Add(p); + return; + } + + var l = instr.Operand as Local; + if (l != null) { + Add(l); + return; + } + + var csig = instr.Operand as CallingConventionSig; + if (csig != null) { + Add(csig); + return; + } + } + + void Add(ExceptionHandler eh) { + if (eh == null) + return; + Add(eh.CatchType); + } + + void Add(Local local) { + if (local == null) + return; + Add(local.Type); + } + + void Add(PdbState state) { + if (state == null) + return; + Add(state.UserEntryPoint); + } + } +} diff --git a/dnlib/DotNet/ModuleRef.cs b/dnlib/DotNet/ModuleRef.cs new file mode 100644 index 0000000..e0fb2ad --- /dev/null +++ b/dnlib/DotNet/ModuleRef.cs @@ -0,0 +1,196 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the ModuleRef table + /// + public abstract class ModuleRef : IHasCustomAttribute, IMemberRefParent, IResolutionScope, IModule, IOwnerModule { + /// + /// The row id in its table + /// + protected uint rid; + + /// + /// The owner module + /// + protected ModuleDef module; + + /// + public MDToken MDToken { + get { return new MDToken(Table.ModuleRef, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 12; } + } + + /// + public int MemberRefParentTag { + get { return 2; } + } + + /// + public int ResolutionScopeTag { + get { return 1; } + } + + /// + public ScopeType ScopeType { + get { return ScopeType.ModuleRef; } + } + + /// + public string ScopeName { + get { return FullName; } + } + + /// + /// From column ModuleRef.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public ModuleDef Module { + get { return module; } + } + + /// + /// Gets the definition module, i.e., the module which it references, or null + /// if the module can't be found. + /// + public ModuleDef DefinitionModule { + get { + if (module == null) + return null; + var n = name; + if (UTF8String.CaseInsensitiveEquals(n, module.Name)) + return module; + var asm = DefinitionAssembly; + return asm == null ? null : asm.FindModule(n); + } + } + + /// + /// Gets the definition assembly, i.e., the assembly of the module it references, or + /// null if the assembly can't be found. + /// + public AssemblyDef DefinitionAssembly { + get { return module == null ? null : module.Assembly; } + } + + /// + public string FullName { + get { return UTF8String.ToSystemStringOrEmpty(name); } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A ModuleRef row created by the user and not present in the original .NET file + /// + public class ModuleRefUser : ModuleRef { + /// + /// Constructor + /// + /// Owner module + public ModuleRefUser(ModuleDef module) + : this(module, UTF8String.Empty) { + } + + /// + /// Constructor + /// Owner module + /// + /// Module name + public ModuleRefUser(ModuleDef module, UTF8String name) { + this.module = module; + this.name = name; + } + } + + /// + /// Created from a row in the ModuleRef table + /// + sealed class ModuleRefMD : ModuleRef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.ModuleRef, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this ModuleRef row + /// Row ID + /// If is null + /// If is invalid + public ModuleRefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ModuleRefTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("ModuleRef rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.module = readerModule; + uint name = readerModule.TablesStream.ReadModuleRefRow2(origRid); + this.name = readerModule.StringsStream.ReadNoNull(name); + } + } +} diff --git a/dnlib/DotNet/NativeType.cs b/dnlib/DotNet/NativeType.cs new file mode 100644 index 0000000..548f5d7 --- /dev/null +++ b/dnlib/DotNet/NativeType.cs @@ -0,0 +1,107 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Native types used by field marshals. See CorHdr.h/CorNativeType + /// + public enum NativeType : uint { + /// Deprecated + End = 0x00, + /// void + Void = 0x01, + /// bool + Boolean = 0x02, + /// int8 + I1 = 0x03, + /// unsigned int8 + U1 = 0x04, + /// int16 + I2 = 0x05, + /// unsigned int16 + U2 = 0x06, + /// int32 + I4 = 0x07, + /// unsigned int32 + U4 = 0x08, + /// int64 + I8 = 0x09, + /// unsigned int64 + U8 = 0x0A, + /// float32 + R4 = 0x0B, + /// float64 + R8 = 0x0C, + /// syschar + SysChar = 0x0D, + /// variant + Variant = 0x0E, + /// currency + Currency = 0x0F, + /// ptr + Ptr = 0x10, + /// decimal + Decimal = 0x11, + /// date + Date = 0x12, + /// bstr + BStr = 0x13, + /// lpstr + LPStr = 0x14, + /// lpwstr + LPWStr = 0x15, + /// lptstr + LPTStr = 0x16, + /// fixed sysstring + FixedSysString = 0x17, + /// objectref + ObjectRef = 0x18, + /// iunknown + IUnknown = 0x19, + /// idispatch + IDispatch = 0x1A, + /// struct + Struct = 0x1B, + /// interface + IntF = 0x1C, + /// safearray + SafeArray = 0x1D, + /// fixed array + FixedArray = 0x1E, + /// int + Int = 0x1F, + /// uint + UInt = 0x20, + /// nested struct + NestedStruct = 0x21, + /// byvalstr + ByValStr = 0x22, + /// ansi bstr + ANSIBStr = 0x23, + /// tbstr + TBStr = 0x24, + /// variant bool + VariantBool = 0x25, + /// func + Func = 0x26, + /// as any + ASAny = 0x28, + /// array + Array = 0x2A, + /// lpstruct + LPStruct = 0x2B, + /// custom marshaler + CustomMarshaler = 0x2C, + /// error + Error = 0x2D, + /// iinspectable + IInspectable = 0x2E, + /// hstring + HString = 0x2F, + /// first invalid element type + Max = 0x50, + /// Value wasn't present in the blob + NotInitialized = 0xFFFFFFFE, + /// Raw marshal blob type + RawBlob = 0xFFFFFFFF, + } +} diff --git a/dnlib/DotNet/NullResolver.cs b/dnlib/DotNet/NullResolver.cs new file mode 100644 index 0000000..c06cb55 --- /dev/null +++ b/dnlib/DotNet/NullResolver.cs @@ -0,0 +1,45 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// A resolver that always fails + /// + public sealed class NullResolver : IAssemblyResolver, IResolver { + /// + /// The one and only instance of this type + /// + public static readonly NullResolver Instance = new NullResolver(); + + NullResolver() { + } + + /// + public AssemblyDef Resolve(IAssembly assembly, ModuleDef sourceModule) { + return null; + } + + /// + public bool AddToCache(AssemblyDef asm) { + return true; + } + + /// + public bool Remove(AssemblyDef asm) { + return false; + } + + /// + public void Clear() { + } + + /// + public TypeDef Resolve(TypeRef typeRef, ModuleDef sourceModule) { + return null; + } + + /// + public IMemberForwarded Resolve(MemberRef memberRef) { + return null; + } + } +} diff --git a/dnlib/DotNet/PInvokeAttributes.cs b/dnlib/DotNet/PInvokeAttributes.cs new file mode 100644 index 0000000..28bf59f --- /dev/null +++ b/dnlib/DotNet/PInvokeAttributes.cs @@ -0,0 +1,61 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// P/Invoke attributes, see CorHdr.h/CorPinvokeMap + /// + [Flags] + public enum PInvokeAttributes : ushort { + /// Pinvoke is to use the member name as specified. + NoMangle = 0x0001, + + /// Use this mask to retrieve the CharSet information. + CharSetMask = 0x0006, + /// + CharSetNotSpec = 0x0000, + /// + CharSetAnsi = 0x0002, + /// + CharSetUnicode = 0x0004, + /// + CharSetAuto = 0x0006, + + /// + BestFitUseAssem = 0x0000, + /// + BestFitEnabled = 0x0010, + /// + BestFitDisabled = 0x0020, + /// + BestFitMask = 0x0030, + + /// + ThrowOnUnmappableCharUseAssem = 0x0000, + /// + ThrowOnUnmappableCharEnabled = 0x1000, + /// + ThrowOnUnmappableCharDisabled = 0x2000, + /// + ThrowOnUnmappableCharMask = 0x3000, + + /// Information about target function. Not relevant for fields. + SupportsLastError = 0x0040, + + /// + CallConvMask = 0x0700, + /// Pinvoke will use native callconv appropriate to target windows platform. + CallConvWinapi = 0x0100, + /// + CallConvCdecl = 0x0200, + /// + CallConvStdcall = 0x0300, + /// + CallConvStdCall = CallConvStdcall, + /// In M9, pinvoke will raise exception. + CallConvThiscall = 0x0400, + /// + CallConvFastcall = 0x0500, + } +} diff --git a/dnlib/DotNet/ParamAttributes.cs b/dnlib/DotNet/ParamAttributes.cs new file mode 100644 index 0000000..98a7ac8 --- /dev/null +++ b/dnlib/DotNet/ParamAttributes.cs @@ -0,0 +1,23 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Parameter flags. See CorHdr.h/CorParamAttr + /// + [Flags] + public enum ParamAttributes : ushort { + /// Param is [In] + In = 0x0001, + /// Param is [out] + Out = 0x0002, + /// Param is optional + Optional = 0x0010, + + /// Param has default value. + HasDefault = 0x1000, + /// Param has FieldMarshal. + HasFieldMarshal = 0x2000, + } +} diff --git a/dnlib/DotNet/ParamDef.cs b/dnlib/DotNet/ParamDef.cs new file mode 100644 index 0000000..12a77d3 --- /dev/null +++ b/dnlib/DotNet/ParamDef.cs @@ -0,0 +1,407 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Param table + /// + [DebuggerDisplay("{Sequence} {Name}")] + public abstract class ParamDef : IHasConstant, IHasCustomAttribute, IHasFieldMarshal { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.Param, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasConstantTag { + get { return 1; } + } + + /// + public int HasCustomAttributeTag { + get { return 4; } + } + + /// + public int HasFieldMarshalTag { + get { return 1; } + } + + /// + /// Gets the declaring method + /// + public MethodDef DeclaringMethod { + get { return declaringMethod; } + internal set { declaringMethod = value; } + } + /// + protected MethodDef declaringMethod; + + /// + /// From column Param.Flags + /// + public ParamAttributes Attributes { + get { return (ParamAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column Param.Sequence + /// + public ushort Sequence { + get { return sequence; } + set { sequence = value; } + } + /// + protected ushort sequence; + + /// + /// From column Param.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + public MarshalType MarshalType { + get { + if (!marshalType_isInitialized) + InitializeMarshalType(); + return marshalType; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + marshalType = value; + marshalType_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected MarshalType marshalType; + /// + protected bool marshalType_isInitialized; + + void InitializeMarshalType() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (marshalType_isInitialized) + return; + marshalType = GetMarshalType_NoLock(); + marshalType_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual MarshalType GetMarshalType_NoLock() { + return null; + } + + /// Reset + protected void ResetMarshalType() { + marshalType_isInitialized = false; + } + + /// + public Constant Constant { + get { + if (!constant_isInitialized) + InitializeConstant(); + return constant; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + constant = value; + constant_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected Constant constant; + /// + protected bool constant_isInitialized; + + void InitializeConstant() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (constant_isInitialized) + return; + constant = GetConstant_NoLock(); + constant_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual Constant GetConstant_NoLock() { + return null; + } + + /// Reset + protected void ResetConstant() { + constant_isInitialized = false; + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if is not null + /// + public bool HasConstant { + get { return Constant != null; } + } + + /// + /// Gets the constant element type or if there's no constant + /// + public ElementType ElementType { + get { + var c = Constant; + return c == null ? ElementType.End : c.Type; + } + } + + /// + /// true if is not null + /// + public bool HasMarshalType { + get { return MarshalType != null; } + } + + /// + public string FullName { + get { + var n = name; + if (UTF8String.IsNullOrEmpty(n)) + return string.Format("A_{0}", sequence); + return n.String; + } + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, ParamAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool IsIn { + get { return ((ParamAttributes)attributes & ParamAttributes.In) != 0; } + set { ModifyAttributes(value, ParamAttributes.In); } + } + + /// + /// Gets/sets the bit + /// + public bool IsOut { + get { return ((ParamAttributes)attributes & ParamAttributes.Out) != 0; } + set { ModifyAttributes(value, ParamAttributes.Out); } + } + + /// + /// Gets/sets the bit + /// + public bool IsOptional { + get { return ((ParamAttributes)attributes & ParamAttributes.Optional) != 0; } + set { ModifyAttributes(value, ParamAttributes.Optional); } + } + + /// + /// Gets/sets the bit + /// + public bool HasDefault { + get { return ((ParamAttributes)attributes & ParamAttributes.HasDefault) != 0; } + set { ModifyAttributes(value, ParamAttributes.HasDefault); } + } + + /// + /// Gets/sets the bit + /// + public bool HasFieldMarshal { + get { return ((ParamAttributes)attributes & ParamAttributes.HasFieldMarshal) != 0; } + set { ModifyAttributes(value, ParamAttributes.HasFieldMarshal); } + } + } + + /// + /// A Param row created by the user and not present in the original .NET file + /// + public class ParamDefUser : ParamDef { + /// + /// Default constructor + /// + public ParamDefUser() { + } + + /// + /// Constructor + /// + /// Name + public ParamDefUser(UTF8String name) + : this(name, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Sequence + public ParamDefUser(UTF8String name, ushort sequence) + : this(name, sequence, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Sequence + /// Flags + public ParamDefUser(UTF8String name, ushort sequence, ParamAttributes flags) { + this.name = name; + this.sequence = sequence; + this.attributes = (int)flags; + } + } + + /// + /// Created from a row in the Param table + /// + sealed class ParamDefMD : ParamDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override MarshalType GetMarshalType_NoLock() { + return readerModule.ReadMarshalType(Table.Param, origRid, GenericParamContext.Create(declaringMethod)); + } + + /// + protected override Constant GetConstant_NoLock() { + return readerModule.ResolveConstant(readerModule.MetaData.GetConstantRid(Table.Param, origRid)); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Param, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this Param row + /// Row ID + /// If is null + /// If is invalid + public ParamDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.ParamTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Param rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name = readerModule.TablesStream.ReadParamRow(origRid, out this.attributes, out this.sequence); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.declaringMethod = readerModule.GetOwner(this); + } + + internal ParamDefMD InitializeAll() { + MemberMDInitializer.Initialize(DeclaringMethod); + MemberMDInitializer.Initialize(Attributes); + MemberMDInitializer.Initialize(Sequence); + MemberMDInitializer.Initialize(Name); + MemberMDInitializer.Initialize(MarshalType); + MemberMDInitializer.Initialize(Constant); + MemberMDInitializer.Initialize(CustomAttributes); + return this; + } + } +} diff --git a/dnlib/DotNet/ParameterList.cs b/dnlib/DotNet/ParameterList.cs new file mode 100644 index 0000000..bacc697 --- /dev/null +++ b/dnlib/DotNet/ParameterList.cs @@ -0,0 +1,576 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A list of all method parameters + /// + [DebuggerDisplay("Count = {Count}")] + public sealed class ParameterList : ThreadSafe.IList { + readonly MethodDef method; + readonly List parameters; + readonly Parameter hiddenThisParameter; + ParamDef hiddenThisParamDef; + readonly Parameter returnParameter; + int methodSigIndexBase; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Gets the owner method + /// + public MethodDef Method { + get { return method; } + } + + /// + /// Gets the number of parameters, including a possible hidden 'this' parameter + /// + public int Count { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { + return ((ThreadSafe.IList)this).Count_NoLock; + } finally { theLock.ExitReadLock(); } +#else + return parameters.Count; +#endif + } + } + + /// + /// Gets the index of the first parameter that is present in the method signature. + /// If this is a static method, the value is 0, else it's an instance method so the + /// index is 1 since the first parameter is the hidden 'this' parameter. + /// + public int MethodSigIndexBase { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return methodSigIndexBase == 1 ? 1 : 0; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + } + + /// + /// Gets the N'th parameter + /// + /// The parameter index + public Parameter this[int index] { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { + return ((ThreadSafe.IList)this).Get_NoLock(index); + } finally { theLock.ExitReadLock(); } +#else + return parameters[index]; +#endif + } + set { throw new NotSupportedException(); } + } + + /// + /// Gets the method return parameter + /// + public Parameter ReturnParameter { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return returnParameter; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + } + + /// + /// Constructor + /// + /// The method with all parameters + /// 's declaring type + public ParameterList(MethodDef method, TypeDef declaringType) { + this.method = method; + this.parameters = new List(); + this.methodSigIndexBase = -1; + this.hiddenThisParameter = new Parameter(this, 0, Parameter.HIDDEN_THIS_METHOD_SIG_INDEX); + this.returnParameter = new Parameter(this, -1, Parameter.RETURN_TYPE_METHOD_SIG_INDEX); + UpdateThisParameterType(declaringType); + UpdateParameterTypes(); + } + + /// + /// Should be called when the method's declaring type has changed + /// + /// Method declaring type + internal void UpdateThisParameterType(TypeDef methodDeclaringType) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (methodDeclaringType == null) + hiddenThisParameter.SetType(false, null); + else if (methodDeclaringType.IsValueType) + hiddenThisParameter.SetType(false, new ByRefSig(new ValueTypeSig(methodDeclaringType))); + else + hiddenThisParameter.SetType(false, new ClassSig(methodDeclaringType)); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Should be called when the method sig has changed + /// + public void UpdateParameterTypes() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var sig = method.MethodSig; + if (sig == null) { + methodSigIndexBase = -1; + parameters.Clear(); + return; + } + if (UpdateThisParameter_NoLock(sig)) + parameters.Clear(); + returnParameter.SetType(false, sig.RetType); + sig.Params.ExecuteLocked(null, (tsList, arg) => { + ResizeParameters_NoLock(tsList.Count_NoLock() + methodSigIndexBase); + if (methodSigIndexBase > 0) + parameters[0] = hiddenThisParameter; + for (int i = 0; i < tsList.Count_NoLock(); i++) + parameters[i + methodSigIndexBase].SetType(true, tsList.Get_NoLock(i)); + return null; + }); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + bool UpdateThisParameter_NoLock(MethodSig methodSig) { + int newIndex; + if (methodSig == null) + newIndex = -1; + else + newIndex = methodSig.ImplicitThis ? 1 : 0; + if (methodSigIndexBase == newIndex) + return false; + methodSigIndexBase = newIndex; + return true; + } + + void ResizeParameters_NoLock(int length) { + if (parameters.Count == length) + return; + if (parameters.Count < length) { + for (int i = parameters.Count; i < length; i++) + parameters.Add(new Parameter(this, i, i - methodSigIndexBase)); + } + else { + while (parameters.Count > length) + parameters.RemoveAt(parameters.Count - 1); + } + } + + internal ParamDef FindParamDef(Parameter param) { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return FindParamDef_NoLock(param); +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + + ParamDef FindParamDef_NoLock(Parameter param) { + int seq; + if (param.IsReturnTypeParameter) + seq = 0; + else if (param.IsNormalMethodParameter) + seq = param.MethodSigIndex + 1; + else + return hiddenThisParamDef; + + foreach (var paramDef in method.ParamDefs.GetSafeEnumerable()) { + if (paramDef != null && paramDef.Sequence == seq) + return paramDef; + } + return null; + } + + internal void TypeUpdated(Parameter param, bool noParamsLock) { + var sig = method.MethodSig; + if (sig == null) + return; + int index = param.MethodSigIndex; + if (index == Parameter.RETURN_TYPE_METHOD_SIG_INDEX) + sig.RetType = param.Type; + else if (index >= 0) { + if (noParamsLock) + sig.Params.Set_NoLock(index, param.Type); + else + sig.Params.Set(index, param.Type); + } + } + + internal void CreateParamDef(Parameter param) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var paramDef = FindParamDef_NoLock(param); + if (paramDef != null) + return; + if (param.IsHiddenThisParameter) { + hiddenThisParamDef = UpdateRowId_NoLock(new ParamDefUser(UTF8String.Empty, ushort.MaxValue, 0)); + return; + } + int seq = param.IsReturnTypeParameter ? 0 : param.MethodSigIndex + 1; + paramDef = UpdateRowId_NoLock(new ParamDefUser(UTF8String.Empty, (ushort)seq, 0)); + method.ParamDefs.Add(paramDef); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + ParamDef UpdateRowId_NoLock(ParamDef pd) { + var dt = method.DeclaringType; + if (dt == null) + return pd; + var module = dt.Module; + if (module == null) + return pd; + return module.UpdateRowId(pd); + } + + /// + public int IndexOf(Parameter item) { +#if THREAD_SAFE + theLock.EnterReadLock(); try { + return ((ThreadSafe.IList)this).IndexOf_NoLock(item); + } finally { theLock.ExitReadLock(); } +#else + return parameters.IndexOf(item); +#endif + } + + void IList.Insert(int index, Parameter item) { + throw new NotSupportedException(); + } + + void IList.RemoveAt(int index) { + throw new NotSupportedException(); + } + + void ICollection.Add(Parameter item) { + throw new NotSupportedException(); + } + + void ICollection.Clear() { + throw new NotSupportedException(); + } + + bool ICollection.Contains(Parameter item) { +#if THREAD_SAFE + theLock.EnterReadLock(); try { + return ((ThreadSafe.IList)this).Contains_NoLock(item); + } finally { theLock.ExitReadLock(); } +#else + return parameters.Contains(item); +#endif + } + + void ICollection.CopyTo(Parameter[] array, int arrayIndex) { +#if THREAD_SAFE + theLock.EnterReadLock(); try { + ((ThreadSafe.IList)this).CopyTo_NoLock(array, arrayIndex); + } finally { theLock.ExitReadLock(); } +#else + parameters.CopyTo(array, arrayIndex); +#endif + } + + bool ICollection.IsReadOnly { + get { return true; } + } + + bool ICollection.Remove(Parameter item) { + throw new NotSupportedException(); + } + + IEnumerator IEnumerable.GetEnumerator() { +#if THREAD_SAFE + theLock.EnterReadLock(); try { + return ((ThreadSafe.IList)this).GetEnumerator_NoLock(); + } finally { theLock.ExitReadLock(); } +#else + return parameters.GetEnumerator(); +#endif + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { + return ((IEnumerable)this).GetEnumerator(); + } + +#if THREAD_SAFE + int ThreadSafe.IList.IndexOf_NoLock(Parameter item) { + return parameters.IndexOf(item); + } + + void ThreadSafe.IList.Insert_NoLock(int index, Parameter item) { + throw new NotSupportedException(); + } + + void ThreadSafe.IList.RemoveAt_NoLock(int index) { + throw new NotSupportedException(); + } + + Parameter ThreadSafe.IList.Get_NoLock(int index) { + return parameters[index]; + } + + void ThreadSafe.IList.Set_NoLock(int index, Parameter value) { + throw new NotSupportedException(); + } + + void ThreadSafe.IList.Add_NoLock(Parameter item) { + throw new NotSupportedException(); + } + + void ThreadSafe.IList.Clear_NoLock() { + throw new NotSupportedException(); + } + + bool ThreadSafe.IList.Contains_NoLock(Parameter item) { + return parameters.Contains(item); + } + + void ThreadSafe.IList.CopyTo_NoLock(Parameter[] array, int arrayIndex) { + parameters.CopyTo(array, arrayIndex); + } + + bool ThreadSafe.IList.Remove_NoLock(Parameter item) { + throw new NotSupportedException(); + } + + IEnumerator ThreadSafe.IList.GetEnumerator_NoLock() { + return parameters.GetEnumerator(); + } + + int ThreadSafe.IList.Count_NoLock { + get { return parameters.Count; } + } + + bool ThreadSafe.IList.IsReadOnly_NoLock { + get { return true; } + } + + TRetType ThreadSafe.IList.ExecuteLocked(TArgType arg, ExecuteLockedDelegate handler) { + theLock.EnterWriteLock(); try { + return handler(this, arg); + } finally { theLock.ExitWriteLock(); } + } +#endif + } + + /// + /// A method parameter + /// + public sealed class Parameter : IVariable { + readonly ParameterList parameterList; + TypeSig typeSig; + readonly int paramIndex; + readonly int methodSigIndex; + + /// + /// The hidden 'this' parameter's + /// + public const int HIDDEN_THIS_METHOD_SIG_INDEX = -2; + + /// + /// The return type parameter's + /// + public const int RETURN_TYPE_METHOD_SIG_INDEX = -1; + + /// + /// Gets the parameter index. If the method has a hidden 'this' parameter, that parameter + /// has index 0 and the remaining parameters in the method signature start from index 1. + /// The method return parameter has index -1. + /// + public int Index { + get { return paramIndex; } + } + + /// + /// Gets the index of the parameter in the method signature. See also + /// and + /// + public int MethodSigIndex { + get { return methodSigIndex; } + } + + /// + /// true if it's a normal visible method parameter, i.e., it's not the hidden + /// 'this' parameter and it's not the method return type parameter. + /// + public bool IsNormalMethodParameter { + get { return methodSigIndex >= 0; } + } + + /// + /// true if it's the hidden 'this' parameter + /// + public bool IsHiddenThisParameter { + get { return methodSigIndex == HIDDEN_THIS_METHOD_SIG_INDEX; } + } + + /// + /// true if it's the method return type parameter + /// + public bool IsReturnTypeParameter { + get { return methodSigIndex == RETURN_TYPE_METHOD_SIG_INDEX; } + } + + /// + /// Gets the parameter type + /// + public TypeSig Type { + get { return typeSig; } + set { + typeSig = value; + if (parameterList != null) + parameterList.TypeUpdated(this, false); + } + } + + /// + /// This method does exactly what the setter does except that it + /// uses the no-lock method if is true. + /// + /// true if MethodSig.Params lock is being held by + /// us + /// + internal void SetType(bool noParamsLock, TypeSig type) { + typeSig = type; + if (parameterList != null) + parameterList.TypeUpdated(this, noParamsLock); + } + + /// + /// Gets the owner method + /// + public MethodDef Method { + get { return parameterList == null ? null : parameterList.Method; } + } + + /// + /// Gets the or null if not present + /// + public ParamDef ParamDef { + get { return parameterList == null ? null : parameterList.FindParamDef(this); } + } + + /// + /// true if it has a + /// + public bool HasParamDef { + get { return ParamDef != null; } + } + + /// + /// Gets the name from . If is null, + /// an empty string is returned. + /// + public string Name { + get { + var paramDef = ParamDef; + return paramDef == null ? string.Empty : UTF8String.ToSystemStringOrEmpty(paramDef.Name); + } + set { + var paramDef = ParamDef; + if (paramDef != null) + paramDef.Name = value; + } + } + + /// + /// Constructor + /// + /// Parameter index + public Parameter(int paramIndex) { + this.paramIndex = paramIndex; + this.methodSigIndex = paramIndex; + } + + /// + /// Constructor + /// + /// Parameter index + /// Parameter type + public Parameter(int paramIndex, TypeSig type) { + this.paramIndex = paramIndex; + this.methodSigIndex = paramIndex; + this.typeSig = type; + } + + /// + /// Constructor + /// + /// Parameter index (0 is hidden this param if it exists) + /// Index in method signature + public Parameter(int paramIndex, int methodSigIndex) { + this.paramIndex = paramIndex; + this.methodSigIndex = methodSigIndex; + } + + /// + /// Constructor + /// + /// Parameter index (0 is hidden this param if it exists) + /// Index in method signature + /// Parameter type + public Parameter(int paramIndex, int methodSigIndex, TypeSig type) { + this.paramIndex = paramIndex; + this.methodSigIndex = methodSigIndex; + this.typeSig = type; + } + + internal Parameter(ParameterList parameterList, int paramIndex, int methodSigIndex) { + this.parameterList = parameterList; + this.paramIndex = paramIndex; + this.methodSigIndex = methodSigIndex; + } + + /// + /// Creates a if it doesn't already exist + /// + public void CreateParamDef() { + if (parameterList != null) + parameterList.CreateParamDef(this); + } + + /// + public override string ToString() { + var name = Name; + if (string.IsNullOrEmpty(name)) { + if (IsReturnTypeParameter) + return "RET_PARAM"; + return string.Format("A_{0}", paramIndex); + } + return name; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/ComInterfaces.cs b/dnlib/DotNet/Pdb/Dss/ComInterfaces.cs new file mode 100644 index 0000000..d7c31c5 --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/ComInterfaces.cs @@ -0,0 +1,335 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +// Dss = Diagnostics Symbol Store = http://msdn.microsoft.com/en-us/library/ms404519.aspx +namespace dnlib.DotNet.Pdb.Dss { + [ComVisible(true), + ComImport, + Guid("809C652E-7396-11D2-9771-00A0C9B4D50C"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface IMetaDataDispenser { + void DefineScope([In] ref Guid rclsid, [In] uint dwCreateFlags, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.IUnknown)] out object ppIUnk); + void OpenScope([In, MarshalAs(UnmanagedType.LPWStr)] string szScope, [In] uint dwOpenFlags, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.IUnknown)] out object ppIUnk); + void OpenScopeOnMemory([In] IntPtr pData, [In] uint cbData, [In] uint dwOpenFlags, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.IUnknown)] out object ppIUnk); + } + + [ComVisible(true), + ComImport, + Guid("AA544D42-28CB-11D3-BD22-0000F80849BD"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedBinder { + [PreserveSig] + int GetReaderForFile([In, MarshalAs(UnmanagedType.IUnknown)] object importer, [In, MarshalAs(UnmanagedType.LPWStr)] string fileName, [In, MarshalAs(UnmanagedType.LPWStr)] string searchPath, [Out] out ISymUnmanagedReader pRetVal); + [PreserveSig] + int GetReaderFromStream([In, MarshalAs(UnmanagedType.IUnknown)] object importer, [In] IStream pstream, [Out] out ISymUnmanagedReader pRetVal); + } + + [ComVisible(true), + ComImport, + Guid("B4CE6286-2A6B-3712-A3B7-1EE1DAD467B5"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedReader { + void GetDocument([In, MarshalAs(UnmanagedType.LPWStr)] string url, [In] Guid language, [In] Guid languageVendor, [In] Guid documentType, [Out] out ISymUnmanagedDocument pRetVal); + void GetDocuments([In] uint cDocs, [Out] out uint pcDocs, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedDocument[] pDocs); + [PreserveSig] + int GetUserEntryPoint([Out] out uint pToken); + [PreserveSig] + int GetMethod([In] uint token, [Out] out ISymUnmanagedMethod retVal); + [PreserveSig] + int GetMethodByVersion([In] uint token, [In] int version, [Out] out ISymUnmanagedMethod pRetVal); + void GetVariables([In] uint parent, [In] uint cVars, [Out] out uint pcVars, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] ISymUnmanagedVariable[] pVars); + void GetGlobalVariables([In] uint cVars, [Out] out uint pcVars, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedVariable[] pVars); + [PreserveSig] + int GetMethodFromDocumentPosition([In] ISymUnmanagedDocument document, [In] uint line, [In] uint column, [Out] out ISymUnmanagedMethod pRetVal); + void GetSymAttribute([In] uint parent, [In, MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint cBuffer, [Out] out uint pcBuffer, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] buffer); + void GetNamespaces([In] uint cNameSpaces, [Out] out uint pcNameSpaces, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedNamespace[] namespaces); + void Initialize([In, MarshalAs(UnmanagedType.IUnknown)] object importer, [In, MarshalAs(UnmanagedType.LPWStr)] string filename, [In, MarshalAs(UnmanagedType.LPWStr)] string searchPath, [In] IStream pIStream); + void UpdateSymbolStore([In, MarshalAs(UnmanagedType.LPWStr)] string filename, [In] IStream pIStream); + void ReplaceSymbolStore([In, MarshalAs(UnmanagedType.LPWStr)] string filename, [In] IStream pIStream); + void GetSymbolStoreFileName([In] uint cchName, [Out] out uint pcchName, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] char[] szName); + void GetMethodsFromDocumentPosition([In] ISymUnmanagedDocument document, [In] uint line, [In] uint column, [In] uint cMethod, [Out] out uint pcMethod, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] ISymUnmanagedMethod[] pRetVal); + void GetDocumentVersion([In] ISymUnmanagedDocument pDoc, [Out] out int version, [Out] out bool pbCurrent); + void GetMethodVersion([In] ISymUnmanagedMethod pMethod, [Out] out int version); + } + + [ComVisible(true), + ComImport, + Guid("40DE4037-7C81-3E1E-B022-AE1ABFF2CA08"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedDocument { + void GetURL([In] uint cchUrl, [Out] out uint pcchUrl, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] char[] szUrl); + void GetDocumentType([Out] out Guid pRetVal); + void GetLanguage([Out] out Guid pRetVal); + void GetLanguageVendor([Out] out Guid pRetVal); + void GetCheckSumAlgorithmId([Out] out Guid pRetVal); + void GetCheckSum([In] uint cData, [Out] out uint pcData, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] byte[] data); + void FindClosestLine([In] uint line, [Out] out uint pRetVal); + void HasEmbeddedSource([Out] out bool pRetVal); + void GetSourceLength([Out] out uint pRetVal); + void GetSourceRange([In] uint startLine, [In] uint startColumn, [In] uint endLine, [In] uint endColumn, [In] uint cSourceBytes, [Out] out uint pcSourceBytes, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4)] byte[] source); + } + + [ComVisible(true), + ComImport, + Guid("B62B923C-B500-3158-A543-24F307A8B7E1"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedMethod { + void GetToken([Out] out uint pToken); + void GetSequencePointCount([Out] out uint pRetVal); + void GetRootScope([Out] out ISymUnmanagedScope pRetVal); + void GetScopeFromOffset([In] uint offset, [Out] out ISymUnmanagedScope pRetVal); + void GetOffset([In] ISymUnmanagedDocument document, [In] uint line, [In] uint column, [Out] out uint pRetVal); + void GetRanges([In] ISymUnmanagedDocument document, [In] uint line, [In] uint column, [In] uint cRanges, [Out] out uint pcRanges, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] int[] ranges); + void GetParameters([In] uint cParams, [Out] out uint pcParams, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedVariable[] parameters); + void GetNamespace([Out] out ISymUnmanagedNamespace pRetVal); + void GetSourceStartEnd([In] ISymUnmanagedDocument[/*2*/] docs, [In] int[/*2*/] lines, [In] int[/*2*/] columns, [Out] out bool pRetVal); + void GetSequencePoints([In] uint cPoints, [Out] out uint pcPoints, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] int[] offsets, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedDocument[] documents, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] int[] lines, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] int[] columns, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] int[] endLines, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] int[] endColumns); + } + + [ComVisible(true), + ComImport, + Guid("9F60EEBE-2D9A-3F7C-BF58-80BC991C60BB"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedVariable { + void GetName([In] uint cchName, [Out] out uint pcchName, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] char[] szName); + void GetAttributes([Out] out uint pRetVal); + void GetSignature([In] uint cSig, [Out] out uint pcSig, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] byte[] sig); + void GetAddressKind([Out] out uint pRetVal); + void GetAddressField1([Out] out uint pRetVal); + void GetAddressField2([Out] out uint pRetVal); + void GetAddressField3([Out] out uint pRetVal); + void GetStartOffset([Out] out uint pRetVal); + void GetEndOffset([Out] out uint pRetVal); + } + + [ComVisible(true), + ComImport, + Guid("0DFF7289-54F8-11D3-BD28-0000F80849BD"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedNamespace { + void GetName([In] uint cchName, [Out] out uint pcchName, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] char[] szName); + void GetNamespaces([In] uint cNameSpaces, [Out] out uint pcNameSpaces, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedNamespace[] namespaces); + void GetVariables([In] uint cVars, [Out] out uint pcVars, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedVariable[] pVars); + } + + [ComVisible(true), + ComImport, + Guid("68005D0F-B8E0-3B01-84D5-A11A94154942"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedScope { + void GetMethod([Out] out ISymUnmanagedMethod pRetVal); + void GetParent([Out] out ISymUnmanagedScope pRetVal); + void GetChildren([In] uint cChildren, [Out] out uint pcChildren, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedScope[] children); + void GetStartOffset([Out] out uint pRetVal); + void GetEndOffset([Out] out uint pRetVal); + void GetLocalCount([Out] out uint pRetVal); + void GetLocals([In] uint cLocals, [Out] out uint pcLocals, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedVariable[] locals); + void GetNamespaces([In] uint cNameSpaces, [Out] out uint pcNameSpaces, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] ISymUnmanagedNamespace[] namespaces); + } + + [ComVisible(true), + ComImport, + Guid("7DAC8207-D3AE-4C75-9B67-92801A497D44"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface IMetaDataImport { + void CloseEnum(IntPtr hEnum); + void CountEnum(IntPtr hEnum, ref uint pulCount); + void ResetEnum(IntPtr hEnum, uint ulPos); + void EnumTypeDefs(IntPtr phEnum, uint[] rTypeDefs, uint cMax, out uint pcTypeDefs); + void EnumInterfaceImpls(ref IntPtr phEnum, uint td, uint[] rImpls, uint cMax, ref uint pcImpls); + void EnumTypeRefs(ref IntPtr phEnum, uint[] rTypeRefs, uint cMax, ref uint pcTypeRefs); + void FindTypeDefByName([In, MarshalAs(UnmanagedType.LPWStr)] string szTypeDef, [In] uint tkEnclosingClass, [Out] out uint ptd); + void GetScopeProps([Out] IntPtr szName, [In] uint cchName, [Out] out uint pchName, [Out] out Guid pmvid); + void GetModuleFromScope([Out] out uint pmd); + unsafe void GetTypeDefProps([In] uint td, [In] ushort* szTypeDef, [In] uint cchTypeDef, [Out] uint* pchTypeDef, [Out] uint* pdwTypeDefFlags, [Out] uint* ptkExtends); + void GetInterfaceImplProps([In] uint iiImpl, [Out] out uint pClass, [Out] out uint ptkIface); + void GetTypeRefProps([In] uint tr, [Out] out uint ptkResolutionScope, [Out] IntPtr szName, [In] uint cchName, [Out] out uint pchName); + void ResolveTypeRef(uint tr, ref Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppIScope, out uint ptd); + void EnumMembers([In, Out] ref IntPtr phEnum, [In] uint cl, [Out] uint[] rMembers, [In] uint cMax, [Out] out uint pcTokens); + void EnumMembersWithName([In, Out] ref IntPtr phEnum, [In] uint cl, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [Out] uint[] rMembers, [In] uint cMax, [Out] out uint pcTokens); + void EnumMethods([In, Out] ref IntPtr phEnum, [In] uint cl, [Out] uint[] rMethods, [In] uint cMax, [Out] out uint pcTokens); + void EnumMethodsWithName([In, Out] ref IntPtr phEnum, [In] uint cl, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, uint[] rMethods, [In] uint cMax, [Out] out uint pcTokens); + void EnumFields([In, Out] ref IntPtr phEnum, [In] uint cl, [Out] uint[] rFields, [In] uint cMax, [Out] out uint pcTokens); + void EnumFieldsWithName([In, Out] ref IntPtr phEnum, [In] uint cl, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [Out] uint[] rFields, [In] uint cMax, [Out] out uint pcTokens); + void EnumParams([In, Out] ref IntPtr phEnum, [In] uint mb, [Out] uint[] rParams, [In] uint cMax, [Out] out uint pcTokens); + void EnumMemberRefs([In, Out] ref IntPtr phEnum, [In] uint tkParent, [Out] uint[] rMemberRefs, [In] uint cMax, [Out] out uint pcTokens); + void EnumMethodImpls([In, Out] ref IntPtr phEnum, [In] uint td, [Out] uint[] rMethodBody, [Out] uint[] rMethodDecl, [In] uint cMax, [Out] out uint pcTokens); + void EnumPermissionSets([In, Out] ref IntPtr phEnum, [In] uint tk, [In] uint dwActions, [Out] uint[] rPermission, [In] uint cMax, [Out] out uint pcTokens); + void FindMember([In] uint td, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, [Out] out uint pmb); + void FindMethod([In] uint td, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, [Out] out uint pmb); + void FindField([In] uint td, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, [Out] out uint pmb); + void FindMemberRef([In] uint td, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, [Out] out uint pmr); + unsafe void GetMethodProps(uint mb, uint* pClass, [In] ushort* szMethod, uint cchMethod, uint* pchMethod, uint* pdwAttr, [Out] IntPtr* ppvSigBlob, [Out] uint* pcbSigBlob, [Out] uint* pulCodeRVA, [Out] uint* pdwImplFlags); + void GetMemberRefProps([In] uint mr, [Out] out uint ptk, [Out] IntPtr szMember, [In] uint cchMember, [Out] out uint pchMember, [Out] out IntPtr ppvSigBlob, [Out] out uint pbSig); + void EnumProperties([In, Out] ref IntPtr phEnum, [In] uint td, [Out] uint[] rProperties, [In] uint cMax, [Out] out uint pcProperties); + void EnumEvents([In, Out] ref IntPtr phEnum, [In] uint td, [Out] uint[] rEvents, [In] uint cMax, [Out] out uint pcEvents); + void GetEventProps([In] uint ev, [Out] out uint pClass, [Out] [MarshalAs(UnmanagedType.LPWStr)] string szEvent, [In] uint cchEvent, [Out] out uint pchEvent, [Out] out uint pdwEventFlags, [Out] out uint ptkEventType, [Out] out uint pmdAddOn, [Out] out uint pmdRemoveOn, [Out] out uint pmdFire, [In, Out] uint[] rmdOtherMethod, [In] uint cMax, [Out] out uint pcOtherMethod); + void EnumMethodSemantics([In, Out] ref IntPtr phEnum, [In] uint mb, [In, Out] uint[] rEventProp, [In] uint cMax, [Out] out uint pcEventProp); + void GetMethodSemantics([In] uint mb, [In] uint tkEventProp, [Out] out uint pdwSemanticsFlags); + void GetClassLayout([In] uint td, [Out] out uint pdwPackSize, [Out] out IntPtr rFieldOffset, [In] uint cMax, [Out] out uint pcFieldOffset, [Out] out uint pulClassSize); + void GetFieldMarshal([In] uint tk, [Out] out IntPtr ppvNativeType, [Out] out uint pcbNativeType); + void GetRVA(uint tk, out uint pulCodeRVA, out uint pdwImplFlags); + void GetPermissionSetProps([In] uint pm, [Out] out uint pdwAction, [Out] out IntPtr ppvPermission, [Out] out uint pcbPermission); + void GetSigFromToken([In] uint mdSig, [Out] out IntPtr ppvSig, [Out] out uint pcbSig); + void GetModuleRefProps([In] uint mur, [Out] IntPtr szName, [In] uint cchName, [Out] out uint pchName); + void EnumModuleRefs([In, Out] ref IntPtr phEnum, [Out] uint[] rModuleRefs, [In] uint cmax, [Out] out uint pcModuleRefs); + void GetTypeSpecFromToken([In] uint typespec, [Out] out IntPtr ppvSig, [Out] out uint pcbSig); + void GetNameFromToken([In] uint tk, [Out] out IntPtr pszUtf8NamePtr); + void EnumUnresolvedMethods([In, Out] ref IntPtr phEnum, [Out] uint[] rMethods, [In] uint cMax, [Out] out uint pcTokens); + void GetUserString([In] uint stk, [Out] IntPtr szString, [In] uint cchString, [Out] out uint pchString); + void GetPinvokeMap([In] uint tk, [Out] out uint pdwMappingFlags, [Out] IntPtr szImportName, [In] uint cchImportName, [Out] out uint pchImportName, [Out] out uint pmrImportDLL); + void EnumSignatures([In, Out] ref IntPtr phEnum, [Out] uint[] rSignatures, [In] uint cmax, [Out] out uint pcSignatures); + void EnumTypeSpecs([In, Out] ref IntPtr phEnum, [Out] uint[] rTypeSpecs, [In] uint cmax, [Out] out uint pcTypeSpecs); + void EnumUserStrings([In, Out] ref IntPtr phEnum, [Out] uint[] rStrings, [In] uint cmax, [Out] out uint pcStrings); + void GetParamForMethodIndex([In] uint md, [In] uint ulParamSeq, [Out] out uint ppd); + void EnumCustomAttributes([In, Out] IntPtr phEnum, [In] uint tk, [In] uint tkType, [Out] uint[] rCustomAttributes, [In] uint cMax, [Out] out uint pcCustomAttributes); + void GetCustomAttributeProps([In] uint cv, [Out] out uint ptkObj, [Out] out uint ptkType, [Out] out IntPtr ppBlob, [Out] out uint pcbSize); + void FindTypeRef([In] uint tkResolutionScope, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [Out] out uint ptr); + void GetMemberProps(uint mb, out uint pClass, IntPtr szMember, uint cchMember, out uint pchMember, out uint pdwAttr, [Out] out IntPtr ppvSigBlob, [Out] out uint pcbSigBlob, [Out] out uint pulCodeRVA, [Out] out uint pdwImplFlags, [Out] out uint pdwCPlusTypeFlag, [Out] out IntPtr ppValue, [Out] out uint pcchValue); + void GetFieldProps(uint mb, out uint pClass, IntPtr szField, uint cchField, out uint pchField, out uint pdwAttr, [Out] out IntPtr ppvSigBlob, [Out] out uint pcbSigBlob, [Out] out uint pdwCPlusTypeFlag, [Out] out IntPtr ppValue, [Out] out uint pcchValue); + void GetPropertyProps([In] uint prop, [Out] out uint pClass, [Out] IntPtr szProperty, [In] uint cchProperty, [Out] out uint pchProperty, [Out] out uint pdwPropFlags, [Out] out IntPtr ppvSig, [Out] out uint pbSig, [Out] out uint pdwCPlusTypeFlag, [Out] out IntPtr ppDefaultValue, [Out] out uint pcchDefaultValue, [Out] out uint pmdSetter, [Out] out uint pmdGetter, [In, Out] uint[] rmdOtherMethod, [In] uint cMax, [Out] out uint pcOtherMethod); + void GetParamProps([In] uint tk, [Out] out uint pmd, [Out] out uint pulSequence, [Out] IntPtr szName, [Out] uint cchName, [Out] out uint pchName, [Out] out uint pdwAttr, [Out] out uint pdwCPlusTypeFlag, [Out] out IntPtr ppValue, [Out] out uint pcchValue); + void GetCustomAttributeByName([In] uint tkObj, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [Out] out IntPtr ppData, [Out] out uint pcbData); + bool IsValidToken([In] uint tk); + unsafe void GetNestedClassProps([In] uint tdNestedClass, [Out] uint* ptdEnclosingClass); + void GetNativeCallConvFromSig([In] IntPtr pvSig, [In] uint cbSig, [Out] out uint pCallConv); + void IsGlobal([In] uint pd, [Out] out int pbGlobal); + } + + [ComVisible(true), + ComImport, + Guid("BA3FEE4C-ECB9-4E41-83B7-183FA41CD859"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface IMetaDataEmit { + void SetModuleProps([In] [MarshalAs(UnmanagedType.LPWStr)] string szName); + void Save([In] [MarshalAs(UnmanagedType.LPWStr)] string szFile, [In] uint dwSaveFlags); + void SaveToStream([In] IStream pIStream, [In] uint dwSaveFlags); + void GetSaveSize([In] int fSave, [Out] out uint pdwSaveSize); + void DefineTypeDef([In] [MarshalAs(UnmanagedType.LPWStr)] string szTypeDef, [In] uint dwTypeDefFlags, [In] uint tkExtends, [In] uint[] rtkImplements, [Out] out uint ptd); + void DefineNestedType([In] [MarshalAs(UnmanagedType.LPWStr)] string szTypeDef, [In] uint dwTypeDefFlags, [In] uint tkExtends, [In] uint[] rtkImplements, [In] uint tdEncloser, [Out] out uint ptd); + void SetHandler([In, MarshalAs(UnmanagedType.IUnknown)] object pUnk); + void DefineMethod(uint td, [MarshalAs(UnmanagedType.LPWStr)] string szName, uint dwMethodFlags, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, uint ulCodeRVA, uint dwImplFlags, out uint pmd); + void DefineMethodImpl([In] uint td, [In] uint tkBody, [In] uint tkDecl); + void DefineTypeRefByName([In] uint tkResolutionScope, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [Out] out uint ptr); + void DefineImportType([In] IntPtr pAssemImport, [In] IntPtr pbHashValue, [In] uint cbHashValue, [In] IMetaDataImport pImport, [In] uint tdImport, [In] IntPtr pAssemEmit, [Out] out uint ptr); + void DefineMemberRef([In] uint tkImport, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, [Out] out uint pmr); + void DefineImportMember([In] IntPtr pAssemImport, [In] IntPtr pbHashValue, [In] uint cbHashValue, [In] IMetaDataImport pImport, [In] uint mbMember, [In] IntPtr pAssemEmit, [In] uint tkParent, [Out] out uint pmr); + void DefineEvent([In] uint td, [In] [MarshalAs(UnmanagedType.LPWStr)] string szEvent, [In] uint dwEventFlags, [In] uint tkEventType, [In] uint mdAddOn, [In] uint mdRemoveOn, [In] uint mdFire, [In] uint[] rmdOtherMethods, [Out] out uint pmdEvent); + void SetClassLayout([In] uint td, [In] uint dwPackSize, [In] IntPtr rFieldOffsets, [In] uint ulClassSize); + void DeleteClassLayout([In] uint td); + void SetFieldMarshal([In] uint tk, [In] IntPtr pvNativeType, [In] uint cbNativeType); + void DeleteFieldMarshal([In] uint tk); + void DefinePermissionSet([In] uint tk, [In] uint dwAction, [In] IntPtr pvPermission, [In] uint cbPermission, [Out] out uint ppm); + void SetRVA([In] uint md, [In] uint ulRVA); + void GetTokenFromSig([In] IntPtr pvSig, [In] uint cbSig, [Out] out uint pmsig); + void DefineModuleRef([In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [Out] out uint pmur); + void SetParent([In] uint mr, [In] uint tk); + void GetTokenFromTypeSpec([In] IntPtr pvSig, [In] uint cbSig, [Out] out uint ptypespec); + void SaveToMemory([Out] out IntPtr pbData, [In] uint cbData); + void DefineUserString([In] [MarshalAs(UnmanagedType.LPWStr)] string szString, [In] uint cchString, [Out] out uint pstk); + void DeleteToken([In] uint tkObj); + void SetMethodProps([In] uint md, [In] uint dwMethodFlags, [In] uint ulCodeRVA, [In] uint dwImplFlags); + void SetTypeDefProps([In] uint td, [In] uint dwTypeDefFlags, [In] uint tkExtends, [In] uint[] rtkImplements); + void SetEventProps([In] uint ev, [In] uint dwEventFlags, [In] uint tkEventType, [In] uint mdAddOn, [In] uint mdRemoveOn, [In] uint mdFire, [In] uint[] rmdOtherMethods); + void SetPermissionSetProps([In] uint tk, [In] uint dwAction, [In] IntPtr pvPermission, [In] uint cbPermission, [Out] out uint ppm); + void DefinePinvokeMap([In] uint tk, [In] uint dwMappingFlags, [In] [MarshalAs(UnmanagedType.LPWStr)] string szImportName, [In] uint mrImportDLL); + void SetPinvokeMap([In] uint tk, [In] uint dwMappingFlags, [In] [MarshalAs(UnmanagedType.LPWStr)] string szImportName, [In] uint mrImportDLL); + void DeletePinvokeMap([In] uint tk); + void DefineCustomAttribute([In] uint tkOwner, [In] uint tkCtor, [In] IntPtr pCustomAttribute, [In] uint cbCustomAttribute, [Out] out uint pcv); + void SetCustomAttributeValue([In] uint pcv, [In] IntPtr pCustomAttribute, [In] uint cbCustomAttribute); + void DefineField(uint td, [MarshalAs(UnmanagedType.LPWStr)] string szName, uint dwFieldFlags, [In] IntPtr pvSigBlob, [In] uint cbSigBlob, [In] uint dwCPlusTypeFlag, [In] IntPtr pValue, [In] uint cchValue, [Out] out uint pmd); + void DefineProperty([In] uint td, [In] [MarshalAs(UnmanagedType.LPWStr)] string szProperty, [In] uint dwPropFlags, [In] IntPtr pvSig, [In] uint cbSig, [In] uint dwCPlusTypeFlag, [In] IntPtr pValue, [In] uint cchValue, [In] uint mdSetter, [In] uint mdGetter, [In] uint[] rmdOtherMethods, [Out] out uint pmdProp); + void DefineParam([In] uint md, [In] uint ulParamSeq, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] uint dwParamFlags, [In] uint dwCPlusTypeFlag, [In] IntPtr pValue, [In] uint cchValue, [Out] out uint ppd); + void SetFieldProps([In] uint fd, [In] uint dwFieldFlags, [In] uint dwCPlusTypeFlag, [In] IntPtr pValue, [In] uint cchValue); + void SetPropertyProps([In] uint pr, [In] uint dwPropFlags, [In] uint dwCPlusTypeFlag, [In] IntPtr pValue, [In] uint cchValue, [In] uint mdSetter, [In] uint mdGetter, [In] uint[] rmdOtherMethods); + void SetParamProps([In] uint pd, [In] [MarshalAs(UnmanagedType.LPWStr)] string szName, [In] uint dwParamFlags, [In] uint dwCPlusTypeFlag, [Out] IntPtr pValue, [In] uint cchValue); + void DefineSecurityAttributeSet([In] uint tkObj, [In] IntPtr rSecAttrs, [In] uint cSecAttrs, [Out] out uint pulErrorAttr); + void ApplyEditAndContinue([In, MarshalAs(UnmanagedType.IUnknown)] object pImport); + void TranslateSigWithScope([In] IntPtr pAssemImport, [In] IntPtr pbHashValue, [In] uint cbHashValue, [In] IMetaDataImport import, [In] IntPtr pbSigBlob, [In] uint cbSigBlob, [In] IntPtr pAssemEmit, [In] IMetaDataEmit emit, [Out] IntPtr pvTranslatedSig, uint cbTranslatedSigMax, [Out] out uint pcbTranslatedSig); + void SetMethodImplFlags([In] uint md, uint dwImplFlags); + void SetFieldRVA([In] uint fd, [In] uint ulRVA); + void Merge([In] IMetaDataImport pImport, [In] IntPtr pHostMapToken, [In, MarshalAs(UnmanagedType.IUnknown)] object pHandler); + void MergeEnd(); + } + + [ComVisible(true), + ComImport, + Guid("ED14AA72-78E2-4884-84E2-334293AE5214"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + interface ISymUnmanagedWriter { + void DefineDocument([In] [MarshalAs(UnmanagedType.LPWStr)] string url, [In] ref Guid language, [In] ref Guid languageVendor, [In] ref Guid documentType, [Out] out ISymUnmanagedDocumentWriter pRetVal); + void SetUserEntryPoint([In] uint entryMethod); + void OpenMethod([In] uint method); + void CloseMethod(); + void OpenScope([In] uint startOffset, [Out] out uint pRetVal); + void CloseScope([In] uint endOffset); + void SetScopeRange([In] uint scopeID, [In] uint startOffset, [In] uint endOffset); + void DefineLocalVariable([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3, [In] uint startOffset, [In] uint endOffset); + void DefineParameter([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint sequence, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void DefineField([In] uint parent, [In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] byte[] signature, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void DefineGlobalVariable([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void Close(); + void SetSymAttribute([In] uint parent, [In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint cData, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] data); + void OpenNamespace([In] [MarshalAs(UnmanagedType.LPWStr)] string name); + void CloseNamespace(); + void UsingNamespace([In] [MarshalAs(UnmanagedType.LPWStr)] string fullName); + void SetMethodSourceRange([In] ISymUnmanagedDocumentWriter startDoc, [In] uint startLine, [In] uint startColumn, [In] ISymUnmanagedDocumentWriter endDoc, [In] uint endLine, [In] uint endColumn); + void Initialize([In] IntPtr emitter, [In] [MarshalAs(UnmanagedType.LPWStr)] string filename, [In] IStream pIStream, [In] bool fFullBuild); + void GetDebugInfo([Out] out IMAGE_DEBUG_DIRECTORY pIDD, [In] uint cData, [Out] out uint pcData, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] data); + void DefineSequencePoints([In] ISymUnmanagedDocumentWriter document, [In] uint spCount, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] offsets, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] lines, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] columns, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] endLines, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] endColumns); + void RemapToken([In] uint oldToken, [In] uint newToken); + void Initialize2([In, MarshalAs(UnmanagedType.IUnknown)] object emitter, [In] [MarshalAs(UnmanagedType.LPWStr)] string tempfilename, [In] IStream pIStream, [In] bool fFullBuild, [In] [MarshalAs(UnmanagedType.LPWStr)] string finalfilename); + void DefineConstant([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] object value, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature); + void Abort(); + } + +#pragma warning disable 1591 + [ComVisible(true), + ComImport, + Guid("0B97726E-9E6D-4F05-9A26-424022093CAA"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface ISymUnmanagedWriter2 { + void DefineDocument([In] [MarshalAs(UnmanagedType.LPWStr)] string url, [In] ref Guid language, [In] ref Guid languageVendor, [In] ref Guid documentType, [Out] out ISymUnmanagedDocumentWriter pRetVal); + void SetUserEntryPoint([In] uint entryMethod); + void OpenMethod([In] uint method); + void CloseMethod(); + void OpenScope([In] uint startOffset, [Out] out uint pRetVal); + void CloseScope([In] uint endOffset); + void SetScopeRange([In] uint scopeID, [In] uint startOffset, [In] uint endOffset); + void DefineLocalVariable([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3, [In] uint startOffset, [In] uint endOffset); + void DefineParameter([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint sequence, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void DefineField([In] uint parent, [In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] byte[] signature, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void DefineGlobalVariable([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void Close(); + void SetSymAttribute([In] uint parent, [In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint cData, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] data); + void OpenNamespace([In] [MarshalAs(UnmanagedType.LPWStr)] string name); + void CloseNamespace(); + void UsingNamespace([In] [MarshalAs(UnmanagedType.LPWStr)] string fullName); + void SetMethodSourceRange([In] ISymUnmanagedDocumentWriter startDoc, [In] uint startLine, [In] uint startColumn, [In] ISymUnmanagedDocumentWriter endDoc, [In] uint endLine, [In] uint endColumn); + void Initialize([In, MarshalAs(UnmanagedType.IUnknown)] object emitter, [In] [MarshalAs(UnmanagedType.LPWStr)] string filename, [In] IStream pIStream, [In] bool fFullBuild); + void GetDebugInfo([Out] out IMAGE_DEBUG_DIRECTORY pIDD, [In] uint cData, [Out] out uint pcData, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] data); + void DefineSequencePoints([In] ISymUnmanagedDocumentWriter document, [In] uint spCount, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] offsets, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] lines, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] columns, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] endLines, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] endColumns); + void RemapToken([In] uint oldToken, [In] uint newToken); + void Initialize2([In, MarshalAs(UnmanagedType.IUnknown)] object emitter, [In] [MarshalAs(UnmanagedType.LPWStr)] string tempfilename, [In] IStream pIStream, [In] bool fFullBuild, [In] [MarshalAs(UnmanagedType.LPWStr)] string finalfilename); + void DefineConstant([In] [MarshalAs(UnmanagedType.LPWStr)] string name, [In] object value, [In] uint cSig, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature); + void Abort(); + void DefineLocalVariable2([In, MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint sigToken, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3, [In] uint startOffset, [In] uint endOffset); + void DefineGlobalVariable2([In, MarshalAs(UnmanagedType.LPWStr)] string name, [In] uint attributes, [In] uint sigToken, [In] uint addrKind, [In] uint addr1, [In] uint addr2, [In] uint addr3); + void DefineConstant2([In, MarshalAs(UnmanagedType.LPWStr)] string name, [In] object value, [In] uint sigToken); + } +#pragma warning restore 1591 + +#pragma warning disable 1591 + [ComVisible(true), + ComImport, + Guid("B01FAFEB-C450-3A4D-BEEC-B4CEEC01E006"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface ISymUnmanagedDocumentWriter { + void SetSource([In] uint sourceSize, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] byte[] source); + void SetCheckSum([In] Guid algorithmId, [In] uint checkSumSize, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] checkSum); + } +#pragma warning restore 1591 +} diff --git a/dnlib/DotNet/Pdb/Dss/ImageStreamIStream.cs b/dnlib/DotNet/Pdb/Dss/ImageStreamIStream.cs new file mode 100644 index 0000000..1e01786 --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/ImageStreamIStream.cs @@ -0,0 +1,180 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Dss { + /// + /// Implements and uses an as the underlying + /// stream. + /// + sealed class ImageStreamIStream : IStream, IDisposable { + readonly IImageStream stream; + readonly string name; + + const int STG_E_INVALIDFUNCTION = unchecked((int)0x80030001); + const int STG_E_CANTSAVE = unchecked((int)0x80030103); + + /// + /// User can set this to anything he/she wants. If it implements , + /// its method will get called when this instance + /// is 'd. + /// + public object UserData { get; set; } + + /// + /// Constructor + /// + /// Source stream + public ImageStreamIStream(IImageStream stream) + : this(stream, string.Empty) { + } + + /// + /// Constructor + /// + /// Source stream + /// Name of original file or null if unknown. + public ImageStreamIStream(IImageStream stream, string name) { + if (stream == null) + throw new ArgumentNullException("stream"); + this.stream = stream; + this.name = name ?? string.Empty; + } + + /// + public void Clone(out IStream ppstm) { + var newStream = stream.Clone(); + newStream.Position = stream.Position; + ppstm = new ImageStreamIStream(newStream, name); + } + + /// + public void Commit(int grfCommitFlags) { + } + + /// + public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten) { + if (cb > int.MaxValue) + cb = int.MaxValue; + else if (cb < 0) + cb = 0; + int sizeToRead = (int)cb; + + if (stream.Position + sizeToRead < sizeToRead || stream.Position + sizeToRead > stream.Length) + sizeToRead = (int)(stream.Length - Math.Min(stream.Position, stream.Length)); + + var buffer = new byte[sizeToRead]; + Read(buffer, sizeToRead, pcbRead); + if (pcbRead != null) + Marshal.WriteInt64(pcbRead, Marshal.ReadInt32(pcbRead)); + pstm.Write(buffer, buffer.Length, pcbWritten); + if (pcbWritten != null) + Marshal.WriteInt64(pcbWritten, Marshal.ReadInt32(pcbWritten)); + } + + /// + public void LockRegion(long libOffset, long cb, int dwLockType) { + Marshal.ThrowExceptionForHR(STG_E_INVALIDFUNCTION); + } + + /// + public void Read(byte[] pv, int cb, IntPtr pcbRead) { + if (cb < 0) + cb = 0; + + cb = stream.Read(pv, 0, cb); + + if (pcbRead != IntPtr.Zero) + Marshal.WriteInt32(pcbRead, cb); + } + + /// + public void Revert() { + } + + enum STREAM_SEEK { + SET = 0, + CUR = 1, + END = 2, + } + + /// + public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition) { + switch ((STREAM_SEEK)dwOrigin) { + case STREAM_SEEK.SET: + stream.Position = dlibMove; + break; + + case STREAM_SEEK.CUR: + stream.Position += dlibMove; + break; + + case STREAM_SEEK.END: + stream.Position = stream.Length + dlibMove; + break; + } + + if (plibNewPosition != IntPtr.Zero) + Marshal.WriteInt64(plibNewPosition, stream.Position); + } + + /// + public void SetSize(long libNewSize) { + Marshal.ThrowExceptionForHR(STG_E_INVALIDFUNCTION); + } + + enum STATFLAG { + DEFAULT = 0, + NONAME = 1, + NOOPEN = 2, + } + + enum STGTY { + STORAGE = 1, + STREAM = 2, + LOCKBYTES = 3, + PROPERTY = 4, + } + + /// + public void Stat(out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, int grfStatFlag) { + var s = new System.Runtime.InteropServices.ComTypes.STATSTG(); + + // s.atime = ???; + s.cbSize = stream.Length; + s.clsid = Guid.Empty; + // s.ctime = ???; + s.grfLocksSupported = 0; + s.grfMode = 0; + s.grfStateBits = 0; + // s.mtime = ???; + if ((grfStatFlag & (int)STATFLAG.NONAME) == 0) + s.pwcsName = name; + s.reserved = 0; + s.type = (int)STGTY.STREAM; + + pstatstg = s; + } + + /// + public void UnlockRegion(long libOffset, long cb, int dwLockType) { + Marshal.ThrowExceptionForHR(STG_E_INVALIDFUNCTION); + } + + /// + public void Write(byte[] pv, int cb, IntPtr pcbWritten) { + Marshal.ThrowExceptionForHR(STG_E_CANTSAVE); + } + + /// + public void Dispose() { + stream.Dispose(); + var id = UserData as IDisposable; + if (id != null) + id.Dispose(); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/MDEmitter.cs b/dnlib/DotNet/Pdb/Dss/MDEmitter.cs new file mode 100644 index 0000000..5622ed1 --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/MDEmitter.cs @@ -0,0 +1,541 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices.ComTypes; +using dnlib.DotNet.Writer; + +namespace dnlib.DotNet.Pdb.Dss { + /// + /// Pass this instance to when writing the PDB file + /// + sealed class MDEmitter : IMetaDataImport, IMetaDataEmit { + readonly MetaData metaData; + readonly Dictionary tokenToTypeDef; + readonly Dictionary tokenToMethodDef; + + /// + /// Constructor + /// + /// Metadata + public MDEmitter(MetaData metaData) { + this.metaData = metaData; + + // We could get these from the metadata tables but it's just easier to get name, + // declaring type etc using TypeDef and MethodDef. + + tokenToTypeDef = new Dictionary(metaData.TablesHeap.TypeDefTable.Rows); + tokenToMethodDef = new Dictionary(metaData.TablesHeap.MethodTable.Rows); + foreach (var type in metaData.Module.GetTypes()) { + if (type == null) + continue; + tokenToTypeDef.Add(new MDToken(MD.Table.TypeDef, metaData.GetRid(type)).Raw, type); + foreach (var method in type.Methods) { + if (method == null) + continue; + tokenToMethodDef.Add(new MDToken(MD.Table.Method, metaData.GetRid(method)).Raw, method); + } + } + } + + unsafe void IMetaDataImport.GetMethodProps(uint mb, uint* pClass, ushort* szMethod, uint cchMethod, uint* pchMethod, uint* pdwAttr, IntPtr* ppvSigBlob, uint* pcbSigBlob, uint* pulCodeRVA, uint* pdwImplFlags) { + if ((mb >> 24) != 0x06) + throw new ArgumentException(); + var method = tokenToMethodDef[mb]; + var row = metaData.TablesHeap.MethodTable[mb & 0x00FFFFFF]; + + if (pClass != null) + *pClass = new MDToken(MD.Table.TypeDef, metaData.GetRid(method.DeclaringType)).Raw; + if (pdwAttr != null) + *pdwAttr = row.Flags; + if (ppvSigBlob != null) + *ppvSigBlob = IntPtr.Zero; + if (pcbSigBlob != null) + *pcbSigBlob = 0; + if (pulCodeRVA != null) + *pulCodeRVA = row.RVA; + if (pdwImplFlags != null) + *pdwImplFlags = row.ImplFlags; + + string name = method.Name.String ?? string.Empty; + int len = (int)Math.Min((uint)name.Length + 1, cchMethod); + if (szMethod != null) { + for (int i = 0; i < len - 1; i++, szMethod++) + *szMethod = (ushort)name[i]; + if (len > 0) + *szMethod = 0; + } + if (pchMethod != null) + *pchMethod = (uint)len; + } + + unsafe void IMetaDataImport.GetTypeDefProps(uint td, ushort* szTypeDef, uint cchTypeDef, uint* pchTypeDef, uint* pdwTypeDefFlags, uint* ptkExtends) { + if ((td >> 24) != 0x02) + throw new ArgumentException(); + var type = tokenToTypeDef[td]; + var row = metaData.TablesHeap.TypeDefTable[td & 0x00FFFFFF]; + if (pdwTypeDefFlags != null) + *pdwTypeDefFlags = row.Flags; + if (ptkExtends != null) + *ptkExtends = row.Extends; + + string name = type.Name.String ?? string.Empty; + int len = (int)Math.Min((uint)name.Length + 1, cchTypeDef); + if (szTypeDef != null) { + for (int i = 0; i < len - 1; i++, szTypeDef++) + *szTypeDef = (ushort)name[i]; + if (len > 0) + *szTypeDef = 0; + } + if (pchTypeDef != null) + *pchTypeDef = (uint)len; + } + + unsafe void IMetaDataImport.GetNestedClassProps(uint tdNestedClass, uint* ptdEnclosingClass) { + if ((tdNestedClass >> 24) != 0x02) + throw new ArgumentException(); + var type = tokenToTypeDef[tdNestedClass]; + var declType = type.DeclaringType; + if (ptdEnclosingClass != null) { + if (declType == null) + *ptdEnclosingClass = 0; + else + *ptdEnclosingClass = new MDToken(MD.Table.TypeDef, metaData.GetRid(declType)).Raw; + } + } + + // The rest of the methods aren't called + + void IMetaDataImport.CloseEnum(IntPtr hEnum) { + throw new NotImplementedException(); + } + + void IMetaDataImport.CountEnum(IntPtr hEnum, ref uint pulCount) { + throw new NotImplementedException(); + } + + void IMetaDataImport.ResetEnum(IntPtr hEnum, uint ulPos) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumTypeDefs(IntPtr phEnum, uint[] rTypeDefs, uint cMax, out uint pcTypeDefs) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumInterfaceImpls(ref IntPtr phEnum, uint td, uint[] rImpls, uint cMax, ref uint pcImpls) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumTypeRefs(ref IntPtr phEnum, uint[] rTypeRefs, uint cMax, ref uint pcTypeRefs) { + throw new NotImplementedException(); + } + + void IMetaDataImport.FindTypeDefByName(string szTypeDef, uint tkEnclosingClass, out uint ptd) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetScopeProps(IntPtr szName, uint cchName, out uint pchName, out Guid pmvid) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetModuleFromScope(out uint pmd) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetInterfaceImplProps(uint iiImpl, out uint pClass, out uint ptkIface) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetTypeRefProps(uint tr, out uint ptkResolutionScope, IntPtr szName, uint cchName, out uint pchName) { + throw new NotImplementedException(); + } + + void IMetaDataImport.ResolveTypeRef(uint tr, ref Guid riid, out object ppIScope, out uint ptd) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMembers(ref IntPtr phEnum, uint cl, uint[] rMembers, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMembersWithName(ref IntPtr phEnum, uint cl, string szName, uint[] rMembers, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMethods(ref IntPtr phEnum, uint cl, uint[] rMethods, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMethodsWithName(ref IntPtr phEnum, uint cl, string szName, uint[] rMethods, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumFields(ref IntPtr phEnum, uint cl, uint[] rFields, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumFieldsWithName(ref IntPtr phEnum, uint cl, string szName, uint[] rFields, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumParams(ref IntPtr phEnum, uint mb, uint[] rParams, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMemberRefs(ref IntPtr phEnum, uint tkParent, uint[] rMemberRefs, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMethodImpls(ref IntPtr phEnum, uint td, uint[] rMethodBody, uint[] rMethodDecl, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumPermissionSets(ref IntPtr phEnum, uint tk, uint dwActions, uint[] rPermission, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.FindMember(uint td, string szName, IntPtr pvSigBlob, uint cbSigBlob, out uint pmb) { + throw new NotImplementedException(); + } + + void IMetaDataImport.FindMethod(uint td, string szName, IntPtr pvSigBlob, uint cbSigBlob, out uint pmb) { + throw new NotImplementedException(); + } + + void IMetaDataImport.FindField(uint td, string szName, IntPtr pvSigBlob, uint cbSigBlob, out uint pmb) { + throw new NotImplementedException(); + } + + void IMetaDataImport.FindMemberRef(uint td, string szName, IntPtr pvSigBlob, uint cbSigBlob, out uint pmr) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetMemberRefProps(uint mr, out uint ptk, IntPtr szMember, uint cchMember, out uint pchMember, out IntPtr ppvSigBlob, out uint pbSig) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumProperties(ref IntPtr phEnum, uint td, uint[] rProperties, uint cMax, out uint pcProperties) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumEvents(ref IntPtr phEnum, uint td, uint[] rEvents, uint cMax, out uint pcEvents) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetEventProps(uint ev, out uint pClass, string szEvent, uint cchEvent, out uint pchEvent, out uint pdwEventFlags, out uint ptkEventType, out uint pmdAddOn, out uint pmdRemoveOn, out uint pmdFire, uint[] rmdOtherMethod, uint cMax, out uint pcOtherMethod) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumMethodSemantics(ref IntPtr phEnum, uint mb, uint[] rEventProp, uint cMax, out uint pcEventProp) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetMethodSemantics(uint mb, uint tkEventProp, out uint pdwSemanticsFlags) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetClassLayout(uint td, out uint pdwPackSize, out IntPtr rFieldOffset, uint cMax, out uint pcFieldOffset, out uint pulClassSize) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetFieldMarshal(uint tk, out IntPtr ppvNativeType, out uint pcbNativeType) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetRVA(uint tk, out uint pulCodeRVA, out uint pdwImplFlags) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetPermissionSetProps(uint pm, out uint pdwAction, out IntPtr ppvPermission, out uint pcbPermission) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetSigFromToken(uint mdSig, out IntPtr ppvSig, out uint pcbSig) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetModuleRefProps(uint mur, IntPtr szName, uint cchName, out uint pchName) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumModuleRefs(ref IntPtr phEnum, uint[] rModuleRefs, uint cmax, out uint pcModuleRefs) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetTypeSpecFromToken(uint typespec, out IntPtr ppvSig, out uint pcbSig) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetNameFromToken(uint tk, out IntPtr pszUtf8NamePtr) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumUnresolvedMethods(ref IntPtr phEnum, uint[] rMethods, uint cMax, out uint pcTokens) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetUserString(uint stk, IntPtr szString, uint cchString, out uint pchString) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetPinvokeMap(uint tk, out uint pdwMappingFlags, IntPtr szImportName, uint cchImportName, out uint pchImportName, out uint pmrImportDLL) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumSignatures(ref IntPtr phEnum, uint[] rSignatures, uint cmax, out uint pcSignatures) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumTypeSpecs(ref IntPtr phEnum, uint[] rTypeSpecs, uint cmax, out uint pcTypeSpecs) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumUserStrings(ref IntPtr phEnum, uint[] rStrings, uint cmax, out uint pcStrings) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetParamForMethodIndex(uint md, uint ulParamSeq, out uint ppd) { + throw new NotImplementedException(); + } + + void IMetaDataImport.EnumCustomAttributes(IntPtr phEnum, uint tk, uint tkType, uint[] rCustomAttributes, uint cMax, out uint pcCustomAttributes) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetCustomAttributeProps(uint cv, out uint ptkObj, out uint ptkType, out IntPtr ppBlob, out uint pcbSize) { + throw new NotImplementedException(); + } + + void IMetaDataImport.FindTypeRef(uint tkResolutionScope, string szName, out uint ptr) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetMemberProps(uint mb, out uint pClass, IntPtr szMember, uint cchMember, out uint pchMember, out uint pdwAttr, out IntPtr ppvSigBlob, out uint pcbSigBlob, out uint pulCodeRVA, out uint pdwImplFlags, out uint pdwCPlusTypeFlag, out IntPtr ppValue, out uint pcchValue) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetFieldProps(uint mb, out uint pClass, IntPtr szField, uint cchField, out uint pchField, out uint pdwAttr, out IntPtr ppvSigBlob, out uint pcbSigBlob, out uint pdwCPlusTypeFlag, out IntPtr ppValue, out uint pcchValue) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetPropertyProps(uint prop, out uint pClass, IntPtr szProperty, uint cchProperty, out uint pchProperty, out uint pdwPropFlags, out IntPtr ppvSig, out uint pbSig, out uint pdwCPlusTypeFlag, out IntPtr ppDefaultValue, out uint pcchDefaultValue, out uint pmdSetter, out uint pmdGetter, uint[] rmdOtherMethod, uint cMax, out uint pcOtherMethod) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetParamProps(uint tk, out uint pmd, out uint pulSequence, IntPtr szName, uint cchName, out uint pchName, out uint pdwAttr, out uint pdwCPlusTypeFlag, out IntPtr ppValue, out uint pcchValue) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetCustomAttributeByName(uint tkObj, string szName, out IntPtr ppData, out uint pcbData) { + throw new NotImplementedException(); + } + + bool IMetaDataImport.IsValidToken(uint tk) { + throw new NotImplementedException(); + } + + void IMetaDataImport.GetNativeCallConvFromSig(IntPtr pvSig, uint cbSig, out uint pCallConv) { + throw new NotImplementedException(); + } + + void IMetaDataImport.IsGlobal(uint pd, out int pbGlobal) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetModuleProps(string szName) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.Save(string szFile, uint dwSaveFlags) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SaveToStream(IStream pIStream, uint dwSaveFlags) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.GetSaveSize(int fSave, out uint pdwSaveSize) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineTypeDef(string szTypeDef, uint dwTypeDefFlags, uint tkExtends, uint[] rtkImplements, out uint ptd) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineNestedType(string szTypeDef, uint dwTypeDefFlags, uint tkExtends, uint[] rtkImplements, uint tdEncloser, out uint ptd) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetHandler(object pUnk) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineMethod(uint td, string szName, uint dwMethodFlags, IntPtr pvSigBlob, uint cbSigBlob, uint ulCodeRVA, uint dwImplFlags, out uint pmd) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineMethodImpl(uint td, uint tkBody, uint tkDecl) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineTypeRefByName(uint tkResolutionScope, string szName, out uint ptr) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineImportType(IntPtr pAssemImport, IntPtr pbHashValue, uint cbHashValue, IMetaDataImport pImport, uint tdImport, IntPtr pAssemEmit, out uint ptr) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineMemberRef(uint tkImport, string szName, IntPtr pvSigBlob, uint cbSigBlob, out uint pmr) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineImportMember(IntPtr pAssemImport, IntPtr pbHashValue, uint cbHashValue, IMetaDataImport pImport, uint mbMember, IntPtr pAssemEmit, uint tkParent, out uint pmr) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineEvent(uint td, string szEvent, uint dwEventFlags, uint tkEventType, uint mdAddOn, uint mdRemoveOn, uint mdFire, uint[] rmdOtherMethods, out uint pmdEvent) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetClassLayout(uint td, uint dwPackSize, IntPtr rFieldOffsets, uint ulClassSize) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DeleteClassLayout(uint td) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetFieldMarshal(uint tk, IntPtr pvNativeType, uint cbNativeType) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DeleteFieldMarshal(uint tk) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefinePermissionSet(uint tk, uint dwAction, IntPtr pvPermission, uint cbPermission, out uint ppm) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetRVA(uint md, uint ulRVA) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.GetTokenFromSig(IntPtr pvSig, uint cbSig, out uint pmsig) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineModuleRef(string szName, out uint pmur) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetParent(uint mr, uint tk) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.GetTokenFromTypeSpec(IntPtr pvSig, uint cbSig, out uint ptypespec) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SaveToMemory(out IntPtr pbData, uint cbData) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineUserString(string szString, uint cchString, out uint pstk) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DeleteToken(uint tkObj) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetMethodProps(uint md, uint dwMethodFlags, uint ulCodeRVA, uint dwImplFlags) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetTypeDefProps(uint td, uint dwTypeDefFlags, uint tkExtends, uint[] rtkImplements) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetEventProps(uint ev, uint dwEventFlags, uint tkEventType, uint mdAddOn, uint mdRemoveOn, uint mdFire, uint[] rmdOtherMethods) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetPermissionSetProps(uint tk, uint dwAction, IntPtr pvPermission, uint cbPermission, out uint ppm) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefinePinvokeMap(uint tk, uint dwMappingFlags, string szImportName, uint mrImportDLL) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetPinvokeMap(uint tk, uint dwMappingFlags, string szImportName, uint mrImportDLL) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DeletePinvokeMap(uint tk) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineCustomAttribute(uint tkOwner, uint tkCtor, IntPtr pCustomAttribute, uint cbCustomAttribute, out uint pcv) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetCustomAttributeValue(uint pcv, IntPtr pCustomAttribute, uint cbCustomAttribute) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineField(uint td, string szName, uint dwFieldFlags, IntPtr pvSigBlob, uint cbSigBlob, uint dwCPlusTypeFlag, IntPtr pValue, uint cchValue, out uint pmd) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineProperty(uint td, string szProperty, uint dwPropFlags, IntPtr pvSig, uint cbSig, uint dwCPlusTypeFlag, IntPtr pValue, uint cchValue, uint mdSetter, uint mdGetter, uint[] rmdOtherMethods, out uint pmdProp) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineParam(uint md, uint ulParamSeq, string szName, uint dwParamFlags, uint dwCPlusTypeFlag, IntPtr pValue, uint cchValue, out uint ppd) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetFieldProps(uint fd, uint dwFieldFlags, uint dwCPlusTypeFlag, IntPtr pValue, uint cchValue) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetPropertyProps(uint pr, uint dwPropFlags, uint dwCPlusTypeFlag, IntPtr pValue, uint cchValue, uint mdSetter, uint mdGetter, uint[] rmdOtherMethods) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetParamProps(uint pd, string szName, uint dwParamFlags, uint dwCPlusTypeFlag, IntPtr pValue, uint cchValue) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.DefineSecurityAttributeSet(uint tkObj, IntPtr rSecAttrs, uint cSecAttrs, out uint pulErrorAttr) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.ApplyEditAndContinue(object pImport) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.TranslateSigWithScope(IntPtr pAssemImport, IntPtr pbHashValue, uint cbHashValue, IMetaDataImport import, IntPtr pbSigBlob, uint cbSigBlob, IntPtr pAssemEmit, IMetaDataEmit emit, IntPtr pvTranslatedSig, uint cbTranslatedSigMax, out uint pcbTranslatedSig) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetMethodImplFlags(uint md, uint dwImplFlags) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.SetFieldRVA(uint fd, uint ulRVA) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.Merge(IMetaDataImport pImport, IntPtr pHostMapToken, object pHandler) { + throw new NotImplementedException(); + } + + void IMetaDataEmit.MergeEnd() { + throw new NotImplementedException(); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/PinnedMetaData.cs b/dnlib/DotNet/Pdb/Dss/PinnedMetaData.cs new file mode 100644 index 0000000..38ce738 --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/PinnedMetaData.cs @@ -0,0 +1,79 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Runtime.InteropServices; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Dss { + /// + /// Pins a metadata stream in memory + /// + sealed class PinnedMetaData : IDisposable { + GCHandle gcHandle; + readonly IImageStream stream; + readonly byte[] streamData; + readonly IntPtr address; + + /// + /// Gets the address + /// + public IntPtr Address { + get { return address; } + } + + /// + /// Gets the size + /// + public int Size { + get { return (int)stream.Length; } + } + + /// + /// Constructor + /// + /// Metadata stream + public PinnedMetaData(IImageStream stream) { + this.stream = stream; + + var umStream = stream as UnmanagedMemoryImageStream; + if (umStream != null) { + this.address = umStream.StartAddress; + GC.SuppressFinalize(this); // no GCHandle so finalizer isn't needed + } + else { + var memStream = stream as MemoryImageStream; + if (memStream != null) { + this.streamData = memStream.DataArray; + this.gcHandle = GCHandle.Alloc(this.streamData, GCHandleType.Pinned); + this.address = new IntPtr(this.gcHandle.AddrOfPinnedObject().ToInt64() + memStream.DataOffset); + } + else { + this.streamData = stream.ReadAllBytes(); + this.gcHandle = GCHandle.Alloc(this.streamData, GCHandleType.Pinned); + this.address = this.gcHandle.AddrOfPinnedObject(); + } + } + } + + ~PinnedMetaData() { + Dispose(false); + } + + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + void Dispose(bool disposing) { + if (gcHandle.IsAllocated) { + try { + gcHandle.Free(); + } + catch (InvalidOperationException) { + } + } + if (disposing) + stream.Dispose(); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/StreamIStream.cs b/dnlib/DotNet/Pdb/Dss/StreamIStream.cs new file mode 100644 index 0000000..0034bbb --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/StreamIStream.cs @@ -0,0 +1,166 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +namespace dnlib.DotNet.Pdb.Dss { + /// + /// Implements and uses a as the underlying + /// stream. + /// + sealed class StreamIStream : IStream { + readonly Stream stream; + readonly string name; + + const int STG_E_INVALIDFUNCTION = unchecked((int)0x80030001); + + /// + /// Constructor + /// + /// Source stream + public StreamIStream(Stream stream) + : this(stream, string.Empty) { + } + + /// + /// Constructor + /// + /// Source stream + /// Name of original file or null if unknown. + public StreamIStream(Stream stream, string name) { + if (stream == null) + throw new ArgumentNullException("stream"); + this.stream = stream; + this.name = name ?? string.Empty; + } + + /// + public void Clone(out IStream ppstm) { + Marshal.ThrowExceptionForHR(STG_E_INVALIDFUNCTION); + throw new Exception(); + } + + /// + public void Commit(int grfCommitFlags) { + stream.Flush(); + } + + /// + public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten) { + if (cb > int.MaxValue) + cb = int.MaxValue; + else if (cb < 0) + cb = 0; + int sizeToRead = (int)cb; + + if (stream.Position + sizeToRead < sizeToRead || stream.Position + sizeToRead > stream.Length) + sizeToRead = (int)(stream.Length - Math.Min(stream.Position, stream.Length)); + + var buffer = new byte[sizeToRead]; + Read(buffer, sizeToRead, pcbRead); + if (pcbRead != null) + Marshal.WriteInt64(pcbRead, Marshal.ReadInt32(pcbRead)); + pstm.Write(buffer, buffer.Length, pcbWritten); + if (pcbWritten != null) + Marshal.WriteInt64(pcbWritten, Marshal.ReadInt32(pcbWritten)); + } + + /// + public void LockRegion(long libOffset, long cb, int dwLockType) { + Marshal.ThrowExceptionForHR(STG_E_INVALIDFUNCTION); + } + + /// + public void Read(byte[] pv, int cb, IntPtr pcbRead) { + if (cb < 0) + cb = 0; + + cb = stream.Read(pv, 0, cb); + + if (pcbRead != IntPtr.Zero) + Marshal.WriteInt32(pcbRead, cb); + } + + /// + public void Revert() { + } + + enum STREAM_SEEK { + SET = 0, + CUR = 1, + END = 2, + } + + /// + public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition) { + switch ((STREAM_SEEK)dwOrigin) { + case STREAM_SEEK.SET: + stream.Position = dlibMove; + break; + + case STREAM_SEEK.CUR: + stream.Position += dlibMove; + break; + + case STREAM_SEEK.END: + stream.Position = stream.Length + dlibMove; + break; + } + + if (plibNewPosition != IntPtr.Zero) + Marshal.WriteInt64(plibNewPosition, stream.Position); + } + + /// + public void SetSize(long libNewSize) { + stream.SetLength(libNewSize); + } + + enum STATFLAG { + DEFAULT = 0, + NONAME = 1, + NOOPEN = 2, + } + + enum STGTY { + STORAGE = 1, + STREAM = 2, + LOCKBYTES = 3, + PROPERTY = 4, + } + + /// + public void Stat(out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, int grfStatFlag) { + var s = new System.Runtime.InteropServices.ComTypes.STATSTG(); + + // s.atime = ???; + s.cbSize = stream.Length; + s.clsid = Guid.Empty; + // s.ctime = ???; + s.grfLocksSupported = 0; + s.grfMode = 2; + s.grfStateBits = 0; + // s.mtime = ???; + if ((grfStatFlag & (int)STATFLAG.NONAME) == 0) + s.pwcsName = name; + s.reserved = 0; + s.type = (int)STGTY.STREAM; + + pstatstg = s; + } + + /// + public void UnlockRegion(long libOffset, long cb, int dwLockType) { + Marshal.ThrowExceptionForHR(STG_E_INVALIDFUNCTION); + } + + /// + public void Write(byte[] pv, int cb, IntPtr pcbWritten) { + stream.Write(pv, 0, cb); + if (pcbWritten != null) + Marshal.WriteInt32(pcbWritten, cb); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolDocument.cs b/dnlib/DotNet/Pdb/Dss/SymbolDocument.cs new file mode 100644 index 0000000..09a257c --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolDocument.cs @@ -0,0 +1,100 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolDocument : ISymbolDocument { + readonly ISymUnmanagedDocument document; + + public ISymUnmanagedDocument SymUnmanagedDocument { + get { return document; } + } + + public SymbolDocument(ISymUnmanagedDocument document) { + this.document = document; + } + + public Guid CheckSumAlgorithmId { + get { + Guid guid; + document.GetCheckSumAlgorithmId(out guid); + return guid; + } + } + + public Guid DocumentType { + get { + Guid guid; + document.GetDocumentType(out guid); + return guid; + } + } + + public bool HasEmbeddedSource { + get { + bool result; + document.HasEmbeddedSource(out result); + return result; + } + } + + public Guid Language { + get { + Guid guid; + document.GetLanguage(out guid); + return guid; + } + } + + public Guid LanguageVendor { + get { + Guid guid; + document.GetLanguageVendor(out guid); + return guid; + } + } + + public int SourceLength { + get { + uint result; + document.GetSourceLength(out result); + return (int)result; + } + } + + public string URL { + get { + uint count; + document.GetURL(0, out count, null); + var chars = new char[count]; + document.GetURL((uint)chars.Length, out count, chars); + if (chars.Length == 0) + return string.Empty; + return new string(chars, 0, chars.Length - 1); + } + } + + public int FindClosestLine(int line) { + uint result; + document.FindClosestLine((uint)line, out result); + return (int)result; + } + + public byte[] GetCheckSum() { + uint bufSize; + document.GetCheckSum(0, out bufSize, null); + var buffer = new byte[bufSize]; + document.GetCheckSum((uint)buffer.Length, out bufSize, buffer); + return buffer; + } + + public byte[] GetSourceRange(int startLine, int startColumn, int endLine, int endColumn) { + uint bufSize; + document.GetSourceRange((uint)startLine, (uint)startColumn, (uint)endLine, (uint)endColumn, 0, out bufSize, null); + var buffer = new byte[bufSize]; + document.GetSourceRange((uint)startLine, (uint)startColumn, (uint)endLine, (uint)endColumn, (uint)buffer.Length, out bufSize, buffer); + return buffer; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolDocumentWriter.cs b/dnlib/DotNet/Pdb/Dss/SymbolDocumentWriter.cs new file mode 100644 index 0000000..9ba6e5d --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolDocumentWriter.cs @@ -0,0 +1,26 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolDocumentWriter : ISymbolDocumentWriter { + readonly ISymUnmanagedDocumentWriter writer; + + public ISymUnmanagedDocumentWriter SymUnmanagedDocumentWriter { + get { return writer; } + } + + public SymbolDocumentWriter(ISymUnmanagedDocumentWriter writer) { + this.writer = writer; + } + + public void SetCheckSum(Guid algorithmId, byte[] checkSum) { + writer.SetCheckSum(algorithmId, (uint)(checkSum == null ? 0 : checkSum.Length), checkSum); + } + + public void SetSource(byte[] source) { + writer.SetSource((uint)source.Length, source); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolMethod.cs b/dnlib/DotNet/Pdb/Dss/SymbolMethod.cs new file mode 100644 index 0000000..a7f0595 --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolMethod.cs @@ -0,0 +1,129 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolMethod : ISymbolMethod { + readonly ISymUnmanagedMethod method; + + public SymbolMethod(ISymUnmanagedMethod method) { + this.method = method; + } + + public ISymbolScope RootScope { + get { + ISymUnmanagedScope scope; + method.GetRootScope(out scope); + return scope == null ? null : new SymbolScope(scope); + } + } + + public int SequencePointCount { + get { + uint result; + method.GetSequencePointCount(out result); + return (int)result; + } + } + + public SymbolToken Token { + get { + uint result; + method.GetToken(out result); + return new SymbolToken((int)result); + } + } + + public ISymbolNamespace GetNamespace() { + ISymUnmanagedNamespace ns; + method.GetNamespace(out ns); + return ns == null ? null : new SymbolNamespace(ns); + } + + public int GetOffset(ISymbolDocument document, int line, int column) { + var symDoc = document as SymbolDocument; + if (symDoc == null) + throw new ArgumentException("document is not a non-null SymbolDocument instance"); + uint result; + method.GetOffset(symDoc.SymUnmanagedDocument, (uint)line, (uint)column, out result); + return (int)result; + } + + public ISymbolVariable[] GetParameters() { + uint numVars; + method.GetParameters(0, out numVars, null); + var unVars = new ISymUnmanagedVariable[numVars]; + method.GetParameters((uint)unVars.Length, out numVars, unVars); + var vars = new ISymbolVariable[numVars]; + for (uint i = 0; i < numVars; i++) + vars[i] = new SymbolVariable(unVars[i]); + return vars; + } + + public int[] GetRanges(ISymbolDocument document, int line, int column) { + var symDoc = document as SymbolDocument; + if (symDoc == null) + throw new ArgumentException("document is not a non-null SymbolDocument instance"); + uint arySize; + method.GetRanges(symDoc.SymUnmanagedDocument, (uint)line, (uint)column, 0, out arySize, null); + var ary = new int[arySize]; + method.GetRanges(symDoc.SymUnmanagedDocument, (uint)line, (uint)column, (uint)ary.Length, out arySize, ary); + return ary; + } + + public ISymbolScope GetScope(int offset) { + ISymUnmanagedScope scope; + method.GetScopeFromOffset((uint)offset, out scope); + return scope == null ? null : new SymbolScope(scope); + } + + public void GetSequencePoints(int[] offsets, ISymbolDocument[] documents, int[] lines, int[] columns, int[] endLines, int[] endColumns) { + // Any array can be null, and the documentation says we must verify the sizes. + + int arySize = -1; + if (offsets != null) arySize = offsets.Length; + else if (documents != null) arySize = documents.Length; + else if (lines != null) arySize = lines.Length; + else if (columns != null) arySize = columns.Length; + else if (endLines != null) arySize = endLines.Length; + else if (endColumns != null)arySize = endColumns.Length; + + if (offsets != null && offsets.Length != arySize) throw new ArgumentException("Invalid array length: offsets"); + if (documents != null && documents.Length != arySize) throw new ArgumentException("Invalid array length: documents"); + if (lines != null && lines.Length != arySize) throw new ArgumentException("Invalid array length: lines"); + if (columns != null && columns.Length != arySize) throw new ArgumentException("Invalid array length: columns"); + if (endLines != null && endLines.Length != arySize) throw new ArgumentException("Invalid array length: endLines"); + if (endColumns != null && endColumns.Length != arySize) throw new ArgumentException("Invalid array length: endColumns"); + + if (arySize <= 0) + return; + + var unDocs = documents == null ? null : new ISymUnmanagedDocument[documents.Length]; + uint size; + method.GetSequencePoints((uint)arySize, out size, offsets, unDocs, lines, columns, endLines, endColumns); + + if (unDocs != null) { + for (int i = 0; i < unDocs.Length; i++) + documents[i] = unDocs[i] == null ? null : new SymbolDocument(unDocs[i]); + } + } + + public bool GetSourceStartEnd(ISymbolDocument[] docs, int[] lines, int[] columns) { + if (docs != null && docs.Length < 2) throw new ArgumentException("Invalid array: length < 2: docs"); + if (lines != null && lines.Length < 2) throw new ArgumentException("Invalid array: length < 2: lines"); + if (columns != null && columns.Length < 2) throw new ArgumentException("Invalid array: length < 2: columns"); + + var unDocs = docs == null ? null : new ISymUnmanagedDocument[docs.Length]; + bool result; + method.GetSourceStartEnd(unDocs, lines, columns, out result); + + if (unDocs != null) { + for (int i = 0; i < unDocs.Length; i++) + docs[i] = unDocs[i] == null ? null : new SymbolDocument(unDocs[i]); + } + + return result; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolNamespace.cs b/dnlib/DotNet/Pdb/Dss/SymbolNamespace.cs new file mode 100644 index 0000000..15c24da --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolNamespace.cs @@ -0,0 +1,47 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolNamespace : ISymbolNamespace { + readonly ISymUnmanagedNamespace ns; + + public SymbolNamespace(ISymUnmanagedNamespace @namespace) { + this.ns = @namespace; + } + + public string Name { + get { + uint count; + ns.GetName(0, out count, null); + var chars = new char[count]; + ns.GetName((uint)chars.Length, out count, chars); + if (chars.Length == 0) + return string.Empty; + return new string(chars, 0, chars.Length - 1); + } + } + + public ISymbolNamespace[] GetNamespaces() { + uint numNss; + ns.GetNamespaces(0, out numNss, null); + var unNss = new ISymUnmanagedNamespace[numNss]; + ns.GetNamespaces((uint)unNss.Length, out numNss, unNss); + var nss = new ISymbolNamespace[numNss]; + for (uint i = 0; i < numNss; i++) + nss[i] = new SymbolNamespace(unNss[i]); + return nss; + } + + public ISymbolVariable[] GetVariables() { + uint numVars; + ns.GetVariables(0, out numVars, null); + var unVars = new ISymUnmanagedVariable[numVars]; + ns.GetVariables((uint)unVars.Length, out numVars, unVars); + var vars = new ISymbolVariable[numVars]; + for (uint i = 0; i < numVars; i++) + vars[i] = new SymbolVariable(unVars[i]); + return vars; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolReader.cs b/dnlib/DotNet/Pdb/Dss/SymbolReader.cs new file mode 100644 index 0000000..20e21fc --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolReader.cs @@ -0,0 +1,123 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using System.Runtime.InteropServices; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolReader : ISymbolReader { + readonly ISymUnmanagedReader reader; + + const int E_FAIL = unchecked((int)0x80004005); + + /// + /// Constructor + /// + /// An unmanaged symbol reader + public SymbolReader(ISymUnmanagedReader reader) { + if (reader == null) + throw new ArgumentNullException("reader"); + this.reader = reader; + } + + public SymbolToken UserEntryPoint { + get { + uint token; + int hr = reader.GetUserEntryPoint(out token); + if (hr == E_FAIL) + token = 0; + else + Marshal.ThrowExceptionForHR(hr); + return new SymbolToken((int)token); + } + } + + public ISymbolDocument GetDocument(string url, Guid language, Guid languageVendor, Guid documentType) { + ISymUnmanagedDocument document; + reader.GetDocument(url, language, languageVendor, documentType, out document); + return document == null ? null : new SymbolDocument(document); + } + + public ISymbolDocument[] GetDocuments() { + uint numDocs; + reader.GetDocuments(0, out numDocs, null); + var unDocs = new ISymUnmanagedDocument[numDocs]; + reader.GetDocuments((uint)unDocs.Length, out numDocs, unDocs); + var docs = new ISymbolDocument[numDocs]; + for (uint i = 0; i < numDocs; i++) + docs[i] = new SymbolDocument(unDocs[i]); + return docs; + } + + public ISymbolVariable[] GetGlobalVariables() { + uint numVars; + reader.GetGlobalVariables(0, out numVars, null); + var unVars = new ISymUnmanagedVariable[numVars]; + reader.GetGlobalVariables((uint)unVars.Length, out numVars, unVars); + var vars = new ISymbolVariable[numVars]; + for (uint i = 0; i < numVars; i++) + vars[i] = new SymbolVariable(unVars[i]); + return vars; + } + + public ISymbolMethod GetMethod(SymbolToken method) { + ISymUnmanagedMethod unMethod; + int hr = reader.GetMethod((uint)method.GetToken(), out unMethod); + if (hr == E_FAIL) + return null; + Marshal.ThrowExceptionForHR(hr); + return unMethod == null ? null : new SymbolMethod(unMethod); + } + + public ISymbolMethod GetMethod(SymbolToken method, int version) { + ISymUnmanagedMethod unMethod; + int hr = reader.GetMethodByVersion((uint)method.GetToken(), version, out unMethod); + if (hr == E_FAIL) + return null; + Marshal.ThrowExceptionForHR(hr); + return unMethod == null ? null : new SymbolMethod(unMethod); + } + + public ISymbolMethod GetMethodFromDocumentPosition(ISymbolDocument document, int line, int column) { + var symDoc = document as SymbolDocument; + if (symDoc == null) + throw new ArgumentException("document is not a non-null SymbolDocument instance"); + ISymUnmanagedMethod unMethod; + int hr = reader.GetMethodFromDocumentPosition(symDoc.SymUnmanagedDocument, (uint)line, (uint)column, out unMethod); + if (hr == E_FAIL) + return null; + Marshal.ThrowExceptionForHR(hr); + return unMethod == null ? null : new SymbolMethod(unMethod); + } + + public ISymbolNamespace[] GetNamespaces() { + uint numNss; + reader.GetNamespaces(0, out numNss, null); + var unNss = new ISymUnmanagedNamespace[numNss]; + reader.GetNamespaces((uint)unNss.Length, out numNss, unNss); + var nss = new ISymbolNamespace[numNss]; + for (uint i = 0; i < numNss; i++) + nss[i] = new SymbolNamespace(unNss[i]); + return nss; + } + + public byte[] GetSymAttribute(SymbolToken parent, string name) { + uint bufSize; + reader.GetSymAttribute((uint)parent.GetToken(), name, 0, out bufSize, null); + var buffer = new byte[bufSize]; + reader.GetSymAttribute((uint)parent.GetToken(), name, (uint)buffer.Length, out bufSize, buffer); + return buffer; + } + + public ISymbolVariable[] GetVariables(SymbolToken parent) { + uint numVars; + reader.GetVariables((uint)parent.GetToken(), 0, out numVars, null); + var unVars = new ISymUnmanagedVariable[numVars]; + reader.GetVariables((uint)parent.GetToken(), (uint)unVars.Length, out numVars, unVars); + var vars = new ISymbolVariable[numVars]; + for (uint i = 0; i < numVars; i++) + vars[i] = new SymbolVariable(unVars[i]); + return vars; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolReaderCreator.cs b/dnlib/DotNet/Pdb/Dss/SymbolReaderCreator.cs new file mode 100644 index 0000000..e71ab9e --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolReaderCreator.cs @@ -0,0 +1,245 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Diagnostics.SymbolStore; +using System.Runtime.InteropServices; +using System.Security; +using dnlib.DotNet.MD; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Pdb.Dss { + /// + /// Creates a instance + /// + public static class SymbolReaderCreator { + [DllImport("ole32")] + static extern int CoCreateInstance([In] ref Guid rclsid, IntPtr pUnkOuter, [In] uint dwClsContext, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.IUnknown)] out object ppv); + + static readonly Guid CLSID_CorSymBinder_SxS = new Guid(0x0A29FF9E, 0x7F9C, 0x4437, 0x8B, 0x11, 0xF4, 0x24, 0x49, 0x1E, 0x39, 0x31); + + /// + /// Creates a new instance + /// + /// Path to assembly + /// A new instance or null if there's no PDB + /// file on disk or if any of the COM methods fail. + public static ISymbolReader Create(string assemblyFileName) { + try { + object mdDispObj; + Guid CLSID_CorMetaDataDispenser = new Guid(0xE5CB7A31, 0x7512, 0x11D2, 0x89, 0xCE, 0x0, 0x80, 0xC7, 0x92, 0xE5, 0xD8); + Guid IID_IMetaDataDispenser = new Guid(0x809C652E, 0x7396, 0x11D2, 0x97, 0x71, 0x00, 0xA0, 0xC9, 0xB4, 0xD5, 0x0C); + int hr = CoCreateInstance(ref CLSID_CorMetaDataDispenser, IntPtr.Zero, 1, ref IID_IMetaDataDispenser, out mdDispObj); + if (hr < 0) + return null; + + object mdImportObj; + var mdDisp = (IMetaDataDispenser)mdDispObj; + Guid IID_IMetaDataImport = new Guid(0x7DAC8207, 0xD3AE, 0x4C75, 0x9B, 0x67, 0x92, 0x80, 0x1A, 0x49, 0x7D, 0x44); + mdDisp.OpenScope(assemblyFileName, 0, ref IID_IMetaDataImport, out mdImportObj); + Marshal.FinalReleaseComObject(mdDispObj); + + ISymUnmanagedReader symReader; + var binder = (ISymUnmanagedBinder)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_CorSymBinder_SxS)); + hr = binder.GetReaderForFile((IMetaDataImport)mdImportObj, assemblyFileName, null, out symReader); + Marshal.FinalReleaseComObject(mdImportObj); + Marshal.FinalReleaseComObject(binder); + if (hr >= 0) + return new SymbolReader(symReader); + } + catch (IOException) { + } + catch (UnauthorizedAccessException) { + } + catch (SecurityException) { + } + catch (InvalidCastException) { + } + catch (COMException) { + } + return null; + } + + static IImageStream OpenImageStream(string fileName) { + try { + if (!File.Exists(fileName)) + return null; + return ImageStreamCreator.CreateImageStream(fileName); + } + catch (IOException) { + } + catch (UnauthorizedAccessException) { + } + catch (SecurityException) { + } + return null; + } + + /// + /// Creates a new instance + /// + /// .NET metadata + /// Path to PDB file + /// A new instance or null if there's no PDB + /// file on disk or if any of the COM methods fail. + public static ISymbolReader Create(IMetaData metaData, string pdbFileName) { + var mdStream = CreateMetaDataStream(metaData); + try { + return Create(mdStream, OpenImageStream(pdbFileName)); + } + catch { + if (mdStream != null) + mdStream.Dispose(); + throw; + } + } + + /// + /// Creates a new instance + /// + /// .NET metadata + /// PDB file data + /// A new instance or null if any of the COM + /// methods fail. + public static ISymbolReader Create(IMetaData metaData, byte[] pdbData) { + if (pdbData == null) + return null; + var mdStream = CreateMetaDataStream(metaData); + try { + return Create(mdStream, MemoryImageStream.Create(pdbData)); + } + catch { + if (mdStream != null) + mdStream.Dispose(); + throw; + } + } + + /// + /// Creates a new instance + /// + /// .NET metadata + /// PDB file stream which is now owned by this method + /// A new instance or null if any of the COM + /// methods fail. + public static ISymbolReader Create(IMetaData metaData, IImageStream pdbStream) { + try { + return Create(CreateMetaDataStream(metaData), pdbStream); + } + catch { + if (pdbStream != null) + pdbStream.Dispose(); + throw; + } + } + + /// + /// Creates a new instance + /// + /// .NET metadata stream which is now owned by this method + /// Path to PDB file + /// A new instance or null if there's no PDB + /// file on disk or if any of the COM methods fail. + public static ISymbolReader Create(IImageStream mdStream, string pdbFileName) { + try { + return Create(mdStream, OpenImageStream(pdbFileName)); + } + catch { + if (mdStream != null) + mdStream.Dispose(); + throw; + } + } + + /// + /// Creates a new instance + /// + /// .NET metadata stream which is now owned by this method + /// PDB file data + /// A new instance or null if any of the COM + /// methods fail. + public static ISymbolReader Create(IImageStream mdStream, byte[] pdbData) { + if (pdbData == null) { + if (mdStream != null) + mdStream.Dispose(); + return null; + } + try { + return Create(mdStream, MemoryImageStream.Create(pdbData)); + } + catch { + if (mdStream != null) + mdStream.Dispose(); + throw; + } + } + + /// + /// Creates a new instance + /// + /// .NET metadata stream which is now owned by this method + /// PDB file stream which is now owned by this method + /// A new instance or null if any of the COM + /// methods fail. + public static ISymbolReader Create(IImageStream mdStream, IImageStream pdbStream) { + ImageStreamIStream stream = null; + PinnedMetaData pinnedMd = null; + bool error = true; + try { + if (pdbStream == null || mdStream == null) + return null; + + object mdDispObj; + Guid CLSID_CorMetaDataDispenser = new Guid(0xE5CB7A31, 0x7512, 0x11D2, 0x89, 0xCE, 0x0, 0x80, 0xC7, 0x92, 0xE5, 0xD8); + Guid IID_IMetaDataDispenser = new Guid(0x809C652E, 0x7396, 0x11D2, 0x97, 0x71, 0x00, 0xA0, 0xC9, 0xB4, 0xD5, 0x0C); + int hr = CoCreateInstance(ref CLSID_CorMetaDataDispenser, IntPtr.Zero, 1, ref IID_IMetaDataDispenser, out mdDispObj); + if (hr < 0) + return null; + + object mdImportObj; + var mdDisp = (IMetaDataDispenser)mdDispObj; + Guid IID_IMetaDataImport = new Guid(0x7DAC8207, 0xD3AE, 0x4C75, 0x9B, 0x67, 0x92, 0x80, 0x1A, 0x49, 0x7D, 0x44); + pinnedMd = new PinnedMetaData(mdStream); + mdDisp.OpenScopeOnMemory(pinnedMd.Address, (uint)pinnedMd.Size, 0x10, ref IID_IMetaDataImport, out mdImportObj); + Marshal.FinalReleaseComObject(mdDispObj); + + ISymUnmanagedReader symReader; + var binder = (ISymUnmanagedBinder)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_CorSymBinder_SxS)); + stream = new ImageStreamIStream(pdbStream, null) { UserData = pinnedMd }; + hr = binder.GetReaderFromStream((IMetaDataImport)mdImportObj, stream, out symReader); + Marshal.FinalReleaseComObject(mdImportObj); + Marshal.FinalReleaseComObject(binder); + if (hr >= 0) { + error = false; + return new SymbolReader(symReader); + } + } + catch (IOException) { + } + catch (InvalidCastException) { + } + catch (COMException) { + } + finally { + if (error) { + if (stream != null) + stream.Dispose(); + if (pinnedMd != null) + pinnedMd.Dispose(); + if (mdStream != null) + mdStream.Dispose(); + if (pdbStream != null) + pdbStream.Dispose(); + } + } + return null; + } + + static IImageStream CreateMetaDataStream(IMetaData metaData) { + var peImage = metaData.PEImage; + var mdDataDir = metaData.ImageCor20Header.MetaData; + return peImage.CreateStream(mdDataDir.VirtualAddress, mdDataDir.Size); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolScope.cs b/dnlib/DotNet/Pdb/Dss/SymbolScope.cs new file mode 100644 index 0000000..b15848f --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolScope.cs @@ -0,0 +1,78 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolScope : ISymbolScope { + readonly ISymUnmanagedScope scope; + + public SymbolScope(ISymUnmanagedScope scope) { + this.scope = scope; + } + + public int EndOffset { + get { + uint result; + scope.GetEndOffset(out result); + return (int)result; + } + } + + public ISymbolMethod Method { + get { + ISymUnmanagedMethod method; + scope.GetMethod(out method); + return method == null ? null : new SymbolMethod(method); + } + } + + public ISymbolScope Parent { + get { + ISymUnmanagedScope parentScope; + scope.GetParent(out parentScope); + return parentScope == null ? null : new SymbolScope(parentScope); + } + } + + public int StartOffset { + get { + uint result; + scope.GetStartOffset(out result); + return (int)result; + } + } + + public ISymbolScope[] GetChildren() { + uint numScopes; + scope.GetChildren(0, out numScopes, null); + var unScopes = new ISymUnmanagedScope[numScopes]; + scope.GetChildren((uint)unScopes.Length, out numScopes, unScopes); + var scopes = new ISymbolScope[numScopes]; + for (uint i = 0; i < numScopes; i++) + scopes[i] = new SymbolScope(unScopes[i]); + return scopes; + } + + public ISymbolVariable[] GetLocals() { + uint numVars; + scope.GetLocals(0, out numVars, null); + var unVars = new ISymUnmanagedVariable[numVars]; + scope.GetLocals((uint)unVars.Length, out numVars, unVars); + var vars = new ISymbolVariable[numVars]; + for (uint i = 0; i < numVars; i++) + vars[i] = new SymbolVariable(unVars[i]); + return vars; + } + + public ISymbolNamespace[] GetNamespaces() { + uint numNss; + scope.GetNamespaces(0, out numNss, null); + var unNss = new ISymUnmanagedNamespace[numNss]; + scope.GetNamespaces((uint)unNss.Length, out numNss, unNss); + var nss = new ISymbolNamespace[numNss]; + for (uint i = 0; i < numNss; i++) + nss[i] = new SymbolNamespace(unNss[i]); + return nss; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolVariable.cs b/dnlib/DotNet/Pdb/Dss/SymbolVariable.cs new file mode 100644 index 0000000..7baa488 --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolVariable.cs @@ -0,0 +1,89 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolVariable : ISymbolVariable { + readonly ISymUnmanagedVariable variable; + + public SymbolVariable(ISymUnmanagedVariable variable) { + this.variable = variable; + } + + public int AddressField1 { + get { + uint result; + variable.GetAddressField1(out result); + return (int)result; + } + } + + public int AddressField2 { + get { + uint result; + variable.GetAddressField2(out result); + return (int)result; + } + } + + public int AddressField3 { + get { + uint result; + variable.GetAddressField3(out result); + return (int)result; + } + } + + public SymAddressKind AddressKind { + get { + uint result; + variable.GetAddressKind(out result); + return (SymAddressKind)result; + } + } + + public object Attributes { + get { + uint result; + variable.GetAttributes(out result); + return (int)result; + } + } + + public int EndOffset { + get { + uint result; + variable.GetEndOffset(out result); + return (int)result; + } + } + + public string Name { + get { + uint count; + variable.GetName(0, out count, null); + var chars = new char[count]; + variable.GetName((uint)chars.Length, out count, chars); + if (chars.Length == 0) + return string.Empty; + return new string(chars, 0, chars.Length - 1); + } + } + + public int StartOffset { + get { + uint result; + variable.GetStartOffset(out result); + return (int)result; + } + } + + public byte[] GetSignature() { + uint bufSize; + variable.GetSignature(0, out bufSize, null); + var buffer = new byte[bufSize]; + variable.GetSignature((uint)buffer.Length, out bufSize, buffer); + return buffer; + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolWriter.cs b/dnlib/DotNet/Pdb/Dss/SymbolWriter.cs new file mode 100644 index 0000000..493153a --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolWriter.cs @@ -0,0 +1,182 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using dnlib.DotNet.Writer; + +namespace dnlib.DotNet.Pdb.Dss { + sealed class SymbolWriter : ISymbolWriter2 { + readonly ISymUnmanagedWriter2 writer; + readonly string pdbFileName; + readonly Stream pdbStream; + bool closeCalled; + + /// + /// Constructor + /// + /// Writer + /// PDB file name + public SymbolWriter(ISymUnmanagedWriter2 writer, string pdbFileName) { + if (writer == null) + throw new ArgumentNullException("writer"); + if (pdbFileName == null) + throw new ArgumentNullException("pdbFileName"); + this.writer = writer; + this.pdbFileName = pdbFileName; + } + + /// + /// Constructor + /// + /// Writer + /// PDB file name + /// PDB output stream + public SymbolWriter(ISymUnmanagedWriter2 writer, string pdbFileName, Stream pdbStream) { + if (writer == null) + throw new ArgumentNullException("writer"); + if (pdbStream == null) + throw new ArgumentNullException("pdbStream"); + this.writer = writer; + this.pdbStream = pdbStream; + this.pdbFileName = pdbFileName; + } + + public void Close() { + if (closeCalled) + return; + closeCalled = true; + writer.Close(); + } + + public void CloseMethod() { + writer.CloseMethod(); + } + + public void CloseNamespace() { + writer.CloseNamespace(); + } + + public void CloseScope(int endOffset) { + writer.CloseScope((uint)endOffset); + } + + public ISymbolDocumentWriter DefineDocument(string url, Guid language, Guid languageVendor, Guid documentType) { + ISymUnmanagedDocumentWriter unDocWriter; + writer.DefineDocument(url, ref language, ref languageVendor, ref documentType, out unDocWriter); + return unDocWriter == null ? null : new SymbolDocumentWriter(unDocWriter); + } + + public void DefineField(SymbolToken parent, string name, System.Reflection.FieldAttributes attributes, byte[] signature, SymAddressKind addrKind, int addr1, int addr2, int addr3) { + writer.DefineField((uint)parent.GetToken(), name, (uint)attributes, (uint)signature.Length, signature, (uint)addrKind, (uint)addr1, (uint)addr2, (uint)addr3); + } + + public void DefineGlobalVariable(string name, System.Reflection.FieldAttributes attributes, byte[] signature, SymAddressKind addrKind, int addr1, int addr2, int addr3) { + writer.DefineGlobalVariable(name, (uint)attributes, (uint)signature.Length, signature, (uint)addrKind, (uint)addr1, (uint)addr2, (uint)addr3); + } + + public void DefineLocalVariable(string name, System.Reflection.FieldAttributes attributes, byte[] signature, SymAddressKind addrKind, int addr1, int addr2, int addr3, int startOffset, int endOffset) { + writer.DefineLocalVariable(name, (uint)attributes, (uint)signature.Length, signature, (uint)addrKind, (uint)addr1, (uint)addr2, (uint)addr3, (uint)startOffset, (uint)endOffset); + } + + public void DefineParameter(string name, ParameterAttributes attributes, int sequence, SymAddressKind addrKind, int addr1, int addr2, int addr3) { + writer.DefineParameter(name, (uint)attributes, (uint)sequence, (uint)addrKind, (uint)addr1, (uint)addr2, (uint)addr3); + } + + public void DefineSequencePoints(ISymbolDocumentWriter document, int[] offsets, int[] lines, int[] columns, int[] endLines, int[] endColumns) { + var doc = document as SymbolDocumentWriter; + if (doc == null) + throw new ArgumentException("document isn't a non-null SymbolDocumentWriter instance"); + if (offsets == null || lines == null || columns == null || + endLines == null || endColumns == null || + offsets.Length != lines.Length || + offsets.Length != columns.Length || + offsets.Length != endLines.Length || + offsets.Length != endColumns.Length) + throw new ArgumentException("Invalid arrays"); + writer.DefineSequencePoints(doc.SymUnmanagedDocumentWriter, (uint)offsets.Length, offsets, lines, columns, endLines, endColumns); + } + + public void DefineSequencePoints(ISymbolDocumentWriter document, uint arraySize, int[] offsets, int[] lines, int[] columns, int[] endLines, int[] endColumns) { + var doc = document as SymbolDocumentWriter; + if (doc == null) + throw new ArgumentException("document isn't a non-null SymbolDocumentWriter instance"); + writer.DefineSequencePoints(doc.SymUnmanagedDocumentWriter, arraySize, offsets, lines, columns, endLines, endColumns); + } + + public void Initialize(IntPtr emitter, string filename, bool fFullBuild) { + writer.Initialize(emitter, filename, null, fFullBuild); + } + + public void OpenMethod(SymbolToken method) { + writer.OpenMethod((uint)method.GetToken()); + } + + public void OpenNamespace(string name) { + writer.OpenNamespace(name); + } + + public int OpenScope(int startOffset) { + uint result; + writer.OpenScope((uint)startOffset, out result); + return (int)result; + } + + public void SetMethodSourceRange(ISymbolDocumentWriter startDoc, int startLine, int startColumn, ISymbolDocumentWriter endDoc, int endLine, int endColumn) { + var sdoc = startDoc as SymbolDocumentWriter; + if (sdoc == null) + throw new ArgumentException("startDoc isn't a non-null SymbolDocumentWriter instance"); + var edoc = endDoc as SymbolDocumentWriter; + if (edoc == null) + throw new ArgumentException("endDoc isn't a non-null SymbolDocumentWriter instance"); + writer.SetMethodSourceRange(sdoc.SymUnmanagedDocumentWriter, (uint)startLine, (uint)startColumn, edoc.SymUnmanagedDocumentWriter, (uint)endLine, (uint)endColumn); + } + + public void SetScopeRange(int scopeID, int startOffset, int endOffset) { + writer.SetScopeRange((uint)scopeID, (uint)startOffset, (uint)endOffset); + } + + public void SetSymAttribute(SymbolToken parent, string name, byte[] data) { + writer.SetSymAttribute((uint)parent.GetToken(), name, (uint)data.Length, data); + } + + public void SetUnderlyingWriter(IntPtr underlyingWriter) { + throw new NotSupportedException(); + } + + public void SetUserEntryPoint(SymbolToken entryMethod) { + writer.SetUserEntryPoint((uint)entryMethod.GetToken()); + } + + public void UsingNamespace(string fullName) { + writer.UsingNamespace(fullName); + } + + public byte[] GetDebugInfo(out IMAGE_DEBUG_DIRECTORY pIDD) { + uint size; + writer.GetDebugInfo(out pIDD, 0, out size, null); + var buffer = new byte[size]; + writer.GetDebugInfo(out pIDD, size, out size, buffer); + return buffer; + } + + public void DefineLocalVariable2(string name, uint attributes, uint sigToken, uint addrKind, uint addr1, uint addr2, uint addr3, uint startOffset, uint endOffset) { + writer.DefineLocalVariable2(name, attributes, sigToken, addrKind, addr1, addr2, addr3, startOffset, endOffset); + } + + public void Initialize(MetaData metaData) { + if (pdbStream != null) + writer.Initialize(new MDEmitter(metaData), pdbFileName, new StreamIStream(pdbStream), true); + else if (!string.IsNullOrEmpty(pdbFileName)) + writer.Initialize(new MDEmitter(metaData), pdbFileName, null, true); + else + throw new InvalidOperationException(); + } + + public void Dispose() { + Marshal.FinalReleaseComObject(writer); + } + } +} diff --git a/dnlib/DotNet/Pdb/Dss/SymbolWriterCreator.cs b/dnlib/DotNet/Pdb/Dss/SymbolWriterCreator.cs new file mode 100644 index 0000000..fcb965a --- /dev/null +++ b/dnlib/DotNet/Pdb/Dss/SymbolWriterCreator.cs @@ -0,0 +1,42 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; + +namespace dnlib.DotNet.Pdb.Dss { + /// + /// Creates a + /// + public static class SymbolWriterCreator { + static readonly Guid CLSID_CorSymWriter_SxS = new Guid(0x0AE2DEB0, 0xF901, 0x478B, 0xBB, 0x9F, 0x88, 0x1E, 0xE8, 0x06, 0x67, 0x88); + + /// + /// Creates a instance + /// + /// A new instance + public static ISymUnmanagedWriter2 CreateSymUnmanagedWriter2() { + return (ISymUnmanagedWriter2)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_CorSymWriter_SxS)); + } + + /// + /// Creates a new instance + /// + /// PDB file name + /// A new instance + public static ISymbolWriter2 Create(string pdbFileName) { + if (File.Exists(pdbFileName)) + File.Delete(pdbFileName); + return new SymbolWriter(CreateSymUnmanagedWriter2(), pdbFileName); + } + + /// + /// Creates a new instance + /// + /// PDB output stream + /// PDB file name + /// A new instance + public static ISymbolWriter2 Create(Stream pdbStream, string pdbFileName) { + return new SymbolWriter(CreateSymUnmanagedWriter2(), pdbFileName, pdbStream); + } + } +} diff --git a/dnlib/DotNet/Pdb/ISymbolWriter2.cs b/dnlib/DotNet/Pdb/ISymbolWriter2.cs new file mode 100644 index 0000000..8f33ce3 --- /dev/null +++ b/dnlib/DotNet/Pdb/ISymbolWriter2.cs @@ -0,0 +1,70 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using dnlib.DotNet.Writer; + +namespace dnlib.DotNet.Pdb { + /// + /// IMAGE_DEBUG_DIRECTORY + /// + public struct IMAGE_DEBUG_DIRECTORY { +#pragma warning disable 1591 + public uint Characteristics; + public uint TimeDateStamp; + public ushort MajorVersion; + public ushort MinorVersion; + public uint Type; + public uint SizeOfData; + public uint AddressOfRawData; + public uint PointerToRawData; +#pragma warning restore 1591 + } + + /// + /// Implements and adds a few extra methods we need that are part of + /// ISymUnmanagedWriter and ISymUnmanagedWriter2 but not present in + /// . + /// + public interface ISymbolWriter2 : ISymbolWriter, IDisposable { + /// + /// Same as except that this method has an + /// extra that specifies the size of all the arrays. + /// + /// Document + /// Size of the arrays + /// Offsets + /// Start lines + /// Start columns + /// End lines + /// End columns + void DefineSequencePoints(ISymbolDocumentWriter document, uint arraySize, int[] offsets, int[] lines, int[] columns, int[] endLines, int[] endColumns); + + /// + /// Gets debug info. See ISymUnmanagedWriter.GetDebugInfo() + /// + /// Updated by writer + /// Debug data for the symbol store + byte[] GetDebugInfo(out IMAGE_DEBUG_DIRECTORY pIDD); + + /// + /// Define a local. See ISymUnmanagedWriter2.DefineLocalVariable2() + /// + /// Name + /// Attributes + /// Signature token + /// Address kind + /// Address #1 + /// Address #2 + /// Address #3 + /// Start offset + /// End offset + void DefineLocalVariable2(string name, uint attributes, uint sigToken, uint addrKind, uint addr1, uint addr2, uint addr3, uint startOffset, uint endOffset); + + /// + /// Initializes this instance. This must be called before any other method. + /// + /// Metadata + void Initialize(MetaData metaData); + } +} diff --git a/dnlib/DotNet/Pdb/Managed/DbiDocument.cs b/dnlib/DotNet/Pdb/Managed/DbiDocument.cs new file mode 100644 index 0000000..1e0f8fb --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiDocument.cs @@ -0,0 +1,79 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class DbiDocument : ISymbolDocument { + public string URL { get; private set; } + public Guid Language { get; private set; } + public Guid LanguageVendor { get; private set; } + public Guid DocumentType { get; private set; } + public Guid CheckSumAlgorithmId { get; private set; } + public byte[] CheckSum { get; private set; } + + public DbiDocument(string url) { + URL = url; + DocumentType = SymDocumentType.Text; + } + + public void Read(IImageStream stream) { + stream.Position = 0; + Language = new Guid(stream.ReadBytes(0x10)); + LanguageVendor = new Guid(stream.ReadBytes(0x10)); + DocumentType = new Guid(stream.ReadBytes(0x10)); + CheckSumAlgorithmId = new Guid(stream.ReadBytes(0x10)); + + var len = stream.ReadInt32(); + if (stream.ReadUInt32() != 0) + throw new PdbException("Unexpected value"); + + CheckSum = stream.ReadBytes(len); + } + + #region ISymbolDocument + + Guid ISymbolDocument.CheckSumAlgorithmId { + get { return CheckSumAlgorithmId; } + } + + Guid ISymbolDocument.DocumentType { + get { return DocumentType; } + } + + byte[] ISymbolDocument.GetCheckSum() { + return CheckSum; + } + + Guid ISymbolDocument.Language { + get { return Language; } + } + + Guid ISymbolDocument.LanguageVendor { + get { return LanguageVendor; } + } + + string ISymbolDocument.URL { + get { return URL; } + } + + int ISymbolDocument.FindClosestLine(int line) { + throw new NotImplementedException(); + } + + byte[] ISymbolDocument.GetSourceRange(int startLine, int startColumn, int endLine, int endColumn) { + throw new NotImplementedException(); + } + + bool ISymbolDocument.HasEmbeddedSource { + get { throw new NotImplementedException(); } + } + + int ISymbolDocument.SourceLength { + get { throw new NotImplementedException(); } + } + + #endregion + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/DbiFunction.cs b/dnlib/DotNet/Pdb/Managed/DbiFunction.cs new file mode 100644 index 0000000..b61a125 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiFunction.cs @@ -0,0 +1,116 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class DbiFunction : ISymbolMethod { + public uint Token { get; internal set; } + public string Name { get; private set; } + public PdbAddress Address { get; private set; } + public DbiScope Root { get; private set; } + public IList Lines { get; internal set; } + + public void Read(IImageStream stream, long recEnd) { + stream.Position += 4; + var end = stream.ReadUInt32(); + stream.Position += 4; + var len = stream.ReadUInt32(); + stream.Position += 8; + Token = stream.ReadUInt32(); + Address = PdbAddress.ReadAddress(stream); + stream.Position += 1 + 2; + Name = PdbReader.ReadCString(stream); + + stream.Position = recEnd; + Root = new DbiScope("", Address.Offset, len); + Root.Read(new RecursionCounter(), stream, end); + FixOffsets(new RecursionCounter(), Root); + } + + void FixOffsets(RecursionCounter counter, DbiScope scope) { + if (!counter.Increment()) + return; + + scope.BeginOffset -= Address.Offset; + scope.EndOffset -= Address.Offset; + foreach (var child in scope.Children) + FixOffsets(counter, child); + + counter.Decrement(); + } + + #region ISymbolMethod + + ISymbolScope ISymbolMethod.RootScope { + get { return Root; } + } + + int ISymbolMethod.SequencePointCount { + get { return Lines == null ? 0 : Lines.Count; } + } + + void ISymbolMethod.GetSequencePoints(int[] offsets, ISymbolDocument[] documents, int[] lines, int[] columns, + int[] endLines, int[] endColumns) { + int count = Lines == null ? 0 : Lines.Count; + if (offsets != null && offsets.Length != count) + throw new ArgumentException("Invalid array length: offsets"); + if (documents != null && documents.Length != count) + throw new ArgumentException("Invalid array length: documents"); + if (lines != null && lines.Length != count) + throw new ArgumentException("Invalid array length: lines"); + if (columns != null && columns.Length != count) + throw new ArgumentException("Invalid array length: columns"); + if (endLines != null && endLines.Length != count) + throw new ArgumentException("Invalid array length: endLines"); + if (endColumns != null && endColumns.Length != count) + throw new ArgumentException("Invalid array length: endColumns"); + + if (count <= 0) + return; + + int i = 0; + foreach (var line in Lines) { + offsets[i] = (int)line.Offset; + documents[i] = line.Document; + lines[i] = (int)line.LineBegin; + columns[i] = (int)line.ColumnBegin; + endLines[i] = (int)line.LineEnd; + endColumns[i] = (int)line.ColumnEnd; + i++; + } + } + + ISymbolNamespace ISymbolMethod.GetNamespace() { + throw new NotImplementedException(); + } + + int ISymbolMethod.GetOffset(ISymbolDocument document, int line, int column) { + throw new NotImplementedException(); + } + + ISymbolVariable[] ISymbolMethod.GetParameters() { + throw new NotImplementedException(); + } + + int[] ISymbolMethod.GetRanges(ISymbolDocument document, int line, int column) { + throw new NotImplementedException(); + } + + ISymbolScope ISymbolMethod.GetScope(int offset) { + throw new NotImplementedException(); + } + + bool ISymbolMethod.GetSourceStartEnd(ISymbolDocument[] docs, int[] lines, int[] columns) { + throw new NotImplementedException(); + } + + SymbolToken ISymbolMethod.Token { + get { throw new NotImplementedException(); } + } + + #endregion + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/DbiModule.cs b/dnlib/DotNet/Pdb/Managed/DbiModule.cs new file mode 100644 index 0000000..8fabb95 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiModule.cs @@ -0,0 +1,211 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class DbiModule { + public DbiModule() { + Functions = new List(); + Documents = new List(); + } + + public ushort StreamId { get; private set; } + uint cbSyms; + uint cbOldLines; + uint cbLines; + + public string ModuleName { get; private set; } + public string ObjectName { get; private set; } + + public IList Functions { get; private set; } + public IList Documents { get; private set; } + + public void Read(IImageStream stream) { + stream.Position += 34; + StreamId = stream.ReadUInt16(); + cbSyms = stream.ReadUInt32(); + cbOldLines = stream.ReadUInt32(); + cbLines = stream.ReadUInt32(); + stream.Position += 16; + + if ((int)cbSyms < 0) + cbSyms = 0; + if ((int)cbOldLines < 0) + cbOldLines = 0; + if ((int)cbLines < 0) + cbLines = 0; + + ModuleName = PdbReader.ReadCString(stream); + ObjectName = PdbReader.ReadCString(stream); + + stream.Position = (stream.Position + 3) & (~3); + } + + public void LoadFunctions(PdbReader reader, IImageStream stream) { + stream.Position = 0; + using (var substream = stream.Create(stream.FileOffset + stream.Position, cbSyms)) + ReadFunctions(substream); + + if (Functions.Count > 0) { + stream.Position += cbSyms + cbOldLines; + using (var substream = stream.Create(stream.FileOffset + stream.Position, cbLines)) + ReadLines(reader, substream); + } + } + + void ReadFunctions(IImageStream stream) { + if (stream.ReadUInt32() != 4) + throw new PdbException("Invalid signature"); + + while (stream.Position < stream.Length) { + var size = stream.ReadUInt16(); + var begin = stream.Position; + var end = begin + size; + + var type = (SymbolType)stream.ReadUInt16(); + switch (type) { + case SymbolType.S_GMANPROC: + case SymbolType.S_LMANPROC: + var func = new DbiFunction(); + func.Read(stream, end); + Functions.Add(func); + break; + default: + stream.Position = end; + break; + } + } + } + + void ReadLines(PdbReader reader, IImageStream stream) { + var docs = new Dictionary(); + + stream.Position = 0; + while (stream.Position < stream.Length) { + var sig = (ModuleStreamType)stream.ReadUInt32(); + var size = stream.ReadUInt32(); + var begin = stream.Position; + var end = (begin + size + 3) & ~3; + + if (sig == ModuleStreamType.FileInfo) + ReadFiles(reader, docs, stream, end); + + stream.Position = end; + } + + var sortedFuncs = new DbiFunction[Functions.Count]; + Functions.CopyTo(sortedFuncs, 0); + Array.Sort(sortedFuncs, (a, b) => a.Address.CompareTo(b.Address)); + + stream.Position = 0; + while (stream.Position < stream.Length) { + var sig = (ModuleStreamType)stream.ReadUInt32(); + var size = stream.ReadUInt32(); + var begin = stream.Position; + var end = begin + size; + + if (sig == ModuleStreamType.Lines) + ReadLines(sortedFuncs, docs, stream, end); + + stream.Position = end; + } + } + + void ReadFiles(PdbReader reader, Dictionary documents, IImageStream stream, long end) { + var begin = stream.Position; + while (stream.Position < end) { + var id = stream.Position - begin; + + var nameId = stream.ReadUInt32(); + var len = stream.ReadByte(); + var type = stream.ReadByte(); + var doc = reader.GetDocument(nameId); + documents.Add(id, doc); + + stream.Position += len; + stream.Position = (stream.Position + 3) & (~3); + } + } + + void ReadLines(DbiFunction[] funcs, Dictionary documents, IImageStream stream, long end) { + var address = PdbAddress.ReadAddress(stream); + + int first = 0; + int last = funcs.Length - 1; + int found = -1; + while (first <= last) { + var index = first + ((last - first) >> 1); + var addr = funcs[index].Address; + if (addr < address) { + first = index + 1; + } + else if (addr > address) { + last = index - 1; + } + else { + found = index; + break; + } + } + if (found == -1) + return; + + var flags = stream.ReadUInt16(); + stream.Position += 4; + + if (funcs[found].Lines == null) { + while (found > 0) { + var prevFunc = funcs[found - 1]; + if (prevFunc != null || prevFunc.Address != address) + break; + found--; + } + } + else { + while (found < funcs.Length - 1 && funcs[found] != null) { + var nextFunc = funcs[found + 1]; + if (nextFunc.Address != address) + break; + found++; + } + } + var func = funcs[found]; + if (func.Lines != null) + return; + func.Lines = new List(); + + while (stream.Position < end) { + var document = documents[stream.ReadUInt32()]; + var count = stream.ReadUInt32(); + stream.Position += 4; + + const int LINE_ENTRY_SIZE = 8; + const int COL_ENTRY_SIZE = 4; + var lineTablePos = stream.Position; + var colTablePos = stream.Position + count * LINE_ENTRY_SIZE; + + for (uint i = 0; i < count; i++) { + stream.Position = lineTablePos + i * LINE_ENTRY_SIZE; + + var line = new DbiSourceLine { + Document = document + }; + line.Offset = stream.ReadUInt32(); + var lineFlags = stream.ReadUInt32(); + + line.LineBegin = lineFlags & 0x00ffffff; + line.LineEnd = line.LineBegin + ((lineFlags >> 24) & 0x7F); + if ((flags & 1) != 0) { + stream.Position = colTablePos + i * COL_ENTRY_SIZE; + line.ColumnBegin = stream.ReadUInt16(); + line.ColumnEnd = stream.ReadUInt16(); + } + + func.Lines.Add(line); + } + } + } + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/DbiNamespace.cs b/dnlib/DotNet/Pdb/Managed/DbiNamespace.cs new file mode 100644 index 0000000..8bcd235 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiNamespace.cs @@ -0,0 +1,30 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class DbiNamespace : ISymbolNamespace { + public string Namespace { get; private set; } + + public DbiNamespace(string ns) { + Namespace = ns; + } + + #region ISymbolNamespace + + public string Name { + get { return Namespace; } + } + + public ISymbolNamespace[] GetNamespaces() { + throw new NotImplementedException(); + } + + public ISymbolVariable[] GetVariables() { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/DbiScope.cs b/dnlib/DotNet/Pdb/Managed/DbiScope.cs new file mode 100644 index 0000000..5a1cdb0 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiScope.cs @@ -0,0 +1,115 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.SymbolStore; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class DbiScope : ISymbolScope { + public DbiScope(string name, uint offset, uint length) { + Name = name; + BeginOffset = offset; + EndOffset = offset + length; + + Namespaces = new List(); + Variables = new List(); + Children = new List(); + } + + public string Name { get; private set; } + public uint BeginOffset { get; internal set; } + public uint EndOffset { get; internal set; } + + public IList Namespaces { get; private set; } + public IList Variables { get; private set; } + public IList Children { get; private set; } + + public void Read(RecursionCounter counter, IImageStream stream, uint scopeEnd) { + if (!counter.Increment()) + throw new PdbException("Scopes too deep"); + + while (stream.Position < scopeEnd) { + var size = stream.ReadUInt16(); + var begin = stream.Position; + var end = begin + size; + + var type = (SymbolType)stream.ReadUInt16(); + DbiScope child = null; + uint? childEnd = null; + switch (type) { + case SymbolType.S_BLOCK32: { + stream.Position += 4; + childEnd = stream.ReadUInt32(); + var len = stream.ReadUInt32(); + var addr = PdbAddress.ReadAddress(stream); + var name = PdbReader.ReadCString(stream); + child = new DbiScope(name, addr.Offset, len); + break; + } + case SymbolType.S_UNAMESPACE: + Namespaces.Add(new DbiNamespace(PdbReader.ReadCString(stream))); + break; + case SymbolType.S_MANSLOT: { + var variable = new DbiVariable(); + variable.Read(stream); + Variables.Add(variable); + break; + } + } + + stream.Position = end; + if (child != null) { + child.Read(counter, stream, childEnd.Value); + Children.Add(child); + child = null; + } + } + counter.Decrement(); + if (stream.Position != scopeEnd) + Debugger.Break(); + } + + #region ISymbolScope + + int ISymbolScope.StartOffset { + get { return (int)BeginOffset; } + } + + int ISymbolScope.EndOffset { + get { return (int)EndOffset; } + } + + ISymbolScope[] ISymbolScope.GetChildren() { + var scopes = new ISymbolScope[Children.Count]; + for (int i = 0; i < scopes.Length; i++) + scopes[i] = Children[i]; + return scopes; + } + + ISymbolVariable[] ISymbolScope.GetLocals() { + var vars = new ISymbolVariable[Variables.Count]; + for (int i = 0; i < vars.Length; i++) + vars[i] = Variables[i]; + return vars; + } + + ISymbolNamespace[] ISymbolScope.GetNamespaces() { + var nss = new ISymbolNamespace[Namespaces.Count]; + for (int i = 0; i < nss.Length; i++) + nss[i] = Namespaces[i]; + return nss; + } + + ISymbolMethod ISymbolScope.Method { + get { throw new NotImplementedException(); } + } + + ISymbolScope ISymbolScope.Parent { + get { throw new NotImplementedException(); } + } + + #endregion + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/DbiSourceLine.cs b/dnlib/DotNet/Pdb/Managed/DbiSourceLine.cs new file mode 100644 index 0000000..3a5aea9 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiSourceLine.cs @@ -0,0 +1,12 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Pdb.Managed { + struct DbiSourceLine { + public DbiDocument Document; + public uint Offset; + public uint LineBegin; + public uint LineEnd; + public uint ColumnBegin; + public uint ColumnEnd; + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/DbiVariable.cs b/dnlib/DotNet/Pdb/Managed/DbiVariable.cs new file mode 100644 index 0000000..e3b886b --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/DbiVariable.cs @@ -0,0 +1,63 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class DbiVariable : ISymbolVariable { + public uint Addr1 { get; private set; } + public string Name { get; private set; } + public ushort Flags { get; private set; } + + public void Read(IImageStream stream) { + Addr1 = stream.ReadUInt32(); + stream.Position += 10; + Flags = stream.ReadUInt16(); + Name = PdbReader.ReadCString(stream); + } + + #region ISymbolVariable + + public int AddressField1 { + get { return (int)Addr1; } + } + + public SymAddressKind AddressKind { + get { return SymAddressKind.ILOffset; } + } + + public object Attributes { + get { + const int fCompGenx = 4; + const int VAR_IS_COMP_GEN = 1; + if ((Flags & fCompGenx) != 0) + return VAR_IS_COMP_GEN; + else + return 0; + } + } + + public int AddressField2 { + get { throw new NotImplementedException(); } + } + + public int AddressField3 { + get { throw new NotImplementedException(); } + } + + public int EndOffset { + get { throw new NotImplementedException(); } + } + + public byte[] GetSignature() { + throw new NotImplementedException(); + } + + public int StartOffset { + get { throw new NotImplementedException(); } + } + + #endregion + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/ModuleStreamType.cs b/dnlib/DotNet/Pdb/Managed/ModuleStreamType.cs new file mode 100644 index 0000000..4354af4 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/ModuleStreamType.cs @@ -0,0 +1,18 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Pdb.Managed { + enum ModuleStreamType : uint { + Symbols = 0xF1, + Lines = 0xF2, + StringTable = 0xF3, + FileInfo = 0xF4, + FrameData = 0xF5, + InlineeLines = 0xF6, + CrossScopeImports = 0xF7, + CrossScopeExports = 0xF8, + ILLines = 0xF9, + FuncMDTokenMap = 0xFA, + TypeMDTokenMap = 0xFB, + MergedAssemblyInput = 0xFC, + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/MsfStream.cs b/dnlib/DotNet/Pdb/Managed/MsfStream.cs new file mode 100644 index 0000000..0ada419 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/MsfStream.cs @@ -0,0 +1,21 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + sealed class MsfStream { + public MsfStream(IImageStream[] pages, uint length) { + byte[] buf = new byte[length]; + int offset = 0; + foreach (var page in pages) { + page.Position = 0; + int len = Math.Min((int)page.Length, (int)(length - offset)); + offset += page.Read(buf, offset, len); + } + Content = new MemoryImageStream(0, buf, 0, buf.Length); + } + + public IImageStream Content { get; set; } + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/PdbAddress.cs b/dnlib/DotNet/Pdb/Managed/PdbAddress.cs new file mode 100644 index 0000000..1c884c4 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/PdbAddress.cs @@ -0,0 +1,163 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + /// + /// An address in the image + /// + [DebuggerDisplay("{Section}:{Offset}")] + struct PdbAddress : IEquatable, IComparable { + /// + /// Section + /// + public readonly ushort Section; + + /// + /// Offset in + /// + public readonly uint Offset; + + /// + /// Constructor + /// + /// Section + /// Offset in + public PdbAddress(ushort section, int offset) { + this.Section = section; + this.Offset = (uint)offset; + } + + /// + /// Constructor + /// + /// Section + /// Offset in + public PdbAddress(ushort section, uint offset) { + this.Section = section; + this.Offset = offset; + } + + /// + /// Returns true if is less than or equal to + /// + /// First + /// Second + /// + public static bool operator <=(PdbAddress a, PdbAddress b) { + return a.CompareTo(b) <= 0; + } + + /// + /// Returns true if is less than + /// + /// First + /// Second + /// + public static bool operator <(PdbAddress a, PdbAddress b) { + return a.CompareTo(b) < 0; + } + + /// + /// Returns true if is greater than or equal to + /// + /// First + /// Second + /// + public static bool operator >=(PdbAddress a, PdbAddress b) { + return a.CompareTo(b) >= 0; + } + + /// + /// Returns true if is greater than + /// + /// First + /// Second + /// + public static bool operator >(PdbAddress a, PdbAddress b) { + return a.CompareTo(b) > 0; + } + + /// + /// Returns true if is equal to + /// + /// First + /// Second + /// + public static bool operator ==(PdbAddress a, PdbAddress b) { + return a.Equals(b); + } + + /// + /// Returns true if is not equal to + /// + /// First + /// Second + /// + public static bool operator !=(PdbAddress a, PdbAddress b) { + return !a.Equals(b); + } + + /// + /// Compares this instance with and returns less than 0 if it's + /// less than , 0 if it's equal to and + /// greater than 0 if it's greater than + /// + /// Other instance + /// + public int CompareTo(PdbAddress other) { + if (Section != other.Section) + return Section.CompareTo(other.Section); + return Offset.CompareTo(other.Offset); + } + + /// + /// Compares this to another instance + /// + /// The other one + /// true if they're equal + public bool Equals(PdbAddress other) { + return Section == other.Section && + Offset == other.Offset; + } + + /// + /// Compares this to another instance + /// + /// The other one + /// true if they're equal + public override bool Equals(object obj) { + if (!(obj is PdbAddress)) + return false; + return Equals((PdbAddress)obj); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() { + return (Section << 16) ^ (int)Offset; + } + + /// + /// ToString() override + /// + /// + public override string ToString() { + return string.Format("{0:X4}:{1:X8}", Section, Offset); + } + + /// + /// Reads a 32-bit offset followed by a 16-bit section and creates a new + /// + /// Reader + /// + public static PdbAddress ReadAddress(IBinaryReader reader) { + uint offs = reader.ReadUInt32(); + return new PdbAddress(reader.ReadUInt16(), offs); + } + } +} diff --git a/dnlib/DotNet/Pdb/Managed/PdbException.cs b/dnlib/DotNet/Pdb/Managed/PdbException.cs new file mode 100644 index 0000000..74bd308 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/PdbException.cs @@ -0,0 +1,27 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.Pdb.Managed { + /// + /// Exception that is thrown when encounters an error. + /// + [Serializable] + public sealed class PdbException : Exception { + /// + /// Constructor + /// + /// Exception message + public PdbException(string message) + : base("Failed to read PDB: " + message) { + } + + /// + /// Constructor + /// + /// Inner exception + public PdbException(Exception innerException) + : base("Failed to read PDB: " + innerException.Message, innerException) { + } + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/PdbReader.cs b/dnlib/DotNet/Pdb/Managed/PdbReader.cs new file mode 100644 index 0000000..99cfd00 --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/PdbReader.cs @@ -0,0 +1,360 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using System.Text; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + /// + /// A managed PDB reader implementation for .NET modules. + /// + public sealed class PdbReader : ISymbolReader { + MsfStream[] streams; + Dictionary names; + Dictionary strings; + List modules; + + const int STREAM_ROOT = 0; + const int STREAM_NAMES = 1; + const int STREAM_TPI = 2; + const int STREAM_DBI = 3; + const ushort STREAM_INVALID_INDEX = ushort.MaxValue; + + Dictionary documents; + Dictionary functions; + uint entryPt; + + /// + /// The age of PDB file. + /// + public uint Age { get; private set; } + /// + /// The GUID of PDB file. + /// + public Guid Guid { get; private set; } + + /// + /// Read the PDB in the specified stream. + /// + /// The stream that contains the PDB file + public void Read(IImageStream stream) { + try { + ReadInternal(stream); + } + catch (Exception ex) { + if (ex is PdbException) + throw; + throw new PdbException(ex); + } + finally { + streams = null; + names = null; + strings = null; + modules = null; + } + } + + static uint RoundUpDiv(uint value, uint divisor) { + return (value + divisor - 1) / divisor; + } + + void ReadInternal(IImageStream stream) { + stream.Position = 0; + string sig = Encoding.ASCII.GetString(stream.ReadBytes(30)); + if (sig != "Microsoft C/C++ MSF 7.00\r\n\u001ADS\0") + throw new PdbException("Invalid signature"); + stream.Position += 2; + + uint pageSize = stream.ReadUInt32(); + uint fpm = stream.ReadUInt32(); + uint pageCount = stream.ReadUInt32(); + uint rootSize = stream.ReadUInt32(); + stream.ReadUInt32(); + var numOfRootPages = RoundUpDiv(rootSize, pageSize); + var numOfPtrPages = RoundUpDiv(numOfRootPages * 4, pageSize); + if (pageCount * pageSize != stream.Length) + throw new PdbException("File size mismatch"); + + var pages = new IImageStream[pageCount]; + try { + FileOffset offset = 0; + for (uint i = 0; i < pageCount; i++) { + pages[i] = stream.Create(offset, pageSize); + offset += pageSize; + } + + var rootPages = new IImageStream[numOfRootPages]; + int pageIndex = 0; + for (int i = 0; i < numOfPtrPages && pageIndex < numOfRootPages; i++) { + var ptrPage = pages[stream.ReadUInt32()]; + ptrPage.Position = 0; + for (; ptrPage.Position < ptrPage.Length && pageIndex < numOfRootPages; pageIndex++) + rootPages[pageIndex] = pages[ptrPage.ReadUInt32()]; + } + + ReadRootDirectory(new MsfStream(rootPages, rootSize), pages, pageSize); + } + finally { + foreach (var page in pages) { + if (page != null) + page.Dispose(); + } + } + + ReadNames(); + ReadStringTable(); + var tokenMapStream = ReadModules(); + + documents = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var module in modules) + if (IsValidStreamIndex(module.StreamId)) + module.LoadFunctions(this, streams[module.StreamId].Content); + + if (IsValidStreamIndex(tokenMapStream ?? STREAM_INVALID_INDEX)) + ApplyRidMap(streams[tokenMapStream.Value].Content); + + functions = new Dictionary(); + foreach (var module in modules) + foreach (var func in module.Functions) { + functions.Add(func.Token, func); + } + } + + bool IsValidStreamIndex(ushort index) { + return index != STREAM_INVALID_INDEX && index < streams.Length; + } + + void ReadRootDirectory(MsfStream stream, IImageStream[] pages, uint pageSize) { + uint streamNum = stream.Content.ReadUInt32(); + uint[] streamSizes = new uint[streamNum]; + for (int i = 0; i < streamSizes.Length; i++) + streamSizes[i] = stream.Content.ReadUInt32(); + + streams = new MsfStream[streamNum]; + for (int i = 0; i < streamSizes.Length; i++) { + if (streamSizes[i] == 0xffffffff) { + streams[i] = null; + continue; + } + var pageCount = RoundUpDiv(streamSizes[i], pageSize); + var streamPages = new IImageStream[pageCount]; + for (int j = 0; j < streamPages.Length; j++) + streamPages[j] = pages[stream.Content.ReadUInt32()]; + streams[i] = new MsfStream(streamPages, streamSizes[i]); + } + } + + void ReadNames() { + var stream = streams[STREAM_NAMES].Content; + stream.Position = 8; + Age = stream.ReadUInt32(); + Guid = new Guid(stream.ReadBytes(0x10)); + + uint nameSize = stream.ReadUInt32(); + using (var nameData = stream.Create(stream.FileOffset + stream.Position, nameSize)) { + stream.Position += nameSize; + + uint entryCount = stream.ReadUInt32(); + uint entryCapacity = stream.ReadUInt32(); + var entryOk = new BitArray(stream.ReadBytes(stream.ReadInt32() * 4)); + if (stream.ReadUInt32() != 0) + throw new NotSupportedException(); + + names = new Dictionary(StringComparer.OrdinalIgnoreCase); + entryCapacity = Math.Min(entryCapacity, (uint)entryOk.Count); + for (int i = 0; i < entryCapacity; i++) { + if (!entryOk[i]) + continue; + + var pos = stream.ReadUInt32(); + var streamId = stream.ReadUInt32(); + nameData.Position = pos; + var streamName = ReadCString(nameData); + names[streamName] = streamId; + } + } + } + + void ReadStringTable() { + uint streamId; + if (!names.TryGetValue("/names", out streamId)) + throw new PdbException("String table not found"); + + var stream = streams[streamId].Content; + stream.Position = 8; + + uint strSize = stream.ReadUInt32(); + using (var strData = stream.Create(stream.FileOffset + stream.Position, strSize)) { + stream.Position += strSize; + + strings = new Dictionary(); + uint count = stream.ReadUInt32(); + for (uint i = 0; i < count; i++) { + var pos = stream.ReadUInt32(); + if (pos == 0) + continue; + strData.Position = pos; + strings[pos] = ReadCString(strData); + } + } + } + + static uint ReadSizeField(IBinaryReader reader) { + int size = reader.ReadInt32(); + return size <= 0 ? 0 : (uint)size; + } + + ushort? ReadModules() { + var stream = streams[STREAM_DBI].Content; + stream.Position = 20; + ushort symrecStream = stream.ReadUInt16(); + stream.Position += 2; + uint gpmodiSize = ReadSizeField(stream); // gpmodiSize + uint otherSize = 0; + otherSize += ReadSizeField(stream); // secconSize + otherSize += ReadSizeField(stream); // secmapSize + otherSize += ReadSizeField(stream); // filinfSize + otherSize += ReadSizeField(stream); // tsmapSize + stream.ReadUInt32(); // mfcIndex + uint dbghdrSize = ReadSizeField(stream); + otherSize += ReadSizeField(stream); // ecinfoSize + stream.Position += 8; + + modules = new List(); + using (var moduleStream = stream.Create((FileOffset)stream.Position, gpmodiSize)) { + while (moduleStream.Position < moduleStream.Length) { + var module = new DbiModule(); + module.Read(moduleStream); + modules.Add(module); + } + } + + if (IsValidStreamIndex(symrecStream)) + ReadGlobalSymbols(streams[symrecStream].Content); + + if (dbghdrSize != 0) { + stream.Position += gpmodiSize; + stream.Position += otherSize; + stream.Position += 12; + return stream.ReadUInt16(); + } + return null; + } + + internal DbiDocument GetDocument(uint nameId) { + var name = strings[nameId]; + + DbiDocument doc; + if (!documents.TryGetValue(name, out doc)) { + doc = new DbiDocument(name); + + uint streamId; + if (names.TryGetValue("/src/files/" + name, out streamId)) + doc.Read(streams[streamId].Content); + documents.Add(name, doc); + } + return doc; + } + + void ReadGlobalSymbols(IImageStream stream) { + stream.Position = 0; + while (stream.Position < stream.Length) { + var size = stream.ReadUInt16(); + var begin = stream.Position; + var end = begin + size; + + if ((SymbolType)stream.ReadUInt16() == SymbolType.S_PUB32) { + stream.Position += 4; + var offset = stream.ReadUInt32(); + stream.Position += 2; + var name = ReadCString(stream); + + if (name == "COM+_Entry_Point") + entryPt = offset; + } + + stream.Position = end; + } + } + + void ApplyRidMap(IImageStream stream) { + stream.Position = 0; + var map = new uint[stream.Length / 4]; + for (int i = 0; i < map.Length; i++) + map[i] = stream.ReadUInt32(); + + foreach (var module in modules) + foreach (var func in module.Functions) { + var rid = func.Token & 0x00ffffff; + rid = map[rid]; + func.Token = (func.Token & 0xff000000) | rid; + } + + if (entryPt != 0) { + var rid = entryPt & 0x00ffffff; + rid = map[rid]; + entryPt = (entryPt & 0xff000000) | rid; + } + } + + internal static string ReadCString(IImageStream stream) { + var value = Encoding.UTF8.GetString(stream.ReadBytesUntilByte(0)); + stream.Position++; + return value; + } + + #region ISymbolReader + + ISymbolMethod ISymbolReader.GetMethod(SymbolToken method) { + DbiFunction symMethod; + if (functions.TryGetValue((uint)method.GetToken(), out symMethod)) + return symMethod; + return null; + } + + ISymbolDocument[] ISymbolReader.GetDocuments() { + var docs = new ISymbolDocument[documents.Count]; + int i = 0; + foreach (var doc in documents.Values) + docs[i++] = doc; + return docs; + } + + SymbolToken ISymbolReader.UserEntryPoint { + get { return new SymbolToken((int)entryPt); } + } + + ISymbolDocument ISymbolReader.GetDocument(string url, Guid language, Guid languageVendor, Guid documentType) { + throw new NotImplementedException(); + } + + ISymbolVariable[] ISymbolReader.GetGlobalVariables() { + throw new NotImplementedException(); + } + + ISymbolMethod ISymbolReader.GetMethod(SymbolToken method, int version) { + throw new NotImplementedException(); + } + + ISymbolMethod ISymbolReader.GetMethodFromDocumentPosition(ISymbolDocument document, int line, int column) { + throw new NotImplementedException(); + } + + ISymbolNamespace[] ISymbolReader.GetNamespaces() { + throw new NotImplementedException(); + } + + byte[] ISymbolReader.GetSymAttribute(SymbolToken parent, string name) { + throw new NotImplementedException(); + } + + ISymbolVariable[] ISymbolReader.GetVariables(SymbolToken parent) { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/Managed/SymbolReaderCreator.cs b/dnlib/DotNet/Pdb/Managed/SymbolReaderCreator.cs new file mode 100644 index 0000000..37a237e --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/SymbolReaderCreator.cs @@ -0,0 +1,84 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using System.IO; +using System.Security; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb.Managed { + /// + /// Creates a instance + /// + public static class SymbolReaderCreator { + /// + /// Creates a new instance + /// + /// Path to assembly + /// A new instance or null if there's no PDB + /// file. + public static ISymbolReader CreateFromAssemblyFile(string assemblyFileName) { + return Create(Path.ChangeExtension(assemblyFileName, "pdb")); + } + + /// + /// Creates a new instance + /// + /// Path to PDB file + /// A new instance or null if there's no PDB + /// file on disk. + public static ISymbolReader Create(string pdbFileName) { + return Create(OpenImageStream(pdbFileName)); + } + + /// + /// Creates a new instance + /// + /// PDB file data + /// A new instance or null. + public static ISymbolReader Create(byte[] pdbData) { + return Create(MemoryImageStream.Create(pdbData)); + } + + /// + /// Creates a new instance + /// + /// PDB file stream which is now owned by this method + /// A new instance or null. + public static ISymbolReader Create(IImageStream pdbStream) { + if (pdbStream == null) + return null; + try { + var pdbReader = new PdbReader(); + pdbReader.Read(pdbStream); + return pdbReader; + } + catch (IOException) { + } + catch (UnauthorizedAccessException) { + } + catch (SecurityException) { + } + finally { + if (pdbStream != null) + pdbStream.Dispose(); + } + return null; + } + + static IImageStream OpenImageStream(string fileName) { + try { + if (!File.Exists(fileName)) + return null; + return ImageStreamCreator.CreateImageStream(fileName); + } + catch (IOException) { + } + catch (UnauthorizedAccessException) { + } + catch (SecurityException) { + } + return null; + } + } +} diff --git a/dnlib/DotNet/Pdb/Managed/SymbolType.cs b/dnlib/DotNet/Pdb/Managed/SymbolType.cs new file mode 100644 index 0000000..831f77f --- /dev/null +++ b/dnlib/DotNet/Pdb/Managed/SymbolType.cs @@ -0,0 +1,201 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Pdb.Managed { + enum SymbolType : ushort { + S_COMPILE = 0x0001, + S_REGISTER_16t = 0x0002, + S_CONSTANT_16t = 0x0003, + S_UDT_16t = 0x0004, + S_SSEARCH = 0x0005, + S_END = 0x0006, + S_SKIP = 0x0007, + S_CVRESERVE = 0x0008, + S_OBJNAME_ST = 0x0009, + S_ENDARG = 0x000A, + S_COBOLUDT_16t = 0x000B, + S_MANYREG_16t = 0x000C, + S_RETURN = 0x000D, + S_ENTRYTHIS = 0x000E, + + S_BPREL16 = 0x0100, + S_LDATA16 = 0x0101, + S_GDATA16 = 0x0102, + S_PUB16 = 0x0103, + S_LPROC16 = 0x0104, + S_GPROC16 = 0x0105, + S_THUNK16 = 0x0106, + S_BLOCK16 = 0x0107, + S_WITH16 = 0x0108, + S_LABEL16 = 0x0109, + S_CEXMODEL16 = 0x010A, + S_VFTABLE16 = 0x010B, + S_REGREL16 = 0x010C, + + S_BPREL32_16t = 0x0200, + S_LDATA32_16t = 0x0201, + S_GDATA32_16t = 0x0202, + S_PUB32_16t = 0x0203, + S_LPROC32_16t = 0x0204, + S_GPROC32_16t = 0x0205, + S_THUNK32_ST = 0x0206, + S_BLOCK32_ST = 0x0207, + S_WITH32_ST = 0x0208, + S_LABEL32_ST = 0x0209, + S_CEXMODEL32 = 0x020A, + S_VFTABLE32_16t = 0x020B, + S_REGREL32_16t = 0x020C, + S_LTHREAD32_16t = 0x020D, + S_GTHREAD32_16t = 0x020E, + S_SLINK32 = 0x020F, + + S_LPROCMIPS_16t = 0x0300, + S_GPROCMIPS_16t = 0x0301, + + S_PROCREF_ST = 0x0400, + S_DATAREF_ST = 0x0401, + S_ALIGN = 0x0402, + S_LPROCREF_ST = 0x0403, + S_OEM = 0x0404, + + S_TI16_MAX = 0x1000, + S_REGISTER_ST = 0x1001, + S_CONSTANT_ST = 0x1002, + S_UDT_ST = 0x1003, + S_COBOLUDT_ST = 0x1004, + S_MANYREG_ST = 0x1005, + S_BPREL32_ST = 0x1006, + S_LDATA32_ST = 0x1007, + S_GDATA32_ST = 0x1008, + S_PUB32_ST = 0x1009, + S_LPROC32_ST = 0x100A, + S_GPROC32_ST = 0x100B, + S_VFTABLE32 = 0x100C, + S_REGREL32_ST = 0x100D, + S_LTHREAD32_ST = 0x100E, + S_GTHREAD32_ST = 0x100F, + S_LPROCMIPS_ST = 0x1010, + S_GPROCMIPS_ST = 0x1011, + S_FRAMEPROC = 0x1012, + S_COMPILE2_ST = 0x1013, + S_MANYREG2_ST = 0x1014, + S_LPROCIA64_ST = 0x1015, + S_GPROCIA64_ST = 0x1016, + S_LOCALSLOT_ST = 0x1017, + S_PARAMSLOT_ST = 0x1018, + S_ANNOTATION = 0x1019, + S_GMANPROC_ST = 0x101A, + S_LMANPROC_ST = 0x101B, + S_RESERVED1 = 0x101C, + S_RESERVED2 = 0x101D, + S_RESERVED3 = 0x101E, + S_RESERVED4 = 0x101F, + S_LMANDATA_ST = 0x1020, + S_GMANDATA_ST = 0x1021, + S_MANFRAMEREL_ST = 0x1022, + S_MANREGISTER_ST = 0x1023, + S_MANSLOT_ST = 0x1024, + S_MANMANYREG_ST = 0x1025, + S_MANREGREL_ST = 0x1026, + S_MANMANYREG2_ST = 0x1027, + S_MANTYPREF = 0x1028, + S_UNAMESPACE_ST = 0x1029, + + S_ST_MAX = 0x1100, + S_OBJNAME = 0x1101, + S_THUNK32 = 0x1102, + S_BLOCK32 = 0x1103, + S_WITH32 = 0x1104, + S_LABEL32 = 0x1105, + S_REGISTER = 0x1106, + S_CONSTANT = 0x1107, + S_UDT = 0x1108, + S_COBOLUDT = 0x1109, + S_MANYREG = 0x110A, + S_BPREL32 = 0x110B, + S_LDATA32 = 0x110C, + S_GDATA32 = 0x110D, + S_PUB32 = 0x110E, + S_LPROC32 = 0x110F, + S_GPROC32 = 0x1110, + S_REGREL32 = 0x1111, + S_LTHREAD32 = 0x1112, + S_GTHREAD32 = 0x1113, + S_LPROCMIPS = 0x1114, + S_GPROCMIPS = 0x1115, + S_COMPILE2 = 0x1116, + S_MANYREG2 = 0x1117, + S_LPROCIA64 = 0x1118, + S_GPROCIA64 = 0x1119, + S_LOCALSLOT = 0x111A, + S_PARAMSLOT = 0x111B, + S_LMANDATA = 0x111C, + S_GMANDATA = 0x111D, + S_MANFRAMEREL = 0x111E, + S_MANREGISTER = 0x111F, + S_MANSLOT = 0x1120, + S_MANMANYREG = 0x1121, + S_MANREGREL = 0x1122, + S_MANMANYREG2 = 0x1123, + S_UNAMESPACE = 0x1124, + S_PROCREF = 0x1125, + S_DATAREF = 0x1126, + S_LPROCREF = 0x1127, + S_ANNOTATIONREF = 0x1128, + S_TOKENREF = 0x1129, + S_GMANPROC = 0x112A, + S_LMANPROC = 0x112B, + S_TRAMPOLINE = 0x112C, + S_MANCONSTANT = 0x112D, + S_ATTR_FRAMEREL = 0x112E, + S_ATTR_REGISTER = 0x112F, + S_ATTR_REGREL = 0x1130, + S_ATTR_MANYREG = 0x1131, + S_SEPCODE = 0x1132, + S_LOCAL_2005 = 0x1133, + S_DEFRANGE_2005 = 0x1134, + S_DEFRANGE2_2005 = 0x1135, + S_SECTION = 0x1136, + S_COFFGROUP = 0x1137, + S_EXPORT = 0x1138, + S_CALLSITEINFO = 0x1139, + S_FRAMECOOKIE = 0x113A, + S_DISCARDED = 0x113B, + S_COMPILE3 = 0x113C, + S_ENVBLOCK = 0x113D, + S_LOCAL = 0x113E, + S_DEFRANGE = 0x113F, + S_DEFRANGE_SUBFIELD = 0x1140, + S_DEFRANGE_REGISTER = 0x1141, + S_DEFRANGE_FRAMEPOINTER_REL = 0x1142, + S_DEFRANGE_SUBFIELD_REGISTER = 0x1143, + S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE = 0x1144, + S_DEFRANGE_REGISTER_REL = 0x1145, + S_LPROC32_ID = 0x1146, + S_GPROC32_ID = 0x1147, + S_LPROCMIPS_ID = 0x1148, + S_GPROCMIPS_ID = 0x1149, + S_LPROCIA64_ID = 0x114A, + S_GPROCIA64_ID = 0x114B, + S_BUILDINFO = 0x114C, + S_INLINESITE = 0x114D, + S_INLINESITE_END = 0x114E, + S_PROC_ID_END = 0x114F, + S_DEFRANGE_HLSL = 0x1150, + S_GDATA_HLSL = 0x1151, + S_LDATA_HLSL = 0x1152, + S_FILESTATIC = 0x1153, + S_LOCAL_DPC_GROUPSHARED = 0x1154, + S_LPROC32_DPC = 0x1155, + S_LPROC32_DPC_ID = 0x1156, + S_DEFRANGE_DPC_PTR_TAG = 0x1157, + S_DPC_SYM_TAG_MAP = 0x1158, + S_ARMSWITCHTABLE = 0x1159, + S_CALLEES = 0x115A, + S_CALLERS = 0x115B, + S_POGODATA = 0x115C, + S_INLINESITE2 = 0x115D, + S_HEAPALLOCSITE = 0x115E, + + S_RECTYPE_MAX, + } +} \ No newline at end of file diff --git a/dnlib/DotNet/Pdb/PdbDocument.cs b/dnlib/DotNet/Pdb/PdbDocument.cs new file mode 100644 index 0000000..0cafda3 --- /dev/null +++ b/dnlib/DotNet/Pdb/PdbDocument.cs @@ -0,0 +1,95 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Diagnostics.SymbolStore; + +namespace dnlib.DotNet.Pdb { + /// + /// A PDB document + /// + [DebuggerDisplay("{Url}")] + public sealed class PdbDocument { + /// + /// Gets/sets the document URL + /// + public string Url { get; set; } + + /// + /// Gets/sets the language GUID. See + /// + public Guid Language { get; set; } + + /// + /// Gets/sets the language vendor GUID. See + /// + public Guid LanguageVendor { get; set; } + + /// + /// Gets/sets the document type GUID. See + /// + public Guid DocumentType { get; set; } + + /// + /// Gets/sets the checksum algorithm ID + /// + public Guid CheckSumAlgorithmId { get; set; } + + /// + /// Gets/sets the checksum + /// + public byte[] CheckSum { get; set; } + + /// + /// Default constructor + /// + public PdbDocument() { + } + + /// + /// Constructor + /// + /// A instance + public PdbDocument(ISymbolDocument symDoc) { + if (symDoc == null) + throw new ArgumentNullException("symDoc"); + this.Url = symDoc.URL; + this.Language = symDoc.Language; + this.LanguageVendor = symDoc.LanguageVendor; + this.DocumentType = symDoc.DocumentType; + this.CheckSumAlgorithmId = symDoc.CheckSumAlgorithmId; + this.CheckSum = symDoc.GetCheckSum(); + } + + /// + /// Constructor + /// + /// Document URL + /// Language. See + /// Language vendor. See + /// Document type. See + /// Checksum algorithm ID + /// Checksum + public PdbDocument(string url, Guid language, Guid languageVendor, Guid documentType, Guid checkSumAlgorithmId, byte[] checkSum) { + this.Url = url; + this.Language = language; + this.LanguageVendor = languageVendor; + this.DocumentType = documentType; + this.CheckSumAlgorithmId = checkSumAlgorithmId; + this.CheckSum = checkSum; + } + + /// + public override int GetHashCode() { + return (Url ?? string.Empty).ToUpperInvariant().GetHashCode(); + } + + /// + public override bool Equals(object obj) { + var other = obj as PdbDocument; + if (other == null) + return false; + return (Url ?? string.Empty).Equals(other.Url ?? string.Empty, StringComparison.OrdinalIgnoreCase); + } + } +} diff --git a/dnlib/DotNet/Pdb/PdbImplType.cs b/dnlib/DotNet/Pdb/PdbImplType.cs new file mode 100644 index 0000000..90e9a94 --- /dev/null +++ b/dnlib/DotNet/Pdb/PdbImplType.cs @@ -0,0 +1,23 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Pdb { + /// + /// PDB implementation type + /// + public enum PdbImplType { + /// + /// Use Microsoft's COM DLL (diasymreader.dll) + /// + MicrosoftCOM, + + /// + /// Use the managed PDB reader + /// + Managed, + + /// + /// Use the default PDB reader + /// + Default = Managed, + } +} diff --git a/dnlib/DotNet/Pdb/PdbScope.cs b/dnlib/DotNet/Pdb/PdbScope.cs new file mode 100644 index 0000000..7bc2c25 --- /dev/null +++ b/dnlib/DotNet/Pdb/PdbScope.cs @@ -0,0 +1,75 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics; +using dnlib.DotNet.Emit; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet.Pdb { + /// + /// A PDB scope + /// + [DebuggerDisplay("{Start} - {End}")] + public sealed class PdbScope { + readonly ThreadSafe.IList scopes = ThreadSafeListCreator.Create(); + readonly ThreadSafe.IList locals = ThreadSafeListCreator.Create(); + readonly ThreadSafe.IList namespaces = ThreadSafeListCreator.Create(); + + /// + /// Gets/sets the first instruction + /// + public Instruction Start { get; set; } + + /// + /// Gets/sets the last instruction. It's null if it ends at the end of the method. + /// + public Instruction End { get; set; } + + /// + /// Gets all child scopes + /// + public ThreadSafe.IList Scopes { + get { return scopes; } + } + + /// + /// true if is not empty + /// + public bool HasScopes { + get { return scopes.Count > 0; } + } + + /// + /// Gets all locals in this scope + /// + public ThreadSafe.IList Variables { + get { return locals; } + } + + /// + /// true if is not empty + /// + public bool HasVariables { + get { return locals.Count > 0; } + } + + /// + /// Gets all namespaces + /// + public ThreadSafe.IList Namespaces { + get { return namespaces; } + } + + /// + /// true if is not empty + /// + public bool HasNamespaces { + get { return namespaces.Count > 0; } + } + } +} diff --git a/dnlib/DotNet/Pdb/PdbState.cs b/dnlib/DotNet/Pdb/PdbState.cs new file mode 100644 index 0000000..384885d --- /dev/null +++ b/dnlib/DotNet/Pdb/PdbState.cs @@ -0,0 +1,309 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using dnlib.DotNet.Emit; +using dnlib.Threading; + +namespace dnlib.DotNet.Pdb { + /// + /// PDB state for a + /// + public sealed class PdbState { + readonly ISymbolReader reader; + readonly Dictionary docDict = new Dictionary(); + MethodDef userEntryPoint; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Gets/sets the user entry point method. + /// + public MethodDef UserEntryPoint { + get { return userEntryPoint; } + set { userEntryPoint = value; } + } + + /// + /// Gets all PDB documents + /// + public IEnumerable Documents { + get { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { + return new List(docDict.Values); + } finally { theLock.ExitWriteLock(); } +#else + return docDict.Values; +#endif + } + } + + /// + /// true if is not empty + /// + public bool HasDocuments { + get { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return docDict.Count > 0; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + + } + } + + /// + /// Default constructor + /// + public PdbState() { + } + + /// + /// Constructor + /// + /// A instance + /// Owner module + public PdbState(ISymbolReader reader, ModuleDefMD module) { + if (reader == null) + throw new ArgumentNullException("reader"); + if (module == null) + throw new ArgumentNullException("module"); + this.reader = reader; + + this.userEntryPoint = module.ResolveToken(reader.UserEntryPoint.GetToken()) as MethodDef; + + foreach (var doc in reader.GetDocuments()) + Add_NoLock(new PdbDocument(doc)); + } + + /// + /// Adds + /// + /// New document + /// if it wasn't inserted, or the already existing document + /// if it was already inserted. + public PdbDocument Add(PdbDocument doc) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return Add_NoLock(doc); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + PdbDocument Add_NoLock(PdbDocument doc) { + PdbDocument orig; + if (docDict.TryGetValue(doc, out orig)) + return orig; + docDict.Add(doc, doc); + return doc; + } + + /// + /// Removes + /// + /// Document + /// true if it was removed, false if it wasn't inserted. + public bool Remove(PdbDocument doc) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return docDict.Remove(doc); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Returns an inserted instance or null if it's not been + /// inserted yet. + /// + /// A PDB document + /// The existing or null if it doesn't exist. + public PdbDocument GetExisting(PdbDocument doc) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + PdbDocument orig; + docDict.TryGetValue(doc, out orig); + return orig; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Removes all documents + /// + /// + public void RemoveAllDocuments() { + RemoveAllDocuments(false); + } + + /// + /// Removes all documents and optionally returns them + /// + /// true if all the original s + /// should be returned. + /// All s if is true + /// or null if is false. + public List RemoveAllDocuments(bool returnDocs) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + var docs = returnDocs ? new List(docDict.Values) : null; + docDict.Clear(); + return docs; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Initializes a with information found in the PDB file. The + /// instructions in must have valid offsets. This method is + /// automatically called by and you don't need to explicitly call + /// it. + /// + /// Method body + /// Method row ID + public void InitializeDontCall(CilBody body, uint methodRid) { + if (reader == null || body == null) + return; + var token = new SymbolToken((int)(0x06000000 + methodRid)); + ISymbolMethod method; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + method = reader.GetMethod(token); + if (method != null) { + body.Scope = CreateScope(body, method.RootScope); + AddSequencePoints(body, method); + } + //TODO: reader.GetSymAttribute() +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + void AddSequencePoints(CilBody body, ISymbolMethod method) { + int numSeqs = method.SequencePointCount; + var offsets = new int[numSeqs]; + var documents = new ISymbolDocument[numSeqs]; + var lines = new int[numSeqs]; + var columns = new int[numSeqs]; + var endLines = new int[numSeqs]; + var endColumns = new int[numSeqs]; + method.GetSequencePoints(offsets, documents, lines, columns, endLines, endColumns); + + int instrIndex = 0; + for (int i = 0; i < numSeqs; i++) { + var instr = GetInstruction(body.Instructions, offsets[i], ref instrIndex); + if (instr == null) + continue; + var seqPoint = new SequencePoint() { + Document = Add_NoLock(new PdbDocument(documents[i])), + StartLine = lines[i], + StartColumn = columns[i], + EndLine = endLines[i], + EndColumn = endColumns[i], + }; + instr.SequencePoint = seqPoint; + } + } + + struct CreateScopeState { + public ISymbolScope SymScope; + public PdbScope PdbScope; + public ISymbolScope[] Children; + public int ChildrenIndex; + } + + static PdbScope CreateScope(CilBody body, ISymbolScope symScope) { + if (symScope == null) + return null; + + // Don't use recursive calls + var stack = new Stack(); + var state = new CreateScopeState() { SymScope = symScope }; +recursive_call: + int instrIndex = 0; + state.PdbScope = new PdbScope() { + Start = GetInstruction(body.Instructions, state.SymScope.StartOffset, ref instrIndex), + End = GetInstruction(body.Instructions, state.SymScope.EndOffset, ref instrIndex), + }; + + foreach (var symLocal in state.SymScope.GetLocals()) { + if (symLocal.AddressKind != SymAddressKind.ILOffset) + continue; + + int localIndex = symLocal.AddressField1; + if ((uint)localIndex >= (uint)body.Variables.Count) + continue; + var local = body.Variables[localIndex]; + local.Name = symLocal.Name; + var attributes = symLocal.Attributes; + if (attributes is int) + local.PdbAttributes = (int)attributes; + state.PdbScope.Variables.Add(local); + } + + foreach (var ns in state.SymScope.GetNamespaces()) + state.PdbScope.Namespaces.Add(ns.Name); + + // Here's the now somewhat obfuscated for loop + state.ChildrenIndex = 0; + state.Children = state.SymScope.GetChildren(); +do_return: + if (state.ChildrenIndex < state.Children.Length) { + var child = state.Children[state.ChildrenIndex]; + stack.Push(state); + state = new CreateScopeState() { SymScope = child }; + goto recursive_call; + } + + if (stack.Count == 0) + return state.PdbScope; + + // Return from recursive call, and execute the last part of the for loop + var newPdbScope = state.PdbScope; + state = stack.Pop(); + state.PdbScope.Scopes.Add(newPdbScope); + state.ChildrenIndex++; + goto do_return; + } + + static Instruction GetInstruction(IList instrs, int offset, ref int index) { + if (instrs.Count > 0 && offset > instrs[instrs.Count - 1].Offset) + return null; + for (int i = index; i < instrs.Count; i++) { + var instr = instrs[i]; + if (instr.Offset < offset) + continue; + if (instr.Offset == offset) { + index = i; + return instr; + } + break; + } + for (int i = 0; i < index; i++) { + var instr = instrs[i]; + if (instr.Offset < offset) + continue; + if (instr.Offset == offset) { + index = i; + return instr; + } + break; + } + return null; + } + } +} diff --git a/dnlib/DotNet/Pdb/PdbWriter.cs b/dnlib/DotNet/Pdb/PdbWriter.cs new file mode 100644 index 0000000..0df6d38 --- /dev/null +++ b/dnlib/DotNet/Pdb/PdbWriter.cs @@ -0,0 +1,281 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics.SymbolStore; +using dnlib.DotNet.Emit; +using dnlib.DotNet.Writer; + +namespace dnlib.DotNet.Pdb { + /// + /// PDB writer + /// + /// This class is not thread safe because it's a writer class + public sealed class PdbWriter : IDisposable { + ISymbolWriter2 writer; + readonly PdbState pdbState; + readonly ModuleDef module; + readonly MetaData metaData; + readonly Dictionary pdbDocs = new Dictionary(); + readonly SequencePointHelper seqPointsHelper = new SequencePointHelper(); + + /// + /// Gets/sets the logger + /// + public ILogger Logger { get; set; } + + /// + /// Constructor + /// + /// Symbol writer + /// PDB state + /// Meta data + public PdbWriter(ISymbolWriter2 writer, PdbState pdbState, MetaData metaData) { + if (writer == null) + throw new ArgumentNullException("writer"); + if (pdbState == null) + throw new ArgumentNullException("pdbState"); + if (metaData == null) + throw new ArgumentNullException("metaData"); + this.writer = writer; + this.pdbState = pdbState; + this.metaData = metaData; + this.module = metaData.Module; + writer.Initialize(metaData); + } + + /// + /// Adds if it doesn't exist + /// + /// PDB document + /// A instance + ISymbolDocumentWriter Add(PdbDocument pdbDoc) { + ISymbolDocumentWriter docWriter; + if (pdbDocs.TryGetValue(pdbDoc, out docWriter)) + return docWriter; + docWriter = writer.DefineDocument(pdbDoc.Url, pdbDoc.Language, pdbDoc.LanguageVendor, pdbDoc.DocumentType); + docWriter.SetCheckSum(pdbDoc.CheckSumAlgorithmId, pdbDoc.CheckSum); + pdbDocs.Add(pdbDoc, docWriter); + return docWriter; + } + + /// + /// Writes the PDB file + /// + public void Write() { + writer.SetUserEntryPoint(new SymbolToken(GetUserEntryPointToken())); + + foreach (var type in module.GetTypes()) { + if (type == null) + continue; + foreach (var method in type.Methods) { + if (method == null) + continue; + if (!ShouldAddMethod(method)) + continue; + Write(method); + } + } + } + + bool ShouldAddMethod(MethodDef method) { + var body = method.Body; + if (body == null) + return false; + + if (body.HasScope) + return true; + + foreach (var local in body.Variables) { + // Don't check whether it's the empty string. Only check for null. + if (local.Name != null) + return true; + if (local.PdbAttributes != 0) + return true; + } + + foreach (var instr in body.Instructions) { + if (instr.SequencePoint != null) + return true; + } + + return false; + } + + sealed class SequencePointHelper { + readonly Dictionary checkedPdbDocs = new Dictionary(); + int[] instrOffsets = new int[0]; + int[] startLines; + int[] startColumns; + int[] endLines; + int[] endColumns; + + public void Write(PdbWriter pdbWriter, IList instrs) { + checkedPdbDocs.Clear(); + while (true) { + PdbDocument currPdbDoc = null; + bool otherDocsAvailable = false; + int index = 0, instrOffset = 0; + Instruction instr = null; + for (int i = 0; i < instrs.Count; i++, instrOffset += instr.GetSize()) { + instr = instrs[i]; + var seqp = instr.SequencePoint; + if (seqp == null || seqp.Document == null) + continue; + if (checkedPdbDocs.ContainsKey(seqp.Document)) + continue; + if (currPdbDoc == null) + currPdbDoc = seqp.Document; + else if (currPdbDoc != seqp.Document) { + otherDocsAvailable = true; + continue; + } + + if (index >= instrOffsets.Length) { + int newSize = index * 2; + if (newSize < 64) + newSize = 64; + Array.Resize(ref instrOffsets, newSize); + Array.Resize(ref startLines, newSize); + Array.Resize(ref startColumns, newSize); + Array.Resize(ref endLines, newSize); + Array.Resize(ref endColumns, newSize); + } + + instrOffsets[index] = instrOffset; + startLines[index] = seqp.StartLine; + startColumns[index] = seqp.StartColumn; + endLines[index] = seqp.EndLine; + endColumns[index] = seqp.EndColumn; + index++; + } + if (index != 0) + pdbWriter.writer.DefineSequencePoints(pdbWriter.Add(currPdbDoc), (uint)index, instrOffsets, startLines, startColumns, endLines, endColumns); + + if (!otherDocsAvailable) + break; + if (currPdbDoc != null) + checkedPdbDocs.Add(currPdbDoc, true); + } + } + } + + void Write(MethodDef method) { + uint rid = metaData.GetRid(method); + if (rid == 0) { + Error("Method {0} ({1:X8}) is not defined in this module ({2})", method, method.MDToken.Raw, module); + return; + } + + var body = method.Body; + uint methodSize = GetSizeOfBody(body); + + writer.OpenMethod(new SymbolToken((int)new MDToken(MD.Table.Method, metaData.GetRid(method)).Raw)); + writer.OpenScope(0); + AddLocals(method, body.Variables, 0, methodSize); + seqPointsHelper.Write(this, body.Instructions); + foreach (var scope in GetScopes(body.Scope)) { + foreach (var ns in scope.Namespaces) + writer.UsingNamespace(ns); + } + writer.CloseScope((int)methodSize); + writer.CloseMethod(); + } + + IEnumerable GetScopes(PdbScope root) { + if (root == null) + return new PdbScope[0]; + return GetScopes(new PdbScope[1] { root }); + } + + IEnumerable GetScopes(IEnumerable scopes) { + var visited = new Dictionary(); + var stack = new Stack>(); + if (scopes != null) + stack.Push(scopes.GetEnumerator()); + while (stack.Count > 0) { + var enumerator = stack.Pop(); + while (enumerator.MoveNext()) { + var type = enumerator.Current; + if (visited.ContainsKey(type)) { + Error("PdbScope present more than once"); + continue; + } + visited[type] = true; + yield return type; + if (type.Scopes.Count > 0) { + stack.Push(enumerator); + enumerator = type.Scopes.GetEnumerator(); + } + } + } + } + + void AddLocals(MethodDef method, IList locals, uint startOffset, uint endOffset) { + if (locals.Count == 0) + return; + uint token = metaData.GetLocalVarSigToken(method); + if (token == 0) { + Error("Method {0} ({1:X8}) has no local signature token", method, method.MDToken.Raw); + return; + } + foreach (var local in locals) { + if (local.Name == null && local.PdbAttributes == 0) + continue; + writer.DefineLocalVariable2(local.Name ?? string.Empty, (uint)local.PdbAttributes, + token, 1, (uint)local.Index, 0, 0, startOffset, endOffset); + } + } + + uint GetSizeOfBody(CilBody body) { + uint offset = 0; + foreach (var instr in body.Instructions) + offset += (uint)instr.GetSize(); + return offset; + } + + int GetUserEntryPointToken() { + var ep = pdbState.UserEntryPoint; + if (ep == null) + return 0; + uint rid = metaData.GetRid(ep); + if (rid == 0) { + Error("PDB user entry point method {0} ({1:X8}) is not defined in this module ({2})", ep, ep.MDToken.Raw, module); + return 0; + } + return new MDToken(MD.Table.Method, rid).ToInt32(); + } + + /// + /// Gets the and debug data that should be written to + /// the PE file. + /// + /// Updated with new values + /// Debug data + public byte[] GetDebugInfo(out IMAGE_DEBUG_DIRECTORY idd) { + return writer.GetDebugInfo(out idd); + } + + /// + /// Closes the PDB writer + /// + public void Close() { + writer.Close(); + } + + ILogger GetLogger() { + return Logger ?? DummyLogger.ThrowModuleWriterExceptionOnErrorInstance; + } + + void Error(string message, params object[] args) { + GetLogger().Log(this, LoggerEvent.Error, message, args); + } + + /// + public void Dispose() { + if (writer != null) + Close(); + writer = null; + } + } +} diff --git a/dnlib/DotNet/Pdb/SequencePoint.cs b/dnlib/DotNet/Pdb/SequencePoint.cs new file mode 100644 index 0000000..0536d6f --- /dev/null +++ b/dnlib/DotNet/Pdb/SequencePoint.cs @@ -0,0 +1,50 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics; + +namespace dnlib.DotNet.Pdb { + /// + /// PDB sequence point + /// + [DebuggerDisplay("({StartLine}, {StartColumn}) - ({EndLine}, {EndColumn}) {Document.Url}")] + public sealed class SequencePoint { + /// + /// PDB document + /// + public PdbDocument Document { get; set; } + + /// + /// Start line + /// + public int StartLine { get; set; } + + /// + /// Start column + /// + public int StartColumn { get; set; } + + /// + /// End line + /// + public int EndLine { get; set; } + + /// + /// End column + /// + public int EndColumn { get; set; } + + /// + /// Clones this instance + /// + /// A new cloned instance + public SequencePoint Clone() { + return new SequencePoint() { + Document = Document, + StartLine = StartLine, + StartColumn = StartColumn, + EndLine = EndLine, + EndColumn = EndColumn, + }; + } + } +} diff --git a/dnlib/DotNet/Pdb/SymbolReaderCreator.cs b/dnlib/DotNet/Pdb/SymbolReaderCreator.cs new file mode 100644 index 0000000..c811726 --- /dev/null +++ b/dnlib/DotNet/Pdb/SymbolReaderCreator.cs @@ -0,0 +1,175 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics.SymbolStore; +using dnlib.DotNet.MD; +using dnlib.IO; + +namespace dnlib.DotNet.Pdb { + /// + /// Creates a instance + /// + public static class SymbolReaderCreator { + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// Path to assembly + /// A new instance or null if there's no PDB + /// file on disk or if it's not possible to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, string assemblyFileName) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(assemblyFileName); + + case PdbImplType.Managed: + return Managed.SymbolReaderCreator.CreateFromAssemblyFile(assemblyFileName); + + default: throw new InvalidOperationException(); + } + } + + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// .NET metadata. Only need to be non-null if MS COM API should be used + /// Path to PDB file + /// A new instance or null if there's no PDB + /// file on disk or if it's not possible to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, IMetaData metaData, string pdbFileName) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(metaData, pdbFileName); + + case PdbImplType.Managed: + return Managed.SymbolReaderCreator.Create(pdbFileName); + + default: throw new InvalidOperationException(); + } + } + + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// .NET metadata. Only need to be non-null if MS COM API should be used + /// PDB file data + /// A new instance or null if it's not possible + /// to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, IMetaData metaData, byte[] pdbData) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(metaData, pdbData); + + case PdbImplType.Managed: + return Managed.SymbolReaderCreator.Create(pdbData); + + default: throw new InvalidOperationException(); + } + } + + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// .NET metadata. Only need to be non-null if MS COM API should be used + /// PDB file stream which is now owned by us + /// A new instance or null if it's not possible + /// to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, IMetaData metaData, IImageStream pdbStream) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(metaData, pdbStream); + + case PdbImplType.Managed: + return Managed.SymbolReaderCreator.Create(pdbStream); + + default: + if (pdbStream != null) + pdbStream.Dispose(); + throw new InvalidOperationException(); + } + } + + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// .NET metadata stream which is now owned by us. Only need to be + /// non-null if MS COM API should be used + /// Path to PDB file + /// A new instance or null if there's no PDB + /// file on disk or if it's not possible to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, IImageStream mdStream, string pdbFileName) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(mdStream, pdbFileName); + + case PdbImplType.Managed: + if (mdStream != null) + mdStream.Dispose(); + return Managed.SymbolReaderCreator.Create(pdbFileName); + + default: + if (mdStream != null) + mdStream.Dispose(); + throw new InvalidOperationException(); + } + } + + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// .NET metadata stream which is now owned by us. Only need to be + /// non-null if MS COM API should be used + /// PDB file data + /// A new instance or null if it's not possible + /// to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, IImageStream mdStream, byte[] pdbData) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(mdStream, pdbData); + + case PdbImplType.Managed: + if (mdStream != null) + mdStream.Dispose(); + return Managed.SymbolReaderCreator.Create(pdbData); + + default: + if (mdStream != null) + mdStream.Dispose(); + throw new InvalidOperationException(); + } + } + + /// + /// Creates a new instance + /// + /// PDB implementation to use + /// .NET metadata stream which is now owned by us. Only need to be + /// non-null if MS COM API should be used + /// PDB file stream which is now owned by us + /// A new instance or null if it's not possible + /// to create a . + public static ISymbolReader Create(PdbImplType pdbImpl, IImageStream mdStream, IImageStream pdbStream) { + switch (pdbImpl) { + case PdbImplType.MicrosoftCOM: + return Dss.SymbolReaderCreator.Create(mdStream, pdbStream); + + case PdbImplType.Managed: + if (mdStream != null) + mdStream.Dispose(); + return Managed.SymbolReaderCreator.Create(pdbStream); + + default: + if (mdStream != null) + mdStream.Dispose(); + if (pdbStream != null) + pdbStream.Dispose(); + throw new InvalidOperationException(); + } + } + } +} diff --git a/dnlib/DotNet/Pdb/SymbolWriterCreator.cs b/dnlib/DotNet/Pdb/SymbolWriterCreator.cs new file mode 100644 index 0000000..9874834 --- /dev/null +++ b/dnlib/DotNet/Pdb/SymbolWriterCreator.cs @@ -0,0 +1,29 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; + +namespace dnlib.DotNet.Pdb { + /// + /// Creates a + /// + public static class SymbolWriterCreator { + /// + /// Creates a new instance + /// + /// PDB file name + /// A new instance + public static ISymbolWriter2 Create(string pdbFileName) { + return Dss.SymbolWriterCreator.Create(pdbFileName); + } + + /// + /// Creates a new instance + /// + /// PDB output stream + /// PDB file name + /// A new instance + public static ISymbolWriter2 Create(Stream pdbStream, string pdbFileName) { + return Dss.SymbolWriterCreator.Create(pdbStream, pdbFileName); + } + } +} diff --git a/dnlib/DotNet/PropertyAttributes.cs b/dnlib/DotNet/PropertyAttributes.cs new file mode 100644 index 0000000..c2546b3 --- /dev/null +++ b/dnlib/DotNet/PropertyAttributes.cs @@ -0,0 +1,18 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Property attributes, see CorHdr.h/CorPropertyAttr + /// + [Flags] + public enum PropertyAttributes : ushort { + /// property is special. Name describes how. + SpecialName = 0x0200, + /// Runtime(metadata internal APIs) should check name encoding. + RTSpecialName = 0x0400, + /// Property has default + HasDefault = 0x1000, + } +} diff --git a/dnlib/DotNet/PropertyDef.cs b/dnlib/DotNet/PropertyDef.cs new file mode 100644 index 0000000..cf0f689 --- /dev/null +++ b/dnlib/DotNet/PropertyDef.cs @@ -0,0 +1,584 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the Property table + /// + public abstract class PropertyDef : IHasConstant, IHasCustomAttribute, IHasSemantic, IFullName, IMemberDef { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.Property, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasConstantTag { + get { return 2; } + } + + /// + public int HasCustomAttributeTag { + get { return 9; } + } + + /// + public int HasSemanticTag { + get { return 1; } + } + + /// + /// From column Property.PropFlags + /// + public PropertyAttributes Attributes { + get { return (PropertyAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column Property.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column Property.Type + /// + public CallingConventionSig Type { + get { return type; } + set { type = value; } + } + /// + protected CallingConventionSig type; + + /// + public Constant Constant { + get { + if (!constant_isInitialized) + InitializeConstant(); + return constant; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + constant = value; + constant_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected Constant constant; + /// + protected bool constant_isInitialized; + + void InitializeConstant() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (constant_isInitialized) + return; + constant = GetConstant_NoLock(); + constant_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual Constant GetConstant_NoLock() { + return null; + } + + /// Reset + protected void ResetConstant() { + constant_isInitialized = false; + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + /// Gets/sets the first getter method. Writing null will clear all get methods. + /// + public MethodDef GetMethod { + get { + if (otherMethods == null) + InitializePropertyMethods(); + return getMethods.Get(0, null); + } + set { + if (otherMethods == null) + InitializePropertyMethods(); + if (value == null) + getMethods.Clear(); + else if (getMethods.Count == 0) + getMethods.Add(value); + else + getMethods.Set(0, value); + } + } + + /// + /// Gets/sets the first setter method. Writing null will clear all set methods. + /// + public MethodDef SetMethod { + get { + if (otherMethods == null) + InitializePropertyMethods(); + return setMethods.Get(0, null); + } + set { + if (otherMethods == null) + InitializePropertyMethods(); + if (value == null) + setMethods.Clear(); + else if (setMethods.Count == 0) + setMethods.Add(value); + else + setMethods.Set(0, value); + } + } + + /// + /// Gets all getter methods + /// + public ThreadSafe.IList GetMethods { + get { + if (otherMethods == null) + InitializePropertyMethods(); + return getMethods; + } + } + + /// + /// Gets all setter methods + /// + public ThreadSafe.IList SetMethods { + get { + if (otherMethods == null) + InitializePropertyMethods(); + return setMethods; + } + } + + /// + /// Gets the other methods + /// + public ThreadSafe.IList OtherMethods { + get { + if (otherMethods == null) + InitializePropertyMethods(); + return otherMethods; + } + } + + void InitializePropertyMethods() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (otherMethods == null) + InitializePropertyMethods_NoLock(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + /// Initializes , , + /// and . + /// + protected virtual void InitializePropertyMethods_NoLock() { + getMethods = ThreadSafeListCreator.Create(); + setMethods = ThreadSafeListCreator.Create(); + otherMethods = ThreadSafeListCreator.Create(); + } + + /// + protected ThreadSafe.IList getMethods; + /// + protected ThreadSafe.IList setMethods; + /// + protected ThreadSafe.IList otherMethods; + + /// Reset , , + protected void ResetMethods() { + otherMethods = null; + } + + /// + /// true if there are no methods attached to this property + /// + public bool IsEmpty { + get { + // The first property access initializes the other fields we access here + return GetMethods.Count == 0 && + setMethods.Count == 0 && + otherMethods.Count == 0; + } + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if is not empty + /// + public bool HasOtherMethods { + get { return OtherMethods.Count > 0; } + } + + /// + /// true if is not null + /// + public bool HasConstant { + get { return Constant != null; } + } + + /// + /// Gets the constant element type or if there's no constant + /// + public ElementType ElementType { + get { + var c = Constant; + return c == null ? ElementType.End : c.Type; + } + } + + /// + /// Gets/sets the property sig + /// + public PropertySig PropertySig { + get { return type as PropertySig; } + set { type = value; } + } + + /// + /// Gets/sets the declaring type (owner type) + /// + public TypeDef DeclaringType { + get { return declaringType2; } + set { + var currentDeclaringType = DeclaringType2; + if (currentDeclaringType == value) + return; + if (currentDeclaringType != null) + currentDeclaringType.Properties.Remove(this); // Will set DeclaringType2 = null + if (value != null) + value.Properties.Add(this); // Will set DeclaringType2 = value + } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return declaringType2; } + } + + /// + /// Called by and should normally not be called by any user + /// code. Use instead. Only call this if you must set the + /// declaring type without inserting it in the declaring type's method list. + /// + public TypeDef DeclaringType2 { + get { return declaringType2; } + set { declaringType2 = value; } + } + /// + protected TypeDef declaringType2; + + /// + public ModuleDef Module { + get { + var dt = declaringType2; + return dt == null ? null : dt.Module; + } + } + + /// + /// Gets the full name of the property + /// + public string FullName { + get { + var dt = declaringType2; + return FullNameCreator.PropertyFullName(dt == null ? null : dt.FullName, name, type); + } + } + + bool IIsTypeOrMethod.IsType { + get { return false; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return true; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, PropertyAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the bit + /// + public bool IsSpecialName { + get { return ((PropertyAttributes)attributes & PropertyAttributes.SpecialName) != 0; } + set { ModifyAttributes(value, PropertyAttributes.SpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRuntimeSpecialName { + get { return ((PropertyAttributes)attributes & PropertyAttributes.RTSpecialName) != 0; } + set { ModifyAttributes(value, PropertyAttributes.RTSpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool HasDefault { + get { return ((PropertyAttributes)attributes & PropertyAttributes.HasDefault) != 0; } + set { ModifyAttributes(value, PropertyAttributes.HasDefault); } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A Property row created by the user and not present in the original .NET file + /// + public class PropertyDefUser : PropertyDef { + /// + /// Default constructor + /// + public PropertyDefUser() { + } + + /// + /// Constructor + /// + /// Name + public PropertyDefUser(UTF8String name) + : this(name, null) { + } + + /// + /// Constructor + /// + /// Name + /// Property signature + public PropertyDefUser(UTF8String name, PropertySig sig) + : this(name, sig, 0) { + } + + /// + /// Constructor + /// + /// Name + /// Property signature + /// Flags + public PropertyDefUser(UTF8String name, PropertySig sig, PropertyAttributes flags) { + this.name = name; + this.type = sig; + this.attributes = (int)flags; + } + } + + /// + /// Created from a row in the Property table + /// + sealed class PropertyDefMD : PropertyDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override Constant GetConstant_NoLock() { + return readerModule.ResolveConstant(readerModule.MetaData.GetConstantRid(Table.Property, origRid)); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.Property, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this Property row + /// Row ID + /// If is null + /// If is invalid + public PropertyDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.PropertyTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("Property rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name; + uint type = readerModule.TablesStream.ReadPropertyRow(origRid, out this.attributes, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.declaringType2 = readerModule.GetOwnerType(this); + this.type = readerModule.ReadSignature(type, new GenericParamContext(declaringType2)); + } + + internal PropertyDefMD InitializeAll() { + MemberMDInitializer.Initialize(Attributes); + MemberMDInitializer.Initialize(Name); + MemberMDInitializer.Initialize(Type); + MemberMDInitializer.Initialize(Constant); + MemberMDInitializer.Initialize(CustomAttributes); + MemberMDInitializer.Initialize(GetMethod); + MemberMDInitializer.Initialize(SetMethod); + MemberMDInitializer.Initialize(OtherMethods); + MemberMDInitializer.Initialize(DeclaringType); + return this; + } + + /// + protected override void InitializePropertyMethods_NoLock() { + if (otherMethods != null) + return; + ThreadSafe.IList newOtherMethods; + ThreadSafe.IList newGetMethods, newSetMethods; + var dt = declaringType2 as TypeDefMD; + if (dt == null) { + newGetMethods = ThreadSafeListCreator.Create(); + newSetMethods = ThreadSafeListCreator.Create(); + newOtherMethods = ThreadSafeListCreator.Create(); + } + else + dt.InitializeProperty(this, out newGetMethods, out newSetMethods, out newOtherMethods); + getMethods = newGetMethods; + setMethods = newSetMethods; + // Must be initialized last + otherMethods = newOtherMethods; + } + } +} diff --git a/dnlib/DotNet/PublicKey.cs b/dnlib/DotNet/PublicKey.cs new file mode 100644 index 0000000..e941dac --- /dev/null +++ b/dnlib/DotNet/PublicKey.cs @@ -0,0 +1,96 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Represents a public key + /// + public sealed class PublicKey : PublicKeyBase { + const AssemblyHashAlgorithm DEFAULT_ALGORITHM = AssemblyHashAlgorithm.SHA1; + PublicKeyToken publicKeyToken; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Gets the + /// + public override PublicKeyToken Token { + get { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (publicKeyToken == null && !IsNullOrEmpty_NoLock) + publicKeyToken = AssemblyHash.CreatePublicKeyToken(data); + return publicKeyToken; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + public override byte[] Data { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return data; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (data == value) + return; + data = value; + publicKeyToken = null; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Default constructor + /// + public PublicKey() { + } + + /// + /// Constructor + /// + /// Public key data + public PublicKey(byte[] data) + : base(data) { + } + + /// + /// Constructor + /// + /// Public key data as a hex string or the string "null" + /// to set public key data to null + public PublicKey(string hexString) + : base(hexString) { + } + + /// + public override bool Equals(object obj) { + if ((object)this == obj) + return true; + var other = obj as PublicKey; + if (other == null) + return false; + return Utils.Equals(Data, other.Data); + } + + /// + public override int GetHashCode() { + return Utils.GetHashCode(Data); + } + } +} diff --git a/dnlib/DotNet/PublicKeyBase.cs b/dnlib/DotNet/PublicKeyBase.cs new file mode 100644 index 0000000..40490e7 --- /dev/null +++ b/dnlib/DotNet/PublicKeyBase.cs @@ -0,0 +1,210 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Public key / public key token base class + /// + public abstract class PublicKeyBase { + /// + /// The key data + /// + protected byte[] data; + + /// + /// Returns true if is null or empty + /// + public bool IsNullOrEmpty { + get { return IsNullOrEmpty_NoLock; } + } + + /// + /// The unlocked version of . + /// + protected bool IsNullOrEmpty_NoLock { + get { return data == null || data.Length == 0; } + } + + /// + /// Returns true if is null + /// + public bool IsNull { + get { return Data == null; } + } + + /// + /// Gets/sets key data + /// + public virtual byte[] Data { + get { return data; } + set { data = value; } + } + + /// + /// Gets the + /// + public abstract PublicKeyToken Token { get; } + + /// + /// Default constructor + /// + protected PublicKeyBase() { + } + + /// + /// Constructor + /// + /// Key data + protected PublicKeyBase(byte[] data) { + this.data = data; + } + + /// + /// Constructor + /// + /// Key data as a hex string or the string "null" + /// to set key data to null + protected PublicKeyBase(string hexString) { + this.data = Parse(hexString); + } + + static byte[] Parse(string hexString) { + if (hexString == null || hexString == "null") + return null; + return Utils.ParseBytes(hexString); + } + + /// + /// Checks whether a public key or token is null or empty + /// + /// Public key or token instance + public static bool IsNullOrEmpty2(PublicKeyBase a) { + return a == null || a.IsNullOrEmpty; + } + + /// + /// Returns a + /// + /// A or a instance + public static PublicKeyToken ToPublicKeyToken(PublicKeyBase pkb) { + var pkt = pkb as PublicKeyToken; + if (pkt != null) + return pkt; + var pk = pkb as PublicKey; + if (pk != null) + return pk.Token; + return null; + } + + /// + /// Compares two s as s + /// + /// First + /// Second + /// < 0 if a < b, 0 if a == b, > 0 if a > b + public static int TokenCompareTo(PublicKeyBase a, PublicKeyBase b) { + if (a == b) + return 0; + return TokenCompareTo(ToPublicKeyToken(a), ToPublicKeyToken(b)); + } + + /// + /// Checks whether two public key tokens are equal + /// + /// First + /// Second + /// true if same, false otherwise + public static bool TokenEquals(PublicKeyBase a, PublicKeyBase b) { + return TokenCompareTo(a, b) == 0; + } + + static readonly byte[] EmptyByteArray = new byte[0]; + /// + /// Compares two s + /// + /// First + /// Second + /// < 0 if a < b, 0 if a == b, > 0 if a > b + public static int TokenCompareTo(PublicKeyToken a, PublicKeyToken b) { + if (a == b) + return 0; + return TokenCompareTo(a == null ? null : a.Data, b == null ? null : b.Data); + } + + static int TokenCompareTo(byte[] a, byte[] b) { + return Utils.CompareTo(a ?? EmptyByteArray, b ?? EmptyByteArray); + } + + /// + /// Checks whether two public key tokens are equal + /// + /// First + /// Second + /// true if same, false otherwise + public static bool TokenEquals(PublicKeyToken a, PublicKeyToken b) { + return TokenCompareTo(a, b) == 0; + } + + /// + /// Gets the public key token hash code + /// + /// Public key or token + /// The hash code + public static int GetHashCodeToken(PublicKeyBase a) { + return GetHashCode(ToPublicKeyToken(a)); + } + + /// + /// Gets the public key token hash code + /// + /// Public key token + /// The hash code + public static int GetHashCode(PublicKeyToken a) { + if (a == null) + return 0; + return Utils.GetHashCode(a.Data); + } + + /// + /// Creates a + /// + /// Public key data or null + /// A new instance or null if + /// was null + public static PublicKey CreatePublicKey(byte[] data) { + if (data == null) + return null; + return new PublicKey(data); + } + + /// + /// Creates a + /// + /// Public key token data or null + /// A new instance or null if + /// was null + public static PublicKeyToken CreatePublicKeyToken(byte[] data) { + if (data == null) + return null; + return new PublicKeyToken(data); + } + + /// + /// Gets the raw public key / public key token byte array + /// + /// The instance or null + /// Raw public key / public key token data or null + public static byte[] GetRawData(PublicKeyBase pkb) { + if (pkb == null) + return null; + return pkb.Data; + } + + /// + public override string ToString() { + var d = Data; + if (d == null || d.Length == 0) + return "null"; + return Utils.ToHex(d, false); + } + } +} diff --git a/dnlib/DotNet/PublicKeyToken.cs b/dnlib/DotNet/PublicKeyToken.cs new file mode 100644 index 0000000..3f51835 --- /dev/null +++ b/dnlib/DotNet/PublicKeyToken.cs @@ -0,0 +1,45 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Represents a public key token + /// + public sealed class PublicKeyToken : PublicKeyBase { + /// + /// Gets the + /// + public override PublicKeyToken Token { + get { return this; } + } + + /// + public PublicKeyToken() + : base() { + } + + /// + public PublicKeyToken(byte[] data) + : base(data) { + } + + /// + public PublicKeyToken(string hexString) + : base(hexString) { + } + + /// + public override bool Equals(object obj) { + if ((object)this == obj) + return true; + var other = obj as PublicKeyToken; + if (other == null) + return false; + return Utils.Equals(Data, other.Data); + } + + /// + public override int GetHashCode() { + return Utils.GetHashCode(Data); + } + } +} diff --git a/dnlib/DotNet/RecursionCounter.cs b/dnlib/DotNet/RecursionCounter.cs new file mode 100644 index 0000000..3d428aa --- /dev/null +++ b/dnlib/DotNet/RecursionCounter.cs @@ -0,0 +1,54 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Recursion counter + /// + public struct RecursionCounter { + /// + /// Max recursion count. If this is reached, we won't continue, and will use a default value. + /// + public const int MAX_RECURSION_COUNT = 100; + int counter; + + /// + /// Gets the recursion counter + /// + public int Counter { + get { return counter; } + } + + /// + /// Increments if it's not too high. ALL instance methods + /// that can be called recursively must call this method and + /// (if this method returns true) + /// + /// true if it was incremented and caller can continue, false if + /// it was not incremented and the caller must return to its caller. + public bool Increment() { + if (counter >= MAX_RECURSION_COUNT) + return false; + counter++; + return true; + } + + /// + /// Must be called before returning to caller if + /// returned true. + /// + public void Decrement() { +#if DEBUG + if (counter <= 0) + throw new InvalidOperationException("recursionCounter <= 0"); +#endif + counter--; + } + + /// + public override string ToString() { + return counter.ToString(); + } + } +} diff --git a/dnlib/DotNet/ReflectionExtensions.cs b/dnlib/DotNet/ReflectionExtensions.cs new file mode 100644 index 0000000..54c2ca9 --- /dev/null +++ b/dnlib/DotNet/ReflectionExtensions.cs @@ -0,0 +1,100 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Reflection; + +namespace dnlib.DotNet { + /// + /// Extension methods for reflection types, methods, fields + /// + static class ReflectionExtensions { + /// + /// Checks whether it's a + /// + /// The type + public static bool IsSZArray(this Type self) { + if (self == null || !self.IsArray) + return false; + var prop = self.GetType().GetProperty("IsSzArray", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (prop != null) + return (bool)prop.GetValue(self, new object[0]); + return (self.Name ?? string.Empty).EndsWith("[]"); + } + + /// + /// Gets a 's + /// + /// The type + /// The type's element type + public static ElementType GetElementType2(this Type a) { + if (a == null) + return ElementType.End; // Any invalid one is good enough + if (a.IsArray) + return IsSZArray(a) ? ElementType.SZArray : ElementType.Array; + if (a.IsByRef) + return ElementType.ByRef; + if (a.IsPointer) + return ElementType.Ptr; + if (a.IsGenericParameter) + return a.DeclaringMethod == null ? ElementType.Var : ElementType.MVar; + if (a.IsGenericType && !a.IsGenericTypeDefinition) + return ElementType.GenericInst; + + if (a == typeof(void)) return ElementType.Void; + if (a == typeof(bool)) return ElementType.Boolean; + if (a == typeof(char)) return ElementType.Char; + if (a == typeof(sbyte)) return ElementType.I1; + if (a == typeof(byte)) return ElementType.U1; + if (a == typeof(short)) return ElementType.I2; + if (a == typeof(ushort)) return ElementType.U2; + if (a == typeof(int)) return ElementType.I4; + if (a == typeof(uint)) return ElementType.U4; + if (a == typeof(long)) return ElementType.I8; + if (a == typeof(ulong)) return ElementType.U8; + if (a == typeof(float)) return ElementType.R4; + if (a == typeof(double)) return ElementType.R8; + if (a == typeof(string)) return ElementType.String; + if (a == typeof(TypedReference))return ElementType.TypedByRef; + if (a == typeof(IntPtr)) return ElementType.I; + if (a == typeof(UIntPtr)) return ElementType.U; + if (a == typeof(object)) return ElementType.Object; + + return a.IsValueType ? ElementType.ValueType : ElementType.Class; + } + + /// + /// Returns true if is a generic method, but + /// not a generic method definition, i.e., a MethodSpec. + /// + /// The method + public static bool IsGenericButNotGenericMethodDefinition(this MethodBase mb) { + return mb != null && !mb.IsGenericMethodDefinition && mb.IsGenericMethod; + } + + /// + /// Checks whether a parameter/prop/event type should be treated as if it is really a + /// generic instance type and not a generic type definition. In the .NET metadata (method + /// sig), the parameter is a generic instance type, but the CLR treats it as if it's just + /// a generic type def. This seems to happen only if the parameter type is exactly the same + /// type as the declaring type, eg. a method similar to: MyType<!0> MyType::SomeMethod(). + /// + /// Declaring type of method/event/property + /// Parameter/property/event type + internal static bool MustTreatTypeAsGenericInstType(this Type declaringType, Type t) { + return declaringType != null && + declaringType.IsGenericTypeDefinition && + t == declaringType; + } + + /// + /// Checks whether is a type definition and not a type spec + /// (eg. pointer or generic type instantiation) + /// + /// this + public static bool IsTypeDef(this Type type) { + return type != null && + !type.HasElementType && + (!type.IsGenericType || type.IsGenericTypeDefinition); + } + } +} diff --git a/dnlib/DotNet/ResolveException.cs b/dnlib/DotNet/ResolveException.cs new file mode 100644 index 0000000..34d1c6b --- /dev/null +++ b/dnlib/DotNet/ResolveException.cs @@ -0,0 +1,121 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// Resolve exception base class + /// + [Serializable] + public class ResolveException : Exception { + /// + /// Default constructor + /// + public ResolveException() { + } + + /// + /// Constructor + /// + /// Exception message + public ResolveException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Exception message + /// Inner exception or null if none + public ResolveException(string message, Exception innerException) + : base(message, innerException) { + } + } + + /// + /// Thrown if an assembly couldn't be resolved + /// + [Serializable] + public class AssemblyResolveException : ResolveException { + /// + /// Default constructor + /// + public AssemblyResolveException() { + } + + /// + /// Constructor + /// + /// Exception message + public AssemblyResolveException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Exception message + /// Inner exception or null if none + public AssemblyResolveException(string message, Exception innerException) + : base(message, innerException) { + } + } + + /// + /// Thrown if a type couldn't be resolved + /// + [Serializable] + public class TypeResolveException : ResolveException { + /// + /// Default constructor + /// + public TypeResolveException() { + } + + /// + /// Constructor + /// + /// Exception message + public TypeResolveException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Exception message + /// Inner exception or null if none + public TypeResolveException(string message, Exception innerException) + : base(message, innerException) { + } + } + + /// + /// Thrown if a method/field couldn't be resolved + /// + [Serializable] + public class MemberRefResolveException : ResolveException { + /// + /// Default constructor + /// + public MemberRefResolveException() { + } + + /// + /// Constructor + /// + /// Exception message + public MemberRefResolveException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Exception message + /// Inner exception or null if none + public MemberRefResolveException(string message, Exception innerException) + : base(message, innerException) { + } + } +} diff --git a/dnlib/DotNet/Resolver.cs b/dnlib/DotNet/Resolver.cs new file mode 100644 index 0000000..776d1fe --- /dev/null +++ b/dnlib/DotNet/Resolver.cs @@ -0,0 +1,167 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Resolves types, methods, fields + /// + public sealed class Resolver : IResolver { + readonly IAssemblyResolver assemblyResolver; + + /// + /// true to project WinMD types to CLR types, eg. Windows.UI.Xaml.Interop.TypeName + /// gets converted to System.Type before trying to resolve the type. This is enabled + /// by default. + /// + public bool ProjectWinMDRefs { + get { return projectWinMDRefs; } + set { projectWinMDRefs = value; } + } + bool projectWinMDRefs = true; + + /// + /// Constructor + /// + /// The assembly resolver + public Resolver(IAssemblyResolver assemblyResolver) { + if (assemblyResolver == null) + throw new ArgumentNullException("assemblyResolver"); + this.assemblyResolver = assemblyResolver; + } + + /// + public TypeDef Resolve(TypeRef typeRef, ModuleDef sourceModule) { + if (typeRef == null) + return null; + + if (ProjectWinMDRefs) + typeRef = WinMDHelpers.ToCLR(typeRef.Module ?? sourceModule, typeRef) ?? typeRef; + + var nonNestedTypeRef = TypeRef.GetNonNestedTypeRef(typeRef); + if (nonNestedTypeRef == null) + return null; + + var nonNestedResolutionScope = nonNestedTypeRef.ResolutionScope; + var nonNestedModule = nonNestedTypeRef.Module; + var asmRef = nonNestedResolutionScope as AssemblyRef; + if (asmRef != null) { + var asm = assemblyResolver.Resolve(asmRef, sourceModule ?? nonNestedModule); + return asm == null ? null : asm.Find(typeRef) ?? ResolveExportedType(asm.Modules, typeRef, sourceModule); + } + + var moduleDef = nonNestedResolutionScope as ModuleDef; + if (moduleDef != null) + return moduleDef.Find(typeRef) ?? + ResolveExportedType(new ModuleDef[] { moduleDef }, typeRef, sourceModule); + + var moduleRef = nonNestedResolutionScope as ModuleRef; + if (moduleRef != null) { + if (nonNestedModule == null) + return null; + if (new SigComparer().Equals(moduleRef, nonNestedModule)) + return nonNestedModule.Find(typeRef) ?? + ResolveExportedType(new ModuleDef[] { nonNestedModule }, typeRef, sourceModule); + var nonNestedAssembly = nonNestedModule.Assembly; + if (nonNestedAssembly == null) + return null; + var resolvedModule = nonNestedAssembly.FindModule(moduleRef.Name); + return resolvedModule == null ? null : resolvedModule.Find(typeRef) ?? + ResolveExportedType(new ModuleDef[] { resolvedModule }, typeRef, sourceModule); + } + + return null; + } + + TypeDef ResolveExportedType(IList modules, TypeRef typeRef, ModuleDef sourceModule) { + for (int i = 0; i < 30; i++) { + var exportedType = FindExportedType(modules, typeRef); + if (exportedType == null) + return null; + + var asmResolver = modules[0].Context.AssemblyResolver; + var etAsm = asmResolver.Resolve(exportedType.DefinitionAssembly, sourceModule ?? typeRef.Module); + if (etAsm == null) + return null; + + var td = etAsm.Find(typeRef); + if (td != null) + return td; + + modules = etAsm.Modules; + } + + return null; + } + + static ExportedType FindExportedType(IList modules, TypeRef typeRef) { + if (typeRef == null) + return null; + foreach (var module in modules.GetSafeEnumerable()) { + foreach (var exportedType in module.ExportedTypes.GetSafeEnumerable()) { + if (new SigComparer(SigComparerOptions.DontCompareTypeScope).Equals(exportedType, typeRef)) + return exportedType; + } + } + return null; + } + + /// + public IMemberForwarded Resolve(MemberRef memberRef) { + if (memberRef == null) + return null; + if (ProjectWinMDRefs) + memberRef = WinMDHelpers.ToCLR(memberRef.Module, memberRef) ?? memberRef; + var parent = memberRef.Class; + var method = parent as MethodDef; + if (method != null) + return method; + var declaringType = GetDeclaringType(memberRef, parent); + return declaringType == null ? null : declaringType.Resolve(memberRef); + } + + TypeDef GetDeclaringType(MemberRef memberRef, IMemberRefParent parent) { + if (memberRef == null || parent == null) + return null; + + var ts = parent as TypeSpec; + if (ts != null) + parent = ts.ScopeType; + + var declaringTypeDef = parent as TypeDef; + if (declaringTypeDef != null) + return declaringTypeDef; + + var declaringTypeRef = parent as TypeRef; + if (declaringTypeRef != null) + return Resolve(declaringTypeRef, memberRef.Module); + + // A module ref is used to reference the global type of a module in the same + // assembly as the current module. + var moduleRef = parent as ModuleRef; + if (moduleRef != null) { + var module = memberRef.Module; + if (module == null) + return null; + TypeDef globalType = null; + if (new SigComparer().Equals(module, moduleRef)) + globalType = module.GlobalType; + var modAsm = module.Assembly; + if (globalType == null && modAsm != null) { + var moduleDef = modAsm.FindModule(moduleRef.Name); + if (moduleDef != null) + globalType = moduleDef.GlobalType; + } + return globalType; + } + + var method = parent as MethodDef; + if (method != null) + return method.DeclaringType; + + return null; + } + } +} diff --git a/dnlib/DotNet/Resource.cs b/dnlib/DotNet/Resource.cs new file mode 100644 index 0000000..7ea7351 --- /dev/null +++ b/dnlib/DotNet/Resource.cs @@ -0,0 +1,365 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using dnlib.IO; +using dnlib.DotNet.MD; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Type of resource + /// + public enum ResourceType { + /// + /// It's a + /// + Embedded, + + /// + /// It's a + /// + AssemblyLinked, + + /// + /// It's a + /// + Linked, + } + + /// + /// Resource base class + /// + public abstract class Resource : IDisposable, IMDTokenProvider { + uint rid; + uint? offset; + UTF8String name; + ManifestResourceAttributes flags; + + /// + public MDToken MDToken { + get { return new MDToken(Table.ManifestResource, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + /// Gets/sets the offset of the resource + /// + public uint? Offset { + get { return offset; } + set { offset = value; } + } + + /// + /// Gets/sets the name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + + /// + /// Gets/sets the flags + /// + public ManifestResourceAttributes Attributes { + get { return flags; } + set { flags = value; } + } + + /// + /// Gets the type of resource + /// + public abstract ResourceType ResourceType { get; } + + /// + /// Gets/sets the visibility + /// + public ManifestResourceAttributes Visibility { + get { return flags & ManifestResourceAttributes.VisibilityMask; } + set { flags = (flags & ~ManifestResourceAttributes.VisibilityMask) | (value & ManifestResourceAttributes.VisibilityMask); } + } + + /// + /// true if is set + /// + public bool IsPublic { + get { return (flags & ManifestResourceAttributes.VisibilityMask) == ManifestResourceAttributes.Public; } + } + + /// + /// true if is set + /// + public bool IsPrivate { + get { return (flags & ManifestResourceAttributes.VisibilityMask) == ManifestResourceAttributes.Private; } + } + + /// + /// Constructor + /// + /// Name + /// flags + protected Resource(UTF8String name, ManifestResourceAttributes flags) { + this.name = name; + this.flags = flags; + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + } + } + + /// + /// A resource that is embedded in a .NET module. This is the most common type of resource. + /// + public sealed class EmbeddedResource : Resource { + IImageStream dataStream; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public override ResourceType ResourceType { + get { return ResourceType.Embedded; } + } + + /// + /// Gets/sets the resource data. It's never null. + /// + public IImageStream Data { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return dataStream; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (value == dataStream) + return; + if (dataStream != null) + dataStream.Dispose(); + dataStream = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Constructor + /// + /// Name of resource + /// Resource data + public EmbeddedResource(UTF8String name, byte[] data) + : this(name, data, ManifestResourceAttributes.Private) { + } + + /// + /// Constructor + /// + /// Name of resource + /// Resource data + /// Resource flags + public EmbeddedResource(UTF8String name, byte[] data, ManifestResourceAttributes flags) + : this(name, new MemoryImageStream(0, data, 0, data.Length), flags) { + } + /// + /// Constructor + /// + /// Name of resource + /// Resource data + public EmbeddedResource(UTF8String name, IImageStream dataStream) + : this(name, dataStream, ManifestResourceAttributes.Private) { + } + + /// + /// Constructor + /// + /// Name of resource + /// Resource data + /// Resource flags + public EmbeddedResource(UTF8String name, IImageStream dataStream, ManifestResourceAttributes flags) + : base(name, flags) { + if (dataStream == null) + throw new ArgumentNullException("dataStream"); + this.dataStream = dataStream; + } + + /// + /// Creates a new resource stream that can access the same data as the original + /// Stream. Note that the data is shared between these streams. + /// + /// A new instance + public IImageStream GetClonedResourceStream() { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return dataStream.Clone(); +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + + /// + /// Gets the resource data as a + /// + /// A stream + public Stream GetResourceStream() { + return GetClonedResourceStream().CreateStream(true); + } + + /// + /// Gets the resource data as a byte array + /// + /// The resource data + public byte[] GetResourceData() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return dataStream.ReadAllBytes(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + protected override void Dispose(bool disposing) { + if (!disposing) + return; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (dataStream != null) + dataStream.Dispose(); + dataStream = null; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + base.Dispose(disposing); + } + + /// + public override string ToString() { + var ds = dataStream; + return string.Format("{0} - size: {1}", UTF8String.ToSystemStringOrEmpty(Name), ds == null ? 0 : ds.Length); + } + } + + /// + /// A reference to a resource in another assembly + /// + public sealed class AssemblyLinkedResource : Resource { + AssemblyRef asmRef; + + /// + public override ResourceType ResourceType { + get { return ResourceType.AssemblyLinked; } + } + + /// + /// Gets/sets the assembly reference + /// + public AssemblyRef Assembly { + get { return asmRef; } + set { + if (value == null) + throw new ArgumentNullException("value"); + asmRef = value; + } + } + + /// + /// Constructor + /// + /// Name of resource + /// Assembly reference + /// Resource flags + public AssemblyLinkedResource(UTF8String name, AssemblyRef asmRef, ManifestResourceAttributes flags) + : base(name, flags) { + if (asmRef == null) + throw new ArgumentNullException("asmRef"); + this.asmRef = asmRef; + } + + /// + public override string ToString() { + return string.Format("{0} - assembly: {1}", UTF8String.ToSystemStringOrEmpty(Name), asmRef.FullName); + } + } + + /// + /// A resource that is stored in a file on disk + /// + public sealed class LinkedResource : Resource { + FileDef file; + + /// + public override ResourceType ResourceType { + get { return ResourceType.Linked; } + } + + /// + /// Gets/sets the file + /// + public FileDef File { + get { return file; } + set { + if (value == null) + throw new ArgumentNullException("value"); + file = value; + } + } + + /// + /// Gets/sets the hash + /// + public byte[] Hash { + get { return file.HashValue; } + set { file.HashValue = value; } + } + + /// + /// Gets/sets the file name + /// + public UTF8String FileName { + get { return file == null ? UTF8String.Empty : file.Name; } + } + + /// + /// Constructor + /// + /// Name of resource + /// The file + /// Resource flags + public LinkedResource(UTF8String name, FileDef file, ManifestResourceAttributes flags) + : base(name, flags) { + this.file = file; + } + + /// + public override string ToString() { + return string.Format("{0} - file: {1}", UTF8String.ToSystemStringOrEmpty(Name), UTF8String.ToSystemStringOrEmpty(FileName)); + } + } +} diff --git a/dnlib/DotNet/ResourceCollection.cs b/dnlib/DotNet/ResourceCollection.cs new file mode 100644 index 0000000..676f171 --- /dev/null +++ b/dnlib/DotNet/ResourceCollection.cs @@ -0,0 +1,159 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.Utils; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// A collection of s + /// + public class ResourceCollection : LazyList { + /// + /// Default constructor + /// + public ResourceCollection() { + } + + /// + /// Constructor + /// + /// List listener + public ResourceCollection(IListListener listener) + : base(listener) { + } + + /// + /// Constructor + /// + /// Initial length of the list + /// Context passed to + /// Delegate instance that returns original values + public ResourceCollection(int length, object context, MFunc readOriginalValue) + : base(length, context, readOriginalValue) { + } + + /// + /// Finds the index of a resource + /// + /// Name of resource + /// The index of the or -1 if none was found + public int IndexOf(UTF8String name) { + int i = -1; + foreach (var resource in this.GetSafeEnumerable()) { + i++; + if (resource != null && resource.Name == name) + return i; + } + return -1; + } + + /// + /// Finds the index of an embedded resource + /// + /// Name of resource + /// The index of the or -1 if none was found + public int IndexOfEmbeddedResource(UTF8String name) { + int i = -1; + foreach (var resource in this.GetSafeEnumerable()) { + i++; + if (resource != null && + resource.ResourceType == ResourceType.Embedded && + resource.Name == name) + return i; + } + return -1; + } + + /// + /// Finds the index of an assembly linked resource + /// + /// Name of resource + /// The index of the or -1 if none was found + public int IndexOfAssemblyLinkedResource(UTF8String name) { + int i = -1; + foreach (var resource in this.GetSafeEnumerable()) { + i++; + if (resource != null && + resource.ResourceType == ResourceType.AssemblyLinked && + resource.Name == name) + return i; + } + return -1; + } + + /// + /// Finds the index of a linked resource + /// + /// Name of resource + /// The index of the or -1 if none was found + public int IndexOfLinkedResource(UTF8String name) { + int i = -1; + foreach (var resource in this.GetSafeEnumerable()) { + i++; + if (resource != null && + resource.ResourceType == ResourceType.Linked && + resource.Name == name) + return i; + } + return -1; + } + + /// + /// Finds a resource + /// + /// Name of resource + /// The or null if none was found + public Resource Find(UTF8String name) { + foreach (var resource in this.GetSafeEnumerable()) { + if (resource != null && resource.Name == name) + return resource; + } + return null; + } + + /// + /// Finds an embedded resource + /// + /// Name of resource + /// The or null if none was found + public EmbeddedResource FindEmbeddedResource(UTF8String name) { + foreach (var resource in this.GetSafeEnumerable()) { + if (resource != null && + resource.ResourceType == ResourceType.Embedded && + resource.Name == name) + return (EmbeddedResource)resource; + } + return null; + } + + /// + /// Finds an assembly linked resource + /// + /// Name of resource + /// The or null if none was found + public AssemblyLinkedResource FindAssemblyLinkedResource(UTF8String name) { + foreach (var resource in this.GetSafeEnumerable()) { + if (resource != null && + resource.ResourceType == ResourceType.AssemblyLinked && + resource.Name == name) + return (AssemblyLinkedResource)resource; + } + return null; + } + + /// + /// Finds a linked resource + /// + /// Name of resource + /// The or null if none was found + public LinkedResource FindLinkedResource(UTF8String name) { + foreach (var resource in this.GetSafeEnumerable()) { + if (resource != null && + resource.ResourceType == ResourceType.Linked && + resource.Name == name) + return (LinkedResource)resource; + } + return null; + } + } +} diff --git a/dnlib/DotNet/Resources/BuiltInResourceData.cs b/dnlib/DotNet/Resources/BuiltInResourceData.cs new file mode 100644 index 0000000..45027b2 --- /dev/null +++ b/dnlib/DotNet/Resources/BuiltInResourceData.cs @@ -0,0 +1,162 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Runtime.Serialization; +using dnlib.IO; + +namespace dnlib.DotNet.Resources { + /// + /// Built-in resource data + /// + public sealed class BuiltInResourceData : IResourceData { + readonly ResourceTypeCode code; + readonly object data; + + /// + /// Gets the data + /// + public object Data { + get { return data; } + } + + /// + public ResourceTypeCode Code { + get { return code; } + } + + /// + public FileOffset StartOffset { get; set; } + + /// + public FileOffset EndOffset { get; set; } + + /// + /// Constructor + /// + /// Type of data + /// Data + public BuiltInResourceData(ResourceTypeCode code, object data) { + this.code = code; + this.data = data; + } + + /// + public void WriteData(BinaryWriter writer, IFormatter formatter) { + switch (code) { + case ResourceTypeCode.Null: + break; + + case ResourceTypeCode.String: + writer.Write((string)data); + break; + + case ResourceTypeCode.Boolean: + writer.Write((bool)data); + break; + + case ResourceTypeCode.Char: + writer.Write((ushort)(char)data); + break; + + case ResourceTypeCode.Byte: + writer.Write((byte)data); + break; + + case ResourceTypeCode.SByte: + writer.Write((sbyte)data); + break; + + case ResourceTypeCode.Int16: + writer.Write((short)data); + break; + + case ResourceTypeCode.UInt16: + writer.Write((ushort)data); + break; + + case ResourceTypeCode.Int32: + writer.Write((int)data); + break; + + case ResourceTypeCode.UInt32: + writer.Write((uint)data); + break; + + case ResourceTypeCode.Int64: + writer.Write((long)data); + break; + + case ResourceTypeCode.UInt64: + writer.Write((ulong)data); + break; + + case ResourceTypeCode.Single: + writer.Write((float)data); + break; + + case ResourceTypeCode.Double: + writer.Write((double)data); + break; + + case ResourceTypeCode.Decimal: + writer.Write((decimal)data); + break; + + case ResourceTypeCode.DateTime: + writer.Write(((DateTime)data).ToBinary()); + break; + + case ResourceTypeCode.TimeSpan: + writer.Write(((TimeSpan)data).Ticks); + break; + + case ResourceTypeCode.ByteArray: + case ResourceTypeCode.Stream: + var ary = (byte[])data; + writer.Write(ary.Length); + writer.Write(ary); + break; + + default: + throw new InvalidOperationException("Unknown resource type code"); + } + } + + /// + public override string ToString() { + switch (code) { + case ResourceTypeCode.Null: + return "null"; + + case ResourceTypeCode.String: + case ResourceTypeCode.Boolean: + case ResourceTypeCode.Char: + case ResourceTypeCode.Byte: + case ResourceTypeCode.SByte: + case ResourceTypeCode.Int16: + case ResourceTypeCode.UInt16: + case ResourceTypeCode.Int32: + case ResourceTypeCode.UInt32: + case ResourceTypeCode.Int64: + case ResourceTypeCode.UInt64: + case ResourceTypeCode.Single: + case ResourceTypeCode.Double: + case ResourceTypeCode.Decimal: + case ResourceTypeCode.DateTime: + case ResourceTypeCode.TimeSpan: + return string.Format("{0}: '{1}'", code, data); + + case ResourceTypeCode.ByteArray: + case ResourceTypeCode.Stream: + var ary = data as byte[]; + if (ary != null) + return string.Format("{0}: Length: {1}", code, ary.Length); + return string.Format("{0}: '{1}'", code, data); + + default: + return string.Format("{0}: '{1}'", code, data); + } + } + } +} diff --git a/dnlib/DotNet/Resources/IResourceData.cs b/dnlib/DotNet/Resources/IResourceData.cs new file mode 100644 index 0000000..c9df95d --- /dev/null +++ b/dnlib/DotNet/Resources/IResourceData.cs @@ -0,0 +1,35 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using System.Runtime.Serialization; +using dnlib.IO; + +namespace dnlib.DotNet.Resources { + /// + /// Implemented by all resource data + /// + public interface IResourceData : IFileSection { + /// + /// Gets the type of data + /// + ResourceTypeCode Code { get; } + + /// + /// Start offset of the section in the file + /// + new FileOffset StartOffset { get; set; } + + /// + /// End offset of the section in the file. This is one byte after the last + /// valid offset in the section. + /// + new FileOffset EndOffset { get; set; } + + /// + /// Writes the data + /// + /// Writer + /// Formatter if needed by implementer + void WriteData(BinaryWriter writer, IFormatter formatter); + } +} diff --git a/dnlib/DotNet/Resources/ResourceDataCreator.cs b/dnlib/DotNet/Resources/ResourceDataCreator.cs new file mode 100644 index 0000000..157f634 --- /dev/null +++ b/dnlib/DotNet/Resources/ResourceDataCreator.cs @@ -0,0 +1,356 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; + +namespace dnlib.DotNet.Resources { + /// + /// Creates resource data + /// + public class ResourceDataCreator { + readonly ModuleDef module; + readonly ModuleDefMD moduleMD; + readonly Dictionary dict = new Dictionary(StringComparer.Ordinal); + readonly Dictionary asmNameToAsmFullName = new Dictionary(StringComparer.Ordinal); + + /// + /// Gets the owner module + /// + protected ModuleDef Module { + get { return module; } + } + + /// + /// Constructor + /// + /// Owner module + public ResourceDataCreator(ModuleDef module) { + this.module = module; + this.moduleMD = module as ModuleDefMD; + } + + /// + /// Gets number of user data types + /// + public int Count { + get { return dict.Count; } + } + + /// + /// Create null data + /// + /// + public BuiltInResourceData CreateNull() { + return new BuiltInResourceData(ResourceTypeCode.Null, null); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(string value) { + return new BuiltInResourceData(ResourceTypeCode.String, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(bool value) { + return new BuiltInResourceData(ResourceTypeCode.Boolean, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(char value) { + return new BuiltInResourceData(ResourceTypeCode.Char, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(byte value) { + return new BuiltInResourceData(ResourceTypeCode.Byte, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(sbyte value) { + return new BuiltInResourceData(ResourceTypeCode.SByte, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(short value) { + return new BuiltInResourceData(ResourceTypeCode.Int16, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(ushort value) { + return new BuiltInResourceData(ResourceTypeCode.UInt16, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(int value) { + return new BuiltInResourceData(ResourceTypeCode.Int32, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(uint value) { + return new BuiltInResourceData(ResourceTypeCode.UInt32, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(long value) { + return new BuiltInResourceData(ResourceTypeCode.Int64, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(ulong value) { + return new BuiltInResourceData(ResourceTypeCode.UInt64, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(float value) { + return new BuiltInResourceData(ResourceTypeCode.Single, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(double value) { + return new BuiltInResourceData(ResourceTypeCode.Double, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(decimal value) { + return new BuiltInResourceData(ResourceTypeCode.Decimal, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(DateTime value) { + return new BuiltInResourceData(ResourceTypeCode.DateTime, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData Create(TimeSpan value) { + return new BuiltInResourceData(ResourceTypeCode.TimeSpan, value); + } + + /// + /// Creates array data + /// + /// Value + /// + public BuiltInResourceData Create(byte[] value) { + return new BuiltInResourceData(ResourceTypeCode.ByteArray, value); + } + + /// + /// Creates data + /// + /// Value + /// + public BuiltInResourceData CreateStream(byte[] value) { + return new BuiltInResourceData(ResourceTypeCode.Stream, value); + } + + /// + /// Creates serialized data + /// + /// Serialized data + /// Type of serialized data + /// + public BinaryResourceData CreateSerialized(byte[] value, UserResourceType type) { + return new BinaryResourceData(CreateUserResourceType(type.Name, true), value); + } + + /// + /// Creates serialized data + /// + /// Serialized data + /// + public BinaryResourceData CreateSerialized(byte[] value) { + string assemblyName, typeName; + if (!GetSerializedTypeAndAssemblyName(value, out assemblyName, out typeName)) + throw new ApplicationException("Could not get serialized type name"); + string fullName = string.Format("{0}, {1}", typeName, assemblyName); + return new BinaryResourceData(CreateUserResourceType(fullName), value); + } + + sealed class MyBinder : SerializationBinder { + public class OkException : Exception { + public string AssemblyName { get; set; } + public string TypeName { get; set; } + } + + public override Type BindToType(string assemblyName, string typeName) { + throw new OkException { + AssemblyName = assemblyName, + TypeName = typeName, + }; + } + } + + bool GetSerializedTypeAndAssemblyName(byte[] value, out string assemblyName, out string typeName) { + try { + var formatter = new BinaryFormatter(); + formatter.Binder = new MyBinder(); + formatter.Deserialize(new MemoryStream(value)); + } + catch (MyBinder.OkException ex) { + assemblyName = ex.AssemblyName; + typeName = ex.TypeName; + return true; + } + catch { + } + + assemblyName = null; + typeName = null; + return false; + } + + /// + /// Creates a user type. If the type already exists, the existing value is returned. + /// + /// Full name of type + /// + public UserResourceType CreateUserResourceType(string fullName) { + return CreateUserResourceType(fullName, false); + } + + /// + /// Creates a user type. If the type already exists, the existing value is returned. + /// + /// Full name of type + /// Use without converting it to a + /// type in an existing assembly reference + /// + UserResourceType CreateUserResourceType(string fullName, bool useFullName) { + UserResourceType type; + if (dict.TryGetValue(fullName, out type)) + return type; + + var newFullName = useFullName ? fullName : GetRealTypeFullName(fullName); + type = new UserResourceType(newFullName, ResourceTypeCode.UserTypes + dict.Count); + dict[fullName] = type; + dict[newFullName] = type; + return type; + } + + string GetRealTypeFullName(string fullName) { + var tr = TypeNameParser.ParseReflection(module, fullName, null); + if (tr == null) + return fullName; + var asmRef = tr.DefinitionAssembly; + if (asmRef == null) + return fullName; + + var newFullName = fullName; + + string assemblyName = GetRealAssemblyName(asmRef); + if (!string.IsNullOrEmpty(assemblyName)) + newFullName = string.Format("{0}, {1}", tr.ReflectionFullName, assemblyName); + + return newFullName; + } + + string GetRealAssemblyName(IAssembly asm) { + string assemblyName = asm.FullName; + string newAsmName; + if (!asmNameToAsmFullName.TryGetValue(assemblyName, out newAsmName)) + asmNameToAsmFullName[assemblyName] = newAsmName = TryGetRealAssemblyName(asm); + return newAsmName; + } + + string TryGetRealAssemblyName(IAssembly asm) { + var simpleName = asm.Name; + if (simpleName == module.CorLibTypes.AssemblyRef.Name) + return module.CorLibTypes.AssemblyRef.FullName; + + if (moduleMD != null) { + var asmRef = moduleMD.GetAssemblyRef(simpleName); + if (asmRef != null) + return asmRef.FullName; + } + + return GetAssemblyFullName(simpleName); + } + + /// + /// Converts an assembly simple name (eg. mscorlib) to the full name of the assembly, + /// which includes the version, public key token, etc. Returns null if it's + /// unknown. + /// + /// Simple name of assembly + /// + protected virtual string GetAssemblyFullName(string simpleName) { + return null; + } + + /// + /// Gets all types sorted by + /// + /// + public List GetSortedTypes() { + var list = new List(dict.Values); + list.Sort((a, b) => ((int)a.Code).CompareTo((int)b.Code)); + return list; + } + } +} diff --git a/dnlib/DotNet/Resources/ResourceElement.cs b/dnlib/DotNet/Resources/ResourceElement.cs new file mode 100644 index 0000000..53b3307 --- /dev/null +++ b/dnlib/DotNet/Resources/ResourceElement.cs @@ -0,0 +1,23 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Resources { + /// + /// Resource element + /// + public sealed class ResourceElement { + /// + /// Name of resource + /// + public string Name { get; set; } + + /// + /// Data of resource + /// + public IResourceData ResourceData { get; set; } + + /// + public override string ToString() { + return string.Format("N: {0}, V: {1}", Name, ResourceData); + } + } +} diff --git a/dnlib/DotNet/Resources/ResourceElementSet.cs b/dnlib/DotNet/Resources/ResourceElementSet.cs new file mode 100644 index 0000000..d905733 --- /dev/null +++ b/dnlib/DotNet/Resources/ResourceElementSet.cs @@ -0,0 +1,35 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet.Resources { + /// + /// Resource element set + /// + public sealed class ResourceElementSet { + readonly Dictionary dict = new Dictionary(StringComparer.Ordinal); + + /// + /// Gets the number of elements in the set + /// + public int Count { + get { return dict.Count; } + } + + /// + /// Gets all resource elements + /// + public IEnumerable ResourceElements { + get { return dict.Values; } + } + + /// + /// Adds a new resource to the set, overwriting any existing resource + /// + /// + public void Add(ResourceElement elem) { + dict[elem.Name] = elem; + } + } +} diff --git a/dnlib/DotNet/Resources/ResourceReader.cs b/dnlib/DotNet/Resources/ResourceReader.cs new file mode 100644 index 0000000..5dac08a --- /dev/null +++ b/dnlib/DotNet/Resources/ResourceReader.cs @@ -0,0 +1,222 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using dnlib.IO; + +namespace dnlib.DotNet.Resources { + /// + /// Thrown by + /// + [Serializable] + public sealed class ResourceReaderException : Exception { + /// + /// Constructor + /// + /// Message + public ResourceReaderException(string msg) + : base(msg) { + } + } + + /// + /// Gets called to create a from serialized data. Returns null + /// if a default instance should be created. + /// + /// ResourceDataCreator + /// Serialized type + /// Serialized data + /// + public delegate IResourceData CreateResourceDataDelegate(ResourceDataCreator resourceDataCreator, UserResourceType type, byte[] serializedData); + + /// + /// Reads .NET resources + /// + public struct ResourceReader { + readonly IBinaryReader reader; + readonly long baseFileOffset; + readonly ResourceDataCreator resourceDataCreator; + readonly CreateResourceDataDelegate createResourceDataDelegate; + + ResourceReader(ModuleDef module, IBinaryReader reader, CreateResourceDataDelegate createResourceDataDelegate) { + this.reader = reader; + this.resourceDataCreator = new ResourceDataCreator(module); + this.createResourceDataDelegate = createResourceDataDelegate; + + var stream = reader as IImageStream; + this.baseFileOffset = stream == null ? 0 : (long)stream.FileOffset; + } + + /// + /// Returns true if it's possibly resources file data + /// + /// Reader + /// + public static bool CouldBeResourcesFile(IBinaryReader reader) { + return reader.CanRead(4) && reader.ReadUInt32() == 0xBEEFCACE; + } + + /// + /// Reads a .NET resource + /// + /// Owner module + /// Data of resource + /// + public static ResourceElementSet Read(ModuleDef module, IBinaryReader reader) { + return Read(module, reader, null); + } + + /// + /// Reads a .NET resource + /// + /// Owner module + /// Data of resource + /// Call back that gets called to create a instance. Can be null. + /// + public static ResourceElementSet Read(ModuleDef module, IBinaryReader reader, CreateResourceDataDelegate createResourceDataDelegate) { + return new ResourceReader(module, reader, createResourceDataDelegate).Read(); + } + + ResourceElementSet Read() { + ResourceElementSet resources = new ResourceElementSet(); + + uint sig = reader.ReadUInt32(); + if (sig != 0xBEEFCACE) + throw new ResourceReaderException(string.Format("Invalid resource sig: {0:X8}", sig)); + if (!CheckReaders()) + throw new ResourceReaderException("Invalid resource reader"); + int version = reader.ReadInt32(); + if (version != 2)//TODO: Support version 1 + throw new ResourceReaderException(string.Format("Invalid resource version: {0}", version)); + int numResources = reader.ReadInt32(); + if (numResources < 0) + throw new ResourceReaderException(string.Format("Invalid number of resources: {0}", numResources)); + int numUserTypes = reader.ReadInt32(); + if (numUserTypes < 0) + throw new ResourceReaderException(string.Format("Invalid number of user types: {0}", numUserTypes)); + + var userTypes = new List(); + for (int i = 0; i < numUserTypes; i++) + userTypes.Add(new UserResourceType(reader.ReadString(), ResourceTypeCode.UserTypes + i)); + reader.Position = (reader.Position + 7) & ~7; + + var hashes = new int[numResources]; + for (int i = 0; i < numResources; i++) + hashes[i] = reader.ReadInt32(); + var offsets = new int[numResources]; + for (int i = 0; i < numResources; i++) + offsets[i] = reader.ReadInt32(); + + long baseOffset = reader.Position; + long dataBaseOffset = reader.ReadInt32(); + long nameBaseOffset = reader.Position; + long end = reader.Length; + + var infos = new List(numResources); + + for (int i = 0; i < numResources; i++) { + reader.Position = nameBaseOffset + offsets[i]; + var name = reader.ReadString(Encoding.Unicode); + long offset = dataBaseOffset + reader.ReadInt32(); + infos.Add(new ResourceInfo(name, offset)); + } + + infos.Sort((a, b) => a.offset.CompareTo(b.offset)); + for (int i = 0; i < infos.Count; i++) { + var info = infos[i]; + var element = new ResourceElement(); + element.Name = info.name; + reader.Position = info.offset; + long nextDataOffset = i == infos.Count - 1 ? end : infos[i + 1].offset; + int size = (int)(nextDataOffset - info.offset); + element.ResourceData = ReadResourceData(userTypes, size); + element.ResourceData.StartOffset = this.baseFileOffset + (FileOffset)info.offset; + element.ResourceData.EndOffset = this.baseFileOffset + (FileOffset)reader.Position; + + resources.Add(element); + } + + return resources; + } + + sealed class ResourceInfo { + public string name; + public long offset; + public ResourceInfo(string name, long offset) { + this.name = name; + this.offset = offset; + } + public override string ToString() { + return string.Format("{0:X8} - {1}", offset, name); + } + } + + IResourceData ReadResourceData(List userTypes, int size) { + uint code = ReadUInt32(reader); + switch ((ResourceTypeCode)code) { + case ResourceTypeCode.Null: return resourceDataCreator.CreateNull(); + case ResourceTypeCode.String: return resourceDataCreator.Create(reader.ReadString()); + case ResourceTypeCode.Boolean: return resourceDataCreator.Create(reader.ReadBoolean()); + case ResourceTypeCode.Char: return resourceDataCreator.Create((char)reader.ReadUInt16()); + case ResourceTypeCode.Byte: return resourceDataCreator.Create(reader.ReadByte()); + case ResourceTypeCode.SByte: return resourceDataCreator.Create(reader.ReadSByte()); + case ResourceTypeCode.Int16: return resourceDataCreator.Create(reader.ReadInt16()); + case ResourceTypeCode.UInt16: return resourceDataCreator.Create(reader.ReadUInt16()); + case ResourceTypeCode.Int32: return resourceDataCreator.Create(reader.ReadInt32()); + case ResourceTypeCode.UInt32: return resourceDataCreator.Create(reader.ReadUInt32()); + case ResourceTypeCode.Int64: return resourceDataCreator.Create(reader.ReadInt64()); + case ResourceTypeCode.UInt64: return resourceDataCreator.Create(reader.ReadUInt64()); + case ResourceTypeCode.Single: return resourceDataCreator.Create(reader.ReadSingle()); + case ResourceTypeCode.Double: return resourceDataCreator.Create(reader.ReadDouble()); + case ResourceTypeCode.Decimal: return resourceDataCreator.Create(reader.ReadDecimal()); + case ResourceTypeCode.DateTime: return resourceDataCreator.Create(DateTime.FromBinary(reader.ReadInt64())); + case ResourceTypeCode.TimeSpan: return resourceDataCreator.Create(new TimeSpan(reader.ReadInt64())); + case ResourceTypeCode.ByteArray:return resourceDataCreator.Create(reader.ReadBytes(reader.ReadInt32())); + case ResourceTypeCode.Stream: return resourceDataCreator.CreateStream(reader.ReadBytes(reader.ReadInt32())); + default: + int userTypeIndex = (int)(code - (uint)ResourceTypeCode.UserTypes); + if (userTypeIndex < 0 || userTypeIndex >= userTypes.Count) + throw new ResourceReaderException(string.Format("Invalid resource data code: {0}", code)); + var userType = userTypes[userTypeIndex]; + var serializedData = reader.ReadBytes(size); + if (createResourceDataDelegate != null) { + var res = createResourceDataDelegate(resourceDataCreator, userType, serializedData); + if (res != null) + return res; + } + return resourceDataCreator.CreateSerialized(serializedData, userType); + } + } + + static uint ReadUInt32(IBinaryReader reader) { + try { + return reader.Read7BitEncodedUInt32(); + } + catch { + throw new ResourceReaderException("Invalid encoded int32"); + } + } + + bool CheckReaders() { + bool validReader = false; + + int numReaders = reader.ReadInt32(); + if (numReaders < 0) + throw new ResourceReaderException(string.Format("Invalid number of readers: {0}", numReaders)); + int readersSize = reader.ReadInt32(); + if (readersSize < 0) + throw new ResourceReaderException(string.Format("Invalid readers size: {0:X8}", readersSize)); + + for (int i = 0; i < numReaders; i++) { + var resourceReaderFullName = reader.ReadString(); + var resourceSetFullName = reader.ReadString(); + if (Regex.IsMatch(resourceReaderFullName, @"^System\.Resources\.ResourceReader,\s*mscorlib,")) + validReader = true; + } + + return validReader; + } + } +} diff --git a/dnlib/DotNet/Resources/ResourceTypeCode.cs b/dnlib/DotNet/Resources/ResourceTypeCode.cs new file mode 100644 index 0000000..10839c9 --- /dev/null +++ b/dnlib/DotNet/Resources/ResourceTypeCode.cs @@ -0,0 +1,108 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Resources { + /// + /// Type of resource + /// + public enum ResourceTypeCode { + /// + /// null + /// + Null = 0, + + /// + /// + /// + String = 1, + + /// + /// + /// + Boolean = 2, + + /// + /// + /// + Char = 3, + + /// + /// + /// + Byte = 4, + + /// + /// + /// + SByte = 5, + + /// + /// + /// + Int16 = 6, + + /// + /// + /// + UInt16 = 7, + + /// + /// + /// + Int32 = 8, + + /// + /// + /// + UInt32 = 9, + + /// + /// + /// + Int64 = 0x0A, + + /// + /// + /// + UInt64 = 0x0B, + + /// + /// + /// + Single = 0x0C, + + /// + /// + /// + Double = 0x0D, + + /// + /// + /// + Decimal = 0x0E, + + /// + /// + /// + DateTime = 0x0F, + + /// + /// + /// + TimeSpan = 0x10, + + /// + /// array + /// + ByteArray = 0x20, + + /// + /// + /// + Stream = 0x21, + + /// + /// Start of user types + /// + UserTypes = 0x40, + } +} diff --git a/dnlib/DotNet/Resources/ResourceWriter.cs b/dnlib/DotNet/Resources/ResourceWriter.cs new file mode 100644 index 0000000..20d10df --- /dev/null +++ b/dnlib/DotNet/Resources/ResourceWriter.cs @@ -0,0 +1,137 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text; + +namespace dnlib.DotNet.Resources { + /// + /// Writes .NET resources + /// + public sealed class ResourceWriter { + ModuleDef module; + BinaryWriter writer; + ResourceElementSet resources; + ResourceDataCreator typeCreator; + Dictionary dataToNewType = new Dictionary(); + + ResourceWriter(ModuleDef module, Stream stream, ResourceElementSet resources) { + this.module = module; + this.typeCreator = new ResourceDataCreator(module); + this.writer = new BinaryWriter(stream); + this.resources = resources; + } + + /// + /// Write .NET resources + /// + /// Owner module + /// Output stream + /// .NET resources + public static void Write(ModuleDef module, Stream stream, ResourceElementSet resources) { + new ResourceWriter(module, stream, resources).Write(); + } + + void Write() { + InitializeUserTypes(); + + writer.Write(0xBEEFCACE); + writer.Write(1); + WriteReaderType(); + writer.Write(2);//TODO: Support version 1 + writer.Write(resources.Count); + writer.Write(typeCreator.Count); + foreach (var userType in typeCreator.GetSortedTypes()) + writer.Write(userType.Name); + int extraBytes = 8 - ((int)writer.BaseStream.Position & 7); + if (extraBytes != 8) { + for (int i = 0; i < extraBytes; i++) + writer.Write((byte)'X'); + } + + var nameOffsetStream = new MemoryStream(); + var nameOffsetWriter = new BinaryWriter(nameOffsetStream, Encoding.Unicode); + var dataStream = new MemoryStream(); + var dataWriter = new BinaryWriter(dataStream); + var hashes = new int[resources.Count]; + var offsets = new int[resources.Count]; + var formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.File | StreamingContextStates.Persistence)); + int index = 0; + foreach (var info in resources.ResourceElements) { + offsets[index] = (int)nameOffsetWriter.BaseStream.Position; + hashes[index] = (int)Hash(info.Name); + index++; + nameOffsetWriter.Write(info.Name); + nameOffsetWriter.Write((int)dataWriter.BaseStream.Position); + WriteData(dataWriter, info, formatter); + } + + Array.Sort(hashes, offsets); + foreach (var hash in hashes) + writer.Write(hash); + foreach (var offset in offsets) + writer.Write(offset); + writer.Write((int)writer.BaseStream.Position + (int)nameOffsetStream.Length + 4); + writer.Write(nameOffsetStream.ToArray()); + writer.Write(dataStream.ToArray()); + } + + void WriteData(BinaryWriter writer, ResourceElement info, IFormatter formatter) { + var code = GetResourceType(info.ResourceData); + WriteUInt32(writer, (uint)code); + info.ResourceData.WriteData(writer, formatter); + } + + static void WriteUInt32(BinaryWriter writer, uint value) { + while (value >= 0x80) { + writer.Write((byte)(value | 0x80)); + value >>= 7; + } + writer.Write((byte)value); + } + + ResourceTypeCode GetResourceType(IResourceData data) { + if (data is BuiltInResourceData) + return data.Code; + + var userData = (UserResourceData)data; + return dataToNewType[userData].Code; + } + + static uint Hash(string key) { + uint val = 0x1505; + foreach (var c in key) + val = ((val << 5) + val) ^ (uint)c; + return val; + } + + void InitializeUserTypes() { + foreach (var resource in resources.ResourceElements) { + var data = resource.ResourceData as UserResourceData; + if (data == null) + continue; + var newType = typeCreator.CreateUserResourceType(data.TypeName); + dataToNewType[data] = newType; + } + } + + void WriteReaderType() { + var memStream = new MemoryStream(); + var headerWriter = new BinaryWriter(memStream); + var mscorlibFullName = GetMscorlibFullname(); + headerWriter.Write("System.Resources.ResourceReader, " + mscorlibFullName); + headerWriter.Write("System.Resources.RuntimeResourceSet"); + writer.Write((int)memStream.Position); + writer.Write(memStream.ToArray()); + } + + string GetMscorlibFullname() { + if (module.CorLibTypes.AssemblyRef.Name == "mscorlib") + return module.CorLibTypes.AssemblyRef.FullName; + return "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; + } + } +} diff --git a/dnlib/DotNet/Resources/UserResourceData.cs b/dnlib/DotNet/Resources/UserResourceData.cs new file mode 100644 index 0000000..295b1cd --- /dev/null +++ b/dnlib/DotNet/Resources/UserResourceData.cs @@ -0,0 +1,79 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using System.Runtime.Serialization; +using dnlib.IO; + +namespace dnlib.DotNet.Resources { + /// + /// Base class of all user data + /// + public abstract class UserResourceData : IResourceData { + readonly UserResourceType type; + + /// + /// Full name including assembly of type + /// + public string TypeName { + get { return type.Name; } + } + + /// + /// User type code + /// + public ResourceTypeCode Code { + get { return type.Code; } + } + + /// + public FileOffset StartOffset { get; set; } + + /// + public FileOffset EndOffset { get; set; } + + /// + /// Constructor + /// + /// User resource type + public UserResourceData(UserResourceType type) { + this.type = type; + } + + /// + public abstract void WriteData(BinaryWriter writer, IFormatter formatter); + } + + /// + /// Binary data + /// + public sealed class BinaryResourceData : UserResourceData { + byte[] data; + + /// + /// Gets the raw data + /// + public byte[] Data { + get { return data; } + } + + /// + /// Constructor + /// + /// User resource type + /// Raw serialized data + public BinaryResourceData(UserResourceType type, byte[] data) + : base(type) { + this.data = data; + } + + /// + public override void WriteData(BinaryWriter writer, IFormatter formatter) { + writer.Write(data); + } + + /// + public override string ToString() { + return string.Format("Binary: Length: {0}", data.Length); + } + } +} diff --git a/dnlib/DotNet/Resources/UserResourceType.cs b/dnlib/DotNet/Resources/UserResourceType.cs new file mode 100644 index 0000000..ed251b9 --- /dev/null +++ b/dnlib/DotNet/Resources/UserResourceType.cs @@ -0,0 +1,40 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Resources { + /// + /// User resource type + /// + public sealed class UserResourceType { + readonly string name; + readonly ResourceTypeCode code; + + /// + /// Full name including assembly of type + /// + public string Name { + get { return name; } + } + + /// + /// User type code + /// + public ResourceTypeCode Code { + get { return code; } + } + + /// + /// Constructor + /// + /// Full name including assembly of type + /// User type code + public UserResourceType(string name, ResourceTypeCode code) { + this.name = name; + this.code = code; + } + + /// + public override string ToString() { + return string.Format("{0:X2} {1}", (int)code, name); + } + } +} diff --git a/dnlib/DotNet/SecurityAction.cs b/dnlib/DotNet/SecurityAction.cs new file mode 100644 index 0000000..85fa0a9 --- /dev/null +++ b/dnlib/DotNet/SecurityAction.cs @@ -0,0 +1,53 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Security action. See CorHdr.h/CorDeclSecurity + /// + public enum SecurityAction : short { + /// Mask allows growth of enum. + ActionMask = 0x001F, + /// + ActionNil = 0x0000, + /// + Request = 0x0001, + /// + Demand = 0x0002, + /// + Assert = 0x0003, + /// + Deny = 0x0004, + /// + PermitOnly = 0x0005, + /// + LinktimeCheck = 0x0006, + /// + LinkDemand = LinktimeCheck, + /// + InheritanceCheck = 0x0007, + /// + InheritDemand = InheritanceCheck, + /// + RequestMinimum = 0x0008, + /// + RequestOptional = 0x0009, + /// + RequestRefuse = 0x000A, + /// Persisted grant set at prejit time + PrejitGrant = 0x000B, + /// Persisted grant set at prejit time + PreJitGrant = PrejitGrant, + /// Persisted denied set at prejit time + PrejitDenied = 0x000C, + /// Persisted denied set at prejit time + PreJitDeny = PrejitDenied, + /// + NonCasDemand = 0x000D, + /// + NonCasLinkDemand = 0x000E, + /// + NonCasInheritance = 0x000F, + /// Maximum legal value + MaximumValue = 0x000F, + } +} diff --git a/dnlib/DotNet/SecurityAttribute.cs b/dnlib/DotNet/SecurityAttribute.cs new file mode 100644 index 0000000..671b968 --- /dev/null +++ b/dnlib/DotNet/SecurityAttribute.cs @@ -0,0 +1,120 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A DeclSecurity security attribute + /// + public sealed class SecurityAttribute : ICustomAttribute { + ITypeDefOrRef attrType; + readonly ThreadSafe.IList namedArguments; + + /// + /// Gets/sets the attribute type + /// + public ITypeDefOrRef AttributeType { + get { return attrType; } + set { attrType = value; } + } + + /// + /// Gets the full name of the attribute type + /// + public string TypeFullName { + get { + var at = attrType; + return at == null ? string.Empty : at.FullName; + } + } + + /// + /// Gets all named arguments (field and property values) + /// + public ThreadSafe.IList NamedArguments { + get { return namedArguments; } + } + + /// + /// true if is not empty + /// + public bool HasNamedArguments { + get { return namedArguments.Count > 0; } + } + + /// + /// Gets all s that are field arguments + /// + public IEnumerable Fields { + get { + foreach (var namedArg in namedArguments.GetSafeEnumerable()) { + if (namedArg.IsField) + yield return namedArg; + } + } + } + + /// + /// Gets all s that are property arguments + /// + public IEnumerable Properties { + get { + foreach (var namedArg in namedArguments.GetSafeEnumerable()) { + if (namedArg.IsProperty) + yield return namedArg; + } + } + } + + /// + /// Creates a from an XML string. + /// + /// Owner module + /// XML + /// A new instance + public static SecurityAttribute CreateFromXml(ModuleDef module, string xml) { + var attrType = module.CorLibTypes.GetTypeRef("System.Security.Permissions", "PermissionSetAttribute"); + var utf8Xml = new UTF8String(xml); + var namedArg = new CANamedArgument(false, module.CorLibTypes.String, "XML", new CAArgument(module.CorLibTypes.String, utf8Xml)); + var list = ThreadSafeListCreator.Create(namedArg); + return new SecurityAttribute(attrType, list); + } + + /// + /// Default constructor + /// + public SecurityAttribute() + : this(null, null) { + } + + /// + /// Constructor + /// + /// Attribute type + public SecurityAttribute(ITypeDefOrRef attrType) + : this(attrType, null) { + } + + /// + /// Constructor + /// + /// Attribute type + /// Named arguments that will be owned by this instance + public SecurityAttribute(ITypeDefOrRef attrType, IList namedArguments) { + this.attrType = attrType; + this.namedArguments = ThreadSafeListCreator.MakeThreadSafe(namedArguments ?? new List()); + } + + /// + public override string ToString() { + return TypeFullName; + } + } +} diff --git a/dnlib/DotNet/SerializationType.cs b/dnlib/DotNet/SerializationType.cs new file mode 100644 index 0000000..16046d3 --- /dev/null +++ b/dnlib/DotNet/SerializationType.cs @@ -0,0 +1,49 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// See CorSerializationType/CorHdr.h + /// + enum SerializationType : byte { + /// + Undefined = 0, + /// System.Boolean + Boolean = ElementType.Boolean, + /// System.Char + Char = ElementType.Char, + /// System.SByte + I1 = ElementType.I1, + /// System.Byte + U1 = ElementType.U1, + /// System.Int16 + I2 = ElementType.I2, + /// System.UInt16 + U2 = ElementType.U2, + /// System.Int32 + I4 = ElementType.I4, + /// System.UInt32 + U4 = ElementType.U4, + /// System.Int64 + I8 = ElementType.I8, + /// System.UInt64 + U8 = ElementType.U8, + /// System.Single + R4 = ElementType.R4, + /// System.Double + R8 = ElementType.R8, + /// System.String + String = ElementType.String, + /// Single-dimension, zero lower bound array ([]) + SZArray = ElementType.SZArray, + /// System.Type + Type = 0x50, + /// Boxed value type + TaggedObject= 0x51, + /// A field + Field = 0x53, + /// A property + Property = 0x54, + /// An enum + Enum = 0x55, + } +} diff --git a/dnlib/DotNet/SigComparer.cs b/dnlib/DotNet/SigComparer.cs new file mode 100644 index 0000000..6f35471 --- /dev/null +++ b/dnlib/DotNet/SigComparer.cs @@ -0,0 +1,4995 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace dnlib.DotNet { + /// + /// Compares types + /// + public sealed class TypeEqualityComparer : IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer { + readonly SigComparerOptions options; + + /// + /// Default instance + /// + public static readonly TypeEqualityComparer Instance = new TypeEqualityComparer(0); + + /// + /// Case insensitive names + /// + public static readonly TypeEqualityComparer CaseInsensitive = new TypeEqualityComparer(SigComparerOptions.CaseInsensitiveAll); + + /// + /// Constructor + /// + /// Comparison options + public TypeEqualityComparer(SigComparerOptions options) { + this.options = options; + } + + /// + public bool Equals(IType x, IType y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(IType obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(ITypeDefOrRef x, ITypeDefOrRef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(ITypeDefOrRef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(TypeRef x, TypeRef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(TypeRef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(TypeDef x, TypeDef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(TypeDef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(TypeSpec x, TypeSpec y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(TypeSpec obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(TypeSig x, TypeSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(TypeSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(ExportedType x, ExportedType y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(ExportedType obj) { + return new SigComparer(options).GetHashCode(obj); + } + } + + /// + /// Compares fields + /// + public sealed class FieldEqualityComparer : IEqualityComparer, IEqualityComparer, IEqualityComparer { + readonly SigComparerOptions options; + + /// + /// Compares the declaring types + /// + public static readonly FieldEqualityComparer CompareDeclaringTypes = new FieldEqualityComparer(SigComparerOptions.CompareMethodFieldDeclaringType); + + /// + /// Doesn't compare the declaring types + /// + public static readonly FieldEqualityComparer DontCompareDeclaringTypes = new FieldEqualityComparer(0); + + /// + /// Compares the declaring types, case insensitive names + /// + public static readonly FieldEqualityComparer CaseInsensitiveCompareDeclaringTypes = new FieldEqualityComparer(SigComparerOptions.CompareMethodFieldDeclaringType | SigComparerOptions.CaseInsensitiveAll); + + /// + /// Doesn't compare the declaring types, case insensitive names + /// + public static readonly FieldEqualityComparer CaseInsensitiveDontCompareDeclaringTypes = new FieldEqualityComparer(SigComparerOptions.CaseInsensitiveAll); + + /// + /// Constructor + /// + /// Comparison options + public FieldEqualityComparer(SigComparerOptions options) { + this.options = options; + } + + /// + public bool Equals(IField x, IField y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(IField obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(FieldDef x, FieldDef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(FieldDef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(MemberRef x, MemberRef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(MemberRef obj) { + return new SigComparer(options).GetHashCode(obj); + } + } + + /// + /// Compares methods + /// + public sealed class MethodEqualityComparer : IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer { + readonly SigComparerOptions options; + + /// + /// Compares the declaring types + /// + public static readonly MethodEqualityComparer CompareDeclaringTypes = new MethodEqualityComparer(SigComparerOptions.CompareMethodFieldDeclaringType); + + /// + /// Doesn't compare the declaring types + /// + public static readonly MethodEqualityComparer DontCompareDeclaringTypes = new MethodEqualityComparer(0); + + /// + /// Compares the declaring types, case insensitive names + /// + public static readonly MethodEqualityComparer CaseInsensitiveCompareDeclaringTypes = new MethodEqualityComparer(SigComparerOptions.CompareMethodFieldDeclaringType | SigComparerOptions.CaseInsensitiveAll); + + /// + /// Doesn't compare the declaring types, case insensitive names + /// + public static readonly MethodEqualityComparer CaseInsensitiveDontCompareDeclaringTypes = new MethodEqualityComparer(SigComparerOptions.CaseInsensitiveAll); + + /// + /// Constructor + /// + /// Comparison options + public MethodEqualityComparer(SigComparerOptions options) { + this.options = options; + } + + /// + public bool Equals(IMethod x, IMethod y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(IMethod obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(IMethodDefOrRef x, IMethodDefOrRef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(IMethodDefOrRef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(MethodDef x, MethodDef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(MethodDef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(MemberRef x, MemberRef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(MemberRef obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(MethodSpec x, MethodSpec y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(MethodSpec obj) { + return new SigComparer(options).GetHashCode(obj); + } + } + + /// + /// Compares properties + /// + public sealed class PropertyEqualityComparer : IEqualityComparer { + readonly SigComparerOptions options; + + /// + /// Compares the declaring types + /// + public static readonly PropertyEqualityComparer CompareDeclaringTypes = new PropertyEqualityComparer(SigComparerOptions.ComparePropertyDeclaringType); + + /// + /// Doesn't compare the declaring types + /// + public static readonly PropertyEqualityComparer DontCompareDeclaringTypes = new PropertyEqualityComparer(0); + + /// + /// Compares the declaring types, case insensitive names + /// + public static readonly PropertyEqualityComparer CaseInsensitiveCompareDeclaringTypes = new PropertyEqualityComparer(SigComparerOptions.ComparePropertyDeclaringType | SigComparerOptions.CaseInsensitiveAll); + + /// + /// Doesn't compare the declaring types, case insensitive names + /// + public static readonly PropertyEqualityComparer CaseInsensitiveDontCompareDeclaringTypes = new PropertyEqualityComparer(SigComparerOptions.CaseInsensitiveAll); + + /// + /// Constructor + /// + /// Comparison options + public PropertyEqualityComparer(SigComparerOptions options) { + this.options = options; + } + + /// + public bool Equals(PropertyDef x, PropertyDef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(PropertyDef obj) { + return new SigComparer(options).GetHashCode(obj); + } + } + + /// + /// Compares events + /// + public sealed class EventEqualityComparer : IEqualityComparer { + readonly SigComparerOptions options; + + /// + /// Compares the declaring types + /// + public static readonly EventEqualityComparer CompareDeclaringTypes = new EventEqualityComparer(SigComparerOptions.CompareEventDeclaringType); + + /// + /// Doesn't compare the declaring types + /// + public static readonly EventEqualityComparer DontCompareDeclaringTypes = new EventEqualityComparer(0); + + /// + /// Compares the declaring types, case insensitive names + /// + public static readonly EventEqualityComparer CaseInsensitiveCompareDeclaringTypes = new EventEqualityComparer(SigComparerOptions.CompareEventDeclaringType | SigComparerOptions.CaseInsensitiveAll); + + /// + /// Doesn't compare the declaring types, case insensitive names + /// + public static readonly EventEqualityComparer CaseInsensitiveDontCompareDeclaringTypes = new EventEqualityComparer(SigComparerOptions.CaseInsensitiveAll); + + /// + /// Constructor + /// + /// Comparison options + public EventEqualityComparer(SigComparerOptions options) { + this.options = options; + } + + /// + public bool Equals(EventDef x, EventDef y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(EventDef obj) { + return new SigComparer(options).GetHashCode(obj); + } + } + + /// + /// Compares calling convention signatures + /// + public sealed class SignatureEqualityComparer : IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer, IEqualityComparer { + readonly SigComparerOptions options; + + /// + /// Default instance + /// + public static readonly SignatureEqualityComparer Instance = new SignatureEqualityComparer(0); + + /// + /// Case insensitive names + /// + public static readonly SignatureEqualityComparer CaseInsensitive = new SignatureEqualityComparer(SigComparerOptions.CaseInsensitiveAll); + + /// + /// Constructor + /// + /// Comparison options + public SignatureEqualityComparer(SigComparerOptions options) { + this.options = options; + } + + /// + public bool Equals(CallingConventionSig x, CallingConventionSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(CallingConventionSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(MethodBaseSig x, MethodBaseSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(MethodBaseSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(MethodSig x, MethodSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(MethodSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(PropertySig x, PropertySig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(PropertySig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(FieldSig x, FieldSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(FieldSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(LocalSig x, LocalSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(LocalSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + + /// + public bool Equals(GenericInstMethodSig x, GenericInstMethodSig y) { + return new SigComparer(options).Equals(x, y); + } + + /// + public int GetHashCode(GenericInstMethodSig obj) { + return new SigComparer(options).GetHashCode(obj); + } + } + + /// + /// Decides how to compare types, sigs, etc + /// + [Flags] + public enum SigComparerOptions : uint { + /// + /// Don't compare a type's (assembly/module) scope + /// + DontCompareTypeScope = 1, + + /// + /// Compares a method/field's declaring type. + /// + CompareMethodFieldDeclaringType = 2, + + /// + /// Compares a property's declaring type + /// + ComparePropertyDeclaringType = 4, + + /// + /// Compares an event's declaring type + /// + CompareEventDeclaringType = 8, + + /// + /// Compares method / field / property / event declaring types + /// + CompareDeclaringTypes = CompareMethodFieldDeclaringType | ComparePropertyDeclaringType | CompareEventDeclaringType, + + /// + /// Compares parameters after a sentinel in method sigs. Should not be enabled when + /// comparing s against s since it's + /// not possible to get those sentinel params from a . + /// + CompareSentinelParams = 0x10, + + /// + /// Compares assembly public key token + /// + CompareAssemblyPublicKeyToken = 0x20, + + /// + /// Compares assembly version + /// + CompareAssemblyVersion = 0x40, + + /// + /// Compares assembly locale + /// + CompareAssemblyLocale = 0x80, + + /// + /// If set, a and an can reference the + /// global <Module> type. + /// + TypeRefCanReferenceGlobalType = 0x100, + + /// + /// Don't compare a method/property's return type + /// + DontCompareReturnType = 0x200, + + /// + /// If set, all generic parameters are replaced with their generic arguments prior + /// to comparing types. You should enable this when comparing a method, field, property + /// or an event to a , , + /// or an if the owner type could + /// be a generic instance type. + /// + SubstituteGenericParameters = 0x400, + + /// + /// Type namespaces are case insensitive + /// + CaseInsensitiveTypeNamespaces = 0x800, + + /// + /// Type names (not namespaces) are case insensitive + /// + CaseInsensitiveTypeNames = 0x1000, + + /// + /// Type names and namespaces are case insensitive + /// + CaseInsensitiveTypes = CaseInsensitiveTypeNamespaces | CaseInsensitiveTypeNames, + + /// + /// Method and field names are case insensitive + /// + CaseInsensitiveMethodFieldNames = 0x2000, + + /// + /// Property names are case insensitive + /// + CaseInsensitivePropertyNames = 0x4000, + + /// + /// Event names are case insensitive + /// + CaseInsensitiveEventNames = 0x8000, + + /// + /// Type namespaces, type names, method names, field names, property names + /// and event names are all case insensitive + /// + CaseInsensitiveAll = CaseInsensitiveTypeNamespaces | CaseInsensitiveTypeNames | + CaseInsensitiveMethodFieldNames | CaseInsensitivePropertyNames | + CaseInsensitiveEventNames, + + /// + /// A field that is can compare equal to + /// a + /// + PrivateScopeFieldIsComparable = 0x10000, + + /// + /// A method that is can compare equal to + /// a + /// + PrivateScopeMethodIsComparable = 0x20000, + + /// + /// A field that is and a method that is + /// can compare equal to a + /// + PrivateScopeIsComparable = PrivateScopeFieldIsComparable | PrivateScopeMethodIsComparable, + + /// + /// Raw (bit by bit) comparison of signatures. This matches what the CLR does when it + /// compares signatures. This means that metadata tokens will be compared. + /// + RawSignatureCompare = 0x40000, + + /// + /// Ignore required and optional modifiers when comparing s. + /// They're already ignored when comparing eg. a with a + /// . + /// + IgnoreModifiers = 0x80000, + + /// + /// By default, all module and assembly compares when they're both the system library + /// (eg. mscorlib or System.Runtime.dll) return true, even if they're really different, + /// eg. mscorlib (.NET 2.0) vs mscorlib (Windows CE). If this flag is set, the system + /// library is compared just like any other module/assembly. + /// + MscorlibIsNotSpecial = 0x100000, + + /// + /// Don't project CLR compatible WinMD references back to the original CLR type/method before comparing + /// + DontProjectWinMDRefs = 0x200000, + + /// + /// Don't check type equivalence when comparing types. Starting with .NET 4.0, two different + /// types can be considered equivalent if eg. a TypeIdentifierAttribute is used. + /// + DontCheckTypeEquivalence = 0x400000, + } + + /// + /// Compares types, signatures, methods, fields, properties, events + /// + public struct SigComparer { + const int HASHCODE_MAGIC_GLOBAL_TYPE = 1654396648; + const int HASHCODE_MAGIC_NESTED_TYPE = -1049070942; + const int HASHCODE_MAGIC_ET_MODULE = -299744851; + const int HASHCODE_MAGIC_ET_VALUEARRAY = -674970533; + const int HASHCODE_MAGIC_ET_GENERICINST = -2050514639; + const int HASHCODE_MAGIC_ET_VAR = 1288450097; + const int HASHCODE_MAGIC_ET_MVAR = -990598495; + const int HASHCODE_MAGIC_ET_ARRAY = -96331531; + const int HASHCODE_MAGIC_ET_SZARRAY = 871833535; + const int HASHCODE_MAGIC_ET_BYREF = -634749586; + const int HASHCODE_MAGIC_ET_PTR = 1976400808; + const int HASHCODE_MAGIC_ET_SENTINEL = 68439620; + + RecursionCounter recursionCounter; + SigComparerOptions options; + GenericArguments genericArguments; + readonly ModuleDef sourceModule; + + bool DontCompareTypeScope { + get { return (options & SigComparerOptions.DontCompareTypeScope) != 0; } + } + + bool CompareMethodFieldDeclaringType { + get { return (options & SigComparerOptions.CompareMethodFieldDeclaringType) != 0; } + } + + bool ComparePropertyDeclaringType { + get { return (options & SigComparerOptions.ComparePropertyDeclaringType) != 0; } + } + + bool CompareEventDeclaringType { + get { return (options & SigComparerOptions.CompareEventDeclaringType) != 0; } + } + + bool CompareSentinelParams { + get { return (options & SigComparerOptions.CompareSentinelParams) != 0; } + } + + bool CompareAssemblyPublicKeyToken { + get { return (options & SigComparerOptions.CompareAssemblyPublicKeyToken) != 0; } + } + + bool CompareAssemblyVersion { + get { return (options & SigComparerOptions.CompareAssemblyVersion) != 0; } + } + + bool CompareAssemblyLocale { + get { return (options & SigComparerOptions.CompareAssemblyLocale) != 0; } + } + + bool TypeRefCanReferenceGlobalType { + get { return (options & SigComparerOptions.TypeRefCanReferenceGlobalType) != 0; } + } + + bool DontCompareReturnType { + get { return (options & SigComparerOptions.DontCompareReturnType) != 0; } + } + + bool SubstituteGenericParameters { + get { return (options & SigComparerOptions.SubstituteGenericParameters) != 0; } + } + + bool CaseInsensitiveTypeNamespaces { + get { return (options & SigComparerOptions.CaseInsensitiveTypeNamespaces) != 0; } + } + + bool CaseInsensitiveTypeNames { + get { return (options & SigComparerOptions.CaseInsensitiveTypeNames) != 0; } + } + + bool CaseInsensitiveMethodFieldNames { + get { return (options & SigComparerOptions.CaseInsensitiveMethodFieldNames) != 0; } + } + + bool CaseInsensitivePropertyNames { + get { return (options & SigComparerOptions.CaseInsensitivePropertyNames) != 0; } + } + + bool CaseInsensitiveEventNames { + get { return (options & SigComparerOptions.CaseInsensitiveEventNames) != 0; } + } + + bool PrivateScopeFieldIsComparable { + get { return (options & SigComparerOptions.PrivateScopeFieldIsComparable) != 0; } + } + + bool PrivateScopeMethodIsComparable { + get { return (options & SigComparerOptions.PrivateScopeMethodIsComparable) != 0; } + } + + bool RawSignatureCompare { + get { return (options & SigComparerOptions.RawSignatureCompare) != 0; } + } + + bool IgnoreModifiers { + get { return (options & SigComparerOptions.IgnoreModifiers) != 0; } + } + + bool MscorlibIsNotSpecial { + get { return (options & SigComparerOptions.MscorlibIsNotSpecial) != 0; } + } + + bool DontProjectWinMDRefs { + get { return (options & SigComparerOptions.DontProjectWinMDRefs) != 0; } + } + + bool DontCheckTypeEquivalence { + get { return (options & SigComparerOptions.DontCheckTypeEquivalence) != 0; } + } + + /// + /// Constructor + /// + /// Comparison options + public SigComparer(SigComparerOptions options) + : this(options, null) { + } + + /// + /// Constructor + /// + /// Comparison options + /// The module which the comparison take place in. + public SigComparer(SigComparerOptions options, ModuleDef sourceModule) { + this.recursionCounter = new RecursionCounter(); + this.options = options; + this.genericArguments = null; + this.sourceModule = sourceModule; + } + + /// + /// is mapped to , so use + /// the same hash code for both + /// + int GetHashCode_FnPtr_SystemIntPtr() { + // ******************************************** + // IMPORTANT: This must match GetHashCode(TYPE) + // ******************************************** + + return GetHashCode_TypeNamespace("System") + + GetHashCode_TypeName("IntPtr"); + } + + bool Equals_Names(bool caseInsensitive, UTF8String a, UTF8String b) { + if (caseInsensitive) + return UTF8String.ToSystemStringOrEmpty(a).Equals(UTF8String.ToSystemStringOrEmpty(b), StringComparison.OrdinalIgnoreCase); + return UTF8String.Equals(a, b); + } + + bool Equals_Names(bool caseInsensitive, string a, string b) { + if (caseInsensitive) + return (a ?? string.Empty).Equals(b ?? string.Empty, StringComparison.OrdinalIgnoreCase); + return (a ?? string.Empty) == (b ?? string.Empty); + } + + int GetHashCode_Name(bool caseInsensitive, string a) { + if (caseInsensitive) + return (a ?? string.Empty).ToUpperInvariant().GetHashCode(); + return (a ?? string.Empty).GetHashCode(); + } + + bool Equals_TypeNamespaces(UTF8String a, UTF8String b) { + return Equals_Names(CaseInsensitiveTypeNamespaces, a, b); + } + + bool Equals_TypeNamespaces(UTF8String a, string b) { + return Equals_Names(CaseInsensitiveTypeNamespaces, UTF8String.ToSystemStringOrEmpty(a), b); + } + + int GetHashCode_TypeNamespace(UTF8String a) { + return GetHashCode_Name(CaseInsensitiveTypeNamespaces, UTF8String.ToSystemStringOrEmpty(a)); + } + + int GetHashCode_TypeNamespace(string a) { + return GetHashCode_Name(CaseInsensitiveTypeNamespaces, a); + } + + bool Equals_TypeNames(UTF8String a, UTF8String b) { + return Equals_Names(CaseInsensitiveTypeNames, a, b); + } + + bool Equals_TypeNames(UTF8String a, string b) { + return Equals_Names(CaseInsensitiveTypeNames, UTF8String.ToSystemStringOrEmpty(a), b); + } + + int GetHashCode_TypeName(UTF8String a) { + return GetHashCode_Name(CaseInsensitiveTypeNames, UTF8String.ToSystemStringOrEmpty(a)); + } + + int GetHashCode_TypeName(string a) { + return GetHashCode_Name(CaseInsensitiveTypeNames, a); + } + + bool Equals_MethodFieldNames(UTF8String a, UTF8String b) { + return Equals_Names(CaseInsensitiveMethodFieldNames, a, b); + } + + bool Equals_MethodFieldNames(UTF8String a, string b) { + return Equals_Names(CaseInsensitiveMethodFieldNames, UTF8String.ToSystemStringOrEmpty(a), b); + } + + int GetHashCode_MethodFieldName(UTF8String a) { + return GetHashCode_Name(CaseInsensitiveMethodFieldNames, UTF8String.ToSystemStringOrEmpty(a)); + } + + int GetHashCode_MethodFieldName(string a) { + return GetHashCode_Name(CaseInsensitiveMethodFieldNames, a); + } + + bool Equals_PropertyNames(UTF8String a, UTF8String b) { + return Equals_Names(CaseInsensitivePropertyNames, a, b); + } + + bool Equals_PropertyNames(UTF8String a, string b) { + return Equals_Names(CaseInsensitivePropertyNames, UTF8String.ToSystemStringOrEmpty(a), b); + } + + int GetHashCode_PropertyName(UTF8String a) { + return GetHashCode_Name(CaseInsensitivePropertyNames, UTF8String.ToSystemStringOrEmpty(a)); + } + + int GetHashCode_PropertyName(string a) { + return GetHashCode_Name(CaseInsensitivePropertyNames, a); + } + + bool Equals_EventNames(UTF8String a, UTF8String b) { + return Equals_Names(CaseInsensitiveEventNames, a, b); + } + + bool Equals_EventNames(UTF8String a, string b) { + return Equals_Names(CaseInsensitiveEventNames, UTF8String.ToSystemStringOrEmpty(a), b); + } + + int GetHashCode_EventName(UTF8String a) { + return GetHashCode_Name(CaseInsensitiveEventNames, UTF8String.ToSystemStringOrEmpty(a)); + } + + int GetHashCode_EventName(string a) { + return GetHashCode_Name(CaseInsensitiveEventNames, a); + } + + SigComparerOptions ClearOptions(SigComparerOptions flags) { + var old = options; + options &= ~flags; + return old; + } + + SigComparerOptions SetOptions(SigComparerOptions flags) { + var old = options; + options |= flags; + return old; + } + + void RestoreOptions(SigComparerOptions oldFlags) { + options = oldFlags; + } + + void InitializeGenericArguments() { + if (genericArguments == null) + genericArguments = new GenericArguments(); + } + + static GenericInstSig GetGenericInstanceType(IMemberRefParent parent) { + var ts = parent as TypeSpec; + if (ts == null) + return null; + return ts.TypeSig.RemoveModifiers() as GenericInstSig; + } + + bool Equals(IAssembly aAsm, IAssembly bAsm, TypeRef b) { + if (Equals(aAsm, bAsm)) + return true; + + // Could be an exported type. Resolve it and check again. + + var td = b.Resolve(sourceModule); + return td != null && Equals(aAsm, td.Module.Assembly); + } + + bool Equals(IAssembly aAsm, IAssembly bAsm, ExportedType b) { + if (Equals(aAsm, bAsm)) + return true; + + var td = b.Resolve(); + return td != null && Equals(aAsm, td.Module.Assembly); + } + + bool Equals(IAssembly aAsm, TypeRef a, IAssembly bAsm, TypeRef b) { + if (Equals(aAsm, bAsm)) + return true; + + // Could be exported types. Resolve them and check again. + + var tda = a.Resolve(sourceModule); + var tdb = b.Resolve(sourceModule); + return tda != null && tdb != null && Equals(tda.Module.Assembly, tdb.Module.Assembly); + } + + bool Equals(IAssembly aAsm, ExportedType a, IAssembly bAsm, ExportedType b) { + if (Equals(aAsm, bAsm)) + return true; + + var tda = a.Resolve(); + var tdb = b.Resolve(); + return tda != null && tdb != null && Equals(tda.Module.Assembly, tdb.Module.Assembly); + } + + bool Equals(IAssembly aAsm, TypeRef a, IAssembly bAsm, ExportedType b) { + if (Equals(aAsm, bAsm)) + return true; + + // Could be an exported type. Resolve it and check again. + + var tda = a.Resolve(sourceModule); + var tdb = b.Resolve(); + return tda != null && tdb != null && Equals(tda.Module.Assembly, tdb.Module.Assembly); + } + + bool Equals(TypeDef a, IModule bMod, TypeRef b) { + if (Equals(a.Module, bMod) && Equals(a.DefinitionAssembly, b.DefinitionAssembly)) + return true; + + // Could be an exported type. Resolve it and check again. + + var td = b.Resolve(sourceModule); + if (td == null) + return false; + if (!DontCheckTypeEquivalence) { + if (TIAHelper.Equivalent(a, td)) + return true; + } + return Equals(a.Module, td.Module) && Equals(a.DefinitionAssembly, td.DefinitionAssembly); + } + + bool Equals(TypeDef a, FileDef bFile, ExportedType b) { + if (Equals(a.Module, bFile) && Equals(a.DefinitionAssembly, b.DefinitionAssembly)) + return true; + + var td = b.Resolve(); + return td != null && Equals(a.Module, td.Module) && Equals(a.DefinitionAssembly, td.DefinitionAssembly); + } + + bool TypeDefScopeEquals(TypeDef a, TypeDef b) { + if (a == null || b == null) + return false; + if (!DontCheckTypeEquivalence) { + if (TIAHelper.Equivalent(a, b)) + return true; + } + return Equals(a.Module, b.Module); + } + + bool Equals(TypeRef a, IModule ma, TypeRef b, IModule mb) { + if (Equals(ma, mb) && Equals(a.DefinitionAssembly, b.DefinitionAssembly)) + return true; + + // Could be exported types. Resolve them and check again. + + var tda = a.Resolve(sourceModule); + var tdb = b.Resolve(sourceModule); + return tda != null && tdb != null && + Equals(tda.Module, tdb.Module) && Equals(tda.DefinitionAssembly, tdb.DefinitionAssembly); + } + + bool Equals(TypeRef a, IModule ma, ExportedType b, FileDef fb) { + if (Equals(ma, fb) && Equals(a.DefinitionAssembly, b.DefinitionAssembly)) + return true; + + // Could be an exported type. Resolve it and check again. + + var tda = a.Resolve(sourceModule); + var tdb = b.Resolve(); + return tda != null && tdb != null && + Equals(tda.Module, tdb.Module) && Equals(tda.DefinitionAssembly, tdb.DefinitionAssembly); + } + + bool Equals(Assembly aAsm, IAssembly bAsm, TypeRef b) { + if (Equals(bAsm, aAsm)) + return true; + + // Could be an exported type. Resolve it and check again. + + var td = b.Resolve(sourceModule); + return td != null && Equals(td.Module.Assembly, aAsm); + } + + bool Equals(Assembly aAsm, IAssembly bAsm, ExportedType b) { + if (Equals(bAsm, aAsm)) + return true; + + var td = b.Resolve(); + return td != null && Equals(td.Module.Assembly, aAsm); + } + + bool Equals(Type a, IModule bMod, TypeRef b) { + if (Equals(bMod, a.Module) && Equals(b.DefinitionAssembly, a.Assembly)) + return true; + + // Could be an exported type. Resolve it and check again. + + var td = b.Resolve(sourceModule); + return td != null && Equals(td.Module, a.Module) && Equals(td.DefinitionAssembly, a.Assembly); + } + + bool Equals(Type a, FileDef bFile, ExportedType b) { + if (Equals(bFile, a.Module) && Equals(b.DefinitionAssembly, a.Assembly)) + return true; + + var td = b.Resolve(); + return td != null && Equals(td.Module, a.Module) && Equals(td.DefinitionAssembly, a.Assembly); + } + + /// + /// Compare members + /// + /// Member #1 + /// Member #2 + /// true if same, false otherwise + public bool Equals(IMemberRef a, IMemberRef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + IType ta, tb; + IField fa, fb; + IMethod ma, mb; + PropertyDef pa, pb; + EventDef ea, eb; + + if ((ta = a as IType) != null && (tb = b as IType) != null) + result = Equals(ta, tb); + else if ((fa = a as IField) != null && (fb = b as IField) != null && fa.IsField && fb.IsField) + result = Equals(fa, fb); + else if ((ma = a as IMethod) != null && (mb = b as IMethod) != null) + result = Equals(ma, mb); + else if ((pa = a as PropertyDef) != null && (pb = b as PropertyDef) != null) + result = Equals(pa, pb); + else if ((ea = a as EventDef) != null && (eb = b as EventDef) != null) + result = Equals(ea, eb); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a member + /// + /// The member + /// The hash code + public int GetHashCode(IMemberRef a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int result; + IType ta; + IField fa; + IMethod ma; + PropertyDef pa; + EventDef ea; + + if ((ta = a as IType) != null) + result = GetHashCode(ta); + else if ((fa = a as IField) != null) + result = GetHashCode(fa); + else if ((ma = a as IMethod) != null) + result = GetHashCode(ma); + else if ((pa = a as PropertyDef) != null) + result = GetHashCode(pa); + else if ((ea = a as EventDef) != null) + result = GetHashCode(ea); + else + result = 0; // Should never be reached + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ITypeDefOrRef a, ITypeDefOrRef b) { + return Equals((IType)a, (IType)b); + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(ITypeDefOrRef a) { + return GetHashCode((IType)a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(IType a, IType b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + TypeDef tda, tdb; + TypeRef tra, trb; + TypeSpec tsa, tsb; + TypeSig sa, sb; + ExportedType eta, etb; + + if ((tda = a as TypeDef) != null & (tdb = b as TypeDef) != null) + result = Equals(tda, tdb); + else if ((tra = a as TypeRef) != null & (trb = b as TypeRef) != null) + result = Equals(tra, trb); + else if ((tsa = a as TypeSpec) != null & (tsb = b as TypeSpec) != null) + result = Equals(tsa, tsb); + else if ((sa = a as TypeSig) != null & (sb = b as TypeSig) != null) + result = Equals(sa, sb); + else if ((eta = a as ExportedType) != null & (etb = b as ExportedType) != null) + result = Equals(eta, etb); + else if (tda != null && trb != null) + result = Equals(tda, trb); // TypeDef vs TypeRef + else if (tra != null && tdb != null) + result = Equals(tdb, tra); // TypeDef vs TypeRef + else if (tda != null && tsb != null) + result = Equals(tda, tsb); // TypeDef vs TypeSpec + else if (tsa != null && tdb != null) + result = Equals(tdb, tsa); // TypeDef vs TypeSpec + else if (tda != null && sb != null) + result = Equals(tda, sb); // TypeDef vs TypeSig + else if (sa != null && tdb != null) + result = Equals(tdb, sa); // TypeDef vs TypeSig + else if (tda != null && etb != null) + result = Equals(tda, etb); // TypeDef vs ExportedType + else if (eta != null && tdb != null) + result = Equals(tdb, eta); // TypeDef vs ExportedType + else if (tra != null && tsb != null) + result = Equals(tra, tsb); // TypeRef vs TypeSpec + else if (tsa != null && trb != null) + result = Equals(trb, tsa); // TypeRef vs TypeSpec + else if (tra != null && sb != null) + result = Equals(tra, sb); // TypeRef vs TypeSig + else if (sa != null && trb != null) + result = Equals(trb, sa); // TypeRef vs TypeSig + else if (tra != null && etb != null) + result = Equals(tra, etb); // TypeRef vs ExportedType + else if (eta != null && trb != null) + result = Equals(trb, eta); // TypeRef vs ExportedType + else if (tsa != null && sb != null) + result = Equals(tsa, sb); // TypeSpec vs TypeSig + else if (sa != null && tsb != null) + result = Equals(tsb, sa); // TypeSpec vs TypeSig + else if (tsa != null && etb != null) + result = Equals(tsa, etb); // TypeSpec vs ExportedType + else if (eta != null && tsb != null) + result = Equals(tsb, eta); // TypeSpec vs ExportedType + else if (sa != null && etb != null) + result = Equals(sa, etb); // TypeSig vs ExportedType + else if (eta != null && sb != null) + result = Equals(sb, eta); // TypeSig vs ExportedType + else + result = false; // Should never be reached + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(IType a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash; + TypeDef td; + TypeRef tr; + TypeSpec ts; + TypeSig sig; + ExportedType et; + + if ((td = a as TypeDef) != null) + hash = GetHashCode(td); + else if ((tr = a as TypeRef) != null) + hash = GetHashCode(tr); + else if ((ts = a as TypeSpec) != null) + hash = GetHashCode(ts); + else if ((sig = a as TypeSig) != null) + hash = GetHashCode(sig); + else if ((et = a as ExportedType) != null) + hash = GetHashCode(et); + else + hash = 0; // Should never be reached + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeRef a, TypeDef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeDef a, TypeRef b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + IModule bMod; + AssemblyRef bAsm; + TypeRef dtb; + + if (!DontProjectWinMDRefs) { + var tra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + if (tra != null) { + result = Equals(tra, b); + goto exit; + } + } + + var scope = b.ResolutionScope; + + if (!Equals_TypeNames(a.Name, b.Name) || !Equals_TypeNamespaces(a.Namespace, b.Namespace)) + result = false; + else if ((dtb = scope as TypeRef) != null) // nested type + result = Equals(a.DeclaringType, dtb); // Compare enclosing types + else if (a.DeclaringType != null) { + // a is nested, b isn't + result = false; + } + else if (DontCompareTypeScope) + result = true; + else if ((bMod = scope as IModule) != null) // 'b' is defined in the same assembly as 'a' + result = Equals(a, bMod, b); + else if ((bAsm = scope as AssemblyRef) != null) { + var aMod = a.Module; + result = aMod != null && Equals(aMod.Assembly, bAsm, b); + if (!result) { + if (!DontCheckTypeEquivalence) { + var tdb = b.Resolve(); + result = TypeDefScopeEquals(a, tdb); + } + } + } + else { + result = false; + //TODO: Handle the case where scope == null + } + + if (result && !TypeRefCanReferenceGlobalType && a.IsGlobalModuleType) + result = false; +exit: ; + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ExportedType a, TypeDef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeDef a, ExportedType b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + ExportedType dtb; + FileDef bFile; + AssemblyRef bAsm; + if (!DontProjectWinMDRefs) { + var tra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + if (tra != null) { + result = Equals(tra, b); + goto exit; + } + } + + var scope = b.Implementation; + + if (!Equals_TypeNames(a.Name, b.TypeName) || !Equals_TypeNamespaces(a.Namespace, b.TypeNamespace)) + result = false; + else if ((dtb = scope as ExportedType) != null) { // nested type + result = Equals(a.DeclaringType, dtb); // Compare enclosing types + } + else if (a.DeclaringType != null) { + result = false; // a is nested, b isn't + } + else if (DontCompareTypeScope) + result = true; + else { + if ((bFile = scope as FileDef) != null) + result = Equals(a, bFile, b); + else if ((bAsm = scope as AssemblyRef) != null) { + var aMod = a.Module; + result = aMod != null && Equals(aMod.Assembly, bAsm, b); + } + else + result = false; + if (!result && !DontCheckTypeEquivalence) { + var tdb = b.Resolve(); + result = TypeDefScopeEquals(a, tdb); + } + } + + if (result && !TypeRefCanReferenceGlobalType && a.IsGlobalModuleType) + result = false; +exit: ; + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSpec a, TypeDef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeDef a, TypeSpec b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a, b.TypeSig); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSig a, TypeDef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeDef a, TypeSig b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + //************************************************************* + // If this code gets updated, update GetHashCode(TypeSig), + // Equals(TypeRef,TypeSig) and Equals(TypeSig,ExportedType) too + //************************************************************* + var b2 = b as TypeDefOrRefSig; + if (b2 != null) + result = Equals(a, (IType)b2.TypeDefOrRef); + else if (b is ModifierSig || b is PinnedSig) + result = Equals(a, b.Next); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSpec a, TypeRef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeRef a, TypeSpec b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a, b.TypeSig); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ExportedType a, TypeRef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeRef a, ExportedType b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + if (!DontProjectWinMDRefs) { + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + } + bool result = Equals_TypeNames(a.Name, b.TypeName) && + Equals_TypeNamespaces(a.Namespace, b.TypeNamespace) && + EqualsScope(a, b); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSig a, TypeRef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeRef a, TypeSig b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + //************************************************************* + // If this code gets updated, update GetHashCode(TypeSig), + // Equals(TypeRef,TypeSig) and Equals(TypeSig,ExportedType) too + //************************************************************* + var b2 = b as TypeDefOrRefSig; + if (b2 != null) + result = Equals(a, (IType)b2.TypeDefOrRef); + else if (b is ModifierSig || b is PinnedSig) + result = Equals(a, b.Next); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSig a, TypeSpec b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSpec a, TypeSig b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a.TypeSig, b); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ExportedType a, TypeSpec b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSpec a, ExportedType b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a.TypeSig, b); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ExportedType a, TypeSig b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSig a, ExportedType b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + //************************************************************* + // If this code gets updated, update GetHashCode(TypeSig), + // Equals(TypeRef,TypeSig) and Equals(TypeSig,ExportedType) too + //************************************************************* + var a2 = a as TypeDefOrRefSig; + if (a2 != null) + result = Equals(a2.TypeDefOrRef, b); + else if (a is ModifierSig || a is PinnedSig) + result = Equals(a.Next, b); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + int GetHashCodeGlobalType() { + // We don't always know the name+namespace of the global type, eg. when it's + // referenced by a ModuleRef. Use the same hash for all global types. + return HASHCODE_MAGIC_GLOBAL_TYPE; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeRef a, TypeRef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + if (!DontProjectWinMDRefs) { + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + } + bool result = Equals_TypeNames(a.Name, b.Name) && + Equals_TypeNamespaces(a.Namespace, b.Namespace) && + EqualsResolutionScope(a, b); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(TypeRef a) { + // ************************************************************************************ + // IMPORTANT: This hash code must match the Type/TypeRef/TypeDef/ExportedType + // hash code and GetHashCode_FnPtr_SystemIntPtr() method + // ************************************************************************************ + + // See GetHashCode(Type) for the reason why null returns GetHashCodeGlobalType() + if (a == null) + return TypeRefCanReferenceGlobalType ? GetHashCodeGlobalType() : 0; + if (!DontProjectWinMDRefs) + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + + int hash; + hash = GetHashCode_TypeName(a.Name); + if (a.ResolutionScope is TypeRef) + hash += HASHCODE_MAGIC_NESTED_TYPE; + else + hash += GetHashCode_TypeNamespace(a.Namespace); + return hash; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ExportedType a, ExportedType b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + if (!DontProjectWinMDRefs) { + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + } + bool result = Equals_TypeNames(a.TypeName, b.TypeName) && + Equals_TypeNamespaces(a.TypeNamespace, b.TypeNamespace) && + EqualsImplementation(a, b); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(ExportedType a) { + // ************************************************************************************ + // IMPORTANT: This hash code must match the Type/TypeRef/TypeDef/ExportedType + // hash code and GetHashCode_FnPtr_SystemIntPtr() method + // ************************************************************************************ + + // See GetHashCode(Type) for the reason why null returns GetHashCodeGlobalType() + if (a == null) + return TypeRefCanReferenceGlobalType ? GetHashCodeGlobalType() : 0; + if (!DontProjectWinMDRefs) + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + int hash; + hash = GetHashCode_TypeName(a.TypeName); + if (a.Implementation is ExportedType) + hash += HASHCODE_MAGIC_NESTED_TYPE; + else + hash += GetHashCode_TypeNamespace(a.TypeNamespace); + return hash; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeDef a, TypeDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + + if (!DontProjectWinMDRefs) { + var tra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + var trb = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b); + if (tra != null || trb != null) { + result = Equals((IType)tra ?? a, (IType)trb ?? b); + goto exit; + } + } + result = Equals_TypeNames(a.Name, b.Name) && + Equals_TypeNamespaces(a.Namespace, b.Namespace) && + Equals(a.DeclaringType, b.DeclaringType) && + (DontCompareTypeScope || TypeDefScopeEquals(a, b)); + +exit: ; + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(TypeDef a) { + // ************************************************************************************ + // IMPORTANT: This hash code must match the Type/TypeRef/TypeDef/ExportedType + // hash code and GetHashCode_FnPtr_SystemIntPtr() method + // ************************************************************************************ + + // See GetHashCode(Type) for the reason why null returns GetHashCodeGlobalType() + if (a == null || a.IsGlobalModuleType) + return GetHashCodeGlobalType(); + if (!DontProjectWinMDRefs) { + var tra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + if (tra != null) + return GetHashCode(tra); + } + + int hash; + hash = GetHashCode_TypeName(a.Name); + if (a.DeclaringType != null) + hash += HASHCODE_MAGIC_NESTED_TYPE; + else + hash += GetHashCode_TypeNamespace(a.Namespace); + return hash; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSpec a, TypeSpec b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals(a.TypeSig, b.TypeSig); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(TypeSpec a) { + if (a == null) + return 0; + return GetHashCode(a.TypeSig); + } + + /// + /// Compares resolution scopes + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + bool EqualsResolutionScope(TypeRef a, TypeRef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + var ra = a.ResolutionScope; + var rb = b.ResolutionScope; + if (ra == rb) + return true; + if (ra == null || rb == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + TypeRef ea, eb; + IModule ma, mb; + AssemblyRef aa, ab; + ModuleDef modDef; + bool resolveCheck = true; + + // if one of them is a TypeRef, the other one must be too + if ((ea = ra as TypeRef) != null | (eb = rb as TypeRef) != null) { + result = Equals(ea, eb); + resolveCheck = false; + } + else if (DontCompareTypeScope) + result = true; + // only compare if both are modules + else if ((ma = ra as IModule) != null & (mb = rb as IModule) != null) + result = Equals(a, ma, b, mb); + // only compare if both are assemblies + else if ((aa = ra as AssemblyRef) != null & (ab = rb as AssemblyRef) != null) + result = Equals(aa, a, ab, b); + else if (aa != null && rb is ModuleRef) { + var bMod = b.Module; + result = bMod != null && Equals(bMod.Assembly, b, aa, a); + } + else if (ab != null && ra is ModuleRef) { + var aMod = a.Module; + result = aMod != null && Equals(aMod.Assembly, a, ab, b); + } + else if (aa != null && (modDef = rb as ModuleDef) != null) + result = Equals(modDef.Assembly, aa, a); + else if (ab != null && (modDef = ra as ModuleDef) != null) + result = Equals(modDef.Assembly, ab, b); + else { + result = false; + resolveCheck = false; + } + if (!result && resolveCheck) { + if (!DontCheckTypeEquivalence) { + var td1 = a.Resolve(); + var td2 = b.Resolve(); + if (td1 != null && td2 != null) + result = TypeDefScopeEquals(td1, td2); + } + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares implementation + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + bool EqualsImplementation(ExportedType a, ExportedType b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + var ia = a.Implementation; + var ib = b.Implementation; + if (ia == ib) + return true; + if (ia == null || ib == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + ExportedType ea, eb; + FileDef fa, fb; + AssemblyRef aa, ab; + bool checkResolve = true; + + // if one of them is an ExportedType, the other one must be too + if ((ea = ia as ExportedType) != null | (eb = ib as ExportedType) != null) { + result = Equals(ea, eb); + checkResolve = false; + } + else if (DontCompareTypeScope) + result = true; + // only compare if both are files + else if ((fa = ia as FileDef) != null & (fb = ib as FileDef) != null) + result = Equals(fa, fb); + // only compare if both are assemblies + else if ((aa = ia as AssemblyRef) != null & (ab = ib as AssemblyRef) != null) + result = Equals(aa, a, ab, b); + else if (fa != null && ab != null) + result = Equals(a.DefinitionAssembly, ab, b); + else if (fb != null && aa != null) + result = Equals(b.DefinitionAssembly, aa, a); + else { + result = false; + checkResolve = false; + } + if (!result && checkResolve && !DontCheckTypeEquivalence) { + var td1 = a.Resolve(); + var td2 = b.Resolve(); + if (td1 != null && td2 != null) + result = TypeDefScopeEquals(td1, td2); + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares resolution scope and implementation + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + bool EqualsScope(TypeRef a, ExportedType b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + var ra = a.ResolutionScope; + var ib = b.Implementation; + if (ra == ib) + return true; + if (ra == null || ib == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + TypeRef ea; + ExportedType eb; + IModule ma; + FileDef fb; + AssemblyRef aa, ab; + bool checkResolve = true; + + // If one is a nested type, the other one must be too + if ((ea = ra as TypeRef) != null | (eb = ib as ExportedType) != null) { + result = Equals(ea, eb); + checkResolve = false; + } + else if (DontCompareTypeScope) + result = true; + else if ((ma = ra as IModule) != null & (fb = ib as FileDef) != null) + result = Equals(a, ma, b, fb); + else if ((aa = ra as AssemblyRef) != null & (ab = ib as AssemblyRef) != null) + result = Equals(aa, a, ab, b); + else if (ma != null && ab != null) + result = Equals(a.DefinitionAssembly, ab, b); + else if (fb != null && aa != null) + result = Equals(b.DefinitionAssembly, aa, a); + else { + checkResolve = false; + result = false; + } + if (!result && checkResolve && !DontCheckTypeEquivalence) { + var td1 = a.Resolve(); + var td2 = b.Resolve(); + if (td1 != null && td2 != null) + result = TypeDefScopeEquals(td1, td2); + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares files + /// + /// File #1 + /// File #2 + /// true if same, false otherwise + bool Equals(FileDef a, FileDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + + return UTF8String.CaseInsensitiveEquals(a.Name, b.Name); + } + + /// + /// Compares a module with a file + /// + /// Module + /// File + /// true if same, false otherwise + bool Equals(IModule a, FileDef b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + + //TODO: You should compare against the module's file name, not the name in the metadata! + return UTF8String.CaseInsensitiveEquals(a.Name, b.Name); + } + + /// + /// Compares modules + /// + /// Module #1 + /// Module #2 + /// true if same, false otherwise + internal bool Equals(IModule a, IModule b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!MscorlibIsNotSpecial && IsCorLib(a) && IsCorLib(b)) + return true; + + return UTF8String.CaseInsensitiveEquals(a.Name, b.Name); + } + + static bool IsCorLib(ModuleDef a) { + return a != null && a.IsManifestModule && a.Assembly.IsCorLib(); + } + + static bool IsCorLib(IModule a) { + var mod = a as ModuleDef; + return mod != null && mod.IsManifestModule && mod.Assembly.IsCorLib(); + } + + static bool IsCorLib(Module a) { + return a != null && a.Assembly.ManifestModule == a && a.Assembly == typeof(void).Assembly; + } + + static bool IsCorLib(IAssembly a) { + return a.IsCorLib(); + } + + static bool IsCorLib(Assembly a) { + return a == typeof(void).Assembly; + } + + /// + /// Compares modules + /// + /// Module #1 + /// Module #2 + /// true if same, false otherwise + bool Equals(ModuleDef a, ModuleDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!MscorlibIsNotSpecial && IsCorLib(a) && IsCorLib(b)) + return true; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals((IModule)a, (IModule)b) && Equals(a.Assembly, b.Assembly); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares assemblies + /// + /// Assembly #1 + /// Assembly #2 + /// true if same, false otherwise + bool Equals(IAssembly a, IAssembly b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!MscorlibIsNotSpecial && IsCorLib(a) && IsCorLib(b)) + return true; + if (!recursionCounter.Increment()) + return false; + + bool result = UTF8String.CaseInsensitiveEquals(a.Name, b.Name) && + (!CompareAssemblyPublicKeyToken || PublicKeyBase.TokenEquals(a.PublicKeyOrToken, b.PublicKeyOrToken)) && + (!CompareAssemblyVersion || Utils.Equals(a.Version, b.Version)) && + (!CompareAssemblyLocale || Utils.LocaleEquals(a.Culture, b.Culture)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSig a, TypeSig b) { + if (IgnoreModifiers) { + a = a.RemoveModifiers(); + b = b.RemoveModifiers(); + } + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (!DontProjectWinMDRefs) { + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + } + + if (a.ElementType != b.ElementType) { + // Signatures must be identical. It's possible to have a U4 in a sig (short form + // of System.UInt32), or a ValueType + System.UInt32 TypeRef (long form), but these + // should not match in a sig (also the long form is invalid). + result = false; + } + else { + switch (a.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.Sentinel: + result = true; + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.SZArray: + case ElementType.Pinned: + result = Equals(a.Next, b.Next); + break; + + case ElementType.Array: + ArraySig ara = a as ArraySig, arb = b as ArraySig; + result = ara.Rank == arb.Rank && + Equals(ara.Sizes, arb.Sizes) && + Equals(ara.LowerBounds, arb.LowerBounds) && + Equals(a.Next, b.Next); + break; + + case ElementType.ValueType: + case ElementType.Class: + if (RawSignatureCompare) + result = TokenEquals((a as ClassOrValueTypeSig).TypeDefOrRef, (b as ClassOrValueTypeSig).TypeDefOrRef); + else + result = Equals((IType)(a as ClassOrValueTypeSig).TypeDefOrRef, (IType)(b as ClassOrValueTypeSig).TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + result = (a as GenericSig).Number == (b as GenericSig).Number; + break; + + case ElementType.GenericInst: + var gia = (GenericInstSig)a; + var gib = (GenericInstSig)b; + if (RawSignatureCompare) { + var gt1 = gia.GenericType; + var gt2 = gib.GenericType; + result = TokenEquals(gt1 == null ? null : gt1.TypeDefOrRef, gt2 == null ? null : gt2.TypeDefOrRef) && + Equals(gia.GenericArguments, gib.GenericArguments); + } + else { + result = Equals(gia.GenericType, gib.GenericType) && + Equals(gia.GenericArguments, gib.GenericArguments); + } + break; + + case ElementType.FnPtr: + result = Equals((a as FnPtrSig).Signature, (b as FnPtrSig).Signature); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + if (RawSignatureCompare) + result = TokenEquals((a as ModifierSig).Modifier, (b as ModifierSig).Modifier) && + Equals(a.Next, b.Next); + else + result = Equals((IType)(a as ModifierSig).Modifier, (IType)(b as ModifierSig).Modifier) && + Equals(a.Next, b.Next); + break; + + case ElementType.ValueArray: + result = (a as ValueArraySig).Size == (b as ValueArraySig).Size && Equals(a.Next, b.Next); + break; + + case ElementType.Module: + result = (a as ModuleSig).Index == (b as ModuleSig).Index && Equals(a.Next, b.Next); + break; + + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = false; + break; + } + } + + recursionCounter.Decrement(); + return result; + } + + static bool TokenEquals(ITypeDefOrRef a, ITypeDefOrRef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + return a.MDToken == b.MDToken; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(TypeSig a) { + // ******************************************** + // IMPORTANT: This must match GetHashCode(Type) + // ******************************************** + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + if (genericArguments != null) + a = genericArguments.Resolve(a); + + switch (a.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + // When comparing an ExportedType/TypeDef/TypeRef to a TypeDefOrRefSig/Class/ValueType, + // the ET is ignored, so we must ignore it when calculating the hash. + hash = GetHashCode((IType)(a as TypeDefOrRefSig).TypeDefOrRef); + break; + + case ElementType.Sentinel: + hash = HASHCODE_MAGIC_ET_SENTINEL; + break; + + case ElementType.Ptr: + hash = HASHCODE_MAGIC_ET_PTR + GetHashCode(a.Next); + break; + + case ElementType.ByRef: + hash = HASHCODE_MAGIC_ET_BYREF + GetHashCode(a.Next); + break; + + case ElementType.SZArray: + hash = HASHCODE_MAGIC_ET_SZARRAY + GetHashCode(a.Next); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Pinned: + // When comparing an ExportedType/TypeDef/TypeRef to a ModifierSig/PinnedSig, + // the ET is ignored, so we must ignore it when calculating the hash. + hash = GetHashCode(a.Next); + break; + + case ElementType.Array: + // Don't include sizes and lower bounds since GetHashCode(Type) doesn't (and can't). + ArraySig ara = (ArraySig)a; + hash = HASHCODE_MAGIC_ET_ARRAY + (int)ara.Rank + GetHashCode(ara.Next); + break; + + case ElementType.Var: + hash = HASHCODE_MAGIC_ET_VAR + (int)(a as GenericVar).Number; + break; + + case ElementType.MVar: + hash = HASHCODE_MAGIC_ET_MVAR + (int)(a as GenericMVar).Number; + break; + + case ElementType.GenericInst: + var gia = (GenericInstSig)a; + hash = HASHCODE_MAGIC_ET_GENERICINST; + if (SubstituteGenericParameters) { + InitializeGenericArguments(); + genericArguments.PushTypeArgs(gia.GenericArguments); + hash += GetHashCode(gia.GenericType); + genericArguments.PopTypeArgs(); + } + else + hash += GetHashCode(gia.GenericType); + hash += GetHashCode(gia.GenericArguments); + break; + + case ElementType.FnPtr: + hash = GetHashCode_FnPtr_SystemIntPtr(); + break; + + case ElementType.ValueArray: + hash = HASHCODE_MAGIC_ET_VALUEARRAY + (int)(a as ValueArraySig).Size + GetHashCode(a.Next); + break; + + case ElementType.Module: + hash = HASHCODE_MAGIC_ET_MODULE + (int)(a as ModuleSig).Index + GetHashCode(a.Next); + break; + + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + hash = 0; + break; + } + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares type lists + /// + /// Type list #1 + /// Type list #2 + /// true if same, false otherwise + public bool Equals(IList a, IList b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (a.Count != b.Count) + result = false; + else { + int i; + for (i = 0; i < a.Count; i++) { + if (!Equals(a[i], b[i])) + break; + } + result = i == a.Count; + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type list + /// + /// The type list + /// The hash code + public int GetHashCode(IList a) { + //************************************************************************ + // IMPORTANT: This code must match any other GetHashCode(IList) + //************************************************************************ + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + uint hash = 0; + for (int i = 0; i < a.Count; i++) { + hash += (uint)GetHashCode(a[i]); + hash = (hash << 13) | (hash >> 19); + } + recursionCounter.Decrement(); + return (int)hash; + } + + bool Equals(IList a, IList b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (a.Count != b.Count) + return false; + for (int i = 0; i < a.Count; i++) { + if (a[i] != b[i]) + return false; + } + return true; + } + + bool Equals(IList a, IList b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (a.Count != b.Count) + return false; + for (int i = 0; i < a.Count; i++) { + if (a[i] != b[i]) + return false; + } + return true; + } + + /// + /// Compares signatures + /// + /// Sig #1 + /// Sig #2 + /// true if same, false otherwise + public bool Equals(CallingConventionSig a, CallingConventionSig b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (a.GetCallingConvention() != b.GetCallingConvention()) + result = false; + else { + switch (a.GetCallingConvention() & CallingConvention.Mask) { + case CallingConvention.Default: + case CallingConvention.C: + case CallingConvention.StdCall: + case CallingConvention.ThisCall: + case CallingConvention.FastCall: + case CallingConvention.VarArg: + case CallingConvention.Property: + case CallingConvention.NativeVarArg: + MethodBaseSig ma = a as MethodBaseSig, mb = b as MethodBaseSig; + result = ma != null && mb != null && Equals(ma, mb); + break; + + case CallingConvention.Field: + FieldSig fa = a as FieldSig, fb = b as FieldSig; + result = fa != null && fb != null && Equals(fa, fb); + break; + + case CallingConvention.LocalSig: + LocalSig la = a as LocalSig, lb = b as LocalSig; + result = la != null && lb != null && Equals(la, lb); + break; + + case CallingConvention.GenericInst: + GenericInstMethodSig ga = a as GenericInstMethodSig, gb = b as GenericInstMethodSig; + result = ga != null && gb != null && Equals(ga, gb); + break; + + case CallingConvention.Unmanaged: + default: + result = false; + break; + } + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a sig + /// + /// The sig + /// The hash code + public int GetHashCode(CallingConventionSig a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + switch (a.GetCallingConvention() & CallingConvention.Mask) { + case CallingConvention.Default: + case CallingConvention.C: + case CallingConvention.StdCall: + case CallingConvention.ThisCall: + case CallingConvention.FastCall: + case CallingConvention.VarArg: + case CallingConvention.Property: + case CallingConvention.NativeVarArg: + MethodBaseSig ma = a as MethodBaseSig; + hash = ma == null ? 0 : GetHashCode(ma); + break; + + case CallingConvention.Field: + FieldSig fa = a as FieldSig; + hash = fa == null ? 0 : GetHashCode(fa); + break; + + case CallingConvention.LocalSig: + LocalSig la = a as LocalSig; + hash = la == null ? 0 : GetHashCode(la); + break; + + case CallingConvention.GenericInst: + GenericInstMethodSig ga = a as GenericInstMethodSig; + hash = ga == null ? 0 : GetHashCode(ga); + break; + + case CallingConvention.Unmanaged: + default: + hash = GetHashCode_CallingConvention(a); + break; + } + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares method/property sigs + /// + /// Method/property #1 + /// Method/property #2 + /// true if same, false otherwise + public bool Equals(MethodBaseSig a, MethodBaseSig b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = a.GetCallingConvention() == b.GetCallingConvention() && + (DontCompareReturnType || Equals(a.RetType, b.RetType)) && + Equals(a.Params, b.Params) && + (!a.Generic || a.GenParamCount == b.GenParamCount) && + (!CompareSentinelParams || Equals(a.ParamsAfterSentinel, b.ParamsAfterSentinel)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a method/property sig + /// + /// The method/property sig + /// The hash code + public int GetHashCode(MethodBaseSig a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + hash = GetHashCode_CallingConvention(a) + + GetHashCode(a.Params); + if (!DontCompareReturnType) + hash += GetHashCode(a.RetType); + if (a.Generic) + hash += GetHashCode_ElementType_MVar((int)a.GenParamCount); + if (CompareSentinelParams) + hash += GetHashCode(a.ParamsAfterSentinel); + + recursionCounter.Decrement(); + return hash; + } + + int GetHashCode_CallingConvention(CallingConventionSig a) { + return GetHashCode(a.GetCallingConvention()); + } + + int GetHashCode(CallingConvention a) { + //******************************************************************* + // IMPORTANT: This hash must match the Reflection call conv hash code + //******************************************************************* + + switch (a & CallingConvention.Mask) { + case CallingConvention.Default: + case CallingConvention.C: + case CallingConvention.StdCall: + case CallingConvention.ThisCall: + case CallingConvention.FastCall: + case CallingConvention.VarArg: + case CallingConvention.Property: + case CallingConvention.GenericInst: + case CallingConvention.Unmanaged: + case CallingConvention.NativeVarArg: + case CallingConvention.Field: + return (int)(a & (CallingConvention.Generic | CallingConvention.HasThis | CallingConvention.ExplicitThis)); + + case CallingConvention.LocalSig: + default: + return (int)a; + } + } + + /// + /// Compares field sigs + /// + /// Field sig #1 + /// Field sig #2 + /// true if same, false otherwise + public bool Equals(FieldSig a, FieldSig b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = a.GetCallingConvention() == b.GetCallingConvention() && Equals(a.Type, b.Type); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a field sig + /// + /// The field sig + /// The hash code + public int GetHashCode(FieldSig a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + hash = GetHashCode_CallingConvention(a) + GetHashCode(a.Type); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares local sigs + /// + /// Local sig #1 + /// Local sig #2 + /// true if same, false otherwise + public bool Equals(LocalSig a, LocalSig b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = a.GetCallingConvention() == b.GetCallingConvention() && Equals(a.Locals, b.Locals); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a local sig + /// + /// The local sig + /// The hash code + public int GetHashCode(LocalSig a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + hash = GetHashCode_CallingConvention(a) + GetHashCode(a.Locals); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares generic method instance sigs + /// + /// Generic inst method #1 + /// Generic inst method #2 + /// true if same, false otherwise + public bool Equals(GenericInstMethodSig a, GenericInstMethodSig b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = a.GetCallingConvention() == b.GetCallingConvention() && Equals(a.GenericArguments, b.GenericArguments); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a generic instance method sig + /// + /// The generic inst method sig + /// The hash code + public int GetHashCode(GenericInstMethodSig a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + hash = GetHashCode_CallingConvention(a) + GetHashCode(a.GenericArguments); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(IMethod a, IMethod b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + MethodDef mda, mdb; + MemberRef mra, mrb; + MethodSpec msa, msb; + + if ((mda = a as MethodDef) != null & (mdb = b as MethodDef) != null) + result = Equals(mda, mdb); + else if ((mra = a as MemberRef) != null & (mrb = b as MemberRef) != null) + result = Equals(mra, mrb); + else if ((msa = a as MethodSpec) != null && (msb = b as MethodSpec) != null) + result = Equals(msa, msb); + else if (mda != null && mrb != null) + result = Equals(mda, mrb); + else if (mra != null && mdb != null) + result = Equals(mdb, mra); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a method + /// + /// The method + /// The hash code + public int GetHashCode(IMethod a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash; + MethodDef mda; + MemberRef mra; + MethodSpec msa; + + if ((mda = a as MethodDef) != null) + hash = GetHashCode(mda); + else if ((mra = a as MemberRef) != null) + hash = GetHashCode(mra); + else if ((msa = a as MethodSpec) != null) + hash = GetHashCode(msa); + else + hash = 0; + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MemberRef a, MethodDef b) { + return Equals(b, a); + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodDef a, MemberRef b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + if (!DontProjectWinMDRefs) { + var mra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + if (mra != null) { + result = Equals(mra, b); + goto exit; + } + } + result = (PrivateScopeMethodIsComparable || !a.IsPrivateScope) && + Equals_MethodFieldNames(a.Name, b.Name) && + Equals(a.Signature, b.Signature) && + (!CompareMethodFieldDeclaringType || Equals(a.DeclaringType, b.Class)); + +exit: ; + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodDef a, MethodDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + if (!DontProjectWinMDRefs) { + var mra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + var mrb = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b); + if (mra != null || mrb != null) { + result = Equals((IMethod)mra ?? a, (IMethod)mrb ?? b); + goto exit; + } + } + result = Equals_MethodFieldNames(a.Name, b.Name) && + Equals(a.Signature, b.Signature) && + (!CompareMethodFieldDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + +exit: ; + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a method + /// + /// The method + /// The hash code + public int GetHashCode(MethodDef a) { + // *********************************************************************** + // IMPORTANT: This hash code must match the MemberRef/MethodBase hash code + // *********************************************************************** + if (a == null) + return 0; + if (!DontProjectWinMDRefs) { + var mra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + if (mra != null) + return GetHashCode(mra); + } + + if (!recursionCounter.Increment()) + return 0; + + int hash = GetHashCode_MethodFieldName(a.Name) + + GetHashCode(a.Signature); + if (CompareMethodFieldDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares MemberRefs + /// + /// MemberRef #1 + /// MemberRef #2 + /// true if same, false otherwise + public bool Equals(MemberRef a, MemberRef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + if (!DontProjectWinMDRefs) { + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + b = WinMDHelpers.ToCLR(b.Module ?? sourceModule, b) ?? b; + } + bool result = Equals_MethodFieldNames(a.Name, b.Name) && + Equals(a.Signature, b.Signature) && + (!CompareMethodFieldDeclaringType || Equals(a.Class, b.Class)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a MemberRef + /// + /// The MemberRef + /// The hash code + public int GetHashCode(MemberRef a) { + // ******************************************************************************** + // IMPORTANT: This hash code must match the MethodDef/FieldDef/MethodBase hash code + // ******************************************************************************** + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + if (!DontProjectWinMDRefs) + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + + int hash = GetHashCode_MethodFieldName(a.Name); + GenericInstSig git; + if (SubstituteGenericParameters && (git = GetGenericInstanceType(a.Class)) != null) { + InitializeGenericArguments(); + genericArguments.PushTypeArgs(git.GenericArguments); + hash += GetHashCode(a.Signature); + genericArguments.PopTypeArgs(); + } + else + hash += GetHashCode(a.Signature); + if (CompareMethodFieldDeclaringType) + hash += GetHashCode(a.Class); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares MethodSpecs + /// + /// MethodSpec #1 + /// MethodSpec #2 + /// true if same, false otherwise + public bool Equals(MethodSpec a, MethodSpec b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals(a.Method, b.Method) && Equals(a.Instantiation, b.Instantiation); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a MethodSpec + /// + /// The MethodSpec + /// The hash code + public int GetHashCode(MethodSpec a) { + // ************************************************************* + // IMPORTANT: This hash code must match the MethodBase hash code + // ************************************************************* + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + // We must do this or it won't get the same hash code as some MethodInfos + var oldOptions = SetOptions(SigComparerOptions.SubstituteGenericParameters); + var gim = a.GenericInstMethodSig; + if (gim != null) { + InitializeGenericArguments(); + genericArguments.PushMethodArgs(gim.GenericArguments); + } + int hash = GetHashCode(a.Method); + if (gim != null) + genericArguments.PopMethodArgs(); + RestoreOptions(oldOptions); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares MemberRefParents + /// + /// MemberRefParent #1 + /// MemberRefParent #2 + /// true if same, false otherwise + bool Equals(IMemberRefParent a, IMemberRefParent b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + ITypeDefOrRef ita, itb; + ModuleRef moda, modb; + MethodDef ma, mb; + TypeDef td; + + if ((ita = a as ITypeDefOrRef) != null && (itb = b as ITypeDefOrRef) != null) + result = Equals((IType)ita, (IType)itb); + else if ((moda = a as ModuleRef) != null & (modb = b as ModuleRef) != null) { + ModuleDef omoda = moda.Module, omodb = modb.Module; + result = Equals((IModule)moda, (IModule)modb) && + Equals(omoda == null ? null : omoda.Assembly, omodb == null ? null : omodb.Assembly); + } + else if ((ma = a as MethodDef) != null && (mb = b as MethodDef) != null) + result = Equals(ma, mb); + else if (modb != null && (td = a as TypeDef) != null) + result = EqualsGlobal(td, modb); + else if (moda != null && (td = b as TypeDef) != null) + result = EqualsGlobal(td, moda); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a MemberRefParent + /// + /// The MemberRefParent + /// The hash code + int GetHashCode(IMemberRefParent a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash; + ITypeDefOrRef ita; + MethodDef ma; + + if ((ita = a as ITypeDefOrRef) != null) + hash = GetHashCode((IType)ita); + else if (a is ModuleRef) + hash = GetHashCodeGlobalType(); + else if ((ma = a as MethodDef) != null) { + // Only use the declaring type so we get the same hash code when hashing a MethodBase. + hash = GetHashCode(ma.DeclaringType); + } + else + hash = 0; + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(IField a, IField b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + FieldDef fa, fb; + MemberRef ma, mb; + + if ((fa = a as FieldDef) != null & (fb = b as FieldDef) != null) + result = Equals(fa, fb); + else if ((ma = a as MemberRef) != null & (mb = b as MemberRef) != null) + result = Equals(ma, mb); + else if (fa != null && mb != null) + result = Equals(fa, mb); + else if (fb != null && ma != null) + result = Equals(fb, ma); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a field + /// + /// The field + /// The hash code + public int GetHashCode(IField a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash; + FieldDef fa; + MemberRef ma; + + if ((fa = a as FieldDef) != null) + hash = GetHashCode(fa); + else if ((ma = a as MemberRef) != null) + hash = GetHashCode(ma); + else + hash = 0; + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(MemberRef a, FieldDef b) { + return Equals(b, a); + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(FieldDef a, MemberRef b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = (PrivateScopeFieldIsComparable || !a.IsPrivateScope) && + Equals_MethodFieldNames(a.Name, b.Name) && + Equals(a.Signature, b.Signature) && + (!CompareMethodFieldDeclaringType || Equals(a.DeclaringType, b.Class)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(FieldDef a, FieldDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_MethodFieldNames(a.Name, b.Name) && + Equals(a.Signature, b.Signature) && + (!CompareMethodFieldDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a field + /// + /// The field + /// The hash code + public int GetHashCode(FieldDef a) { + // ********************************************************************** + // IMPORTANT: This hash code must match the MemberRef/FieldInfo hash code + // ********************************************************************** + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash = GetHashCode_MethodFieldName(a.Name) + + GetHashCode(a.Signature); + if (CompareMethodFieldDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares properties + /// + /// Property #1 + /// Property #2 + /// true if same, false otherwise + public bool Equals(PropertyDef a, PropertyDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_PropertyNames(a.Name, b.Name) && + Equals(a.Type, b.Type) && + (!ComparePropertyDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a property + /// + /// The property + /// The hash code + public int GetHashCode(PropertyDef a) { + // *************************************************************** + // IMPORTANT: This hash code must match the PropertyInfo hash code + // *************************************************************** + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + var sig = a.PropertySig; + int hash = GetHashCode_PropertyName(a.Name) + + GetHashCode(sig == null ? null : sig.RetType); + if (ComparePropertyDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares events + /// + /// Event #1 + /// Event #2 + /// true if same, false otherwise + public bool Equals(EventDef a, EventDef b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_EventNames(a.Name, b.Name) && + Equals((IType)a.EventType, (IType)b.EventType) && + (!CompareEventDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of an event + /// + /// The event + /// The hash code + public int GetHashCode(EventDef a) { + // ************************************************************ + // IMPORTANT: This hash code must match the EventInfo hash code + // ************************************************************ + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash = GetHashCode_EventName(a.Name) + + GetHashCode((IType)a.EventType); + if (CompareEventDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + // Compares a with b, and a must be the global type + bool EqualsGlobal(TypeDef a, ModuleRef b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = a.IsGlobalModuleType && + Equals((IModule)a.Module, (IModule)b) && + Equals(a.DefinitionAssembly, GetAssembly(b.Module)); + + recursionCounter.Decrement(); + return result; + } + + static AssemblyDef GetAssembly(ModuleDef module) { + return module == null ? null : module.Assembly; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(Type a, IType b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(IType a, Type b) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + TypeDef td; + TypeRef tr; + TypeSpec ts; + TypeSig sig; + ExportedType et; + + if ((td = a as TypeDef) != null) + result = Equals(td, b); + else if ((tr = a as TypeRef) != null) + result = Equals(tr, b); + else if ((ts = a as TypeSpec) != null) + result = Equals(ts, b); + else if ((sig = a as TypeSig) != null) + result = Equals(sig, b); + else if ((et = a as ExportedType) != null) + result = Equals(et, b); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(Type a, TypeDef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeDef a, Type b) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (b == null) + return a.IsGlobalModuleType; + if (!recursionCounter.Increment()) + return false; + + bool result; + + if (!DontProjectWinMDRefs) { + var tra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + if (tra != null) { + result = Equals(tra, b); + goto exit; + } + } + result = !b.HasElementType && + Equals_TypeNames(a.Name, b.Name) && + Equals_TypeNamespaces(a.Namespace, b) && + EnclosingTypeEquals(a.DeclaringType, b.DeclaringType) && + (DontCompareTypeScope || Equals(a.Module, b.Module)); + +exit: ; + recursionCounter.Decrement(); + return result; + } + + bool EnclosingTypeEquals(TypeDef a, Type b) { + // b == null doesn't mean that b is the global type + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a, b); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(Type a, TypeRef b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeRef a, Type b) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (b == null) + return false; // Must use a ModuleRef to reference the global type, so always fail + if (!recursionCounter.Increment()) + return false; + + bool result; + TypeRef dta; + IModule aMod; + AssemblyRef aAsm; + if (!DontProjectWinMDRefs) + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + + var scope = a.ResolutionScope; + + if (!b.IsTypeDef()) + result = false; + else if (!Equals_TypeNames(a.Name, b.Name) || !Equals_TypeNamespaces(a.Namespace, b)) + result = false; + else if ((dta = scope as TypeRef) != null) // nested type + result = Equals(dta, b.DeclaringType); // Compare enclosing types + else if (b.IsNested) + result = false; // b is nested, a isn't + else if (DontCompareTypeScope) + result = true; + else if ((aMod = scope as IModule) != null) // 'a' is defined in the same assembly as 'b' + result = Equals(b, aMod, a); + else if ((aAsm = scope as AssemblyRef) != null) + result = Equals(b.Assembly, aAsm, a); + else { + result = false; + //TODO: Handle the case where scope == null + } + + recursionCounter.Decrement(); + return result; + } + + bool Equals_TypeNamespaces(UTF8String a, Type b) { + if (b.IsNested) + return true; + return Equals_TypeNamespaces(a, b.Namespace); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(Type a, TypeSpec b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSpec a, Type b) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (b == null) + return false; // Must use a ModuleRef to reference the global type, so always fail + return Equals(a.TypeSig, b); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(Type a, TypeSig b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(TypeSig a, Type b) { + return Equals(a, b, false); + } + + bool Equals(ITypeDefOrRef a, Type b, bool treatAsGenericInst) { + var ts = a as TypeSpec; + if (ts != null) + return Equals(ts.TypeSig, b, treatAsGenericInst); + return Equals(a, b); + } + + /// + /// Checks whether it's FnPtr&, FnPtr*, FnPtr[], or FnPtr[...] + /// + /// The type + static bool IsFnPtrElementType(Type a) { + if (a == null || !a.HasElementType) + return false; + var et = a.GetElementType(); + if (et == null || et.HasElementType) + return false; + if (et != typeof(IntPtr)) // FnPtr is mapped to System.IntPtr + return false; + if (!a.FullName.StartsWith("(fnptr)")) + return false; + + return true; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if we should treat + /// as a generic instance type + /// true if same, false otherwise + bool Equals(TypeSig a, Type b, bool treatAsGenericInst) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (b == null) + return false; // Must use a ModuleRef to reference the global type, so always fail + if (!recursionCounter.Increment()) + return false; + bool result; + + if (genericArguments != null) + a = genericArguments.Resolve(a); + + switch (a.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + result = Equals(((TypeDefOrRefSig)a).TypeDefOrRef, b, treatAsGenericInst); + break; + + case ElementType.Ptr: + if (!b.IsPointer) + result = false; + else if (IsFnPtrElementType(b)) { + a = a.Next.RemoveModifiers(); + result = a != null && a.ElementType == ElementType.FnPtr; + } + else + result = Equals(a.Next, b.GetElementType()); + break; + + case ElementType.ByRef: + if (!b.IsByRef) + result = false; + else if (IsFnPtrElementType(b)) { + a = a.Next.RemoveModifiers(); + result = a != null && a.ElementType == ElementType.FnPtr; + } + else + result = Equals(a.Next, b.GetElementType()); + break; + + case ElementType.SZArray: + if (!b.IsArray || !b.IsSZArray()) + result = false; + else if (IsFnPtrElementType(b)) { + a = a.Next.RemoveModifiers(); + result = a != null && a.ElementType == ElementType.FnPtr; + } + else + result = Equals(a.Next, b.GetElementType()); + break; + + case ElementType.Pinned: + result = Equals(a.Next, b, treatAsGenericInst); + break; + + case ElementType.Array: + if (!b.IsArray || b.IsSZArray()) + result = false; + else { + ArraySig ara = a as ArraySig; + result = ara.Rank == b.GetArrayRank() && + (IsFnPtrElementType(b) ? + (a = a.Next.RemoveModifiers()) != null && a.ElementType == ElementType.FnPtr : + Equals(a.Next, b.GetElementType())); + } + break; + + case ElementType.ValueType: + case ElementType.Class: + result = Equals((a as ClassOrValueTypeSig).TypeDefOrRef, b, treatAsGenericInst); + break; + + case ElementType.Var: + result = b.IsGenericParameter && + b.GenericParameterPosition == (a as GenericSig).Number && + b.DeclaringMethod == null; + break; + + case ElementType.MVar: + result = b.IsGenericParameter && + b.GenericParameterPosition == (a as GenericSig).Number && + b.DeclaringMethod != null; + break; + + case ElementType.GenericInst: + if (!(b.IsGenericType && !b.IsGenericTypeDefinition) && !treatAsGenericInst) { + result = false; + break; + } + var gia = (GenericInstSig)a; + if (SubstituteGenericParameters) { + InitializeGenericArguments(); + genericArguments.PushTypeArgs(gia.GenericArguments); + result = Equals(gia.GenericType, b.GetGenericTypeDefinition()); + genericArguments.PopTypeArgs(); + } + else + result = Equals(gia.GenericType, b.GetGenericTypeDefinition()); + result = result && Equals(gia.GenericArguments, b.GetGenericArguments()); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + result = Equals(a.Next, b, treatAsGenericInst); + break; + + case ElementType.FnPtr: + // At least in method sigs, this will be mapped to System.IntPtr + result = b == typeof(IntPtr); + break; + + case ElementType.Sentinel: + case ElementType.ValueArray: + case ElementType.Module: + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + result = false; + break; + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(Type a, ExportedType b) { + return Equals(b, a); + } + + /// + /// Compares types + /// + /// Type #1 + /// Type #2 + /// true if same, false otherwise + public bool Equals(ExportedType a, Type b) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (b == null) + return false; // Must use a ModuleRef to reference the global type, so always fail + if (!recursionCounter.Increment()) + return false; + + bool result; + ExportedType dta; + FileDef aFile; + AssemblyRef aAsm; + if (!DontProjectWinMDRefs) + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + + var scope = a.Implementation; + + if (!b.IsTypeDef()) + result = false; + else if (!Equals_TypeNames(a.TypeName, b.Name) || !Equals_TypeNamespaces(a.TypeNamespace, b)) + result = false; + else if ((dta = scope as ExportedType) != null) // nested type + result = Equals(dta, b.DeclaringType); // Compare enclosing types + else if (b.IsNested) + result = false; // b is nested, a isn't + else if (DontCompareTypeScope) + result = true; + else if ((aFile = scope as FileDef) != null) + result = Equals(b, aFile, a); + else if ((aAsm = scope as AssemblyRef) != null) + result = Equals(b.Assembly, aAsm, a); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// The hash code + public int GetHashCode(Type a) { + return GetHashCode(a, false); + } + + /// + /// Gets the hash code of a type + /// + /// The type + /// true if we should treat + /// as a generic instance type + /// The hash code + public int GetHashCode(Type a, bool treatAsGenericInst) { + // ************************************************************************** + // IMPORTANT: This hash code must match the TypeSig/TypeDef/TypeRef hash code + // ************************************************************************** + if (a == null) // Could be global type + return GetHashCode_TypeDef(a); + if (!recursionCounter.Increment()) + return 0; + int hash; + + switch (treatAsGenericInst ? ElementType.GenericInst : a.GetElementType2()) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.ValueType: + case ElementType.Class: + hash = GetHashCode_TypeDef(a); + break; + + case ElementType.FnPtr: + hash = GetHashCode_FnPtr_SystemIntPtr(); + break; + + case ElementType.Sentinel: + hash = HASHCODE_MAGIC_ET_SENTINEL; + break; + + case ElementType.Ptr: + hash = HASHCODE_MAGIC_ET_PTR + + (IsFnPtrElementType(a) ? GetHashCode_FnPtr_SystemIntPtr() : GetHashCode(a.GetElementType())); + break; + + case ElementType.ByRef: + hash = HASHCODE_MAGIC_ET_BYREF + + (IsFnPtrElementType(a) ? GetHashCode_FnPtr_SystemIntPtr() : GetHashCode(a.GetElementType())); + break; + + case ElementType.SZArray: + hash = HASHCODE_MAGIC_ET_SZARRAY + + (IsFnPtrElementType(a) ? GetHashCode_FnPtr_SystemIntPtr() : GetHashCode(a.GetElementType())); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Pinned: + hash = GetHashCode(a.GetElementType()); + break; + + case ElementType.Array: + // The type doesn't store sizes and lower bounds, so can't use them to + // create the hash + hash = HASHCODE_MAGIC_ET_ARRAY + a.GetArrayRank() + + (IsFnPtrElementType(a) ? GetHashCode_FnPtr_SystemIntPtr() : GetHashCode(a.GetElementType())); + break; + + case ElementType.Var: + hash = HASHCODE_MAGIC_ET_VAR + a.GenericParameterPosition; + break; + + case ElementType.MVar: + hash = HASHCODE_MAGIC_ET_MVAR + a.GenericParameterPosition; + break; + + case ElementType.GenericInst: + hash = HASHCODE_MAGIC_ET_GENERICINST + GetHashCode(a.GetGenericTypeDefinition()) + GetHashCode(a.GetGenericArguments()); + break; + + case ElementType.ValueArray: + case ElementType.Module: + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + hash = 0; + break; + } + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Gets the hash code of a type list + /// + /// The type list + /// The hash code + int GetHashCode(IList a) { + //************************************************************************ + // IMPORTANT: This code must match any other GetHashCode(IList) + //************************************************************************ + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + uint hash = 0; + for (int i = 0; i < a.Count; i++) { + hash += (uint)GetHashCode(a[i]); + hash = (hash << 13) | (hash >> 19); + } + recursionCounter.Decrement(); + return (int)hash; + } + + /// + /// Gets the hash code of a list with only generic method parameters () + /// + /// Number of generic method parameters + /// Hash code + static int GetHashCode_ElementType_MVar(int numGenericParams) { + return GetHashCode(numGenericParams, HASHCODE_MAGIC_ET_MVAR); + } + + static int GetHashCode(int numGenericParams, int etypeHashCode) { + //************************************************************************ + // IMPORTANT: This code must match any other GetHashCode(IList) + //************************************************************************ + uint hash = 0; + for (int i = 0; i < numGenericParams; i++) { + hash += (uint)(etypeHashCode + i); + hash = (hash << 13) | (hash >> 19); + } + return (int)hash; + } + + /// + /// Gets the hash code of a TypeDef type + /// + /// The type + /// The hash code + public int GetHashCode_TypeDef(Type a) { + // ************************************************************************************ + // IMPORTANT: This hash code must match the Type/TypeRef/TypeDef/ExportedType + // hash code and GetHashCode_FnPtr_SystemIntPtr() method + // ************************************************************************************ + + // A global method/field's declaring type is null. This is the reason we must + // return GetHashCodeGlobalType() here. + if (a == null) + return GetHashCodeGlobalType(); + int hash; + hash = GetHashCode_TypeName(a.Name); + if (a.IsNested) + hash += HASHCODE_MAGIC_NESTED_TYPE; + else + hash += GetHashCode_TypeNamespace(a.Namespace); + return hash; + } + + /// + /// Compares type lists + /// + /// Type list #1 + /// Type list #2 + /// true if same, false otherwise + bool Equals(IList a, IList b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (a.Count != b.Count) + result = false; + else { + int i; + for (i = 0; i < a.Count; i++) { + if (!Equals(a[i], b[i])) + break; + } + result = i == a.Count; + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares modules + /// + /// Module #1 + /// Module #2 + /// true if same, false otherwise + bool Equals(ModuleDef a, Module b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!MscorlibIsNotSpecial && IsCorLib(a) && IsCorLib(b)) + return true; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals((IModule)a, b) && Equals(a.Assembly, b.Assembly); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares a file and a module + /// + /// File + /// Module + /// true if same, false otherwise + bool Equals(FileDef a, Module b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + + // Use b.Name since it's the filename we want to compare, not b.ScopeName + return UTF8String.ToSystemStringOrEmpty(a.Name).Equals(b.Name, StringComparison.OrdinalIgnoreCase); + } + + /// + /// Compares modules + /// + /// Module #1 + /// Module #2 + /// true if same, false otherwise + bool Equals(IModule a, Module b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!MscorlibIsNotSpecial && IsCorLib(a) && IsCorLib(b)) + return true; + + // Use b.ScopeName and not b.Name since b.Name is just the file name w/o path + return UTF8String.ToSystemStringOrEmpty(a.Name).Equals(b.ScopeName, StringComparison.OrdinalIgnoreCase); + } + + /// + /// Compares assemblies + /// + /// Assembly #1 + /// Assembly #2 + /// true if same, false otherwise + bool Equals(IAssembly a, Assembly b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!MscorlibIsNotSpecial && IsCorLib(a) && IsCorLib(b)) + return true; + if (!recursionCounter.Increment()) + return false; + + var bAsmName = b.GetName(); + bool result = UTF8String.ToSystemStringOrEmpty(a.Name).Equals(bAsmName.Name, StringComparison.OrdinalIgnoreCase) && + (!CompareAssemblyPublicKeyToken || PublicKeyBase.TokenEquals(a.PublicKeyOrToken, new PublicKeyToken(bAsmName.GetPublicKeyToken()))) && + (!CompareAssemblyVersion || Utils.Equals(a.Version, bAsmName.Version)) && + (!CompareAssemblyLocale || Utils.LocaleEquals(a.Culture, bAsmName.CultureInfo.Name)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares method declaring types + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + bool DeclaringTypeEquals(IMethod a, MethodBase b) { + // If this is disabled, always return true, even if one is null, etc. + if (!CompareMethodFieldDeclaringType) + return true; + + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + MethodDef md; + MemberRef mr; + MethodSpec ms; + + if ((md = a as MethodDef) != null) + result = DeclaringTypeEquals(md, b); + else if ((mr = a as MemberRef) != null) + result = DeclaringTypeEquals(mr, b); + else if ((ms = a as MethodSpec) != null) + result = DeclaringTypeEquals(ms, b); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + bool DeclaringTypeEquals(MethodDef a, MethodBase b) { + // If this is disabled, always return true, even if one is null, etc. + if (!CompareMethodFieldDeclaringType) + return true; + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a.DeclaringType, b.DeclaringType); + } + + bool DeclaringTypeEquals(MemberRef a, MethodBase b) { + // If this is disabled, always return true, even if one is null, etc. + if (!CompareMethodFieldDeclaringType) + return true; + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return Equals(a.Class, b.DeclaringType, b.Module); + } + + bool DeclaringTypeEquals(MethodSpec a, MethodBase b) { + // If this is disabled, always return true, even if one is null, etc. + if (!CompareMethodFieldDeclaringType) + return true; + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + return DeclaringTypeEquals(a.Method, b); + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodBase a, IMethod b) { + return Equals(b, a); + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(IMethod a, MethodBase b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + MethodDef md; + MemberRef mr; + MethodSpec ms; + + if ((md = a as MethodDef) != null) + result = Equals(md, b); + else if ((mr = a as MemberRef) != null) + result = Equals(mr, b); + else if ((ms = a as MethodSpec) != null) + result = Equals(ms, b); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodBase a, MethodDef b) { + return Equals(b, a); + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodDef a, MethodBase b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + if (!DontProjectWinMDRefs) { + var mra = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a); + if (mra != null) { + result = Equals(mra, b); + goto exit; + } + } + + var amSig = a.MethodSig; + result = Equals_MethodFieldNames(a.Name, b.Name) && + amSig != null && + ((amSig.Generic && b.IsGenericMethodDefinition && b.IsGenericMethod) || + (!amSig.Generic && !b.IsGenericMethodDefinition && !b.IsGenericMethod)) && + Equals(amSig, b) && + (!CompareMethodFieldDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + +exit: ; + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares method sigs + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodBase a, MethodSig b) { + return Equals(b, a); + } + + /// + /// Compares method sigs + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodSig a, MethodBase b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals(a.GetCallingConvention(), b) && + (DontCompareReturnType || ReturnTypeEquals(a.RetType, b)) && + Equals(a.Params, b.GetParameters(), b.DeclaringType) && + (!a.Generic || a.GenParamCount == b.GetGenericArguments().Length); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodBase a, MemberRef b) { + return Equals(b, a); + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MemberRef a, MethodBase b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (!DontProjectWinMDRefs) + a = WinMDHelpers.ToCLR(a.Module ?? sourceModule, a) ?? a; + if (b.IsGenericMethod && !b.IsGenericMethodDefinition) { + // 'a' must be a method ref in a generic type. This comparison must match + // the MethodSpec vs MethodBase comparison code. + result = a.IsMethodRef && a.MethodSig.Generic; + + var oldOptions = ClearOptions(SigComparerOptions.CompareMethodFieldDeclaringType); + result = result && Equals(a, b.Module.ResolveMethod(b.MetadataToken)); + RestoreOptions(oldOptions); + result = result && DeclaringTypeEquals(a, b); + + result = result && GenericMethodArgsEquals((int)a.MethodSig.GenParamCount, b.GetGenericArguments()); + } + else { + var amSig = a.MethodSig; + result = Equals_MethodFieldNames(a.Name, b.Name) && + amSig != null && + ((amSig.Generic && b.IsGenericMethodDefinition && b.IsGenericMethod) || + (!amSig.Generic && !b.IsGenericMethodDefinition && !b.IsGenericMethod)); + + GenericInstSig git; + if (SubstituteGenericParameters && (git = GetGenericInstanceType(a.Class)) != null) { + InitializeGenericArguments(); + genericArguments.PushTypeArgs(git.GenericArguments); + result = result && Equals(amSig, b); + genericArguments.PopTypeArgs(); + } + else + result = result && Equals(amSig, b); + + result = result && (!CompareMethodFieldDeclaringType || Equals(a.Class, b.DeclaringType, b.Module)); + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares generic method args, making sure only + /// contains s. + /// + /// Number of generic method args in method #1 + /// Generic method args in method #2 + /// true if same, false otherwise + static bool GenericMethodArgsEquals(int numMethodArgs, IList methodGenArgs) { + if (numMethodArgs != methodGenArgs.Count) + return false; + for (int i = 0; i < numMethodArgs; i++) { + if (methodGenArgs[i].GetElementType2() != ElementType.MVar) + return false; + } + return true; + } + + bool Equals(IMemberRefParent a, Type b, Module bModule) { + // Global methods and fields have their DeclaringType set to null. Assume + // null always means the global type. + if (a == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + ITypeDefOrRef ita; + ModuleRef moda; + MethodDef ma; + TypeDef td; + + if ((ita = a as ITypeDefOrRef) != null) + result = Equals((IType)ita, b); + else if ((moda = a as ModuleRef) != null) { + ModuleDef omoda = moda.Module; + result = b == null && // b == null => it's the global type + Equals(moda, bModule) && + Equals(omoda == null ? null : omoda.Assembly, bModule.Assembly); + } + else if ((ma = a as MethodDef) != null) + result = Equals(ma.DeclaringType, b); + else if (b == null && (td = a as TypeDef) != null) + result = td.IsGlobalModuleType; + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodBase a, MethodSpec b) { + return Equals(b, a); + } + + /// + /// Compares methods + /// + /// Method #1 + /// Method #2 + /// true if same, false otherwise + public bool Equals(MethodSpec a, MethodBase b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + // Make sure it's a MethodSpec + bool result = b.IsGenericMethod && !b.IsGenericMethodDefinition; + + // Don't compare declaring types yet because the resolved method has the wrong + // declaring type (its declaring type is a generic type def). + // NOTE: We must not push generic method args when comparing a.Method + var oldOptions = ClearOptions(SigComparerOptions.CompareMethodFieldDeclaringType); + result = result && Equals(a.Method, b.Module.ResolveMethod(b.MetadataToken)); + RestoreOptions(oldOptions); + result = result && DeclaringTypeEquals(a.Method, b); + + var gim = a.GenericInstMethodSig; + result = result && gim != null && Equals(gim.GenericArguments, b.GetGenericArguments()); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a MethodBase + /// + /// The MethodBase + /// The hash code + public int GetHashCode(MethodBase a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + // *********************************************************************** + // IMPORTANT: This hash code must match the MemberRef/MethodSpec hash code + // *********************************************************************** + int hash = GetHashCode_MethodFieldName(a.Name) + + GetHashCode_MethodSig(a); + if (CompareMethodFieldDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + int GetHashCode_MethodSig(MethodBase a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + hash = GetHashCode_CallingConvention(a.CallingConvention, a.IsGenericMethod) + + GetHashCode(a.GetParameters(), a.DeclaringType); + if (!DontCompareReturnType) + hash += GetHashCode_ReturnType(a); + if (a.IsGenericMethod) + hash += GetHashCode_ElementType_MVar(a.GetGenericArguments().Length); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Gets the hash code of a parameter list + /// + /// The type list + /// Declaring type of method that owns parameter + /// The hash code + int GetHashCode(IList a, Type declaringType) { + //************************************************************************ + // IMPORTANT: This code must match any other GetHashCode(IList) + //************************************************************************ + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + uint hash = 0; + for (int i = 0; i < a.Count; i++) { + hash += (uint)GetHashCode(a[i], declaringType); + hash = (hash << 13) | (hash >> 19); + } + recursionCounter.Decrement(); + return (int)hash; + } + + int GetHashCode_ReturnType(MethodBase a) { + var mi = a as MethodInfo; + if (mi != null) + return GetHashCode(mi.ReturnParameter, a.DeclaringType); + return GetHashCode(typeof(void)); + } + + int GetHashCode(ParameterInfo a, Type declaringType) { + return GetHashCode(a.ParameterType, declaringType.MustTreatTypeAsGenericInstType(a.ParameterType)); + } + + int GetHashCode(Type a, Type declaringType) { + return GetHashCode(a, declaringType.MustTreatTypeAsGenericInstType(a)); + } + + /// + /// Compares calling conventions + /// + /// Calling convention + /// Method + /// + static bool Equals(CallingConvention a, MethodBase b) { + var bc = b.CallingConvention; + + if (((a & CallingConvention.Generic) != 0) != b.IsGenericMethod) + return false; + if (((a & CallingConvention.HasThis) != 0) != ((bc & CallingConventions.HasThis) != 0)) + return false; + if (((a & CallingConvention.ExplicitThis) != 0) != ((bc & CallingConventions.ExplicitThis) != 0)) + return false; + + var cca = a & CallingConvention.Mask; + switch (bc & CallingConventions.Any) { + case CallingConventions.Standard: + if (cca == CallingConvention.VarArg || cca == CallingConvention.NativeVarArg) + return false; + break; + + case CallingConventions.VarArgs: + if (cca != CallingConvention.VarArg && cca != CallingConvention.NativeVarArg) + return false; + break; + + case CallingConventions.Any: + default: + break; + } + + return true; + } + + static int GetHashCode_CallingConvention(CallingConventions a, bool isGeneric) { + //************************************************************** + // IMPORTANT: This hash must match the other call conv hash code + //************************************************************** + + CallingConvention cc = 0; + + if (isGeneric) + cc |= CallingConvention.Generic; + if ((a & CallingConventions.HasThis) != 0) + cc |= CallingConvention.HasThis; + if ((a & CallingConventions.ExplicitThis) != 0) + cc |= CallingConvention.ExplicitThis; + + return (int)cc; + } + + /// + /// Compares return types + /// + /// Return type #1 + /// MethodBase + /// true if same, false otherwise + bool ReturnTypeEquals(TypeSig a, MethodBase b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + var mi = b as MethodInfo; + if (mi != null) + result = Equals(a, mi.ReturnParameter, b.DeclaringType); + else if (b is ConstructorInfo) + result = IsSystemVoid(a); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + static bool IsSystemVoid(TypeSig a) { + return a.RemovePinnedAndModifiers().GetElementType() == ElementType.Void; + } + + /// + /// Compares parameter lists + /// + /// Type list #1 + /// Type list #2 + /// Declaring type of method that owns parameter + /// true if same, false otherwise + bool Equals(IList a, IList b, Type declaringType) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (a.Count != b.Count) + result = false; + else { + int i; + for (i = 0; i < a.Count; i++) { + if (!Equals(a[i], b[i], declaringType)) + break; + } + result = i == a.Count; + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares parameter types + /// + /// Parameter type #1 + /// Parameter #2 + /// Declaring type of method that owns parameter + /// true if same, false otherwise + bool Equals(TypeSig a, ParameterInfo b, Type declaringType) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + TypeSig a2; + bool result = ModifiersEquals(a, b.GetRequiredCustomModifiers(), b.GetOptionalCustomModifiers(), out a2) && + Equals(a2, b.ParameterType, declaringType.MustTreatTypeAsGenericInstType(b.ParameterType)); + + recursionCounter.Decrement(); + return result; + } + + bool ModifiersEquals(TypeSig a, IList reqMods2, IList optMods2, out TypeSig aAfterModifiers) { + aAfterModifiers = a; + if (!(a is ModifierSig)) + return reqMods2.Count == 0 && optMods2.Count == 0; + if (!recursionCounter.Increment()) + return false; + bool result; + + var reqMods1 = new List(reqMods2.Count); + var optMods1 = new List(optMods2.Count); + while (true) { + var modifierSig = aAfterModifiers as ModifierSig; + if (modifierSig == null) + break; + if (modifierSig is CModOptSig) + optMods1.Add(modifierSig.Modifier); + else + reqMods1.Add(modifierSig.Modifier); + + // This can only loop forever if the user created a loop. It's not possible + // to create a loop with invalid metadata. + aAfterModifiers = aAfterModifiers.Next; + } + optMods1.Reverse(); + reqMods1.Reverse(); + + result = reqMods1.Count == reqMods2.Count && + optMods1.Count == optMods2.Count && + ModifiersEquals(reqMods1, reqMods2) && + ModifiersEquals(optMods1, optMods2); + + recursionCounter.Decrement(); + return result; + } + + bool ModifiersEquals(IList a, IList b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + bool result; + + if (a.Count != b.Count) + result = false; + else { + int i; + for (i = 0; i < b.Count; i++) { + if (!Equals(a[i], b[i])) + break; + } + result = i == b.Count; + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(FieldInfo a, IField b) { + return Equals(b, a); + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(IField a, FieldInfo b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result; + FieldDef fa; + MemberRef ma; + + if ((fa = a as FieldDef) != null) + result = Equals(fa, b); + else if ((ma = a as MemberRef) != null) + result = Equals(ma, b); + else + result = false; + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(FieldInfo a, FieldDef b) { + return Equals(b, a); + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(FieldDef a, FieldInfo b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_MethodFieldNames(a.Name, b.Name) && + Equals(a.FieldSig, b) && + (!CompareMethodFieldDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + + recursionCounter.Decrement(); + return result; + } + + bool Equals(FieldSig a, FieldInfo b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + TypeSig a2; + bool result = ModifiersEquals(a.Type, b.GetRequiredCustomModifiers(), b.GetOptionalCustomModifiers(), out a2) && + Equals(a2, b.FieldType, b.DeclaringType.MustTreatTypeAsGenericInstType(b.FieldType)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(FieldInfo a, MemberRef b) { + return Equals(b, a); + } + + /// + /// Compares fields + /// + /// Field #1 + /// Field #2 + /// true if same, false otherwise + public bool Equals(MemberRef a, FieldInfo b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_MethodFieldNames(a.Name, b.Name); + + GenericInstSig git; + if (SubstituteGenericParameters && (git = GetGenericInstanceType(a.Class)) != null) { + InitializeGenericArguments(); + genericArguments.PushTypeArgs(git.GenericArguments); + result = result && Equals(a.FieldSig, b); + genericArguments.PopTypeArgs(); + } + else + result = result && Equals(a.FieldSig, b); + + result = result && (!CompareMethodFieldDeclaringType || Equals(a.Class, b.DeclaringType, b.Module)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a field + /// + /// The field + /// The hash code + public int GetHashCode(FieldInfo a) { + // ************************************************************ + // IMPORTANT: This hash code must match the MemberRef hash code + // ************************************************************ + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash = GetHashCode_MethodFieldName(a.Name) + + GetHashCode_FieldSig(a); + if (CompareMethodFieldDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + int GetHashCode_FieldSig(FieldInfo a) { + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + int hash; + + hash = GetHashCode_CallingConvention(0, false) + GetHashCode(a.FieldType, a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares properties + /// + /// Property #1 + /// Property #2 + /// true if same, false otherwise + public bool Equals(PropertyDef a, PropertyInfo b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_PropertyNames(a.Name, b.Name) && + Equals(a.PropertySig, b) && + (!ComparePropertyDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + + recursionCounter.Decrement(); + return result; + } + + bool Equals(PropertySig a, PropertyInfo b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + TypeSig a2; + bool result = ModifiersEquals(a.RetType, b.GetRequiredCustomModifiers(), b.GetOptionalCustomModifiers(), out a2) && + Equals(a2, b.PropertyType, b.DeclaringType.MustTreatTypeAsGenericInstType(b.PropertyType)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of a property + /// + /// The property + /// The hash code + public int GetHashCode(PropertyInfo a) { + // ************************************************************** + // IMPORTANT: This hash code must match the PropertyDef hash code + // ************************************************************** + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash = GetHashCode_PropertyName(a.Name) + + GetHashCode(a.PropertyType, a.DeclaringType); + if (ComparePropertyDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + /// + /// Compares events + /// + /// Event #1 + /// Event #2 + /// true if same, false otherwise + public bool Equals(EventDef a, EventInfo b) { + if ((object)a == (object)b) + return true; // both are null + if (a == null || b == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool result = Equals_EventNames(a.Name, b.Name) && + Equals(a.EventType, b.EventHandlerType, b.DeclaringType.MustTreatTypeAsGenericInstType(b.EventHandlerType)) && + (!CompareEventDeclaringType || Equals(a.DeclaringType, b.DeclaringType)); + + recursionCounter.Decrement(); + return result; + } + + /// + /// Gets the hash code of an event + /// + /// The event + /// The hash code + public int GetHashCode(EventInfo a) { + // *********************************************************** + // IMPORTANT: This hash code must match the EventDef hash code + // *********************************************************** + if (a == null) + return 0; + if (!recursionCounter.Increment()) + return 0; + + int hash = GetHashCode_EventName(a.Name) + + GetHashCode(a.EventHandlerType, a.DeclaringType); + if (CompareEventDeclaringType) + hash += GetHashCode(a.DeclaringType); + + recursionCounter.Decrement(); + return hash; + } + + /// + public override string ToString() { + return string.Format("{0} - {1}", recursionCounter, options); + } + } +} diff --git a/dnlib/DotNet/SignatureReader.cs b/dnlib/DotNet/SignatureReader.cs new file mode 100644 index 0000000..2988fb7 --- /dev/null +++ b/dnlib/DotNet/SignatureReader.cs @@ -0,0 +1,710 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Helps resolve types + /// + public interface ISignatureReaderHelper { + /// + /// Resolves a + /// + /// A TypeDefOrRef coded token + /// Generic parameter context + /// A or null if + /// is invalid + ITypeDefOrRef ResolveTypeDefOrRef(uint codedToken, GenericParamContext gpContext); + + /// + /// Converts the address of a to a + /// + /// + /// Address of . This is also known as the + /// method table and has the same value as + /// A or null if not supported + TypeSig ConvertRTInternalAddress(IntPtr address); + } + + /// + /// Reads signatures from the #Blob stream + /// + public struct SignatureReader : IDisposable { + readonly ISignatureReaderHelper helper; + readonly ICorLibTypes corLibTypes; + readonly IBinaryReader reader; + readonly GenericParamContext gpContext; + RecursionCounter recursionCounter; + + /// + /// Reads a signature from the #Blob stream + /// + /// Reader module + /// #Blob stream offset of signature + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ModuleDefMD readerModule, uint sig) { + return ReadSig(readerModule, sig, new GenericParamContext()); + } + + /// + /// Reads a signature from the #Blob stream + /// + /// Reader module + /// #Blob stream offset of signature + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ModuleDefMD readerModule, uint sig, GenericParamContext gpContext) { + try { + using (var reader = new SignatureReader(readerModule, sig, gpContext)) { + if (reader.reader.Length == 0) + return null; + var csig = reader.ReadSig(); + if (csig != null) + csig.ExtraData = reader.GetExtraData(); + return csig; + } + } + catch { + return null; + } + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature data + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ModuleDefMD module, byte[] signature) { + return ReadSig(module, module.CorLibTypes, MemoryImageStream.Create(signature), new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature data + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ModuleDefMD module, byte[] signature, GenericParamContext gpContext) { + return ReadSig(module, module.CorLibTypes, MemoryImageStream.Create(signature), gpContext); + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature reader which will be owned by us + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ModuleDefMD module, IBinaryReader signature) { + return ReadSig(module, module.CorLibTypes, signature, new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature reader which will be owned by us + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ModuleDefMD module, IBinaryReader signature, GenericParamContext gpContext) { + return ReadSig(module, module.CorLibTypes, signature, gpContext); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature data + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, byte[] signature) { + return ReadSig(helper, corLibTypes, MemoryImageStream.Create(signature), new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature data + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, byte[] signature, GenericParamContext gpContext) { + return ReadSig(helper, corLibTypes, MemoryImageStream.Create(signature), gpContext); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature reader which will be owned by us + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, IBinaryReader signature) { + return ReadSig(helper, corLibTypes, signature, new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature reader which will be owned by us + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static CallingConventionSig ReadSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, IBinaryReader signature, GenericParamContext gpContext) { + try { + using (var reader = new SignatureReader(helper, corLibTypes, signature, gpContext)) { + if (reader.reader.Length == 0) + return null; + return reader.ReadSig(); + } + } + catch { + return null; + } + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// Reader module + /// #Blob stream offset of signature + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD readerModule, uint sig) { + return ReadTypeSig(readerModule, sig, new GenericParamContext()); + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// Reader module + /// #Blob stream offset of signature + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD readerModule, uint sig, GenericParamContext gpContext) { + try { + using (var reader = new SignatureReader(readerModule, sig, gpContext)) + return reader.ReadType(); + } + catch { + return null; + } + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// Reader module + /// #Blob stream offset of signature + /// If there's any extra data after the signature, it's saved + /// here, else this will be null + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD readerModule, uint sig, out byte[] extraData) { + return ReadTypeSig(readerModule, sig, new GenericParamContext(), out extraData); + } + + /// + /// Reads a type signature from the #Blob stream + /// + /// Reader module + /// #Blob stream offset of signature + /// Generic parameter context + /// If there's any extra data after the signature, it's saved + /// here, else this will be null + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD readerModule, uint sig, GenericParamContext gpContext, out byte[] extraData) { + try { + using (var reader = new SignatureReader(readerModule, sig, gpContext)) { + TypeSig ts; + try { + ts = reader.ReadType(); + } + catch (IOException) { + reader.reader.Position = 0; + ts = null; + } + extraData = reader.GetExtraData(); + return ts; + } + } + catch { + extraData = null; + return null; + } + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature data + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD module, byte[] signature) { + return ReadTypeSig(module, module.CorLibTypes, MemoryImageStream.Create(signature), new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature data + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD module, byte[] signature, GenericParamContext gpContext) { + return ReadTypeSig(module, module.CorLibTypes, MemoryImageStream.Create(signature), gpContext); + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature reader which will be owned by us + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD module, IBinaryReader signature) { + return ReadTypeSig(module, module.CorLibTypes, signature, new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// The module where the signature is located in + /// The signature reader which will be owned by us + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ModuleDefMD module, IBinaryReader signature, GenericParamContext gpContext) { + return ReadTypeSig(module, module.CorLibTypes, signature, gpContext); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature data + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, byte[] signature) { + return ReadTypeSig(helper, corLibTypes, MemoryImageStream.Create(signature), new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature data + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, byte[] signature, GenericParamContext gpContext) { + return ReadTypeSig(helper, corLibTypes, MemoryImageStream.Create(signature), gpContext); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature reader which will be owned by us + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, IBinaryReader signature) { + return ReadTypeSig(helper, corLibTypes, signature, new GenericParamContext()); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature reader which will be owned by us + /// Generic parameter context + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, IBinaryReader signature, GenericParamContext gpContext) { + byte[] extraData; + return ReadTypeSig(helper, corLibTypes, signature, gpContext, out extraData); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature data + /// Generic parameter context + /// If there's any extra data after the signature, it's saved + /// here, else this will be null + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, byte[] signature, GenericParamContext gpContext, out byte[] extraData) { + return ReadTypeSig(helper, corLibTypes, MemoryImageStream.Create(signature), gpContext, out extraData); + } + + /// + /// Reads a signature + /// + /// Token resolver + /// A instance + /// The signature reader which will be owned by us + /// Generic parameter context + /// If there's any extra data after the signature, it's saved + /// here, else this will be null + /// A new instance or null if + /// is invalid. + public static TypeSig ReadTypeSig(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, IBinaryReader signature, GenericParamContext gpContext, out byte[] extraData) { + try { + using (var reader = new SignatureReader(helper, corLibTypes, signature, gpContext)) { + TypeSig ts; + try { + ts = reader.ReadType(); + } + catch (IOException) { + reader.reader.Position = 0; + ts = null; + } + extraData = reader.GetExtraData(); + return ts; + } + } + catch { + extraData = null; + return null; + } + } + + /// + /// Constructor + /// + /// Reader module + /// #Blob stream offset of signature + /// Generic parameter context + SignatureReader(ModuleDefMD readerModule, uint sig, GenericParamContext gpContext) + : this(readerModule, readerModule.CorLibTypes, readerModule.BlobStream.CreateStream(sig), gpContext) { + } + + /// + /// Constructor + /// + /// Token resolver + /// A instance + /// The signature data + /// Generic parameter context + SignatureReader(ISignatureReaderHelper helper, ICorLibTypes corLibTypes, IBinaryReader reader, GenericParamContext gpContext) { + this.helper = helper; + this.corLibTypes = corLibTypes; + this.reader = reader; + this.gpContext = gpContext; + this.recursionCounter = new RecursionCounter(); + } + + byte[] GetExtraData() { + if (reader.Position >= reader.Length) + return null; + return reader.ReadRemainingBytes(); + } + + /// + /// Reads the signature + /// + /// A new instance or null if invalid signature + CallingConventionSig ReadSig() { + if (!recursionCounter.Increment()) + return null; + + CallingConventionSig result; + var callingConvention = (CallingConvention)reader.ReadByte(); + switch (callingConvention & CallingConvention.Mask) { + case CallingConvention.Default: + case CallingConvention.C: + case CallingConvention.StdCall: + case CallingConvention.ThisCall: + case CallingConvention.FastCall: + case CallingConvention.VarArg: + case CallingConvention.NativeVarArg: + result = ReadMethod(callingConvention); + break; + + case CallingConvention.Field: + result = ReadField(callingConvention); + break; + + case CallingConvention.LocalSig: + result = ReadLocalSig(callingConvention); + break; + + case CallingConvention.Property: + result = ReadProperty(callingConvention); + break; + + case CallingConvention.GenericInst: + result = ReadGenericInstMethod(callingConvention); + break; + + case CallingConvention.Unmanaged: + default: + result = null; + break; + } + + recursionCounter.Decrement(); + return result; + } + + /// + /// Reads a + /// + /// First byte of signature + /// A new instance + FieldSig ReadField(CallingConvention callingConvention) { + return new FieldSig(callingConvention, ReadType()); + } + + /// + /// Reads a + /// + /// First byte of signature + /// A new instance + MethodSig ReadMethod(CallingConvention callingConvention) { + return ReadSig(new MethodSig(callingConvention)); + } + + /// + /// Reads a + /// + /// First byte of signature + /// A new instance + PropertySig ReadProperty(CallingConvention callingConvention) { + return ReadSig(new PropertySig(callingConvention)); + } + + T ReadSig(T methodSig) where T : MethodBaseSig { + if (methodSig.Generic) { + uint count; + if (!reader.ReadCompressedUInt32(out count)) + return null; + methodSig.GenParamCount = count; + } + + uint numParams; + if (!reader.ReadCompressedUInt32(out numParams)) + return null; + + methodSig.RetType = ReadType(); + + var parameters = methodSig.Params; + for (uint i = 0; i < numParams; i++) { + var type = ReadType(); + if (type is SentinelSig) { + if (methodSig.ParamsAfterSentinel == null) + methodSig.ParamsAfterSentinel = parameters = ThreadSafeListCreator.Create((int)(numParams - i)); + i--; + } + else + parameters.Add(type); + } + + return methodSig; + } + + /// + /// Reads a + /// + /// First byte of signature + /// A new instance + LocalSig ReadLocalSig(CallingConvention callingConvention) { + uint count; + if (!reader.ReadCompressedUInt32(out count)) + return null; + var sig = new LocalSig(callingConvention, count); + var locals = sig.Locals; + for (uint i = 0; i < count; i++) + locals.Add(ReadType()); + return sig; + } + + /// + /// Reads a + /// + /// First byte of signature + /// A new instance + GenericInstMethodSig ReadGenericInstMethod(CallingConvention callingConvention) { + uint count; + if (!reader.ReadCompressedUInt32(out count)) + return null; + var sig = new GenericInstMethodSig(callingConvention, count); + var args = sig.GenericArguments; + for (uint i = 0; i < count; i++) + args.Add(ReadType()); + return sig; + } + + /// + /// Reads the next type + /// + /// A new instance or null if invalid element type + TypeSig ReadType() { + if (!recursionCounter.Increment()) + return null; + + uint num; + TypeSig nextType, result = null; + switch ((ElementType)reader.ReadByte()) { + case ElementType.Void: result = corLibTypes.Void; break; + case ElementType.Boolean: result = corLibTypes.Boolean; break; + case ElementType.Char: result = corLibTypes.Char; break; + case ElementType.I1: result = corLibTypes.SByte; break; + case ElementType.U1: result = corLibTypes.Byte; break; + case ElementType.I2: result = corLibTypes.Int16; break; + case ElementType.U2: result = corLibTypes.UInt16; break; + case ElementType.I4: result = corLibTypes.Int32; break; + case ElementType.U4: result = corLibTypes.UInt32; break; + case ElementType.I8: result = corLibTypes.Int64; break; + case ElementType.U8: result = corLibTypes.UInt64; break; + case ElementType.R4: result = corLibTypes.Single; break; + case ElementType.R8: result = corLibTypes.Double; break; + case ElementType.String: result = corLibTypes.String; break; + case ElementType.TypedByRef:result = corLibTypes.TypedReference; break; + case ElementType.I: result = corLibTypes.IntPtr; break; + case ElementType.U: result = corLibTypes.UIntPtr; break; + case ElementType.Object: result = corLibTypes.Object; break; + + case ElementType.Ptr: result = new PtrSig(ReadType()); break; + case ElementType.ByRef: result = new ByRefSig(ReadType()); break; + case ElementType.ValueType: result = new ValueTypeSig(ReadTypeDefOrRef()); break; + case ElementType.Class: result = new ClassSig(ReadTypeDefOrRef()); break; + case ElementType.FnPtr: result = new FnPtrSig(ReadSig()); break; + case ElementType.SZArray: result = new SZArraySig(ReadType()); break; + case ElementType.CModReqd: result = new CModReqdSig(ReadTypeDefOrRef(), ReadType()); break; + case ElementType.CModOpt: result = new CModOptSig(ReadTypeDefOrRef(), ReadType()); break; + case ElementType.Sentinel: result = new SentinelSig(); break; + case ElementType.Pinned: result = new PinnedSig(ReadType()); break; + + case ElementType.Var: + if (!reader.ReadCompressedUInt32(out num)) + break; + result = new GenericVar(num, gpContext.Type); + break; + + case ElementType.MVar: + if (!reader.ReadCompressedUInt32(out num)) + break; + result = new GenericMVar(num, gpContext.Method); + break; + + case ElementType.ValueArray: + nextType = ReadType(); + if (!reader.ReadCompressedUInt32(out num)) + break; + result = new ValueArraySig(nextType, num); + break; + + case ElementType.Module: + if (!reader.ReadCompressedUInt32(out num)) + break; + result = new ModuleSig(num, ReadType()); + break; + + case ElementType.GenericInst: + nextType = ReadType(); + if (!reader.ReadCompressedUInt32(out num)) + break; + var genericInstSig = new GenericInstSig(nextType as ClassOrValueTypeSig, num); + var args = genericInstSig.GenericArguments; + for (uint i = 0; i < num; i++) + args.Add(ReadType()); + result = genericInstSig; + break; + + case ElementType.Array: + nextType = ReadType(); + uint rank; + if (!reader.ReadCompressedUInt32(out rank)) + break; + if (rank == 0) { + result = new ArraySig(nextType, rank); + break; + } + if (!reader.ReadCompressedUInt32(out num)) + break; + var sizes = new List((int)num); + for (uint i = 0; i < num; i++) { + uint size; + if (!reader.ReadCompressedUInt32(out size)) + goto exit; + sizes.Add(size); + } + if (!reader.ReadCompressedUInt32(out num)) + break; + var lowerBounds = new List((int)num); + for (uint i = 0; i < num; i++) { + int size; + if (!reader.ReadCompressedInt32(out size)) + goto exit; + lowerBounds.Add(size); + } + result = new ArraySig(nextType, rank, sizes, lowerBounds); + break; + + case ElementType.Internal: + IntPtr address; + if (IntPtr.Size == 4) + address = new IntPtr(reader.ReadInt32()); + else + address = new IntPtr(reader.ReadInt64()); + result = helper.ConvertRTInternalAddress(address); + break; + + case ElementType.End: + case ElementType.R: + default: + result = null; + break; + } +exit: + recursionCounter.Decrement(); + return result; + } + + /// + /// Reads a TypeDefOrRef + /// + /// A instance + ITypeDefOrRef ReadTypeDefOrRef() { + uint codedToken; + if (!reader.ReadCompressedUInt32(out codedToken)) + return null; + return helper.ResolveTypeDefOrRef(codedToken, gpContext); + } + + /// + public void Dispose() { + if (reader != null) + reader.Dispose(); + } + } +} diff --git a/dnlib/DotNet/StandAloneSig.cs b/dnlib/DotNet/StandAloneSig.cs new file mode 100644 index 0000000..336524d --- /dev/null +++ b/dnlib/DotNet/StandAloneSig.cs @@ -0,0 +1,157 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the StandAloneSig table + /// + public abstract class StandAloneSig : IHasCustomAttribute, IContainsGenericParameter { + /// + /// The row id in its table + /// + protected uint rid; + + /// + public MDToken MDToken { + get { return new MDToken(Table.StandAloneSig, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int HasCustomAttributeTag { + get { return 11; } + } + + /// + /// From column StandAloneSig.Signature + /// + public CallingConventionSig Signature { + get { return signature; } + set { signature = value; } + } + /// + protected CallingConventionSig signature; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// Gets/sets the method sig + /// + public MethodSig MethodSig { + get { return signature as MethodSig; } + set { signature = value; } + } + + /// + /// Gets/sets the locals sig + /// + public LocalSig LocalSig { + get { return signature as LocalSig; } + set { signature = value; } + } + + /// + public bool ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + } + + /// + /// A StandAloneSig row created by the user and not present in the original .NET file + /// + public class StandAloneSigUser : StandAloneSig { + /// + /// Default constructor + /// + public StandAloneSigUser() { + } + + /// + /// Constructor + /// + /// A locals sig + public StandAloneSigUser(LocalSig localSig) { + this.signature = localSig; + } + + /// + /// Constructor + /// + /// A method sig + public StandAloneSigUser(MethodSig methodSig) { + this.signature = methodSig; + } + } + + /// + /// Created from a row in the StandAloneSig table + /// + sealed class StandAloneSigMD : StandAloneSig, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.StandAloneSig, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this StandAloneSig row + /// Row ID + /// Generic parameter context + /// If is null + /// If is invalid + public StandAloneSigMD(ModuleDefMD readerModule, uint rid, GenericParamContext gpContext) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.StandAloneSigTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("StandAloneSig rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint signature = readerModule.TablesStream.ReadStandAloneSigRow2(origRid); + this.signature = readerModule.ReadSignature(signature, gpContext); + } + } +} diff --git a/dnlib/DotNet/StrongNameKey.cs b/dnlib/DotNet/StrongNameKey.cs new file mode 100644 index 0000000..5942f88 --- /dev/null +++ b/dnlib/DotNet/StrongNameKey.cs @@ -0,0 +1,769 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Security.Cryptography; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Thrown if the strong name key or public key is invalid + /// + [Serializable] + public class InvalidKeyException : Exception { + /// + /// Default constructor + /// + public InvalidKeyException() { + } + + /// + /// Constructor + /// + /// Error message + public InvalidKeyException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Error message + /// Other exception + public InvalidKeyException(string message, Exception innerException) + : base(message, innerException) { + } + } + + /// + /// Type of signature algorithm. See WinCrypt.h in the Windows SDK + /// + public enum SignatureAlgorithm : uint { + /// + /// RSA signature algorithm + /// + CALG_RSA_SIGN = 0x00002400, + } + + static class StrongNameUtils { + public static byte[] ReadBytesReverse(this BinaryReader reader, int len) { + var data = reader.ReadBytes(len); + if (data.Length != len) + throw new InvalidKeyException("Can't read more bytes"); + Array.Reverse(data); + return data; + } + + public static void WriteReverse(this BinaryWriter writer, byte[] data) { + var d = (byte[])data.Clone(); + Array.Reverse(d); + writer.Write(d); + } + } + + /// + /// A public key + /// + public sealed class StrongNamePublicKey { + const uint RSA1_SIG = 0x31415352; + SignatureAlgorithm signatureAlgorithm; + AssemblyHashAlgorithm hashAlgorithm; + byte[] modulus; + byte[] publicExponent; + + /// + /// Gets/sets the signature algorithm + /// + public SignatureAlgorithm SignatureAlgorithm { + get { return signatureAlgorithm; } + set { signatureAlgorithm = value; } + } + + /// + /// Gets/sets the hash algorithm + /// + public AssemblyHashAlgorithm HashAlgorithm { + get { return hashAlgorithm; } + set { hashAlgorithm = value; } + } + + /// + /// Gets/sets the modulus + /// + public byte[] Modulus { + get { return modulus; } + set { modulus = value; } + } + + /// + /// Gets/sets the public exponent + /// + public byte[] PublicExponent { + get { return publicExponent; } + set { + if (value == null || value.Length != 4) + throw new ArgumentException("PublicExponent must be exactly 4 bytes"); + publicExponent = value; + } + } + + /// + /// Default constructor + /// + public StrongNamePublicKey() { + } + + /// + /// Constructor + /// + /// Modulus + /// Public exponent + public StrongNamePublicKey(byte[] modulus, byte[] publicExponent) + : this(modulus, publicExponent, AssemblyHashAlgorithm.SHA1, SignatureAlgorithm.CALG_RSA_SIGN) { + } + + /// + /// Constructor + /// + /// Modulus + /// Public exponent + /// Hash algorithm + public StrongNamePublicKey(byte[] modulus, byte[] publicExponent, AssemblyHashAlgorithm hashAlgorithm) + : this(modulus, publicExponent, hashAlgorithm, SignatureAlgorithm.CALG_RSA_SIGN) { + } + + /// + /// Constructor + /// + /// Modulus + /// Public exponent + /// Hash algorithm + /// Signature algorithm + public StrongNamePublicKey(byte[] modulus, byte[] publicExponent, AssemblyHashAlgorithm hashAlgorithm, SignatureAlgorithm signatureAlgorithm) { + this.signatureAlgorithm = signatureAlgorithm; + this.hashAlgorithm = hashAlgorithm; + this.modulus = modulus; + this.publicExponent = publicExponent; + } + + /// + /// Constructor + /// + /// Public key + public StrongNamePublicKey(PublicKey pk) + : this(pk.Data) { + } + + /// + /// Constructor + /// + /// Public key data + /// Strong name key is invalid + public StrongNamePublicKey(byte[] pk) { + Initialize(new BinaryReader(new MemoryStream(pk))); + } + + /// + /// Constructor + /// + /// Public key file + /// Strong name key is invalid + public StrongNamePublicKey(string filename) { + using (var fileStream = File.OpenRead(filename)) + Initialize(new BinaryReader(fileStream)); + } + + /// + /// Constructor + /// + /// Public key stream + /// Strong name key is invalid + public StrongNamePublicKey(Stream stream) { + Initialize(new BinaryReader(stream)); + } + + /// + /// Constructor + /// + /// Public key reader + /// Strong name key is invalid + public StrongNamePublicKey(BinaryReader reader) { + Initialize(reader); + } + + void Initialize(BinaryReader reader) { + try { + // Read PublicKeyBlob + signatureAlgorithm = (SignatureAlgorithm)reader.ReadUInt32(); + hashAlgorithm = (AssemblyHashAlgorithm)reader.ReadUInt32(); + int pkLen = reader.ReadInt32(); + + // Read PUBLICKEYSTRUC + if (reader.ReadByte() != 6) + throw new InvalidKeyException("Not a public key"); + if (reader.ReadByte() != 2) + throw new InvalidKeyException("Invalid version"); + reader.ReadUInt16(); // reserved + if ((SignatureAlgorithm)reader.ReadUInt32() != SignatureAlgorithm.CALG_RSA_SIGN) + throw new InvalidKeyException("Not RSA sign"); + + // Read RSAPUBKEY + if (reader.ReadUInt32() != RSA1_SIG) // magic = RSA1 + throw new InvalidKeyException("Invalid RSA1 magic"); + uint bitLength = reader.ReadUInt32(); + publicExponent = reader.ReadBytesReverse(4); + + modulus = reader.ReadBytesReverse((int)(bitLength / 8)); + } + catch (IOException ex) { + throw new InvalidKeyException("Invalid public key", ex); + } + } + + /// + /// Creates a public key blob + /// + public byte[] CreatePublicKey() { + return CreatePublicKey(signatureAlgorithm, hashAlgorithm, modulus, publicExponent); + } + + internal static byte[] CreatePublicKey(SignatureAlgorithm sigAlg, AssemblyHashAlgorithm hashAlg, byte[] modulus, byte[] publicExponent) { + if (sigAlg != SignatureAlgorithm.CALG_RSA_SIGN) + throw new ArgumentException("Signature algorithm must be RSA"); + var outStream = new MemoryStream(); + var writer = new BinaryWriter(outStream); + writer.Write((uint)sigAlg); // SigAlgID + writer.Write((uint)hashAlg); // HashAlgID + writer.Write(0x14 + modulus.Length);// cbPublicKey + writer.Write((byte)6); // bType (public key) + writer.Write((byte)2); // bVersion + writer.Write((ushort)0); // reserved + writer.Write((uint)sigAlg); // aiKeyAlg + writer.Write(RSA1_SIG); // magic (RSA1) + writer.Write(modulus.Length * 8); // bitlen + writer.WriteReverse(publicExponent);// pubexp + writer.WriteReverse(modulus); // modulus + return outStream.ToArray(); + } + + /// + public override string ToString() { + return Utils.ToHex(CreatePublicKey(), false); + } + } + + /// + /// Stores a strong name key pair + /// + public sealed class StrongNameKey { + const uint RSA2_SIG = 0x32415352; + byte[] publicKey; + AssemblyHashAlgorithm hashAlg; + byte[] publicExponent; + byte[] modulus; + byte[] prime1; + byte[] prime2; + byte[] exponent1; + byte[] exponent2; + byte[] coefficient; + byte[] privateExponent; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Gets the public key + /// + public byte[] PublicKey { + get { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (publicKey == null) + publicKey = CreatePublicKey_NoLock(); + return publicKey; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets the strong name signature size in bytes + /// + public int SignatureSize { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return modulus.Length; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + } + + /// + /// Gets/sets the public key hash algorithm. It's usually + /// + public AssemblyHashAlgorithm HashAlgorithm { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return hashAlg; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (hashAlg == value) + return; + publicKey = null; + hashAlg = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets the public exponent + /// + public byte[] PublicExponent { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return publicExponent; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null || value.Length != 4) + throw new ArgumentException("PublicExponent must be exactly 4 bytes"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + publicExponent = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets the modulus + /// + public byte[] Modulus { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return modulus; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + modulus = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets prime1 + /// + public byte[] Prime1 { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return prime1; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + prime1 = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets prime2 + /// + public byte[] Prime2 { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return prime2; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + prime2 = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets exponent1 + /// + public byte[] Exponent1 { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return exponent1; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + exponent1 = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets exponent2 + /// + public byte[] Exponent2 { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return exponent2; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + exponent2 = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets the coefficient + /// + public byte[] Coefficient { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return coefficient; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + coefficient = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Gets/sets the private exponent + /// + public byte[] PrivateExponent { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return privateExponent; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { + if (value == null) + throw new ArgumentNullException("value"); +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + privateExponent = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Default constructor + /// + public StrongNameKey() { + } + + /// + /// Constructor + /// + /// Strong name key data + /// Strong name key is invalid + public StrongNameKey(byte[] keyData) { + Initialize(new BinaryReader(new MemoryStream(keyData))); + } + + /// + /// Constructor + /// + /// Strong name key file + /// Strong name key is invalid + public StrongNameKey(string filename) { + using (var fileStream = File.OpenRead(filename)) + Initialize(new BinaryReader(fileStream)); + } + + /// + /// Constructor + /// + /// Strong name key stream + /// Strong name key is invalid + public StrongNameKey(Stream stream) { + Initialize(new BinaryReader(stream)); + } + + /// + /// Constructor + /// + /// Strong name key reader + /// Strong name key is invalid + public StrongNameKey(BinaryReader reader) { + Initialize(reader); + } + + /// + /// Initializes the public/private key pair data + /// + /// Public/private key pair reader + /// Strong name key is invalid + public void Initialize(BinaryReader reader) { + /* + * Links: + * http://msdn.microsoft.com/en-us/library/cc250013%28v=prot.20%29.aspx + * http://msdn.microsoft.com/en-us/library/windows/desktop/aa387689%28v=vs.85%29.aspx + * + * struct PublicKeyBlob { + * unsigned int SigAlgID; // sig algorithm used to create the sig (00002400 = CALG_RSA_SIGN) + * unsigned int HashAlgID; // hash alg used to create the sig (usually 00008004 = CALG_SHA1) + * ULONG cbPublicKey; // Size of the data that follows + * // the rest is here + * } + * + * typedef struct _PUBLICKEYSTRUC { + * BYTE bType; + * BYTE bVersion; + * WORD reserved; + * ALG_ID aiKeyAlg; + * } BLOBHEADER, PUBLICKEYSTRUC; + * + * typedef struct _RSAPUBKEY { + * DWORD magic; + * DWORD bitlen; + * DWORD pubexp; + * } RSAPUBKEY; + * + * Format of public key + * PublicKeyBlob + * PUBLICKEYSTRUC publickeystruc; + * RSAPUBKEY rsapubkey; + * BYTE modulus[rsapubkey.bitlen/8] + * + * Format of public/private key pair + * PUBLICKEYSTRUC publickeystruc; + * RSAPUBKEY rsapubkey; + * BYTE modulus[rsapubkey.bitlen/8]; + * BYTE prime1[rsapubkey.bitlen/16]; // aka P + * BYTE prime2[rsapubkey.bitlen/16]; // aka Q + * BYTE exponent1[rsapubkey.bitlen/16]; // aka DP + * BYTE exponent2[rsapubkey.bitlen/16]; // aka DQ + * BYTE coefficient[rsapubkey.bitlen/16]; // aka IQ + * BYTE privateExponent[rsapubkey.bitlen/8];// aka D + */ + + try { + publicKey = null; + + // Read PUBLICKEYSTRUC + if (reader.ReadByte() != 7) + throw new InvalidKeyException("Not a public/private key pair"); + if (reader.ReadByte() != 2) + throw new InvalidKeyException("Invalid version"); + reader.ReadUInt16(); // reserved + if ((SignatureAlgorithm)reader.ReadUInt32() != SignatureAlgorithm.CALG_RSA_SIGN) + throw new InvalidKeyException("Not RSA sign"); + + // Read RSAPUBKEY + if (reader.ReadUInt32() != RSA2_SIG) // magic = RSA2 + throw new InvalidKeyException("Invalid RSA2 magic"); + uint bitLength = reader.ReadUInt32(); + publicExponent = reader.ReadBytesReverse(4); + + int len8 = (int)(bitLength / 8); + int len16 = (int)(bitLength / 16); + + // Read the rest + modulus = reader.ReadBytesReverse(len8); + prime1 = reader.ReadBytesReverse(len16); + prime2 = reader.ReadBytesReverse(len16); + exponent1 = reader.ReadBytesReverse(len16); + exponent2 = reader.ReadBytesReverse(len16); + coefficient = reader.ReadBytesReverse(len16); + privateExponent = reader.ReadBytesReverse(len8); + } + catch (IOException ex) { + throw new InvalidKeyException("Couldn't read strong name key", ex); + } + } + + byte[] CreatePublicKey_NoLock() { + var halg = hashAlg == 0 ? AssemblyHashAlgorithm.SHA1 : hashAlg; + return StrongNamePublicKey.CreatePublicKey(SignatureAlgorithm.CALG_RSA_SIGN, halg, modulus, publicExponent); + } + + /// + /// Creates an instance + /// + public RSA CreateRSA() { + RSAParameters rsaParams; +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + rsaParams = new RSAParameters { + Exponent = publicExponent, + Modulus = modulus, + P = prime1, + Q = prime2, + DP = exponent1, + DQ = exponent2, + InverseQ = coefficient, + D = privateExponent, + }; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + var rsa = RSA.Create(); + try { + rsa.ImportParameters(rsaParams); + return rsa; + } + catch { + ((IDisposable)rsa).Dispose(); + throw; + } + } + + /// + /// Creates a strong name blob + /// + public byte[] CreateStrongName() { + var outStream = new MemoryStream(); + var writer = new BinaryWriter(outStream); + writer.Write((byte)7); // bType (public/private key) + writer.Write((byte)2); // bVersion + writer.Write((ushort)0); // reserved + writer.Write((uint)SignatureAlgorithm.CALG_RSA_SIGN); // aiKeyAlg + writer.Write(RSA2_SIG); // magic (RSA2) +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + writer.Write(modulus.Length * 8); // bitlen + writer.WriteReverse(publicExponent); + writer.WriteReverse(modulus); + writer.WriteReverse(prime1); + writer.WriteReverse(prime2); + writer.WriteReverse(exponent1); + writer.WriteReverse(exponent2); + writer.WriteReverse(coefficient); + writer.WriteReverse(privateExponent); +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + return outStream.ToArray(); + } + + /// + /// Creates a counter signature, just like + /// sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk can do. + /// The public key sn prints is 's value. + /// + /// Identity public key + /// Identity strong name key pair + /// Signature public key + /// The counter signature as a hex string + public static string CreateCounterSignatureAsString(StrongNamePublicKey identityPubKey, StrongNameKey identityKey, StrongNamePublicKey signaturePubKey) { + var counterSignature = CreateCounterSignature(identityPubKey, identityKey, signaturePubKey); + return Utils.ToHex(counterSignature, false); + } + + /// + /// Creates a counter signature, just like + /// sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk can do. + /// The public key sn prints is 's value. + /// + /// Identity public key + /// Identity strong name key pair + /// Signature public key + /// The counter signature + public static byte[] CreateCounterSignature(StrongNamePublicKey identityPubKey, StrongNameKey identityKey, StrongNamePublicKey signaturePubKey) { + var hash = AssemblyHash.Hash(signaturePubKey.CreatePublicKey(), identityPubKey.HashAlgorithm); + using (var rsa = identityKey.CreateRSA()) { + var rsaFmt = new RSAPKCS1SignatureFormatter(rsa); + string hashName = identityPubKey.HashAlgorithm.GetName(); + rsaFmt.SetHashAlgorithm(hashName); + var snSig = rsaFmt.CreateSignature(hash); + Array.Reverse(snSig); + return snSig; + } + } + } +} diff --git a/dnlib/DotNet/StrongNameSigner.cs b/dnlib/DotNet/StrongNameSigner.cs new file mode 100644 index 0000000..0e8d42e --- /dev/null +++ b/dnlib/DotNet/StrongNameSigner.cs @@ -0,0 +1,171 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Security.Cryptography; + +namespace dnlib.DotNet { + /// + /// Strong name signs an assembly. It supports normal strong name signing and the new + /// (.NET 4.5) enhanced strong name signing. + /// + public struct StrongNameSigner { + readonly Stream stream; + readonly long baseOffset; + + /// + /// Constructor + /// + /// .NET PE file stream + public StrongNameSigner(Stream stream) + : this(stream, 0) { + } + + /// + /// Constructor + /// + /// .NET PE file stream + /// Offset in of the first byte of + /// the PE file. + public StrongNameSigner(Stream stream, long baseOffset) { + this.stream = stream; + this.baseOffset = baseOffset; + } + + /// + /// Calculates the strong name signature and writes it to the stream. The signature + /// is also returned. + /// + /// Strong name key used for signing + /// Offset (relative to the start of the PE file) of the strong + /// name signature. + /// The strong name signature + public byte[] WriteSignature(StrongNameKey snk, long snSigOffset) { + var sign = CalculateSignature(snk, snSigOffset); + stream.Position = baseOffset + snSigOffset; + stream.Write(sign, 0, sign.Length); + return sign; + } + + /// + /// Calculates and returns the strong name signature + /// + /// Strong name key used for signing + /// Offset (relative to start of PE file) of the strong + /// name signature. + /// The strong name signature + public byte[] CalculateSignature(StrongNameKey snk, long snSigOffset) { + uint snSigSize = (uint)snk.SignatureSize; + var hashAlg = snk.HashAlgorithm == 0 ? AssemblyHashAlgorithm.SHA1 : snk.HashAlgorithm; + var hash = StrongNameHashData(hashAlg, snSigOffset, snSigSize); + var snSig = GetStrongNameSignature(snk, hashAlg, hash); + if (snSig.Length != snSigSize) + throw new InvalidOperationException("Invalid strong name signature size"); + return snSig; + } + + /// + /// Strong name hashes the .NET file + /// + /// Hash algorithm + /// Strong name sig offset (relative to start of .NET PE file) + /// Size of strong name signature + /// The strong name hash of the .NET file + byte[] StrongNameHashData(AssemblyHashAlgorithm hashAlg, long snSigOffset, uint snSigSize) { + var reader = new BinaryReader(stream); + + snSigOffset += baseOffset; + long snSigOffsetEnd = snSigOffset + snSigSize; + + using (var hasher = new AssemblyHash(hashAlg)) { + byte[] buffer = new byte[0x8000]; + + // Hash the DOS header. It's defined to be all data from the start of + // the file up to the NT headers. + stream.Position = baseOffset + 0x3C; + uint ntHeadersOffs = reader.ReadUInt32(); + stream.Position = baseOffset; + hasher.Hash(stream, ntHeadersOffs, buffer); + + // Hash NT headers, but hash authenticode + checksum as 0s + stream.Position += 6; + int numSections = reader.ReadUInt16(); + stream.Position -= 8; + hasher.Hash(stream, 0x18, buffer); // magic + FileHeader + + bool is32bit = reader.ReadUInt16() == 0x010B; + stream.Position -= 2; + int optHeaderSize = is32bit ? 0x60 : 0x70; + if (stream.Read(buffer, 0, optHeaderSize) != optHeaderSize) + throw new IOException("Could not read data"); + // Clear checksum + for (int i = 0; i < 4; i++) + buffer[0x40 + i] = 0; + hasher.Hash(buffer, 0, optHeaderSize); + + const int imageDirsSize = 16 * 8; + if (stream.Read(buffer, 0, imageDirsSize) != imageDirsSize) + throw new IOException("Could not read data"); + // Clear authenticode data dir + for (int i = 0; i < 8; i++) + buffer[4 * 8 + i] = 0; + hasher.Hash(buffer, 0, imageDirsSize); + + // Hash section headers + long sectHeadersOffs = stream.Position; + hasher.Hash(stream, (uint)numSections * 0x28, buffer); + + // Hash all raw section data but make sure we don't hash the location + // where the strong name signature will be stored. + for (int i = 0; i < numSections; i++) { + stream.Position = sectHeadersOffs + i * 0x28 + 0x10; + uint sizeOfRawData = reader.ReadUInt32(); + uint pointerToRawData = reader.ReadUInt32(); + + stream.Position = baseOffset + pointerToRawData; + while (sizeOfRawData > 0) { + var pos = stream.Position; + + if (snSigOffset <= pos && pos < snSigOffsetEnd) { + uint skipSize = (uint)(snSigOffsetEnd - pos); + if (skipSize >= sizeOfRawData) + break; + sizeOfRawData -= skipSize; + stream.Position += skipSize; + continue; + } + + if (pos >= snSigOffsetEnd) { + hasher.Hash(stream, sizeOfRawData, buffer); + break; + } + + uint maxLen = (uint)Math.Min(snSigOffset - pos, sizeOfRawData); + hasher.Hash(stream, maxLen, buffer); + sizeOfRawData -= maxLen; + } + } + + return hasher.ComputeHash(); + } + } + + /// + /// Returns the strong name signature + /// + /// Strong name key + /// Hash algorithm + /// Strong name hash of the .NET PE file + /// Strong name signature + byte[] GetStrongNameSignature(StrongNameKey snk, AssemblyHashAlgorithm hashAlg, byte[] hash) { + using (var rsa = snk.CreateRSA()) { + var rsaFmt = new RSAPKCS1SignatureFormatter(rsa); + string hashName = hashAlg.GetName() ?? AssemblyHashAlgorithm.SHA1.GetName(); + rsaFmt.SetHashAlgorithm(hashName); + var snSig = rsaFmt.CreateSignature(hash); + Array.Reverse(snSig); + return snSig; + } + } + } +} diff --git a/dnlib/DotNet/TIAHelper.cs b/dnlib/DotNet/TIAHelper.cs new file mode 100644 index 0000000..441e526 --- /dev/null +++ b/dnlib/DotNet/TIAHelper.cs @@ -0,0 +1,225 @@ +// dnlib: See LICENSE.txt for more info + +// See coreclr/src/vm/siginfo.cpp + +using System; +using System.Diagnostics; + +namespace dnlib.DotNet { + /// + /// System.Runtime.InteropServices.TypeIdentifierAttribute helper code used by + /// + static class TIAHelper { + struct Info : IEquatable { + public readonly UTF8String Scope; + public readonly UTF8String Identifier; + + public Info(UTF8String scope, UTF8String identifier) { + this.Scope = scope; + this.Identifier = identifier; + } + + public bool Equals(Info other) { + return stricmp(Scope, other.Scope) && + UTF8String.Equals(Identifier, other.Identifier); + } + + static bool stricmp(UTF8String a, UTF8String b) { + var da = (object)a == null ? null : a.Data; + var db = (object)b == null ? null : b.Data; + if (da == db) + return true; + if (da == null || db == null) + return false; + if (da.Length != db.Length) + return false; + for (int i = 0; i < da.Length; i++) { + byte ba = da[i], bb = db[i]; + if ((byte)'A' <= ba && ba <= (byte)'Z') + ba = (byte)(ba - 'A' + 'a'); + if ((byte)'A' <= bb && bb <= (byte)'Z') + bb = (byte)(bb - 'A' + 'a'); + if (ba != bb) + return false; + } + return true; + } + } + + static Info? GetInfo(TypeDef td) { + if (td == null) + return null; + if (td.IsWindowsRuntime) + return null; + + UTF8String scope = null, identifier = null; + var tia = td.CustomAttributes.Find("System.Runtime.InteropServices.TypeIdentifierAttribute"); + if (tia != null) { + if (tia.ConstructorArguments.Count >= 2) { + if (tia.ConstructorArguments[0].Type.GetElementType() != ElementType.String) + return null; + if (tia.ConstructorArguments[1].Type.GetElementType() != ElementType.String) + return null; + scope = tia.ConstructorArguments[0].Value as UTF8String ?? tia.ConstructorArguments[0].Value as string; + identifier = tia.ConstructorArguments[1].Value as UTF8String ?? tia.ConstructorArguments[1].Value as string; + } + } + else { + var mod = td.Module; + var asm = mod == null ? null : mod.Assembly; + if (asm == null) + return null; + bool isTypeLib = asm.CustomAttributes.IsDefined("System.Runtime.InteropServices.ImportedFromTypeLibAttribute") || + asm.CustomAttributes.IsDefined("System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute"); + if (!isTypeLib) + return null; + } + + if (UTF8String.IsNull(identifier)) { + CustomAttribute gca; + if (td.IsInterface && td.IsImport) + gca = td.CustomAttributes.Find("System.Runtime.InteropServices.GuidAttribute"); + else { + var mod = td.Module; + var asm = mod == null ? null : mod.Assembly; + if (asm == null) + return null; + gca = asm.CustomAttributes.Find("System.Runtime.InteropServices.GuidAttribute"); + } + if (gca == null) + return null; + if (gca.ConstructorArguments.Count < 1) + return null; + if (gca.ConstructorArguments[0].Type.GetElementType() != ElementType.String) + return null; + scope = gca.ConstructorArguments[0].Value as UTF8String ?? gca.ConstructorArguments[0].Value as string; + var ns = td.Namespace; + var name = td.Name; + if (UTF8String.IsNullOrEmpty(ns)) + identifier = name; + else if (UTF8String.IsNullOrEmpty(name)) + identifier = new UTF8String(Concat(ns.Data, (byte)'.', empty)); + else + identifier = new UTF8String(Concat(ns.Data, (byte)'.', name.Data)); + } + return new Info(scope, identifier); + } + static readonly byte[] empty = new byte[0]; + + static byte[] Concat(byte[] a, byte b, byte[] c) { + var data = new byte[a.Length + 1 + c.Length]; + for (int i = 0; i < a.Length; i++) + data[i] = a[i]; + data[a.Length] = b; + for (int i = 0, j = a.Length + 1; i < c.Length; i++, j++) + data[j] = c[i]; + return data; + } + + static bool CheckEquivalent(TypeDef td) { + Debug.Assert(td != null); + + for (int i = 0; td != null && i < 1000; i++) { + if (i != 0) { + var info = GetInfo(td); + if (info == null) + return false; + } + + bool f; + if (td.IsInterface) + f = td.IsImport || td.CustomAttributes.IsDefined("System.Runtime.InteropServices.ComEventInterfaceAttribute"); + else + f = td.IsValueType || td.IsDelegate; + if (!f) + return false; + if (td.GenericParameters.Count > 0) + return false; + + var declType = td.DeclaringType; + if (declType == null) + return td.IsPublic; + + if (!td.IsNestedPublic) + return false; + td = declType; + } + + return false; + } + + public static bool Equivalent(TypeDef td1, TypeDef td2) { + var info1 = GetInfo(td1); + if (info1 == null) + return false; + var info2 = GetInfo(td2); + if (info2 == null) + return false; + if (!CheckEquivalent(td1) || !CheckEquivalent(td2)) + return false; + if (!info1.Value.Equals(info2.Value)) + return false; + + // Caller has already compared names of the types and any declaring types + + for (int i = 0; i < 1000; i++) { + if (td1.IsInterface) { + if (!td2.IsInterface) + return false; + } + else { + var bt1 = td1.BaseType; + var bt2 = td2.BaseType; + if (bt1 == null || bt2 == null) + return false; + if (td1.IsDelegate) { + if (!td2.IsDelegate) + return false; + if (!DelegateEquals(td1, td2)) + return false; + } + else if (td1.IsValueType) { + if (td1.IsEnum != td2.IsEnum) + return false; + if (!td2.IsValueType) + return false; + if (!ValueTypeEquals(td1, td2, td1.IsEnum)) + return false; + } + else + return false; + } + + td1 = td1.DeclaringType; + td2 = td2.DeclaringType; + if (td1 == null && td2 == null) + break; + if (td1 == null || td2 == null) + return false; + } + + return true; + } + + static bool DelegateEquals(TypeDef td1, TypeDef td2) { + var invoke1 = td1.FindMethod(InvokeString); + var invoke2 = td2.FindMethod(InvokeString); + if (invoke1 == null || invoke2 == null) + return false; + + //TODO: Compare method signatures. Prevent infinite recursion... + + return true; + } + static readonly UTF8String InvokeString = new UTF8String("Invoke"); + + static bool ValueTypeEquals(TypeDef td1, TypeDef td2, bool isEnum) { + if (td1.Methods.Count != 0 || td2.Methods.Count != 0) + return false; + + //TODO: Compare the fields. Prevent infinite recursion... + + return true; + } + } +} diff --git a/dnlib/DotNet/TypeAttributes.cs b/dnlib/DotNet/TypeAttributes.cs new file mode 100644 index 0000000..2ae0aa2 --- /dev/null +++ b/dnlib/DotNet/TypeAttributes.cs @@ -0,0 +1,87 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet { + /// + /// TypeDef and ExportedType flags. See CorHdr.h/CorTypeAttr + /// + [Flags] + public enum TypeAttributes : uint { + /// Use this mask to retrieve the type visibility information. + VisibilityMask = 0x00000007, + /// Class is not public scope. + NotPublic = 0x00000000, + /// Class is public scope. + Public = 0x00000001, + /// Class is nested with public visibility. + NestedPublic = 0x00000002, + /// Class is nested with private visibility. + NestedPrivate = 0x00000003, + /// Class is nested with family visibility. + NestedFamily = 0x00000004, + /// Class is nested with assembly visibility. + NestedAssembly = 0x00000005, + /// Class is nested with family and assembly visibility. + NestedFamANDAssem = 0x00000006, + /// Class is nested with family or assembly visibility. + NestedFamORAssem = 0x00000007, + + /// Use this mask to retrieve class layout information + LayoutMask = 0x00000018, + /// Class fields are auto-laid out + AutoLayout = 0x00000000, + /// Class fields are laid out sequentially + SequentialLayout = 0x00000008, + /// Layout is supplied explicitly + ExplicitLayout = 0x00000010, + + /// Use this mask to retrieve class semantics information. + ClassSemanticsMask = 0x00000020, + /// Use this mask to retrieve class semantics information. + ClassSemanticMask = ClassSemanticsMask, + /// Type is a class. + Class = 0x00000000, + /// Type is an interface. + Interface = 0x00000020, + + /// Class is abstract + Abstract = 0x00000080, + /// Class is concrete and may not be extended + Sealed = 0x00000100, + /// Class name is special. Name describes how. + SpecialName = 0x00000400, + + /// Class / interface is imported + Import = 0x00001000, + /// The class is Serializable. + Serializable = 0x00002000, + /// The type is a Windows Runtime type + WindowsRuntime = 0x00004000, + + /// Use StringFormatMask to retrieve string information for native interop + StringFormatMask = 0x00030000, + /// LPTSTR is interpreted as ANSI in this class + AnsiClass = 0x00000000, + /// LPTSTR is interpreted as UNICODE + UnicodeClass = 0x00010000, + /// LPTSTR is interpreted automatically + AutoClass = 0x00020000, + /// A non-standard encoding specified by CustomFormatMask + CustomFormatClass = 0x00030000, + /// Use this mask to retrieve non-standard encoding information for native interop. The meaning of the values of these 2 bits is unspecified. + CustomFormatMask = 0x00C00000, + + /// Initialize the class any time before first static field access. + BeforeFieldInit = 0x00100000, + /// This ExportedType is a type forwarder. + Forwarder = 0x00200000, + + /// Flags reserved for runtime use. + ReservedMask = 0x00040800, + /// Runtime should check name encoding. + RTSpecialName = 0x00000800, + /// Class has security associate with it. + HasSecurity = 0x00040000, + } +} diff --git a/dnlib/DotNet/TypeDef.cs b/dnlib/DotNet/TypeDef.cs new file mode 100644 index 0000000..df1146c --- /dev/null +++ b/dnlib/DotNet/TypeDef.cs @@ -0,0 +1,2414 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Threading; +using dnlib.Utils; +using dnlib.DotNet.MD; +using dnlib.DotNet.Emit; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the TypeDef table + /// + public abstract class TypeDef : ITypeDefOrRef, IHasCustomAttribute, IHasDeclSecurity, IMemberRefParent, ITypeOrMethodDef, IListListener, IListListener, IListListener, IListListener, IListListener, IListListener, IMemberRefResolver, IMemberDef { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.TypeDef, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int TypeDefOrRefTag { + get { return 0; } + } + + /// + public int HasCustomAttributeTag { + get { return 3; } + } + + /// + public int HasDeclSecurityTag { + get { return 0; } + } + + /// + public int MemberRefParentTag { + get { return 0; } + } + + /// + public int TypeOrMethodDefTag { + get { return 0; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { return GenericParameters.Count; } + } + + /// + string IType.TypeName { + get { return FullNameCreator.Name(this, false); } + } + + /// + public string ReflectionName { + get { return FullNameCreator.Name(this, true); } + } + + /// + string IType.Namespace { + get { return FullNameCreator.Namespace(this, false); } + } + + /// + public string ReflectionNamespace { + get { return FullNameCreator.Namespace(this, true); } + } + + /// + public string FullName { + get { return FullNameCreator.FullName(this, false); } + } + + /// + public string ReflectionFullName { + get { return FullNameCreator.FullName(this, true); } + } + + /// + public string AssemblyQualifiedName { + get { return FullNameCreator.AssemblyQualifiedName(this); } + } + + /// + public IAssembly DefinitionAssembly { + get { return FullNameCreator.DefinitionAssembly(this); } + } + + /// + public IScope Scope { + get { return Module; } + } + + /// + public ITypeDefOrRef ScopeType { + get { return this; } + } + + /// + /// Always returns false since a does not contain any + /// or . + /// + public bool ContainsGenericParameter { + get { return false; } + } + + /// + public ModuleDef Module { + get { return FullNameCreator.OwnerModule(this); } + } + + /// + /// Gets/sets the owner module + /// + internal ModuleDef Module2 { + get { + if (!module2_isInitialized) + InitializeModule2(); + return module2; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + module2 = value; + module2_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected ModuleDef module2; + /// + protected bool module2_isInitialized; + + void InitializeModule2() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (module2_isInitialized) + return; + module2 = GetModule2_NoLock(); + module2_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual ModuleDef GetModule2_NoLock() { + return null; + } + + bool IIsTypeOrMethod.IsType { + get { return true; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return true; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// From column TypeDef.Flags + /// + public TypeAttributes Attributes { + get { return (TypeAttributes)attributes; } + set { attributes = (int)value; } + } + /// Attributes + protected int attributes; + + /// + /// From column TypeDef.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column TypeDef.Namespace + /// + public UTF8String Namespace { + get { return @namespace; } + set { @namespace = value; } + } + /// Name + protected UTF8String @namespace; + + /// + /// From column TypeDef.Extends + /// + public ITypeDefOrRef BaseType { + get { + if (!baseType_isInitialized) + InitializeBaseType(); + return baseType; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + baseType = value; + baseType_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected ITypeDefOrRef baseType; + /// + protected bool baseType_isInitialized; + + void InitializeBaseType() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (baseType_isInitialized) + return; + baseType = GetBaseType_NoLock(); + baseType_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual ITypeDefOrRef GetBaseType_NoLock() { + return null; + } + + /// Reset + protected void ResetBaseType() { + baseType_isInitialized = false; + } + + /// + /// From column TypeDef.FieldList + /// + public ThreadSafe.IList Fields { + get { + if (fields == null) + InitializeFields(); + return fields; + } + } + /// + protected LazyList fields; + /// Initializes + protected virtual void InitializeFields() { + Interlocked.CompareExchange(ref fields, new LazyList(this), null); + } + + /// + /// From column TypeDef.MethodList + /// + public ThreadSafe.IList Methods { + get { + if (methods == null) + InitializeMethods(); + return methods; + } + } + /// + protected LazyList methods; + /// Initializes + protected virtual void InitializeMethods() { + Interlocked.CompareExchange(ref methods, new LazyList(this), null); + } + + /// + public ThreadSafe.IList GenericParameters { + get { + if (genericParameters == null) + InitializeGenericParameters(); + return genericParameters; + } + } + /// + protected LazyList genericParameters; + /// Initializes + protected virtual void InitializeGenericParameters() { + Interlocked.CompareExchange(ref genericParameters, new LazyList(this), null); + } + + /// + /// Gets the interfaces + /// + public ThreadSafe.IList Interfaces { + get { + if (interfaces == null) + InitializeInterfaces(); + return interfaces; + } + } + /// + protected ThreadSafe.IList interfaces; + /// Initializes + protected virtual void InitializeInterfaces() { + Interlocked.CompareExchange(ref interfaces, ThreadSafeListCreator.Create(), null); + } + + /// + public ThreadSafe.IList DeclSecurities { + get { + if (declSecurities == null) + InitializeDeclSecurities(); + return declSecurities; + } + } + /// + protected ThreadSafe.IList declSecurities; + /// Initializes + protected virtual void InitializeDeclSecurities() { + Interlocked.CompareExchange(ref declSecurities, ThreadSafeListCreator.Create(), null); + } + + /// + /// Gets/sets the class layout + /// + public ClassLayout ClassLayout { + get { + if (!classLayout_isInitialized) + InitializeClassLayout(); + return classLayout; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + classLayout = value; + classLayout_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected ClassLayout classLayout; + /// + protected bool classLayout_isInitialized; + + void InitializeClassLayout() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (classLayout_isInitialized) + return; + classLayout = GetClassLayout_NoLock(); + classLayout_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + ClassLayout GetOrCreateClassLayout() { + var cl = ClassLayout; + if (cl != null) + return cl; + Interlocked.CompareExchange(ref classLayout, new ClassLayoutUser(0, 0), null); + return classLayout; + } + + /// Called to initialize + protected virtual ClassLayout GetClassLayout_NoLock() { + return null; + } + + /// + public bool HasDeclSecurities { + get { return DeclSecurities.Count > 0; } + } + + /// + /// Gets/sets the enclosing type. It's null if this isn't a nested class. + /// + public TypeDef DeclaringType { + get { + if (!declaringType2_isInitialized) + InitializeDeclaringType2(); + return declaringType2; + } + set { + var currentDeclaringType = DeclaringType2; + if (currentDeclaringType == value) + return; + if (currentDeclaringType != null) + currentDeclaringType.NestedTypes.Remove(this); // Will set DeclaringType2 = null + if (value != null) + value.NestedTypes.Add(this); // Will set DeclaringType2 = value + + // Make sure this is clear. Will be set whenever it's inserted into ModulDef.Types + Module2 = null; + } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return DeclaringType; } + } + + /// + /// Called by and should normally not be called by any user + /// code. Use instead. Only call this if you must set the + /// declaring type without inserting it in the declaring type's method list. + /// + public TypeDef DeclaringType2 { + get { + if (!declaringType2_isInitialized) + InitializeDeclaringType2(); + return declaringType2; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + declaringType2 = value; + declaringType2_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected TypeDef declaringType2; + /// + protected bool declaringType2_isInitialized; + + void InitializeDeclaringType2() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (declaringType2_isInitialized) + return; + declaringType2 = GetDeclaringType2_NoLock(); + declaringType2_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual TypeDef GetDeclaringType2_NoLock() { + return null; + } + + /// + /// Gets all the nested types + /// + public ThreadSafe.IList NestedTypes { + get { + if (nestedTypes == null) + InitializeNestedTypes(); + return nestedTypes; + } + } + /// + protected LazyList nestedTypes; + /// Initializes + protected virtual void InitializeNestedTypes() { + Interlocked.CompareExchange(ref nestedTypes, new LazyList(this), null); + } + + /// + /// Gets all events + /// + public ThreadSafe.IList Events { + get { + if (events == null) + InitializeEvents(); + return events; + } + } + /// + protected LazyList events; + /// Initializes + protected virtual void InitializeEvents() { + Interlocked.CompareExchange(ref events, new LazyList(this), null); + } + + /// + /// Gets all properties + /// + public ThreadSafe.IList Properties { + get { + if (properties == null) + InitializeProperties(); + return properties; + } + } + /// + protected LazyList properties; + /// Initializes + protected virtual void InitializeProperties() { + Interlocked.CompareExchange(ref properties, new LazyList(this), null); + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasFields { + get { return Fields.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasMethods { + get { return Methods.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasGenericParameters { + get { return GenericParameters.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasEvents { + get { return Events.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasProperties { + get { return Properties.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasNestedTypes { + get { return NestedTypes.Count > 0; } + } + + /// + /// true if there's at least one in + /// + public bool HasInterfaces { + get { return Interfaces.Count > 0; } + } + + /// + /// true if is not null + /// + public bool HasClassLayout { + get { return ClassLayout != null; } + } + + /// + /// Gets/sets the packing size. If you write to this property but + /// is null, it will be created. The value is returned + /// if is null. + /// + public ushort PackingSize { + get { + var cl = ClassLayout; + return cl == null ? ushort.MaxValue : cl.PackingSize; + } + set { + var cl = GetOrCreateClassLayout(); + cl.PackingSize = value; + } + } + + /// + /// Gets/sets the class size. If you write to this property but + /// is null, it will be created. The value is returned + /// if is null. + /// + public uint ClassSize { + get { + var cl = ClassLayout; + return cl == null ? uint.MaxValue : cl.ClassSize; + } + set { + var cl = GetOrCreateClassLayout(); + cl.ClassSize = value; + } + } + + /// + public bool IsValueType { + get { + var baseType = BaseType; + if (baseType == null) + return false; + if (baseType.Namespace != "System") + return false; + if (baseType.TypeName != "ValueType" && baseType.TypeName != "Enum") + return false; + if (!baseType.DefinitionAssembly.IsCorLib()) + return false; + return !(FullName == "System.Enum" && DefinitionAssembly.IsCorLib()); + } + } + + /// + /// true if it's an enum + /// + public bool IsEnum { + get { + var baseType = BaseType; + if (baseType == null) + return false; + if (baseType.Namespace != "System") + return false; + if (baseType.TypeName != "Enum") + return false; + return baseType.DefinitionAssembly.IsCorLib(); + } + } + + /// + /// true if it's a delegate (it derives from ) + /// + public bool IsDelegate { + get { + var baseType = BaseType; + if (baseType == null) + return false; + if (baseType.Namespace != "System") + return false; + if (baseType.TypeName != "MulticastDelegate") + return false; + return baseType.DefinitionAssembly.IsCorLib(); + } + } + + /// + /// true if this is a nested type (it has a declaring type) + /// + public bool IsNested { + get { return DeclaringType != null; } + } + + /// + public bool IsPrimitive { + get { return this.IsPrimitive(); } + } + + /// + /// Modify property: = + /// ( & ) | . + /// + /// Value to AND + /// Value to OR + void ModifyAttributes(TypeAttributes andMask, TypeAttributes orMask) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + newVal = (origVal & (int)andMask) | (int)orMask; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + attributes = (attributes & (int)andMask) | (int)orMask; +#endif + } + + /// + /// Set or clear flags in + /// + /// true if flags should be set, false if flags should + /// be cleared + /// Flags to set or clear + void ModifyAttributes(bool set, TypeAttributes flags) { +#if THREAD_SAFE + int origVal, newVal; + do { + origVal = attributes; + if (set) + newVal = origVal | (int)flags; + else + newVal = origVal & ~(int)flags; + } while (Interlocked.CompareExchange(ref attributes, newVal, origVal) != origVal); +#else + if (set) + attributes |= (int)flags; + else + attributes &= ~(int)flags; +#endif + } + + /// + /// Gets/sets the visibility + /// + public TypeAttributes Visibility { + get { return (TypeAttributes)attributes & TypeAttributes.VisibilityMask; } + set { ModifyAttributes(~TypeAttributes.VisibilityMask, value & TypeAttributes.VisibilityMask); } + } + + /// + /// true if is set + /// + public bool IsNotPublic { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NotPublic; } + } + + /// + /// true if is set + /// + public bool IsPublic { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public; } + } + + /// + /// true if is set + /// + public bool IsNestedPublic { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic; } + } + + /// + /// true if is set + /// + public bool IsNestedPrivate { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPrivate; } + } + + /// + /// true if is set + /// + public bool IsNestedFamily { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamily; } + } + + /// + /// true if is set + /// + public bool IsNestedAssembly { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedAssembly; } + } + + /// + /// true if is set + /// + public bool IsNestedFamilyAndAssembly { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamANDAssem; } + } + + /// + /// true if is set + /// + public bool IsNestedFamilyOrAssembly { + get { return ((TypeAttributes)attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamORAssem; } + } + + /// + /// Gets/sets the layout + /// + public TypeAttributes Layout { + get { return (TypeAttributes)attributes & TypeAttributes.LayoutMask; } + set { ModifyAttributes(~TypeAttributes.LayoutMask, value & TypeAttributes.LayoutMask); } + } + + /// + /// true if is set + /// + public bool IsAutoLayout { + get { return ((TypeAttributes)attributes & TypeAttributes.LayoutMask) == TypeAttributes.AutoLayout; } + } + + /// + /// true if is set + /// + public bool IsSequentialLayout { + get { return ((TypeAttributes)attributes & TypeAttributes.LayoutMask) == TypeAttributes.SequentialLayout; } + } + + /// + /// true if is set + /// + public bool IsExplicitLayout { + get { return ((TypeAttributes)attributes & TypeAttributes.LayoutMask) == TypeAttributes.ExplicitLayout; } + } + + /// + /// Gets/sets the bit + /// + public bool IsInterface { + get { return ((TypeAttributes)attributes & TypeAttributes.Interface) != 0; } + set { ModifyAttributes(value, TypeAttributes.Interface); } + } + + /// + /// Gets/sets the bit + /// + public bool IsClass { + get { return ((TypeAttributes)attributes & TypeAttributes.Interface) == 0; } + set { ModifyAttributes(!value, TypeAttributes.Interface); } + } + + /// + /// Gets/sets the bit + /// + public bool IsAbstract { + get { return ((TypeAttributes)attributes & TypeAttributes.Abstract) != 0; } + set { ModifyAttributes(value, TypeAttributes.Abstract); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSealed { + get { return ((TypeAttributes)attributes & TypeAttributes.Sealed) != 0; } + set { ModifyAttributes(value, TypeAttributes.Sealed); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSpecialName { + get { return ((TypeAttributes)attributes & TypeAttributes.SpecialName) != 0; } + set { ModifyAttributes(value, TypeAttributes.SpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool IsImport { + get { return ((TypeAttributes)attributes & TypeAttributes.Import) != 0; } + set { ModifyAttributes(value, TypeAttributes.Import); } + } + + /// + /// Gets/sets the bit + /// + public bool IsSerializable { + get { return ((TypeAttributes)attributes & TypeAttributes.Serializable) != 0; } + set { ModifyAttributes(value, TypeAttributes.Serializable); } + } + + /// + /// Gets/sets the bit + /// + public bool IsWindowsRuntime { + get { return ((TypeAttributes)attributes & TypeAttributes.WindowsRuntime) != 0; } + set { ModifyAttributes(value, TypeAttributes.WindowsRuntime); } + } + + /// + /// Gets/sets the string format + /// + public TypeAttributes StringFormat { + get { return (TypeAttributes)attributes & TypeAttributes.StringFormatMask; } + set { ModifyAttributes(~TypeAttributes.StringFormatMask, value & TypeAttributes.StringFormatMask); } + } + + /// + /// true if is set + /// + public bool IsAnsiClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.AnsiClass; } + } + + /// + /// true if is set + /// + public bool IsUnicodeClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.UnicodeClass; } + } + + /// + /// true if is set + /// + public bool IsAutoClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.AutoClass; } + } + + /// + /// true if is set + /// + public bool IsCustomFormatClass { + get { return ((TypeAttributes)attributes & TypeAttributes.StringFormatMask) == TypeAttributes.CustomFormatClass; } + } + + /// + /// Gets/sets the bit + /// + public bool IsBeforeFieldInit { + get { return ((TypeAttributes)attributes & TypeAttributes.BeforeFieldInit) != 0; } + set { ModifyAttributes(value, TypeAttributes.BeforeFieldInit); } + } + + /// + /// Gets/sets the bit + /// + public bool IsForwarder { + get { return ((TypeAttributes)attributes & TypeAttributes.Forwarder) != 0; } + set { ModifyAttributes(value, TypeAttributes.Forwarder); } + } + + /// + /// Gets/sets the bit + /// + public bool IsRuntimeSpecialName { + get { return ((TypeAttributes)attributes & TypeAttributes.RTSpecialName) != 0; } + set { ModifyAttributes(value, TypeAttributes.RTSpecialName); } + } + + /// + /// Gets/sets the bit + /// + public bool HasSecurity { + get { return ((TypeAttributes)attributes & TypeAttributes.HasSecurity) != 0; } + set { ModifyAttributes(value, TypeAttributes.HasSecurity); } + } + + /// + /// true if this is the global (aka. <Module>) type + /// + public bool IsGlobalModuleType { + get { + var mod = Module; + return mod != null && mod.GlobalType == this; + } + } + + /// + /// Gets a list of all nested types and all their nested types + /// + public IEnumerable GetTypes() { + return AllTypesHelper.Types(NestedTypes); + } + + /// + /// Gets an enum's underlying type or null if none. Should only be called + /// if this is an enum. + /// + public TypeSig GetEnumUnderlyingType() { + foreach (var field in Fields.GetSafeEnumerable()) { + if (!field.IsLiteral && !field.IsStatic) { + var fieldSig = field.FieldSig; + if (fieldSig != null) + return fieldSig.Type; + } + } + return null; + } + + /// + /// Resolves a method or a field. (owner type) is ignored when + /// resolving the method/field. Private scope methods/fields are not returned. + /// + /// A method/field reference + /// A or a instance or null + /// if it couldn't be resolved. + public IMemberForwarded Resolve(MemberRef memberRef) { + return Resolve(memberRef, 0); + } + + /// + /// Resolves a method or a field. (owner type) is ignored when + /// resolving the method/field. + /// + /// A method/field reference + /// Method/field signature comparison options + /// A or a instance or null + /// if it couldn't be resolved. + public IMemberForwarded Resolve(MemberRef memberRef, SigComparerOptions options) { + if (memberRef == null) + return null; + + var methodSig = memberRef.MethodSig; + if (methodSig != null) + return FindMethodCheckBaseType(memberRef.Name, methodSig, options, memberRef.Module); + + var fieldSig = memberRef.FieldSig; + if (fieldSig != null) + return FindFieldCheckBaseType(memberRef.Name, fieldSig, options, memberRef.Module); + + return null; + } + + /// + /// Finds a method. Private scope methods are not returned. + /// + /// Method name + /// Method signature + /// The first method that matches or null if none found + public MethodDef FindMethod(UTF8String name, MethodSig sig) { + return FindMethod(name, sig, 0, null); + } + + /// + /// Finds a method + /// + /// Method name + /// Method signature + /// Method signature comparison options + /// The first method that matches or null if none found + public MethodDef FindMethod(UTF8String name, MethodSig sig, SigComparerOptions options) { + return FindMethod(name, sig, options, null); + } + + /// + /// Finds a method + /// + /// Method name + /// Method signature + /// Method signature comparison options + /// The module that needs to find the method or null + /// The first method that matches or null if none found + public MethodDef FindMethod(UTF8String name, MethodSig sig, SigComparerOptions options, ModuleDef sourceModule) { + if (UTF8String.IsNull(name) || sig == null) + return null; + var comparer = new SigComparer(options, sourceModule); + bool allowPrivateScope = (options & SigComparerOptions.PrivateScopeMethodIsComparable) != 0; + foreach (var method in Methods.GetSafeEnumerable()) { + if (!allowPrivateScope && method.IsPrivateScope) + continue; + if (!UTF8String.Equals(method.Name, name)) + continue; + if (comparer.Equals(method.MethodSig, sig)) + return method; + } + return null; + } + + /// + /// Finds a method by name + /// + /// Name of method + /// The or null if not found + public MethodDef FindMethod(UTF8String name) { + foreach (var method in Methods.GetSafeEnumerable()) { + if (UTF8String.Equals(method.Name, name)) + return method; + } + return null; + } + + /// + /// Finds all methods by name + /// + /// Name of method + /// All methods with that name + public IEnumerable FindMethods(UTF8String name) { + foreach (var method in Methods.GetSafeEnumerable()) { + if (UTF8String.Equals(method.Name, name)) + yield return method; + } + } + + /// + /// Finds the class constructor (aka type initializer). It's the method named .cctor + /// + /// The class constructor or null if none found + public MethodDef FindStaticConstructor() { + return Methods.ExecuteLocked(null, (tsList, arg) => FindStaticConstructor_NoMethodsLock()); + } + + MethodDef FindStaticConstructor_NoMethodsLock() { + foreach (var method in Methods.GetEnumerable_NoLock()) { + if (method.IsStaticConstructor) + return method; + } + return null; + } + + /// + /// Finds the class constructor (aka type initializer). It's the method named .cctor. + /// If it doesn't exist, it is created, inserted into and returned. + /// The created .cctor will have just one RET instruction. + /// + /// The class constructor + public MethodDef FindOrCreateStaticConstructor() { + var cctor = FindStaticConstructor(); + if (cctor != null) + return cctor; + + var implFlags = MethodImplAttributes.IL | MethodImplAttributes.Managed; + var flags = MethodAttributes.Private | MethodAttributes.Static | + MethodAttributes.HideBySig | MethodAttributes.ReuseSlot | + MethodAttributes.SpecialName | MethodAttributes.RTSpecialName; + var module = Module; + cctor = module.UpdateRowId(new MethodDefUser(MethodDef.StaticConstructorName, + MethodSig.CreateStatic(module.CorLibTypes.Void), implFlags, flags)); + var body = new CilBody(); + body.InitLocals = true; + body.MaxStack = 8; + body.Instructions.Add(OpCodes.Ret.ToInstruction()); + cctor.Body = body; + return Methods.ExecuteLocked(cctor, (tsList, cctor2) => { + var cctor3 = FindStaticConstructor_NoMethodsLock(); + if (cctor3 != null) + return cctor3; + tsList.Add_NoLock(cctor2); + return cctor2; + }); + } + + /// + /// Finds all instance constructors (not class constructors) + /// + /// All instance constructors + public IEnumerable FindInstanceConstructors() { + foreach (var method in Methods.GetSafeEnumerable()) { + if (method.IsInstanceConstructor) + yield return method; + } + } + + /// + /// Finds all static and instance constructors + /// + /// All static and instance constructors + public IEnumerable FindConstructors() { + foreach (var method in Methods.GetSafeEnumerable()) { + if (method.IsConstructor) + yield return method; + } + } + + /// + /// Finds the default instance constructor (the one with no arguments) + /// + /// The default instance constructor or null if none + public MethodDef FindDefaultConstructor() { + foreach (var method in Methods.GetSafeEnumerable()) { + if (!method.IsInstanceConstructor) + continue; + var sig = method.MethodSig; + if (sig != null && sig.Params.Count == 0) + return method; + } + return null; + } + + /// + /// Finds a field. Private scope fields are not returned. + /// + /// Field name + /// Field signature + /// The first field that matches or null if none found + public FieldDef FindField(UTF8String name, FieldSig sig) { + return FindField(name, sig, 0, null); + } + + /// + /// Finds a field + /// + /// Field name + /// Field signature + /// Field signature comparison options + /// The first field that matches or null if none found + public FieldDef FindField(UTF8String name, FieldSig sig, SigComparerOptions options) { + return FindField(name, sig, options, null); + } + + /// + /// Finds a field + /// + /// Field name + /// Field signature + /// Field signature comparison options + /// The module that needs to find the field or null + /// The first field that matches or null if none found + public FieldDef FindField(UTF8String name, FieldSig sig, SigComparerOptions options, ModuleDef sourceModule) { + if (UTF8String.IsNull(name) || sig == null) + return null; + var comparer = new SigComparer(options, sourceModule); + bool allowPrivateScope = (options & SigComparerOptions.PrivateScopeFieldIsComparable) != 0; + foreach (var field in Fields.GetSafeEnumerable()) { + if (!allowPrivateScope && field.IsPrivateScope) + continue; + if (!UTF8String.Equals(field.Name, name)) + continue; + if (comparer.Equals(field.FieldSig, sig)) + return field; + } + return null; + } + + /// + /// Finds a field by name + /// + /// Name of field + /// The or null if not found + public FieldDef FindField(UTF8String name) { + foreach (var field in Fields.GetSafeEnumerable()) { + if (UTF8String.Equals(field.Name, name)) + return field; + } + return null; + } + + /// + /// Finds all fields by name + /// + /// Name of field + /// All fields with that name + public IEnumerable FindFields(UTF8String name) { + foreach (var field in Fields.GetSafeEnumerable()) { + if (UTF8String.Equals(field.Name, name)) + yield return field; + } + } + + /// + /// Finds an event + /// + /// Name of event + /// Type of event + /// A or null if not found + public EventDef FindEvent(UTF8String name, IType type) { + return FindEvent(name, type, 0, null); + } + + /// + /// Finds an event + /// + /// Name of event + /// Type of event + /// Event type comparison options + /// A or null if not found + public EventDef FindEvent(UTF8String name, IType type, SigComparerOptions options) { + return FindEvent(name, type, options, null); + } + + /// + /// Finds an event + /// + /// Name of event + /// Type of event + /// Event type comparison options + /// The module that needs to find the event or null + /// A or null if not found + public EventDef FindEvent(UTF8String name, IType type, SigComparerOptions options, ModuleDef sourceModule) { + if (UTF8String.IsNull(name) || type == null) + return null; + var comparer = new SigComparer(options, sourceModule); + foreach (var @event in Events.GetSafeEnumerable()) { + if (!UTF8String.Equals(@event.Name, name)) + continue; + if (comparer.Equals(@event.EventType, type)) + return @event; + } + return null; + } + + /// + /// Finds an event by name + /// + /// Name of event + /// The or null if not found + public EventDef FindEvent(UTF8String name) { + foreach (var @event in Events.GetSafeEnumerable()) { + if (UTF8String.Equals(@event.Name, name)) + return @event; + } + return null; + } + + /// + /// Finds all events by name + /// + /// Name of event + /// All events with that name + public IEnumerable FindEvents(UTF8String name) { + foreach (var @event in Events.GetSafeEnumerable()) { + if (UTF8String.Equals(@event.Name, name)) + yield return @event; + } + } + + /// + /// Finds a property + /// + /// Name of property + /// Property signature + /// A or null if not found + public PropertyDef FindProperty(UTF8String name, CallingConventionSig propSig) { + return FindProperty(name, propSig, 0, null); + } + + /// + /// Finds a property + /// + /// Name of property + /// Property signature + /// Property signature comparison options + /// A or null if not found + public PropertyDef FindProperty(UTF8String name, CallingConventionSig propSig, SigComparerOptions options) { + return FindProperty(name, propSig, options, null); + } + + /// + /// Finds a property + /// + /// Name of property + /// Property signature + /// Property signature comparison options + /// The module that needs to find the property or null + /// A or null if not found + public PropertyDef FindProperty(UTF8String name, CallingConventionSig propSig, SigComparerOptions options, ModuleDef sourceModule) { + if (UTF8String.IsNull(name) || propSig == null) + return null; + var comparer = new SigComparer(options, sourceModule); + foreach (var prop in Properties.GetSafeEnumerable()) { + if (!UTF8String.Equals(prop.Name, name)) + continue; + if (comparer.Equals(prop.Type, propSig)) + return prop; + } + return null; + } + + /// + /// Finds a prop by name + /// + /// Name of prop + /// The or null if not found + public PropertyDef FindProperty(UTF8String name) { + foreach (var prop in Properties.GetSafeEnumerable()) { + if (UTF8String.Equals(prop.Name, name)) + return prop; + } + return null; + } + + /// + /// Finds all props by name + /// + /// Name of prop + /// All props with that name + public IEnumerable FindProperties(UTF8String name) { + foreach (var prop in Properties.GetSafeEnumerable()) { + if (UTF8String.Equals(prop.Name, name)) + yield return prop; + } + } + + /// + /// Finds a method by checking this type or any of its base types + /// + /// Method name + /// Method signature + /// The method or null if it wasn't found + public MethodDef FindMethodCheckBaseType(UTF8String name, MethodSig sig) { + return FindMethodCheckBaseType(name, sig, 0, null); + } + + /// + /// Finds a method by checking this type or any of its base types + /// + /// Method name + /// Method signature + /// Method signature comparison options + /// The method or null if it wasn't found + public MethodDef FindMethodCheckBaseType(UTF8String name, MethodSig sig, SigComparerOptions options) { + return FindMethodCheckBaseType(name, sig, options, null); + } + + /// + /// Finds a method by checking this type or any of its base types + /// + /// Method name + /// Method signature + /// Method signature comparison options + /// The module that needs to find the method or null + /// The method or null if it wasn't found + public MethodDef FindMethodCheckBaseType(UTF8String name, MethodSig sig, SigComparerOptions options, ModuleDef sourceModule) { + var td = this; + while (td != null) { + var md = td.FindMethod(name, sig, options, sourceModule); + if (md != null) + return md; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds a method by checking this type or any of its base types + /// + /// Method name + /// The method or null if it wasn't found + public MethodDef FindMethodCheckBaseType(UTF8String name) { + var td = this; + while (td != null) { + var md = td.FindMethod(name); + if (md != null) + return md; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds a field by checking this type or any of its base types + /// + /// Field name + /// Field signature + /// The field or null if it wasn't found + public FieldDef FindFieldCheckBaseType(UTF8String name, FieldSig sig) { + return FindFieldCheckBaseType(name, sig, 0, null); + } + + /// + /// Finds a field by checking this type or any of its base types + /// + /// Field name + /// Field signature + /// Field signature comparison options + /// The field or null if it wasn't found + public FieldDef FindFieldCheckBaseType(UTF8String name, FieldSig sig, SigComparerOptions options) { + return FindFieldCheckBaseType(name, sig, options, null); + } + + /// + /// Finds a field by checking this type or any of its base types + /// + /// Field name + /// Field signature + /// Field signature comparison options + /// The module that needs to find the field or null + /// The field or null if it wasn't found + public FieldDef FindFieldCheckBaseType(UTF8String name, FieldSig sig, SigComparerOptions options, ModuleDef sourceModule) { + var td = this; + while (td != null) { + var fd = td.FindField(name, sig, options, sourceModule); + if (fd != null) + return fd; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds a field by checking this type or any of its base types + /// + /// Field name + /// The field or null if it wasn't found + public FieldDef FindFieldCheckBaseType(UTF8String name) { + var td = this; + while (td != null) { + var fd = td.FindField(name); + if (fd != null) + return fd; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds an event by checking this type or any of its base types + /// + /// Event name + /// Event type + /// The event or null if it wasn't found + public EventDef FindEventCheckBaseType(UTF8String name, ITypeDefOrRef eventType) { + var td = this; + while (td != null) { + var ed = td.FindEvent(name, eventType); + if (ed != null) + return ed; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds an event by checking this type or any of its base types + /// + /// Event name + /// The event or null if it wasn't found + public EventDef FindEventCheckBaseType(UTF8String name) { + var td = this; + while (td != null) { + var ed = td.FindEvent(name); + if (ed != null) + return ed; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds a property by checking this type or any of its base types + /// + /// Property name + /// Property signature + /// The property or null if it wasn't found + public PropertyDef FindPropertyCheckBaseType(UTF8String name, FieldSig sig) { + var td = this; + while (td != null) { + var pd = td.FindProperty(name, sig); + if (pd != null) + return pd; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Finds a property by checking this type or any of its base types + /// + /// Property name + /// The property or null if it wasn't found + public PropertyDef FindPropertyCheckBaseType(UTF8String name) { + var td = this; + while (td != null) { + var pd = td.FindProperty(name); + if (pd != null) + return pd; + td = td.BaseType.ResolveTypeDef(); + } + return null; + } + + /// + /// Removes a method from this type. It also removes it from any properties and events. + /// + /// The method to remove + public void Remove(MethodDef method) { + Remove(method, false); + } + + /// + /// Removes a method from this type. It also removes it from any properties and events. + /// + /// The method to remove + /// true if we should remove all + /// empty properties and events. + public void Remove(MethodDef method, bool removeEmptyPropertiesEvents) { + if (method == null) + return; + + foreach (var prop in Properties.GetSafeEnumerable()) { + prop.GetMethods.Remove(method); + prop.SetMethods.Remove(method); + prop.OtherMethods.Remove(method); + } + + foreach (var evt in Events.GetSafeEnumerable()) { + if (evt.AddMethod == method) + evt.AddMethod = null; + if (evt.RemoveMethod == method) + evt.RemoveMethod = null; + if (evt.InvokeMethod == method) + evt.InvokeMethod = null; + evt.OtherMethods.Remove(method); + } + + if (removeEmptyPropertiesEvents) { + RemoveEmptyProperties(); + RemoveEmptyEvents(); + } + + Methods.Remove(method); + } + + void RemoveEmptyProperties() { + Properties.IterateAllReverse((tsList, index, value) => { + if (value.IsEmpty) + tsList.RemoveAt_NoLock(index); + }); + } + + void RemoveEmptyEvents() { + Events.IterateAllReverse((tsList, index, value) => { + if (value.IsEmpty) + tsList.RemoveAt_NoLock(index); + }); + } + + /// + void IListListener.OnLazyAdd(int index, ref FieldDef value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref FieldDef value) { +#if DEBUG + if (value.DeclaringType != this) + throw new InvalidOperationException("Added field's DeclaringType != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, FieldDef value) { + if (value.DeclaringType != null) + throw new InvalidOperationException("Field is already owned by another type. Set DeclaringType to null first."); + value.DeclaringType2 = this; + } + + /// + void IListListener.OnRemove(int index, FieldDef value) { + value.DeclaringType2 = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var field in Fields.GetEnumerable_NoLock()) + field.DeclaringType2 = null; + } + + /// + void IListListener.OnLazyAdd(int index, ref MethodDef value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref MethodDef value) { +#if DEBUG + if (value.DeclaringType != this) + throw new InvalidOperationException("Added method's DeclaringType != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, MethodDef value) { + if (value.DeclaringType != null) + throw new InvalidOperationException("Method is already owned by another type. Set DeclaringType to null first."); + value.DeclaringType2 = this; + value.Parameters.UpdateThisParameterType(this); + } + + /// + void IListListener.OnRemove(int index, MethodDef value) { + value.DeclaringType2 = null; + value.Parameters.UpdateThisParameterType(null); + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var method in Methods.GetEnumerable_NoLock()) { + method.DeclaringType2 = null; + method.Parameters.UpdateThisParameterType(null); + } + } + + /// + void IListListener.OnLazyAdd(int index, ref TypeDef value) { +#if DEBUG + if (value.Module2 != null) + throw new InvalidOperationException("Added nested type's Module != null"); + if (value.DeclaringType != this) + throw new InvalidOperationException("Added nested type's DeclaringType != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, TypeDef value) { + if (value.DeclaringType != null) + throw new InvalidOperationException("Nested type is already owned by another type. Set DeclaringType to null first."); + if (value.Module != null) + throw new InvalidOperationException("Type is already owned by another module. Remove it from that module's type list."); + value.DeclaringType2 = this; + } + + /// + void IListListener.OnRemove(int index, TypeDef value) { + value.DeclaringType2 = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var type in NestedTypes.GetEnumerable_NoLock()) + type.DeclaringType2 = null; + } + + /// + void IListListener.OnLazyAdd(int index, ref EventDef value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref EventDef value) { +#if DEBUG + if (value.DeclaringType != this) + throw new InvalidOperationException("Added event's DeclaringType != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, EventDef value) { + if (value.DeclaringType != null) + throw new InvalidOperationException("Event is already owned by another type. Set DeclaringType to null first."); + value.DeclaringType2 = this; + } + + /// + void IListListener.OnRemove(int index, EventDef value) { + value.DeclaringType2 = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var @event in Events.GetEnumerable_NoLock()) + @event.DeclaringType2 = null; + } + + /// + void IListListener.OnLazyAdd(int index, ref PropertyDef value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref PropertyDef value) { +#if DEBUG + if (value.DeclaringType != this) + throw new InvalidOperationException("Added property's DeclaringType != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, PropertyDef value) { + if (value.DeclaringType != null) + throw new InvalidOperationException("Property is already owned by another type. Set DeclaringType to null first."); + value.DeclaringType2 = this; + } + + /// + void IListListener.OnRemove(int index, PropertyDef value) { + value.DeclaringType2 = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var prop in Properties.GetEnumerable_NoLock()) + prop.DeclaringType2 = null; + } + + /// + void IListListener.OnLazyAdd(int index, ref GenericParam value) { + OnLazyAdd2(index, ref value); + } + + internal virtual void OnLazyAdd2(int index, ref GenericParam value) { +#if DEBUG + if (value.Owner != this) + throw new InvalidOperationException("Added generic param's Owner != this"); +#endif + } + + /// + void IListListener.OnAdd(int index, GenericParam value) { + if (value.Owner != null) + throw new InvalidOperationException("Generic param is already owned by another type/method. Set Owner to null first."); + value.Owner = this; + } + + /// + void IListListener.OnRemove(int index, GenericParam value) { + value.Owner = null; + } + + /// + void IListListener.OnResize(int index) { + } + + /// + void IListListener.OnClear() { + foreach (var gp in GenericParameters.GetEnumerable_NoLock()) + gp.Owner = null; + } + + /// + /// Gets all fields named + /// + /// Field name + /// A list of 0 or more fields with name + public IList GetFields(UTF8String name) { + var fields = new List(); + foreach (var field in Fields.GetSafeEnumerable()) { + if (field.Name == name) + fields.Add(field); + } + return fields; + } + + /// + /// Gets the first field named + /// + /// Field name + /// The field or null if none found + public FieldDef GetField(UTF8String name) { + foreach (var field in Fields.GetSafeEnumerable()) { + if (field.Name == name) + return field; + } + return null; + } + + internal static bool GetClassSize(TypeDef td, out uint size) { + size = 0; + if (td == null) + return false; + if (!td.IsValueType) + return false; // Not supported by us + if (!td.IsSequentialLayout && !td.IsExplicitLayout) { + if (td.Fields.Count != 1) + return false; + var fd = td.Fields.Get(0, null); + if (fd == null) + return false; + return fd.GetFieldSize(out size); + } + + var classLayout = td.ClassLayout; + if (classLayout == null) + return false; + uint classSize = classLayout.ClassSize; + if (classSize != 0) { + size = classSize; + return true; + } + + // Not supported by us + return false; + } + + /// + /// FInd a method implementation method + /// + /// Method + /// + protected MethodDef FindMethodImplMethod(IMethodDefOrRef mdr) { + // Check common case first + var md = mdr as MethodDef; + if (md != null) + return md; + + // Must be a member ref + var mr = mdr as MemberRef; + if (mr == null) + return null; + + // If Class is MethodDef, then it should be a vararg method + var parent = mr.Class; + md = parent as MethodDef; + if (md != null) + return md; + + // If it's a TypeSpec, it must be a generic instance type + for (int i = 0; i < 10; i++) { + var ts = parent as TypeSpec; + if (ts == null) + break; + + var gis = ts.TypeSig as GenericInstSig; + if (gis == null || gis.GenericType == null) + return null; + parent = gis.GenericType.TypeDefOrRef; + } + + var td = parent as TypeDef; + if (td == null) { + // If it's a TypeRef, resolve it as if it is a reference to a type in the + // current module, even if its ResolutionScope happens to be some other + // assembly/module (that's what the CLR does) + var tr = parent as TypeRef; + if (tr != null && Module != null) + td = Module.Find(tr); + } + if (td == null) + return null; + return td.FindMethod(mr.Name, mr.MethodSig); + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A TypeDef row created by the user and not present in the original .NET file + /// + public class TypeDefUser : TypeDef { + /// + /// Constructor + /// + /// Name + public TypeDefUser(UTF8String name) + : this(null, name, null) { + } + + /// + /// Constructor + /// + /// Namespace + /// Name + public TypeDefUser(UTF8String @namespace, UTF8String name) + : this(@namespace, name, null) { + } + + /// + /// Constructor + /// + /// Name + /// Base class or null if it's an interface + public TypeDefUser(UTF8String name, ITypeDefOrRef baseType) + : this(null, name, baseType) { + } + + /// + /// Constructor + /// + /// Namespace + /// Name + /// Base class or null if it's an interface + public TypeDefUser(UTF8String @namespace, UTF8String name, ITypeDefOrRef baseType) { + this.fields = new LazyList(this); + this.methods = new LazyList(this); + this.genericParameters = new LazyList(this); + this.nestedTypes = new LazyList(this); + this.events = new LazyList(this); + this.properties = new LazyList(this); + this.@namespace = @namespace; + this.name = name; + this.baseType = baseType; + this.baseType_isInitialized = true; + } + } + + /// + /// Created from a row in the TypeDef table + /// + sealed class TypeDefMD : TypeDef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + readonly uint extendsCodedToken; + Dictionary> methodRidToOverrides; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override ITypeDefOrRef GetBaseType_NoLock() { + return readerModule.ResolveTypeDefOrRef(extendsCodedToken, new GenericParamContext(this)); + } + + /// + protected override void InitializeFields() { + var list = readerModule.MetaData.GetFieldRidList(origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveField(((RidList)list2)[index])); + Interlocked.CompareExchange(ref fields, tmp, null); + } + + /// + protected override void InitializeMethods() { + var list = readerModule.MetaData.GetMethodRidList(origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveMethod(((RidList)list2)[index])); + Interlocked.CompareExchange(ref methods, tmp, null); + } + + /// + protected override void InitializeGenericParameters() { + var list = readerModule.MetaData.GetGenericParamRidList(Table.TypeDef, origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveGenericParam(((RidList)list2)[index])); + Interlocked.CompareExchange(ref genericParameters, tmp, null); + } + + /// + protected override void InitializeInterfaces() { + var list = readerModule.MetaData.GetInterfaceImplRidList(origRid); + var tmp = new LazyList((int)list.Length, list, (list2, index) => readerModule.ResolveInterfaceImpl(((RidList)list2)[index], new GenericParamContext(this))); + Interlocked.CompareExchange(ref interfaces, tmp, null); + } + + /// + protected override void InitializeDeclSecurities() { + var list = readerModule.MetaData.GetDeclSecurityRidList(Table.TypeDef, origRid); + var tmp = new LazyList((int)list.Length, list, (list2, index) => readerModule.ResolveDeclSecurity(((RidList)list2)[index])); + Interlocked.CompareExchange(ref declSecurities, tmp, null); + } + + /// + protected override ClassLayout GetClassLayout_NoLock() { + return readerModule.ResolveClassLayout(readerModule.MetaData.GetClassLayoutRid(origRid)); + } + + /// + protected override TypeDef GetDeclaringType2_NoLock() { + uint enclosingClass = readerModule.TablesStream.ReadNestedClassRow2(readerModule.MetaData.GetNestedClassRid(origRid)); + return enclosingClass == 0 ? null : readerModule.ResolveTypeDef(enclosingClass); + } + + TypeDef DeclaringType2_NoLock { + get { + if (!declaringType2_isInitialized) { + declaringType2 = GetDeclaringType2_NoLock(); + declaringType2_isInitialized = true; + } + return declaringType2; + } + } + + /// + protected override void InitializeEvents() { + var mapRid = readerModule.MetaData.GetEventMapRid(origRid); + var list = readerModule.MetaData.GetEventRidList(mapRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveEvent(((RidList)list2)[index])); + Interlocked.CompareExchange(ref events, tmp, null); + } + + /// + protected override void InitializeProperties() { + var mapRid = readerModule.MetaData.GetPropertyMapRid(origRid); + var list = readerModule.MetaData.GetPropertyRidList(mapRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveProperty(((RidList)list2)[index])); + Interlocked.CompareExchange(ref properties, tmp, null); + } + + /// + protected override void InitializeNestedTypes() { + var list = readerModule.MetaData.GetNestedClassRidList(origRid); + var tmp = new LazyList((int)list.Length, this, list, (list2, index) => readerModule.ResolveTypeDef(((RidList)list2)[index])); + Interlocked.CompareExchange(ref nestedTypes, tmp, null); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.TypeDef, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + protected override ModuleDef GetModule2_NoLock() { + return DeclaringType2_NoLock != null ? null : readerModule; + } + + /// + /// Constructor + /// + /// The module which contains this TypeDef row + /// Row ID + /// If is null + /// If is invalid + public TypeDefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.TypeDefTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("TypeDef rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + uint name, @namespace; + extendsCodedToken = readerModule.TablesStream.ReadTypeDefRow(origRid, out this.attributes, out name, out @namespace); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.@namespace = readerModule.StringsStream.ReadNoNull(@namespace); + } + + /// + /// Gets all methods overrides + /// + /// The method + /// Generic parameter context + /// A list (possibly empty) of all methods overrides + internal ThreadSafe.IList GetMethodOverrides(MethodDefMD method, GenericParamContext gpContext) { + if (method == null) + return ThreadSafeListCreator.Create(); + + if (methodRidToOverrides == null) + InitializeMethodOverrides(); + + ThreadSafe.IList overrides; + if (methodRidToOverrides.TryGetValue(method.OrigRid, out overrides)) { + var newList = ThreadSafeListCreator.Create(overrides.Count); + + for (int i = 0; i < overrides.Count; i++) { + var ovr = overrides[i]; + var newMethodBody = (IMethodDefOrRef)readerModule.ResolveToken(ovr.MethodBodyToken, gpContext); + var newMethodDeclaration = (IMethodDefOrRef)readerModule.ResolveToken(ovr.MethodDeclarationToken, gpContext); + newList.Add(new MethodOverride(newMethodBody, newMethodDeclaration)); + } + return newList; + } + return ThreadSafeListCreator.Create(); + } + + struct MethodOverrideTokens { + public readonly uint MethodBodyToken; + public readonly uint MethodDeclarationToken; + + public MethodOverrideTokens(uint methodBodyToken, uint methodDeclarationToken) { + this.MethodBodyToken = methodBodyToken; + this.MethodDeclarationToken = methodDeclarationToken; + } + } + + void InitializeMethodOverrides() { + var newMethodRidToOverrides = new Dictionary>(); + + var ridList = readerModule.MetaData.GetMethodImplRidList(origRid); + for (uint i = 0; i < ridList.Length; i++) { + uint methodBodyToken; + uint methodDeclToken = readerModule.TablesStream.ReadMethodImplRow(ridList[i], out methodBodyToken); + + var methodBody = readerModule.ResolveMethodDefOrRef(methodBodyToken); + var methodDecl = readerModule.ResolveMethodDefOrRef(methodDeclToken); + if (methodBody == null || methodDecl == null) + continue; // Should only happen if some obfuscator added invalid metadata + + // Find the real method. This is usually methodBody since it's usually a + // MethodDef. The CLR only allows method bodies in the current type, and + // so shall we. + var method = FindMethodImplMethod(methodBody); + if (method == null || method.DeclaringType != this) + continue; + + ThreadSafe.IList overrides; + uint rid = method.Rid; + if (!newMethodRidToOverrides.TryGetValue(rid, out overrides)) + newMethodRidToOverrides[rid] = overrides = ThreadSafeListCreator.Create(); + overrides.Add(new MethodOverrideTokens(methodBody.MDToken.Raw, methodDecl.MDToken.Raw)); + } + Interlocked.CompareExchange(ref methodRidToOverrides, newMethodRidToOverrides, null); + } + + /// + /// Initializes all . Only those s + /// that are property or event handlers get updated. + /// + internal void InitializeMethodSemanticsAttributes() { + var mapRid = readerModule.MetaData.GetPropertyMapRid(origRid); + var list = readerModule.MetaData.GetPropertyRidList(mapRid); + for (uint i = 0; i < list.Length; i++) { + var ridList = readerModule.MetaData.GetMethodSemanticsRidList(Table.Property, list[i]); + for (uint j = 0; j < ridList.Length; j++) { + MethodSemanticsAttributes semantics; + uint methodToken = readerModule.TablesStream.ReadMethodSemanticsRow(ridList[j], out semantics); + var method = readerModule.ResolveMethod(methodToken); + if (method == null) + continue; + + Interlocked.CompareExchange(ref method.semAttrs, (int)semantics | MethodDef.SEMATTRS_INITD, 0); + } + } + + mapRid = readerModule.MetaData.GetEventMapRid(origRid); + list = readerModule.MetaData.GetEventRidList(mapRid); + for (uint i = 0; i < list.Length; i++) { + var ridList = readerModule.MetaData.GetMethodSemanticsRidList(Table.Event, list[i]); + for (uint j = 0; j < ridList.Length; j++) { + MethodSemanticsAttributes semantics; + uint methodToken = readerModule.TablesStream.ReadMethodSemanticsRow(ridList[j], out semantics); + var method = readerModule.ResolveMethod(methodToken); + if (method == null) + continue; + + Interlocked.CompareExchange(ref method.semAttrs, (int)semantics | MethodDef.SEMATTRS_INITD, 0); + } + } + } + + /// + /// Initializes a property's special methods + /// + /// The property + /// Updated with a list of all get methods + /// Updated with a list of all set methods + /// Updated with a list of all other methods + internal void InitializeProperty(PropertyDefMD prop, out ThreadSafe.IList getMethods, out ThreadSafe.IList setMethods, out ThreadSafe.IList otherMethods) { + getMethods = ThreadSafeListCreator.Create(); + setMethods = ThreadSafeListCreator.Create(); + otherMethods = ThreadSafeListCreator.Create(); + if (prop == null) + return; + + var ridList = readerModule.MetaData.GetMethodSemanticsRidList(Table.Property, prop.OrigRid); + for (uint i = 0; i < ridList.Length; i++) { + MethodSemanticsAttributes semantics; + uint methodToken = readerModule.TablesStream.ReadMethodSemanticsRow(ridList[i], out semantics); + var method = readerModule.ResolveMethod(methodToken); + if (method == null || method.DeclaringType != prop.DeclaringType) + continue; + + // It's documented to be flags, but ignore those with more than one bit set + switch (semantics) { + case MethodSemanticsAttributes.Setter: + if (!setMethods.Contains(method)) + setMethods.Add(method); + break; + + case MethodSemanticsAttributes.Getter: + if (!getMethods.Contains(method)) + getMethods.Add(method); + break; + + case MethodSemanticsAttributes.Other: + if (!otherMethods.Contains(method)) + otherMethods.Add(method); + break; + + default: + // Ignore anything else + break; + } + } + } + + /// + /// Initializes an event's special methods + /// + /// The event + /// Updated with the addOn method or null if none + /// Updated with the fire method or null if none + /// Updated with the removeOn method or null if none + /// Updated with a list of all other methods + internal void InitializeEvent(EventDefMD evt, out MethodDef addMethod, out MethodDef invokeMethod, out MethodDef removeMethod, out ThreadSafe.IList otherMethods) { + addMethod = null; + invokeMethod = null; + removeMethod = null; + otherMethods = ThreadSafeListCreator.Create(); + if (evt == null) + return; + + var ridList = readerModule.MetaData.GetMethodSemanticsRidList(Table.Event, evt.OrigRid); + for (uint i = 0; i < ridList.Length; i++) { + MethodSemanticsAttributes semantics; + uint methodToken = readerModule.TablesStream.ReadMethodSemanticsRow(ridList[i], out semantics); + var method = readerModule.ResolveMethod(methodToken); + if (method == null || method.DeclaringType != evt.DeclaringType) + continue; + + // It's documented to be flags, but ignore those with more than one bit set + switch (semantics) { + case MethodSemanticsAttributes.AddOn: + if (addMethod == null) + addMethod = method; + break; + + case MethodSemanticsAttributes.RemoveOn: + if (removeMethod == null) + removeMethod = method; + break; + + case MethodSemanticsAttributes.Fire: + if (invokeMethod == null) + invokeMethod = method; + break; + + case MethodSemanticsAttributes.Other: + if (!otherMethods.Contains(method)) + otherMethods.Add(method); + break; + + default: + // Ignore anything else + break; + } + } + } + + /// + internal override void OnLazyAdd2(int index, ref FieldDef value) { + if (value.DeclaringType != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadField(value.Rid).InitializeAll()); + value.DeclaringType2 = this; + } + } + + /// + internal override void OnLazyAdd2(int index, ref MethodDef value) { + if (value.DeclaringType != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadMethod(value.Rid).InitializeAll()); + value.DeclaringType2 = this; + value.Parameters.UpdateThisParameterType(this); + } + } + + /// + internal override void OnLazyAdd2(int index, ref EventDef value) { + if (value.DeclaringType != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadEvent(value.Rid).InitializeAll()); + value.DeclaringType2 = this; + } + } + + /// + internal override void OnLazyAdd2(int index, ref PropertyDef value) { + if (value.DeclaringType != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadProperty(value.Rid).InitializeAll()); + value.DeclaringType2 = this; + } + } + + /// + internal override void OnLazyAdd2(int index, ref GenericParam value) { + if (value.Owner != this) { + // More than one owner... This module has invalid metadata. + value = readerModule.ForceUpdateRowId(readerModule.ReadGenericParam(value.Rid).InitializeAll()); + value.Owner = this; + } + } + } +} diff --git a/dnlib/DotNet/TypeDefFinder.cs b/dnlib/DotNet/TypeDefFinder.cs new file mode 100644 index 0000000..619af56 --- /dev/null +++ b/dnlib/DotNet/TypeDefFinder.cs @@ -0,0 +1,268 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// Finds s + /// + sealed class TypeDefFinder : ITypeDefFinder, IDisposable { + const SigComparerOptions TypeComparerOptions = SigComparerOptions.DontCompareTypeScope | SigComparerOptions.TypeRefCanReferenceGlobalType; + bool isCacheEnabled; + readonly bool includeNestedTypes; + Dictionary typeRefCache = new Dictionary(new TypeEqualityComparer(TypeComparerOptions)); + Dictionary normalNameCache = new Dictionary(StringComparer.Ordinal); + Dictionary reflectionNameCache = new Dictionary(StringComparer.Ordinal); + IEnumerator typeEnumerator; + readonly IEnumerable rootTypes; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// true if the cache is enabled. false if the cache + /// is disabled and a slower O(n) lookup is performed. + /// + public bool IsCacheEnabled { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return IsCacheEnabled_NoLock; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + IsCacheEnabled_NoLock = value; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + bool IsCacheEnabled_NoLock { + get { return isCacheEnabled; } + set { + if (isCacheEnabled == value) + return; + + if (typeEnumerator != null) { + typeEnumerator.Dispose(); + typeEnumerator = null; + } + + typeRefCache.Clear(); + normalNameCache.Clear(); + reflectionNameCache.Clear(); + + if (value) + InitializeTypeEnumerator(); + + isCacheEnabled = value; + } + } + + /// + /// Constructor + /// + /// All root types. All their nested types are also included. + /// If is null + public TypeDefFinder(IEnumerable rootTypes) + : this(rootTypes, true) { + } + + /// + /// Constructor + /// + /// All root types + /// true if all nested types that are reachable + /// from should also be included. + /// If is null + public TypeDefFinder(IEnumerable rootTypes, bool includeNestedTypes) { + if (rootTypes == null) + throw new ArgumentNullException("rootTypes"); + this.rootTypes = rootTypes; + this.includeNestedTypes = includeNestedTypes; + } + + void InitializeTypeEnumerator() { + if (typeEnumerator != null) { + typeEnumerator.Dispose(); + typeEnumerator = null; + } + typeEnumerator = (includeNestedTypes ? AllTypesHelper.Types(rootTypes) : rootTypes).GetEnumerator(); + } + + /// + /// Resets the cache (clears all cached elements). Use this method if the cache is + /// enabled but some of the types have been modified (eg. removed, added, renamed). + /// + public void ResetCache() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + bool old = IsCacheEnabled_NoLock; + IsCacheEnabled_NoLock = false; + IsCacheEnabled_NoLock = old; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public TypeDef Find(string fullName, bool isReflectionName) { + if (fullName == null) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (isCacheEnabled) + return isReflectionName ? FindCacheReflection(fullName) : FindCacheNormal(fullName); + return isReflectionName ? FindSlowReflection(fullName) : FindSlowNormal(fullName); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public TypeDef Find(TypeRef typeRef) { + if (typeRef == null) + return null; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return isCacheEnabled ? FindCache(typeRef) : FindSlow(typeRef); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + TypeDef FindCache(TypeRef typeRef) { + TypeDef cachedType; + if (typeRefCache.TryGetValue(typeRef, out cachedType)) + return cachedType; + + // Build the cache lazily + var comparer = new SigComparer(TypeComparerOptions); + while (true) { + cachedType = GetNextTypeDefCache(); + if (cachedType == null || comparer.Equals(cachedType, typeRef)) + return cachedType; + } + } + + TypeDef FindCacheReflection(string fullName) { + TypeDef cachedType; + if (reflectionNameCache.TryGetValue(fullName, out cachedType)) + return cachedType; + + // Build the cache lazily + while (true) { + cachedType = GetNextTypeDefCache(); + if (cachedType == null || cachedType.ReflectionFullName == fullName) + return cachedType; + } + } + + TypeDef FindCacheNormal(string fullName) { + TypeDef cachedType; + if (normalNameCache.TryGetValue(fullName, out cachedType)) + return cachedType; + + // Build the cache lazily + while (true) { + cachedType = GetNextTypeDefCache(); + if (cachedType == null || cachedType.FullName == fullName) + return cachedType; + } + } + + TypeDef FindSlow(TypeRef typeRef) { + InitializeTypeEnumerator(); + var comparer = new SigComparer(TypeComparerOptions); + while (true) { + var type = GetNextTypeDef(); + if (type == null || comparer.Equals(type, typeRef)) + return type; + } + } + + TypeDef FindSlowReflection(string fullName) { + InitializeTypeEnumerator(); + while (true) { + var type = GetNextTypeDef(); + if (type == null || type.ReflectionFullName == fullName) + return type; + } + } + + TypeDef FindSlowNormal(string fullName) { + InitializeTypeEnumerator(); + while (true) { + var type = GetNextTypeDef(); + if (type == null || type.FullName == fullName) + return type; + } + } + + /// + /// Gets the next or null if there are no more left + /// + /// The next or null if none + TypeDef GetNextTypeDef() { + while (typeEnumerator.MoveNext()) { + var type = typeEnumerator.Current; + if (type != null) + return type; + } + return null; + } + + /// + /// Gets the next or null if there are no more left. + /// The cache is updated with the returned before the method + /// returns. + /// + /// The next or null if none + TypeDef GetNextTypeDefCache() { + var type = GetNextTypeDef(); + if (type == null) + return null; + + // Only insert it if another type with the exact same sig/name isn't already + // in the cache. This should only happen with some obfuscated assemblies. + + if (!typeRefCache.ContainsKey(type)) + typeRefCache[type] = type; + string fn; + if (!normalNameCache.ContainsKey(fn = type.FullName)) + normalNameCache[fn] = type; + if (!reflectionNameCache.ContainsKey(fn = type.ReflectionFullName)) + reflectionNameCache[fn] = type; + + return type; + } + + /// + public void Dispose() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (typeEnumerator != null) + typeEnumerator.Dispose(); + typeEnumerator = null; + typeRefCache = null; + normalNameCache = null; + reflectionNameCache = null; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } +} diff --git a/dnlib/DotNet/TypeHelper.cs b/dnlib/DotNet/TypeHelper.cs new file mode 100644 index 0000000..a0e665e --- /dev/null +++ b/dnlib/DotNet/TypeHelper.cs @@ -0,0 +1,410 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// Various helper methods for classes to prevent infinite recursion + /// + struct TypeHelper { + RecursionCounter recursionCounter; + + internal static bool ContainsGenericParameter(StandAloneSig ss) { + return ss != null && TypeHelper.ContainsGenericParameter(ss.Signature); + } + + internal static bool ContainsGenericParameter(InterfaceImpl ii) { + return ii != null && TypeHelper.ContainsGenericParameter(ii.Interface); + } + + internal static bool ContainsGenericParameter(GenericParamConstraint gpc) { + return gpc != null && ContainsGenericParameter(gpc.Constraint); + } + + internal static bool ContainsGenericParameter(MethodSpec ms) { + if (ms == null) + return false; + + // A normal MethodSpec should always contain generic arguments and thus + // its MethodDef is always a generic method with generic parameters. + return true; + } + + internal static bool ContainsGenericParameter(MemberRef mr) { + if (mr == null) + return false; + + if (ContainsGenericParameter(mr.Signature)) + return true; + + var cl = mr.Class; + + var tdr = cl as ITypeDefOrRef; + if (tdr != null) + return tdr.ContainsGenericParameter; + + var md = cl as MethodDef; + if (md != null) + return TypeHelper.ContainsGenericParameter(md.Signature); + + return false; + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Calling convention signature + /// true if contains a + /// or a . + public static bool ContainsGenericParameter(CallingConventionSig callConv) { + var fs = callConv as FieldSig; + if (fs != null) + return ContainsGenericParameter(fs); + + var mbs = callConv as MethodBaseSig; + if (mbs != null) + return ContainsGenericParameter(mbs); + + var ls = callConv as LocalSig; + if (ls != null) + return ContainsGenericParameter(ls); + + var gim = callConv as GenericInstMethodSig; + if (gim != null) + return ContainsGenericParameter(gim); + + return false; + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Field signature + /// true if contains a + /// or a . + public static bool ContainsGenericParameter(FieldSig fieldSig) { + return new TypeHelper().ContainsGenericParameterInternal(fieldSig); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Method or property signature + /// true if contains a + /// or a . + public static bool ContainsGenericParameter(MethodBaseSig methodSig) { + return new TypeHelper().ContainsGenericParameterInternal(methodSig); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Local signature + /// true if contains a + /// or a . + public static bool ContainsGenericParameter(LocalSig localSig) { + return new TypeHelper().ContainsGenericParameterInternal(localSig); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Generic method signature + /// true if contains a + /// or a . + public static bool ContainsGenericParameter(GenericInstMethodSig gim) { + return new TypeHelper().ContainsGenericParameterInternal(gim); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Type + /// true if contains a or a + /// . + public static bool ContainsGenericParameter(IType type) { + var td = type as TypeDef; + if (td != null) + return ContainsGenericParameter(td); + + var tr = type as TypeRef; + if (tr != null) + return ContainsGenericParameter(tr); + + var ts = type as TypeSpec; + if (ts != null) + return ContainsGenericParameter(ts); + + var sig = type as TypeSig; + if (sig != null) + return ContainsGenericParameter(sig); + + var et = type as ExportedType; + if (et != null) + return ContainsGenericParameter(et); + + return false; + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Type + /// true if contains a or a + /// . + public static bool ContainsGenericParameter(TypeDef type) { + return new TypeHelper().ContainsGenericParameterInternal(type); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Type + /// true if contains a or a + /// . + public static bool ContainsGenericParameter(TypeRef type) { + return new TypeHelper().ContainsGenericParameterInternal(type); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Type + /// true if contains a or a + /// . + public static bool ContainsGenericParameter(TypeSpec type) { + return new TypeHelper().ContainsGenericParameterInternal(type); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Type + /// true if contains a or a + /// . + public static bool ContainsGenericParameter(TypeSig type) { + return new TypeHelper().ContainsGenericParameterInternal(type); + } + + /// + /// Checks whether contains a or a + /// . + /// + /// Type + /// true if contains a or a + /// . + public static bool ContainsGenericParameter(ExportedType type) { + return new TypeHelper().ContainsGenericParameterInternal(type); + } + + bool ContainsGenericParameterInternal(TypeDef type) { + return false; + } + + bool ContainsGenericParameterInternal(TypeRef type) { + return false; + } + + bool ContainsGenericParameterInternal(TypeSpec type) { + if (type == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res = ContainsGenericParameterInternal(type.TypeSig); + + recursionCounter.Decrement(); + return res; + } + + bool ContainsGenericParameterInternal(ITypeDefOrRef tdr) { + if (tdr == null) + return false; + // TypeDef and TypeRef contain no generic parameters + return ContainsGenericParameterInternal(tdr as TypeSpec); + } + + bool ContainsGenericParameterInternal(TypeSig type) { + if (type == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res; + switch (type.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.ValueType: + case ElementType.Class: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + res = ContainsGenericParameterInternal((type as TypeDefOrRefSig).TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + res = true; + break; + + case ElementType.FnPtr: + res = ContainsGenericParameterInternal((type as FnPtrSig).Signature); + break; + + case ElementType.GenericInst: + var gi = (GenericInstSig)type; + res = ContainsGenericParameterInternal(gi.GenericType) || + ContainsGenericParameter(gi.GenericArguments); + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Array: + case ElementType.SZArray: + case ElementType.Pinned: + case ElementType.ValueArray: + case ElementType.Module: + res = ContainsGenericParameterInternal((type as NonLeafSig).Next); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + res = ContainsGenericParameterInternal((type as ModifierSig).Modifier) || + ContainsGenericParameterInternal((type as NonLeafSig).Next); + break; + + + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + case ElementType.Sentinel: + default: + res = false; + break; + } + + recursionCounter.Decrement(); + return res; + } + + bool ContainsGenericParameterInternal(ExportedType type) { + return false; + } + + bool ContainsGenericParameterInternal(CallingConventionSig callConv) { + var fs = callConv as FieldSig; + if (fs != null) + return ContainsGenericParameterInternal(fs); + + var mbs = callConv as MethodBaseSig; + if (mbs != null) + return ContainsGenericParameterInternal(mbs); + + var ls = callConv as LocalSig; + if (ls != null) + return ContainsGenericParameterInternal(ls); + + var gim = callConv as GenericInstMethodSig; + if (gim != null) + return ContainsGenericParameterInternal(gim); + + return false; + } + + bool ContainsGenericParameterInternal(FieldSig fs) { + if (fs == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res = ContainsGenericParameterInternal(fs.Type); + + recursionCounter.Decrement(); + return res; + } + + bool ContainsGenericParameterInternal(MethodBaseSig mbs) { + if (mbs == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res = ContainsGenericParameterInternal(mbs.RetType) || + ContainsGenericParameter(mbs.Params) || + ContainsGenericParameter(mbs.ParamsAfterSentinel); + + recursionCounter.Decrement(); + return res; + } + + bool ContainsGenericParameterInternal(LocalSig ls) { + if (ls == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res = ContainsGenericParameter(ls.Locals); + + recursionCounter.Decrement(); + return res; + } + + bool ContainsGenericParameterInternal(GenericInstMethodSig gim) { + if (gim == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res = ContainsGenericParameter(gim.GenericArguments); + + recursionCounter.Decrement(); + return res; + } + + bool ContainsGenericParameter(ThreadSafe.IList types) { + if (types == null) + return false; + if (!recursionCounter.Increment()) + return false; + + bool res = false; + foreach (var type in types.GetSafeEnumerable()) { + if (ContainsGenericParameter(type)) { + res = true; + break; + } + } + recursionCounter.Decrement(); + return res; + } + } +} diff --git a/dnlib/DotNet/TypeNameParser.cs b/dnlib/DotNet/TypeNameParser.cs new file mode 100644 index 0000000..628351d --- /dev/null +++ b/dnlib/DotNet/TypeNameParser.cs @@ -0,0 +1,866 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace dnlib.DotNet { + /// + /// Thrown by when it fails to parse a type name + /// + [Serializable] + public class TypeNameParserException : Exception { + /// + /// Default constructor + /// + public TypeNameParserException() { + } + + /// + /// Constructor + /// + /// Exception message + public TypeNameParserException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Exception message + /// Inner exception or null if none + public TypeNameParserException(string message, Exception innerException) + : base(message, innerException) { + } + } + + /// + /// Helps create types + /// + public interface IAssemblyRefFinder { + /// + /// Finds a 's when the original assembly + /// info is missing from the full type name. + /// + /// A non-nested + /// 's or null + AssemblyRef FindAssemblyRef(TypeRef nonNestedTypeRef); + } + + /// + /// Parses a type name and creates an + /// + public abstract class TypeNameParser : IDisposable { + /// Owner module + protected ModuleDef ownerModule; + readonly GenericParamContext gpContext; + StringReader reader; + readonly IAssemblyRefFinder typeNameParserHelper; + RecursionCounter recursionCounter; + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// A new instance + /// If parsing failed + public static ITypeDefOrRef ParseReflectionThrow(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper) { + return ParseReflectionThrow(ownerModule, typeFullName, typeNameParserHelper, new GenericParamContext()); + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// Generic parameter context + /// A new instance + /// If parsing failed + public static ITypeDefOrRef ParseReflectionThrow(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper, GenericParamContext gpContext) { + using (var parser = new ReflectionTypeNameParser(ownerModule, typeFullName, typeNameParserHelper, gpContext)) + return parser.Parse(); + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// A new instance or null if parsing failed + public static ITypeDefOrRef ParseReflection(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper) { + return ParseReflection(ownerModule, typeFullName, typeNameParserHelper, new GenericParamContext()); + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// Generic parameter context + /// A new instance or null if parsing failed + public static ITypeDefOrRef ParseReflection(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper, GenericParamContext gpContext) { + try { + return ParseReflectionThrow(ownerModule, typeFullName, typeNameParserHelper, gpContext); + } + catch (TypeNameParserException) { + return null; + } + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// A new instance + /// If parsing failed + public static TypeSig ParseAsTypeSigReflectionThrow(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper) { + return ParseAsTypeSigReflectionThrow(ownerModule, typeFullName, typeNameParserHelper, new GenericParamContext()); + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// Generic parameter context + /// A new instance + /// If parsing failed + public static TypeSig ParseAsTypeSigReflectionThrow(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper, GenericParamContext gpContext) { + using (var parser = new ReflectionTypeNameParser(ownerModule, typeFullName, typeNameParserHelper, gpContext)) + return parser.ParseAsTypeSig(); + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// A new instance or null if parsing failed + public static TypeSig ParseAsTypeSigReflection(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper) { + return ParseAsTypeSigReflection(ownerModule, typeFullName, typeNameParserHelper, new GenericParamContext()); + } + + /// + /// Parses a Reflection type name and creates a + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// Generic parameter context + /// A new instance or null if parsing failed + public static TypeSig ParseAsTypeSigReflection(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper, GenericParamContext gpContext) { + try { + return ParseAsTypeSigReflectionThrow(ownerModule, typeFullName, typeNameParserHelper, gpContext); + } + catch (TypeNameParserException) { + return null; + } + } + + /// + /// Constructor + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + protected TypeNameParser(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper) + : this(ownerModule, typeFullName, typeNameParserHelper, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// Generic parameter context + protected TypeNameParser(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper, GenericParamContext gpContext) { + this.ownerModule = ownerModule; + this.reader = new StringReader(typeFullName ?? string.Empty); + this.typeNameParserHelper = typeNameParserHelper; + this.gpContext = gpContext; + } + + /// + /// Parses a type name and creates a + /// + /// A new instance + /// If parsing failed + internal ITypeDefOrRef Parse() { + return ownerModule.UpdateRowId(ParseAsTypeSig().ToTypeDefOrRef()); + } + + /// + /// Parses a type name and creates a + /// + /// A new instance + /// If parsing failed + internal abstract TypeSig ParseAsTypeSig(); + + /// + /// Increment recursion counter + /// + /// If this method has been called too many times + protected void RecursionIncrement() { + if (!recursionCounter.Increment()) + throw new TypeNameParserException("Stack overflow"); + } + + /// + /// Decrement recursion counter + /// + protected void RecursionDecrement() { + recursionCounter.Decrement(); + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (!disposing) + return; + if (reader != null) + reader.Dispose(); + reader = null; + } + + internal abstract class TSpec { + public readonly ElementType etype; + + protected TSpec(ElementType etype) { + this.etype = etype; + } + } + + internal sealed class SZArraySpec : TSpec { + public static readonly SZArraySpec Instance = new SZArraySpec(); + SZArraySpec() + : base(ElementType.SZArray) { + } + } + + internal sealed class ArraySpec : TSpec { + public uint rank; + public readonly IList sizes = new List(); + public readonly IList lowerBounds = new List(); + + public ArraySpec() + : base(ElementType.Array) { + } + } + + internal sealed class GenericInstSpec : TSpec { + public readonly List args = new List(); + + public GenericInstSpec() + : base(ElementType.GenericInst) { + } + } + + internal sealed class ByRefSpec : TSpec { + public static readonly ByRefSpec Instance = new ByRefSpec(); + ByRefSpec() + : base(ElementType.ByRef) { + } + } + + internal sealed class PtrSpec : TSpec { + public static readonly PtrSpec Instance = new PtrSpec(); + PtrSpec() + : base(ElementType.Ptr) { + } + } + + internal GenericSig ReadGenericSig() { + Verify(ReadChar() == '!', "Expected '!'"); + if (PeekChar() == '!') { + ReadChar(); + return new GenericMVar(ReadUInt32(), gpContext.Method); + } + return new GenericVar(ReadUInt32(), gpContext.Type); + } + + internal TypeSig CreateTypeSig(IList tspecs, TypeSig currentSig) { + foreach (var tspec in tspecs) { + switch (tspec.etype) { + case ElementType.SZArray: + currentSig = new SZArraySig(currentSig); + break; + + case ElementType.Array: + var arraySpec = (ArraySpec)tspec; + currentSig = new ArraySig(currentSig, arraySpec.rank, arraySpec.sizes, arraySpec.lowerBounds); + break; + + case ElementType.GenericInst: + var ginstSpec = (GenericInstSpec)tspec; + currentSig = new GenericInstSig(currentSig as ClassOrValueTypeSig, ginstSpec.args); + break; + + case ElementType.ByRef: + currentSig = new ByRefSig(currentSig); + break; + + case ElementType.Ptr: + currentSig = new PtrSig(currentSig); + break; + + default: + Verify(false, "Unknown TSpec"); + break; + } + } + return currentSig; + } + + /// + /// Reads a including any possible nested s. + /// + /// Character separating nested types + /// A new instance, which could be nested. + protected TypeRef ReadTypeRefAndNestedNoAssembly(char nestedChar) { + var typeRef = ReadTypeRefNoAssembly(); + while (true) { + SkipWhite(); + if (PeekChar() != nestedChar) + break; + ReadChar(); + var newTypeRef = ReadTypeRefNoAssembly(); + newTypeRef.ResolutionScope = typeRef; + typeRef = newTypeRef; + } + return typeRef; + } + + /// + /// Reads a namespace and name and creates a TypeRef. Does not read any nested types. + /// + /// A new instance + protected TypeRef ReadTypeRefNoAssembly() { + string ns, name; + // White space is important here. Any white space before the comma/EOF must be + // parsed as part of the name. + GetNamespaceAndName(ReadId(false), out ns, out name); + return ownerModule.UpdateRowId(new TypeRefUser(ownerModule, ns, name)); + } + + static void GetNamespaceAndName(string fullName, out string ns, out string name) { + int index = fullName.LastIndexOf('.'); + if (index < 0) { + ns = string.Empty; + name = fullName; + } + else { + ns = fullName.Substring(0, index); + name = fullName.Substring(index + 1); + } + } + + internal TypeSig ToTypeSig(ITypeDefOrRef type) { + var td = type as TypeDef; + if (td != null) + return ToTypeSig(td, td.IsValueType); + var tr = type as TypeRef; + if (tr != null) + return ToTypeSig(tr, IsValueType(tr)); + var ts = type as TypeSpec; + if (ts != null) + return ts.TypeSig; + Verify(false, "Unknown type"); + return null; + } + + static TypeSig ToTypeSig(ITypeDefOrRef type, bool isValueType) { + return isValueType ? (TypeSig)new ValueTypeSig(type) : new ClassSig(type); + } + + internal AssemblyRef FindAssemblyRef(TypeRef nonNestedTypeRef) { + AssemblyRef asmRef = null; + if (nonNestedTypeRef != null && typeNameParserHelper != null) + asmRef = typeNameParserHelper.FindAssemblyRef(nonNestedTypeRef); + if (asmRef != null) + return asmRef; + var ownerAsm = ownerModule.Assembly; + if (ownerAsm != null) + return ownerModule.UpdateRowId(ownerAsm.ToAssemblyRef()); + return AssemblyRef.CurrentAssembly; + } + + internal bool IsValueType(TypeRef typeRef) { + return typeRef != null && typeRef.IsValueType; + } + + internal static void Verify(bool b, string msg) { + if (!b) + throw new TypeNameParserException(msg); + } + + internal void SkipWhite() { + while (true) { + int next = PeekChar(); + if (next == -1) + break; + if (!char.IsWhiteSpace((char)next)) + break; + ReadChar(); + } + } + + internal uint ReadUInt32() { + SkipWhite(); + bool readInt = false; + uint val = 0; + while (true) { + int c = PeekChar(); + if (c == -1 || !(c >= '0' && c <= '9')) + break; + ReadChar(); + uint newVal = val * 10 + (uint)(c - '0'); + Verify(newVal >= val, "Integer overflow"); + val = newVal; + readInt = true; + } + Verify(readInt, "Expected an integer"); + return val; + } + + internal int ReadInt32() { + SkipWhite(); + + bool isSigned = false; + if (PeekChar() == '-') { + isSigned = true; + ReadChar(); + } + + uint val = ReadUInt32(); + if (isSigned) { + Verify(val <= (uint)int.MaxValue + 1, "Integer overflow"); + return -(int)val; + } + else { + Verify(val <= (uint)int.MaxValue, "Integer overflow"); + return (int)val; + } + } + + internal string ReadId() { + return ReadId(true); + } + + internal string ReadId(bool ignoreWhiteSpace) { + SkipWhite(); + var sb = new StringBuilder(); + int c; + while ((c = GetIdChar(ignoreWhiteSpace)) != -1) + sb.Append((char)c); + Verify(sb.Length > 0, "Expected an id"); + return sb.ToString(); + } + + /// + /// Peeks the next char. -1 if no more chars. + /// + protected int PeekChar() { + return reader.Peek(); + } + + /// + /// Gets the next char or -1 if no more chars + /// + protected int ReadChar() { + return reader.Read(); + } + + /// + /// Gets the next ID char or -1 if no more ID chars + /// + /// true if white space should be ignored + internal abstract int GetIdChar(bool ignoreWhiteSpace); + } + + /// + /// Parses reflection type names. Grammar http://msdn.microsoft.com/en-us/library/yfsftwz6.aspx + /// + sealed class ReflectionTypeNameParser : TypeNameParser { + /// + /// Constructor + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + public ReflectionTypeNameParser(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper) + : base(ownerModule, typeFullName, typeNameParserHelper, new GenericParamContext()) { + } + + /// + /// Constructor + /// + /// Module that will own the returned or null + /// Full name of type + /// Helper class + /// Generic parameter context + public ReflectionTypeNameParser(ModuleDef ownerModule, string typeFullName, IAssemblyRefFinder typeNameParserHelper, GenericParamContext gpContext) + : base(ownerModule, typeFullName, typeNameParserHelper, gpContext) { + } + + /// + /// Parses an assembly name + /// + /// Full assembly name + /// A new instance or null if parsing failed + public static AssemblyRef ParseAssemblyRef(string asmFullName) { + return ParseAssemblyRef(asmFullName, new GenericParamContext()); + } + + /// + /// Parses an assembly name + /// + /// Full assembly name + /// Generic parameter context + /// A new instance or null if parsing failed + public static AssemblyRef ParseAssemblyRef(string asmFullName, GenericParamContext gpContext) { + try { + using (var parser = new ReflectionTypeNameParser(null, asmFullName, null, gpContext)) + return parser.ReadAssemblyRef(); + } + catch { + return null; + } + } + + /// + internal override TypeSig ParseAsTypeSig() { + try { + var type = ReadType(true); + SkipWhite(); + Verify(PeekChar() == -1, "Extra input after type name"); + return type; + } + catch (TypeNameParserException) { + throw; + } + catch (Exception ex) { + throw new TypeNameParserException("Could not parse type name", ex); + } + } + + TypeSig ReadType(bool readAssemblyReference) { + RecursionIncrement(); + TypeSig result; + + SkipWhite(); + if (PeekChar() == '!') { + var currentSig = ReadGenericSig(); + var tspecs = ReadTSpecs(); + ReadOptionalAssemblyRef(); + result = CreateTypeSig(tspecs, currentSig); + } + else { + TypeRef typeRef = ReadTypeRefAndNestedNoAssembly('+'); + var tspecs = ReadTSpecs(); + var nonNestedTypeRef = TypeRef.GetNonNestedTypeRef(typeRef); + AssemblyRef asmRef; + if (readAssemblyReference) + asmRef = ReadOptionalAssemblyRef() ?? FindAssemblyRef(nonNestedTypeRef); + else + asmRef = FindAssemblyRef(nonNestedTypeRef); + nonNestedTypeRef.ResolutionScope = asmRef; + + // Make sure the CorLib types are used whenever possible + result = null; + if (typeRef == nonNestedTypeRef) { + var corLibSig = ownerModule.CorLibTypes.GetCorLibTypeSig(typeRef.Namespace, typeRef.Name, typeRef.DefinitionAssembly); + if (corLibSig != null) + result = corLibSig; + } + if (result == null) { + var typeDef = Resolve(asmRef, typeRef); + result = ToTypeSig(typeDef != null ? (ITypeDefOrRef)typeDef : typeRef); + } + + if (tspecs.Count != 0) + result = CreateTypeSig(tspecs, result); + } + + RecursionDecrement(); + return result; + } + + TypeDef Resolve(AssemblyRef asmRef, TypeRef typeRef) { + var asm = ownerModule.Assembly; + if (asm == null) + return null; + if (asmRef.FullName != asm.GetFullNameWithPublicKey() && asmRef.FullName != asm.GetFullNameWithPublicKeyToken()) + return null; + var td = typeRef.Resolve(); + return td != null && td.Module == ownerModule ? td : null; + } + + AssemblyRef ReadOptionalAssemblyRef() { + SkipWhite(); + if (PeekChar() == ',') { + ReadChar(); + return ReadAssemblyRef(); + } + return null; + } + + IList ReadTSpecs() { + var tspecs = new List(); + while (true) { + SkipWhite(); + switch (PeekChar()) { + case '[': // SZArray, Array, or GenericInst + ReadChar(); + SkipWhite(); + var peeked = PeekChar(); + if (peeked == ']') { + // SZ array + Verify(ReadChar() == ']', "Expected ']'"); + tspecs.Add(SZArraySpec.Instance); + } + else if (peeked == '*' || peeked == ',' || peeked == '-' || char.IsDigit((char)peeked)) { + // Array + + var arraySpec = new ArraySpec(); + arraySpec.rank = 0; + while (true) { + SkipWhite(); + int c = PeekChar(); + if (c == '*') + ReadChar(); + else if (c == ',' || c == ']') { + } + else if (c == '-' || char.IsDigit((char)c)) { + int lower = ReadInt32(); + uint? size; + SkipWhite(); + Verify(ReadChar() == '.', "Expected '.'"); + Verify(ReadChar() == '.', "Expected '.'"); + if (PeekChar() == '.') { + ReadChar(); + size = null; + } + else { + SkipWhite(); + if (PeekChar() == '-') { + int upper = ReadInt32(); + Verify(upper >= lower, "upper < lower"); + size = (uint)(upper - lower + 1); + Verify(size.Value != 0 && size.Value <= 0x1FFFFFFF, "Invalid size"); + } + else { + uint upper = ReadUInt32(); + long lsize = (long)upper - (long)lower + 1; + Verify(lsize > 0 && lsize <= 0x1FFFFFFF, "Invalid size"); + size = (uint)lsize; + } + } + if (arraySpec.lowerBounds.Count == arraySpec.rank) + arraySpec.lowerBounds.Add(lower); + if (size.HasValue && arraySpec.sizes.Count == arraySpec.rank) + arraySpec.sizes.Add(size.Value); + } + else + Verify(false, "Unknown char"); + + arraySpec.rank++; + SkipWhite(); + if (PeekChar() != ',') + break; + ReadChar(); + } + + Verify(ReadChar() == ']', "Expected ']'"); + tspecs.Add(arraySpec); + } + else { + // Generic args + + var ginstSpec = new GenericInstSpec(); + while (true) { + SkipWhite(); + peeked = PeekChar(); + bool needSeperators = peeked == '['; + if (peeked == ']') + break; + Verify(!needSeperators || ReadChar() == '[', "Expected '['"); + ginstSpec.args.Add(ReadType(needSeperators)); + SkipWhite(); + Verify(!needSeperators || ReadChar() == ']', "Expected ']'"); + SkipWhite(); + if (PeekChar() != ',') + break; + ReadChar(); + } + + Verify(ReadChar() == ']', "Expected ']'"); + tspecs.Add(ginstSpec); + } + break; + + case '&': // ByRef + ReadChar(); + tspecs.Add(ByRefSpec.Instance); + break; + + case '*': // Ptr + ReadChar(); + tspecs.Add(PtrSpec.Instance); + break; + + default: + return tspecs; + } + } + } + + AssemblyRef ReadAssemblyRef() { + var asmRef = new AssemblyRefUser(); + if (ownerModule != null) + ownerModule.UpdateRowId(asmRef); + + asmRef.Name = ReadAssemblyNameId(); + SkipWhite(); + if (PeekChar() != ',') + return asmRef; + ReadChar(); + + while (true) { + SkipWhite(); + int c = PeekChar(); + if (c == -1 || c == ']') + break; + if (c == ',') { + ReadChar(); + continue; + } + + string key = ReadId(); + SkipWhite(); + if (PeekChar() != '=') + continue; + ReadChar(); + string value = ReadId(); + + switch (key.ToUpperInvariant()) { + case "VERSION": + asmRef.Version = Utils.ParseVersion(value); + break; + + case "CONTENTTYPE": + if (value.Equals("WindowsRuntime", StringComparison.OrdinalIgnoreCase)) + asmRef.ContentType = AssemblyAttributes.ContentType_WindowsRuntime; + else + asmRef.ContentType = AssemblyAttributes.ContentType_Default; + break; + + case "RETARGETABLE": + if (value.Equals("Yes", StringComparison.OrdinalIgnoreCase)) + asmRef.IsRetargetable = true; + else + asmRef.IsRetargetable = false; + break; + + case "PUBLICKEY": + if (value.Equals("null", StringComparison.OrdinalIgnoreCase) || + value.Equals("neutral", StringComparison.OrdinalIgnoreCase)) + asmRef.PublicKeyOrToken = new PublicKey(); + else + asmRef.PublicKeyOrToken = PublicKeyBase.CreatePublicKey(Utils.ParseBytes(value)); + break; + + case "PUBLICKEYTOKEN": + if (value.Equals("null", StringComparison.OrdinalIgnoreCase) || + value.Equals("neutral", StringComparison.OrdinalIgnoreCase)) + asmRef.PublicKeyOrToken = new PublicKeyToken(); + else + asmRef.PublicKeyOrToken = PublicKeyBase.CreatePublicKeyToken(Utils.ParseBytes(value)); + break; + + case "CULTURE": + case "LANGUAGE": + if (value.Equals("neutral", StringComparison.OrdinalIgnoreCase)) + asmRef.Culture = UTF8String.Empty; + else + asmRef.Culture = value; + break; + } + } + + return asmRef; + } + + string ReadAssemblyNameId() { + SkipWhite(); + var sb = new StringBuilder(); + int c; + while ((c = GetAsmNameChar()) != -1) + sb.Append((char)c); + var name = sb.ToString().Trim(); + Verify(name.Length > 0, "Expected an assembly name"); + return name; + } + + int GetAsmNameChar() { + int c = PeekChar(); + if (c == -1) + return -1; + switch (c) { + case '\\': + ReadChar(); + return ReadChar(); + + case ']': + case ',': + return -1; + + default: + return ReadChar(); + } + } + + internal override int GetIdChar(bool ignoreWhiteSpace) { + int c = PeekChar(); + if (c == -1) + return -1; + if (ignoreWhiteSpace && char.IsWhiteSpace((char)c)) + return -1; + switch (c) { + case '\\': + ReadChar(); + return ReadChar(); + + case ',': + case '+': + case '&': + case '*': + case '[': + case ']': + case '=': + return -1; + + default: + return ReadChar(); + } + } + } +} diff --git a/dnlib/DotNet/TypeRef.cs b/dnlib/DotNet/TypeRef.cs new file mode 100644 index 0000000..9d9bffe --- /dev/null +++ b/dnlib/DotNet/TypeRef.cs @@ -0,0 +1,451 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the TypeRef table + /// + public abstract class TypeRef : ITypeDefOrRef, IHasCustomAttribute, IMemberRefParent, IResolutionScope { + /// + /// The row id in its table + /// + protected uint rid; + + /// + /// The owner module + /// + protected ModuleDef module; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.TypeRef, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int TypeDefOrRefTag { + get { return 1; } + } + + /// + public int HasCustomAttributeTag { + get { return 2; } + } + + /// + public int MemberRefParentTag { + get { return 1; } + } + + /// + public int ResolutionScopeTag { + get { return 3; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { return 0; } + } + + /// + string IType.TypeName { + get { return FullNameCreator.Name(this, false); } + } + + /// + public string ReflectionName { + get { return FullNameCreator.Name(this, true); } + } + + /// + string IType.Namespace { + get { return FullNameCreator.Namespace(this, false); } + } + + /// + public string ReflectionNamespace { + get { return FullNameCreator.Namespace(this, true); } + } + + /// + public string FullName { + get { return FullNameCreator.FullName(this, false); } + } + + /// + public string ReflectionFullName { + get { return FullNameCreator.FullName(this, true); } + } + + /// + public string AssemblyQualifiedName { + get { return FullNameCreator.AssemblyQualifiedName(this); } + } + + /// + public IAssembly DefinitionAssembly { + get { return FullNameCreator.DefinitionAssembly(this); } + } + + /// + public IScope Scope { + get { return FullNameCreator.Scope(this); } + } + + /// + public ITypeDefOrRef ScopeType { + get { return this; } + } + + /// + /// Always returns false since a does not contain any + /// or . + /// + public bool ContainsGenericParameter { + get { return false; } + } + + /// + public ModuleDef Module { + get { return module; } + } + + /// + /// From column TypeRef.ResolutionScope + /// + public IResolutionScope ResolutionScope { + get { + if (!resolutionScope_isInitialized) + InitializeResolutionScope(); + return resolutionScope; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + resolutionScope = value; + resolutionScope_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + protected IResolutionScope resolutionScope; + /// + protected bool resolutionScope_isInitialized; + + void InitializeResolutionScope() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (resolutionScope_isInitialized) + return; + resolutionScope = GetResolutionScope_NoLock(); + resolutionScope_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual IResolutionScope GetResolutionScope_NoLock() { + return null; + } + + /// + /// From column TypeRef.Name + /// + public UTF8String Name { + get { return name; } + set { name = value; } + } + /// Name + protected UTF8String name; + + /// + /// From column TypeRef.Namespace + /// + public UTF8String Namespace { + get { return @namespace; } + set { @namespace = value; } + } + /// Name + protected UTF8String @namespace; + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + /// true if it's nested within another + /// + public bool IsNested { + get { return DeclaringType != null; } + } + + /// + public bool IsValueType { + get { + var td = Resolve(); + return td != null && td.IsValueType; + } + } + + /// + public bool IsPrimitive { + get { return this.IsPrimitive(); } + } + + /// + /// Gets the declaring type, if any + /// + public TypeRef DeclaringType { + get { return ResolutionScope as TypeRef; } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { return DeclaringType; } + } + + bool IIsTypeOrMethod.IsType { + get { return true; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return false; } + } + + bool IMemberRef.IsTypeRef { + get { return true; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + /// Resolves the type + /// + /// A instance or null if it couldn't be resolved + public TypeDef Resolve() { + return Resolve(null); + } + + /// + /// Resolves the type + /// + /// The module that needs to resolve the type or null + /// A instance or null if it couldn't be resolved + public TypeDef Resolve(ModuleDef sourceModule) { + if (module == null) + return null; + return module.Context.Resolver.Resolve(this, sourceModule); + } + + /// + /// Resolves the type + /// + /// A instance + /// If the type couldn't be resolved + public TypeDef ResolveThrow() { + return ResolveThrow(null); + } + + /// + /// Resolves the type + /// + /// The module that needs to resolve the type or null + /// A instance + /// If the type couldn't be resolved + public TypeDef ResolveThrow(ModuleDef sourceModule) { + var type = Resolve(sourceModule); + if (type != null) + return type; + throw new TypeResolveException(string.Format("Could not resolve type: {0} ({1})", this, DefinitionAssembly)); + } + + /// + /// Gets the top-most (non-nested) + /// + /// Input + /// The non-nested or null + internal static TypeRef GetNonNestedTypeRef(TypeRef typeRef) { + if (typeRef == null) + return null; + for (int i = 0; i < 1000; i++) { + var next = typeRef.ResolutionScope as TypeRef; + if (next == null) + return typeRef; + typeRef = next; + } + return null; // Here if eg. the TypeRef has an infinite loop + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A TypeRef row created by the user and not present in the original .NET file + /// + public class TypeRefUser : TypeRef { + /// + /// Constructor + /// + /// Owner module + /// Type name + public TypeRefUser(ModuleDef module, UTF8String name) + : this(module, UTF8String.Empty, name) { + } + + /// + /// Constructor + /// + /// Owner module + /// Type namespace + /// Type name + public TypeRefUser(ModuleDef module, UTF8String @namespace, UTF8String name) + : this(module, @namespace, name, null) { + } + + /// + /// Constructor + /// + /// Owner module + /// Type namespace + /// Type name + /// Resolution scope (a , + /// , or ) + public TypeRefUser(ModuleDef module, UTF8String @namespace, UTF8String name, IResolutionScope resolutionScope) { + this.module = module; + this.resolutionScope = resolutionScope; + this.resolutionScope_isInitialized = true; + this.name = name; + this.@namespace = @namespace; + } + } + + /// + /// Created from a row in the TypeRef table + /// + sealed class TypeRefMD : TypeRef, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly uint origRid; + readonly uint resolutionScopeCodedToken; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override IResolutionScope GetResolutionScope_NoLock() { + return readerModule.ResolveResolutionScope(resolutionScopeCodedToken); + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.TypeRef, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this TypeRef row + /// Row ID + /// If is null + /// If is invalid + public TypeRefMD(ModuleDefMD readerModule, uint rid) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.TypeRefTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("TypeRef rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.module = readerModule; + uint resolutionScope, name; + uint @namespace = readerModule.TablesStream.ReadTypeRefRow(origRid, out resolutionScope, out name); + this.name = readerModule.StringsStream.ReadNoNull(name); + this.@namespace = readerModule.StringsStream.ReadNoNull(@namespace); + this.resolutionScopeCodedToken = resolutionScope; + } + } +} diff --git a/dnlib/DotNet/TypeSig.cs b/dnlib/DotNet/TypeSig.cs new file mode 100644 index 0000000..55f4912 --- /dev/null +++ b/dnlib/DotNet/TypeSig.cs @@ -0,0 +1,1477 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.DotNet.MD; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +/* +All TypeSig classes: + +TypeSig base class + LeafSig base class for leaf types + TypeDefOrRefSig contains a ITypeDefOrRef instance + CorLibTypeSig simple corlib types (eg. System.Int32) + ClassOrValueTypeSig base class for Class/ValueType element types + ValueTypeSig ValueType + ClassSig Class + GenericSig base class for generic vars + GenericVar Generic type parameter + GenericMVar Generic method parameter + SentinelSig Sentinel + FnPtrSig Function pointer sig + GenericInstSig Generic instance type (contains a generic type + all generic args) + NonLeafSig base class for non-leaf types + PtrSig Pointer + ByRefSig By ref + ArraySigBase Array base class + ArraySig Array + SZArraySig Single dimension, zero lower limit array (i.e., THETYPE[]) + ModifierSig C modifier base class + CModReqdSig C required modifier + CModOptSig C optional modifier + PinnedSig Pinned + ValueArraySig Value array (undocumented/not implemented by the CLR so don't use it) + ModuleSig Module (undocumented/not implemented by the CLR so don't use it) +*/ + +namespace dnlib.DotNet { + /// + /// Type sig base class + /// + public abstract class TypeSig : IType { + uint rid; + + /// + /// Returns the wrapped element type. Can only be null if it was an invalid sig or + /// if it's a + /// + public abstract TypeSig Next { get; } + + /// + /// Gets the element type + /// + public abstract ElementType ElementType { get; } + + /// + public MDToken MDToken { + get { return new MDToken(Table.TypeSpec, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + /// + bool IIsTypeOrMethod.IsType { + get { return true; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { + var type = this.RemovePinnedAndModifiers() as GenericInstSig; + return type == null ? 0 : type.GenericArguments.Count; + } + } + + /// + public bool IsValueType { + get { + var t = this.RemovePinnedAndModifiers(); + if (t == null) + return false; + if (t.ElementType == ElementType.GenericInst) { + var gis = (GenericInstSig)t; + t = gis.GenericType; + if (t == null) + return false; + } + return t.ElementType.IsValueType(); + } + } + + /// + public bool IsPrimitive { + get { return ElementType.IsPrimitive(); } + } + + /// + public string TypeName { + get { return FullNameCreator.Name(this, false); } + } + + /// + UTF8String IFullName.Name { + get { return new UTF8String(FullNameCreator.Name(this, false)); } + set { throw new NotSupportedException(); } + } + + /// + public string ReflectionName { + get { return FullNameCreator.Name(this, true); } + } + + /// + public string Namespace { + get { return FullNameCreator.Namespace(this, false); } + } + + /// + public string ReflectionNamespace { + get { return FullNameCreator.Namespace(this, true); } + } + + /// + public string FullName { + get { return FullNameCreator.FullName(this, false); } + } + + /// + public string ReflectionFullName { + get { return FullNameCreator.FullName(this, true); } + } + + /// + public string AssemblyQualifiedName { + get { return FullNameCreator.AssemblyQualifiedName(this); } + } + + /// + public IAssembly DefinitionAssembly { + get { return FullNameCreator.DefinitionAssembly(this); } + } + + /// + public IScope Scope { + get { return FullNameCreator.Scope(this); } + } + + /// + public ITypeDefOrRef ScopeType { + get { return FullNameCreator.ScopeType(this); } + } + + /// + public ModuleDef Module { + get { return FullNameCreator.OwnerModule(this); } + } + + /// + /// true if it's a + /// + public bool IsTypeDefOrRef { + get { return this is TypeDefOrRefSig; } + } + + /// + /// true if it's a + /// + public bool IsCorLibType { + get { return this is CorLibTypeSig; } + } + + /// + /// true if it's a + /// + public bool IsClassSig { + get { return this is ClassSig; } + } + + /// + /// true if it's a + /// + public bool IsValueTypeSig { + get { return this is ValueTypeSig; } + } + + /// + /// true if it's a + /// + public bool IsGenericParameter { + get { return this is GenericSig; } + } + + /// + /// true if it's a + /// + public bool IsGenericTypeParameter { + get { return this is GenericVar; } + } + + /// + /// true if it's a + /// + public bool IsGenericMethodParameter { + get { return this is GenericMVar; } + } + + /// + /// true if it's a + /// + public bool IsSentinel { + get { return this is SentinelSig; } + } + + /// + /// true if it's a + /// + public bool IsFunctionPointer { + get { return this is FnPtrSig; } + } + + /// + /// true if it's a + /// + public bool IsGenericInstanceType { + get { return this is GenericInstSig; } + } + + /// + /// true if it's a + /// + public bool IsPointer { + get { return this is PtrSig; } + } + + /// + /// true if it's a + /// + public bool IsByRef { + get { return this is ByRefSig; } + } + + /// + /// true if it's a or a + /// + public bool IsSingleOrMultiDimensionalArray { + get { return this is ArraySigBase; } + } + + /// + /// true if it's a + /// + public bool IsArray { + get { return this is ArraySig; } + } + + /// + /// true if it's a + /// + public bool IsSZArray { + get { return this is SZArraySig; } + } + + /// + /// true if it's a + /// + public bool IsModifier { + get { return this is ModifierSig; } + } + + /// + /// true if it's a + /// + public bool IsRequiredModifier { + get { return this is CModReqdSig; } + } + + /// + /// true if it's a + /// + public bool IsOptionalModifier { + get { return this is CModOptSig; } + } + + /// + /// true if it's a + /// + public bool IsPinned { + get { return this is PinnedSig; } + } + + /// + /// true if it's a + /// + public bool IsValueArray { + get { return this is ValueArraySig; } + } + + /// + /// true if it's a + /// + public bool IsModuleSig { + get { return this is ModuleSig; } + } + + /// + /// true if this contains a or a + /// . + /// + public bool ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + + /// + public override string ToString() { + return FullName; + } + } + + public static partial class Extensions { + /// + /// Removes all C optional/required modifiers + /// + /// A instance + /// Input after all modifiers + public static TypeSig RemoveModifiers(this TypeSig a) { + if (a == null) + return null; + while (true) { + var modifier = a as ModifierSig; + if (modifier == null) + return a; + a = a.Next; + } + } + + /// + /// Removes pinned signature + /// + /// The type + /// Input after pinned signature + public static TypeSig RemovePinned(this TypeSig a) { + var pinned = a as PinnedSig; + if (pinned == null) + return a; + return pinned.Next; + } + + /// + /// Removes all modifiers and pinned sig + /// + /// The type + /// Inputer after modifiers and pinned signature + public static TypeSig RemovePinnedAndModifiers(this TypeSig a) { + a = a.RemoveModifiers(); + a = a.RemovePinned(); + a = a.RemoveModifiers(); + return a; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static TypeDefOrRefSig ToTypeDefOrRefSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as TypeDefOrRefSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ClassOrValueTypeSig ToClassOrValueTypeSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as ClassOrValueTypeSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ValueTypeSig ToValueTypeSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as ValueTypeSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ClassSig ToClassSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as ClassSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericSig ToGenericSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as GenericSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericVar ToGenericVar(this TypeSig type) { + return type.RemovePinnedAndModifiers() as GenericVar; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericMVar ToGenericMVar(this TypeSig type) { + return type.RemovePinnedAndModifiers() as GenericMVar; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static GenericInstSig ToGenericInstSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as GenericInstSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static PtrSig ToPtrSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as PtrSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ByRefSig ToByRefSig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as ByRefSig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static ArraySig ToArraySig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as ArraySig; + } + + /// + /// Returns a + /// + /// The type + /// A or null if it's not a + /// + public static SZArraySig ToSZArraySig(this TypeSig type) { + return type.RemovePinnedAndModifiers() as SZArraySig; + } + + /// + /// Gets the next field or null + /// + /// this + /// + public static TypeSig GetNext(this TypeSig self) { + return self == null ? null : self.Next; + } + + /// + /// Gets the value or false if + /// is null + /// + /// this + /// + public static bool GetIsValueType(this TypeSig self) { + return self == null ? false : self.IsValueType; + } + + /// + /// Gets the value or false if + /// is null + /// + /// this + /// + public static bool GetIsPrimitive(this TypeSig self) { + return self == null ? false : self.IsPrimitive; + } + + /// + /// Gets the element type + /// + /// this + /// The element type + public static ElementType GetElementType(this TypeSig a) { + return a == null ? ElementType.End : a.ElementType; + } + + /// + /// Gets the full name of the type + /// + /// this + /// Full name of the type + public static string GetFullName(this TypeSig a) { + return a == null ? string.Empty : a.FullName; + } + + /// + /// Gets the name of the type + /// + /// this + /// Name of the type + public static string GetName(this TypeSig a) { + return a == null ? string.Empty : a.TypeName; + } + + /// + /// Gets the namespace of the type + /// + /// this + /// Namespace of the type + public static string GetNamespace(this TypeSig a) { + return a == null ? string.Empty : a.Namespace; + } + + /// + /// Returns the if it is a . + /// + /// this + /// A or null if none found + public static TypeRef TryGetTypeRef(this TypeSig a) { + var tdr = a.RemovePinnedAndModifiers() as TypeDefOrRefSig; + return tdr == null ? null : tdr.TypeRef; + } + + /// + /// Returns the if it is a . + /// Nothing is resolved. + /// + /// this + /// A or null if none found + public static TypeDef TryGetTypeDef(this TypeSig a) { + var tdr = a.RemovePinnedAndModifiers() as TypeDefOrRefSig; + return tdr == null ? null : tdr.TypeDef; + } + + /// + /// Returns the if it is a . + /// + /// this + /// A or null if none found + public static TypeSpec TryGetTypeSpec(this TypeSig a) { + var tdr = a.RemovePinnedAndModifiers() as TypeDefOrRefSig; + return tdr == null ? null : tdr.TypeSpec; + } + } + + /// + /// Base class for element types that are last in a type sig, ie., + /// , , , + /// , + /// + public abstract class LeafSig : TypeSig { + /// + public sealed override TypeSig Next { + get { return null; } + } + } + + /// + /// Wraps a + /// + public abstract class TypeDefOrRefSig : LeafSig { + readonly ITypeDefOrRef typeDefOrRef; + + /// + /// Gets the the TypeDefOrRef + /// + public ITypeDefOrRef TypeDefOrRef { + get { return typeDefOrRef; } + } + + /// + /// Returns true if != null + /// + public bool IsTypeRef { + get { return TypeRef != null; } + } + + /// + /// Returns true if != null + /// + public bool IsTypeDef { + get { return TypeDef != null; } + } + + /// + /// Returns true if != null + /// + public bool IsTypeSpec { + get { return TypeSpec != null; } + } + + /// + /// Gets the or null if it's not a + /// + public TypeRef TypeRef { + get { return typeDefOrRef as TypeRef; } + } + + /// + /// Gets the or null if it's not a + /// + public TypeDef TypeDef { + get { return typeDefOrRef as TypeDef; } + } + + /// + /// Gets the or null if it's not a + /// + public TypeSpec TypeSpec { + get { return typeDefOrRef as TypeSpec; } + } + + /// + /// Constructor + /// + /// A , or + /// a + protected TypeDefOrRefSig(ITypeDefOrRef typeDefOrRef) { + this.typeDefOrRef = typeDefOrRef; + } + } + + /// + /// A core library type + /// + public sealed class CorLibTypeSig : TypeDefOrRefSig { + readonly ElementType elementType; + + /// + /// Gets the element type + /// + public override ElementType ElementType { + get { return elementType; } + } + + /// + /// Constructor + /// + /// The type which must be a or a + /// . and null are not allowed. + /// The type's element type + public CorLibTypeSig(ITypeDefOrRef corType, ElementType elementType) + : base(corType) { + if (!(corType is TypeRef) && !(corType is TypeDef)) + throw new ArgumentException("corType must be a TypeDef or a TypeRef. null and TypeSpec are invalid inputs."); + this.elementType = elementType; + } + } + + /// + /// Base class for class/valuetype element types + /// + public abstract class ClassOrValueTypeSig : TypeDefOrRefSig { + /// + /// Constructor + /// + /// A + protected ClassOrValueTypeSig(ITypeDefOrRef typeDefOrRef) + : base(typeDefOrRef) { + } + } + + /// + /// Represents a + /// + public sealed class ValueTypeSig : ClassOrValueTypeSig { + /// + public override ElementType ElementType { + get { return ElementType.ValueType; } + } + + /// + /// Constructor + /// + /// A + public ValueTypeSig(ITypeDefOrRef typeDefOrRef) + : base(typeDefOrRef) { + } + } + + /// + /// Represents a + /// + public sealed class ClassSig : ClassOrValueTypeSig { + /// + public override ElementType ElementType { + get { return ElementType.Class; } + } + + /// + /// Constructor + /// + /// A + public ClassSig(ITypeDefOrRef typeDefOrRef) + : base(typeDefOrRef) { + } + } + + /// + /// Generic method/type var base class + /// + public abstract class GenericSig : LeafSig { + readonly bool isTypeVar; + readonly uint number; + readonly ITypeOrMethodDef genericParamProvider; + + /// + /// true if it has an owner or + /// + public bool HasOwner { + get { return genericParamProvider != null; } + } + + /// + /// true if it has an owner ( is + /// not null) + /// + public bool HasOwnerType { + get { return OwnerType != null; } + } + + /// + /// true if it has an owner ( is + /// not null) + /// + public bool HasOwnerMethod { + get { return OwnerMethod != null; } + } + + /// + /// Gets the owner type or null if the owner is a or if it + /// has no owner. + /// + public TypeDef OwnerType { + get { return genericParamProvider as TypeDef; } + } + + /// + /// Gets the owner method or null if the owner is a or if it + /// has no owner. + /// + public MethodDef OwnerMethod { + get { return genericParamProvider as MethodDef; } + } + + /// + /// Gets the generic param number + /// + public uint Number { + get { return number; } + } + + /// + /// Gets the corresponding or null if none exists. + /// + public GenericParam GenericParam { + get { + var gpp = genericParamProvider; + if (gpp == null) + return null; + foreach (var gp in gpp.GenericParameters.GetSafeEnumerable()) { + if (gp.Number == number) + return gp; + } + return null; + } + } + + /// + /// Constructor + /// + /// true if it's a Var, false if it's a MVar + /// Generic param number + protected GenericSig(bool isTypeVar, uint number) + : this(isTypeVar, number, null) { + } + + /// + /// Constructor + /// + /// true if it's a Var, false if it's a MVar + /// Generic param number + /// Owner method/type or null + protected GenericSig(bool isTypeVar, uint number, ITypeOrMethodDef genericParamProvider) { + this.isTypeVar = isTypeVar; + this.number = number; + this.genericParamProvider = genericParamProvider; + } + + /// + /// Returns true if it's a MVar element type + /// + public bool IsMethodVar { + get { return !isTypeVar; } + } + + /// + /// Returns true if it's a Var element type + /// + public bool IsTypeVar { + get { return isTypeVar; } + } + } + + /// + /// Represents a + /// + public sealed class GenericVar : GenericSig { + /// + public override ElementType ElementType { + get { return ElementType.Var; } + } + + /// + public GenericVar(uint number) + : base(true, number) { + } + + /// + public GenericVar(int number) + : base(true, (uint)number) { + } + + /// + /// Constructor + /// + /// Generic parameter number + /// Owner type or null + public GenericVar(uint number, TypeDef genericParamProvider) + : base(true, number, genericParamProvider) { + } + + /// + /// Constructor + /// + /// Generic parameter number + /// Owner type or null + public GenericVar(int number, TypeDef genericParamProvider) + : base(true, (uint)number, genericParamProvider) { + } + } + + /// + /// Represents a + /// + public sealed class GenericMVar : GenericSig { + /// + public override ElementType ElementType { + get { return ElementType.MVar; } + } + + /// + public GenericMVar(uint number) + : base(false, number) { + } + + /// + public GenericMVar(int number) + : base(false, (uint)number) { + } + + /// + /// Constructor + /// + /// Generic parameter number + /// Owner method or null + public GenericMVar(uint number, MethodDef genericParamProvider) + : base(false, number, genericParamProvider) { + } + + /// + /// Constructor + /// + /// Generic parameter number + /// Owner method or null + public GenericMVar(int number, MethodDef genericParamProvider) + : base(false, (uint)number, genericParamProvider) { + } + } + + /// + /// Represents a + /// + public sealed class SentinelSig : LeafSig { + /// + public override ElementType ElementType { + get { return ElementType.Sentinel; } + } + } + + /// + /// Represents a + /// + public sealed class FnPtrSig : LeafSig { + readonly CallingConventionSig signature; + + /// + public override ElementType ElementType { + get { return ElementType.FnPtr; } + } + + /// + /// Gets the signature + /// + public CallingConventionSig Signature { + get { return signature; } + } + + /// + /// Gets the + /// + public MethodSig MethodSig { + get { return signature as MethodSig; } + } + + /// + /// Constructor + /// + /// The method signature + public FnPtrSig(CallingConventionSig signature) { + this.signature = signature; + } + } + + /// + /// Represents a + /// + public sealed class GenericInstSig : LeafSig { + ClassOrValueTypeSig genericType; + readonly ThreadSafe.IList genericArgs; + + /// + public override ElementType ElementType { + get { return ElementType.GenericInst; } + } + + /// + /// Gets the generic type + /// + public ClassOrValueTypeSig GenericType { + get { return genericType; } + set { genericType = value; } + } + + /// + /// Gets the generic arguments (it's never null) + /// + public ThreadSafe.IList GenericArguments { + get { return genericArgs; } + } + + /// + /// Default constructor + /// + public GenericInstSig() { + this.genericArgs = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// The generic type + public GenericInstSig(ClassOrValueTypeSig genericType) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// The generic type + /// Number of generic arguments + public GenericInstSig(ClassOrValueTypeSig genericType, uint genArgCount) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create((int)genArgCount); + } + + /// + /// Constructor + /// + /// The generic type + /// Number of generic arguments + public GenericInstSig(ClassOrValueTypeSig genericType, int genArgCount) + : this(genericType, (uint)genArgCount) { + } + + /// + /// Constructor + /// + /// The generic type + /// Generic argument #1 + public GenericInstSig(ClassOrValueTypeSig genericType, TypeSig genArg1) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create(genArg1); + } + + /// + /// Constructor + /// + /// The generic type + /// Generic argument #1 + /// Generic argument #2 + public GenericInstSig(ClassOrValueTypeSig genericType, TypeSig genArg1, TypeSig genArg2) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create(genArg1, genArg2); + } + + /// + /// Constructor + /// + /// The generic type + /// Generic argument #1 + /// Generic argument #2 + /// Generic argument #3 + public GenericInstSig(ClassOrValueTypeSig genericType, TypeSig genArg1, TypeSig genArg2, TypeSig genArg3) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create(genArg1, genArg2, genArg3); + } + + /// + /// Constructor + /// + /// The generic type + /// Generic arguments + public GenericInstSig(ClassOrValueTypeSig genericType, params TypeSig[] genArgs) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create(genArgs); + } + + /// + /// Constructor + /// + /// The generic type + /// Generic arguments + public GenericInstSig(ClassOrValueTypeSig genericType, IList genArgs) { + this.genericType = genericType; + this.genericArgs = ThreadSafeListCreator.Create(genArgs); + } + } + + /// + /// Base class of non-leaf element types + /// + public abstract class NonLeafSig : TypeSig { + readonly TypeSig nextSig; + + /// + public sealed override TypeSig Next { + get { return nextSig; } + } + + /// + /// Constructor + /// + /// Next sig + protected NonLeafSig(TypeSig nextSig) { + this.nextSig = nextSig; + } + } + + /// + /// Represents a + /// + public sealed class PtrSig : NonLeafSig { + /// + public override ElementType ElementType { + get { return ElementType.Ptr; } + } + + /// + /// Constructor + /// + /// The next element type + public PtrSig(TypeSig nextSig) + : base(nextSig) { + } + } + + /// + /// Represents a + /// + public sealed class ByRefSig : NonLeafSig { + /// + public override ElementType ElementType { + get { return ElementType.ByRef; } + } + + /// + /// Constructor + /// + /// The next element type + public ByRefSig(TypeSig nextSig) + : base(nextSig) { + } + } + + /// + /// Array base class + /// + public abstract class ArraySigBase : NonLeafSig { + /// + /// Constructor + /// + /// Array type + protected ArraySigBase(TypeSig arrayType) + : base(arrayType) { + } + + /// + /// true if it's a multi-dimensional array (i.e., ), + /// and false if it's a single-dimensional array (i.e., ) + /// + /// + public bool IsMultiDimensional { + get { return ElementType == ElementType.Array; } + } + + /// + /// true if it's a single-dimensional array (i.e., ), + /// and false if it's a multi-dimensional array (i.e., ) + /// + /// + public bool IsSingleDimensional { + get { return ElementType == ElementType.SZArray; } + } + + /// + /// Gets/sets the rank (number of dimensions). This can only be set if + /// is true + /// + public abstract uint Rank { get; set; } + + /// + /// Gets all sizes. If it's a , then it will be an empty temporary + /// list that is re-created every time this method is called. + /// + /// A list of sizes + public abstract ThreadSafe.IList GetSizes(); + + /// + /// Gets all lower bounds. If it's a , then it will be an empty + /// temporary list that is re-created every time this method is called. + /// + /// A list of lower bounds + public abstract ThreadSafe.IList GetLowerBounds(); + } + + /// + /// Represents a + /// + /// + public sealed class ArraySig : ArraySigBase { + uint rank; + readonly ThreadSafe.IList sizes; + readonly ThreadSafe.IList lowerBounds; + + /// + public override ElementType ElementType { + get { return ElementType.Array; } + } + + /// + /// Gets/sets the rank (max value is 0x1FFFFFFF) + /// + public override uint Rank { + get { return rank; } + set { rank = value; } + } + + /// + /// Gets all sizes (max elements is 0x1FFFFFFF) + /// + public ThreadSafe.IList Sizes { + get { return sizes; } + } + + /// + /// Gets all lower bounds (max elements is 0x1FFFFFFF) + /// + public ThreadSafe.IList LowerBounds { + get { return lowerBounds; } + } + + /// + /// Constructor + /// + /// Array type + public ArraySig(TypeSig arrayType) + : base(arrayType) { + this.sizes = ThreadSafeListCreator.Create(); + this.lowerBounds = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Array type + /// Array rank + public ArraySig(TypeSig arrayType, uint rank) + : base(arrayType) { + this.rank = rank; + this.sizes = ThreadSafeListCreator.Create(); + this.lowerBounds = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Array type + /// Array rank + public ArraySig(TypeSig arrayType, int rank) + : this(arrayType, (uint)rank) { + } + + /// + /// Constructor + /// + /// Array type + /// Array rank + /// Sizes list. This instance will be the owner of this list. + /// Lower bounds list. This instance will be the owner of this list. + public ArraySig(TypeSig arrayType, uint rank, IEnumerable sizes, IEnumerable lowerBounds) + : base(arrayType) { + this.rank = rank; + this.sizes = ThreadSafeListCreator.Create(sizes); + this.lowerBounds = ThreadSafeListCreator.Create(lowerBounds); + } + + /// + /// Constructor + /// + /// Array type + /// Array rank + /// Sizes list. This instance will be the owner of this list. + /// Lower bounds list. This instance will be the owner of this list. + public ArraySig(TypeSig arrayType, int rank, IEnumerable sizes, IEnumerable lowerBounds) + : this(arrayType, (uint)rank, sizes, lowerBounds) { + } + + /// + /// Constructor + /// + /// Array type + /// Array rank + /// Sizes list. This instance will be the owner of this list. + /// Lower bounds list. This instance will be the owner of this list. + internal ArraySig(TypeSig arrayType, uint rank, IList sizes, IList lowerBounds) + : base(arrayType) { + this.rank = rank; + this.sizes = ThreadSafeListCreator.MakeThreadSafe(sizes); + this.lowerBounds = ThreadSafeListCreator.MakeThreadSafe(lowerBounds); + } + + /// + public override ThreadSafe.IList GetSizes() { + return sizes; + } + + /// + public override ThreadSafe.IList GetLowerBounds() { + return lowerBounds; + } + } + + /// + /// Represents a (single dimension, zero lower bound array) + /// + /// + public sealed class SZArraySig : ArraySigBase { + /// + public override ElementType ElementType { + get { return ElementType.SZArray; } + } + + /// + public override uint Rank { + get { return 1; } + set { throw new NotSupportedException(); } + } + + /// + /// Constructor + /// + /// The next element type + public SZArraySig(TypeSig nextSig) + : base(nextSig) { + } + + /// + public override ThreadSafe.IList GetSizes() { + return ThreadSafeListCreator.Create(); + } + + /// + public override ThreadSafe.IList GetLowerBounds() { + return ThreadSafeListCreator.Create(); + } + } + + /// + /// Base class for modifier type sigs + /// + public abstract class ModifierSig : NonLeafSig { + readonly ITypeDefOrRef modifier; + + /// + /// Returns the modifier type + /// + public ITypeDefOrRef Modifier { + get { return modifier; } + } + + /// + /// Constructor + /// + /// Modifier type + /// The next element type + protected ModifierSig(ITypeDefOrRef modifier, TypeSig nextSig) + : base(nextSig) { + this.modifier = modifier; + } + } + + /// + /// Represents a + /// + public sealed class CModReqdSig : ModifierSig { + /// + public override ElementType ElementType { + get { return ElementType.CModReqd; } + } + + /// + public CModReqdSig(ITypeDefOrRef modifier, TypeSig nextSig) + : base(modifier, nextSig) { + } + } + + /// + /// Represents a + /// + public sealed class CModOptSig : ModifierSig { + /// + public override ElementType ElementType { + get { return ElementType.CModOpt; } + } + + /// + public CModOptSig(ITypeDefOrRef modifier, TypeSig nextSig) + : base(modifier, nextSig) { + } + } + + /// + /// Represents a + /// + public sealed class PinnedSig : NonLeafSig { + /// + public override ElementType ElementType { + get { return ElementType.Pinned; } + } + + /// + /// Constructor + /// + /// The next element type + public PinnedSig(TypeSig nextSig) + : base(nextSig) { + } + } + + /// + /// Represents a + /// + public sealed class ValueArraySig : NonLeafSig { + uint size; + + /// + public override ElementType ElementType { + get { return ElementType.ValueArray; } + } + + /// + /// Gets/sets the size + /// + public uint Size { + get { return size; } + set { size = value; } + } + + /// + /// Constructor + /// + /// The next element type + /// Size of the array + public ValueArraySig(TypeSig nextSig, uint size) + : base(nextSig) { + this.size = size; + } + } + + /// + /// Represents a + /// + public sealed class ModuleSig : NonLeafSig { + uint index; + + /// + public override ElementType ElementType { + get { return ElementType.Module; } + } + + /// + /// Gets/sets the index + /// + public uint Index { + get { return index; } + set { index = value; } + } + + /// + /// Constructor + /// + /// Index + /// The next element type + public ModuleSig(uint index, TypeSig nextSig) + : base(nextSig) { + this.index = index; + } + } +} diff --git a/dnlib/DotNet/TypeSpec.cs b/dnlib/DotNet/TypeSpec.cs new file mode 100644 index 0000000..7e6c963 --- /dev/null +++ b/dnlib/DotNet/TypeSpec.cs @@ -0,0 +1,382 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.DotNet.MD; +using dnlib.Threading; + +namespace dnlib.DotNet { + /// + /// A high-level representation of a row in the TypeSpec table + /// + public abstract class TypeSpec : ITypeDefOrRef, IHasCustomAttribute, IMemberRefParent { + /// + /// The row id in its table + /// + protected uint rid; + +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + /// + public MDToken MDToken { + get { return new MDToken(Table.TypeSpec, rid); } + } + + /// + public uint Rid { + get { return rid; } + set { rid = value; } + } + + /// + public int TypeDefOrRefTag { + get { return 2; } + } + + /// + public int HasCustomAttributeTag { + get { return 13; } + } + + /// + public int MemberRefParentTag { + get { return 4; } + } + + /// + int IGenericParameterProvider.NumberOfGenericParameters { + get { + var ts = TypeSig; + return ts == null ? 0 : ((IGenericParameterProvider)ts).NumberOfGenericParameters; + } + } + + /// + UTF8String IFullName.Name { + get { + var mr = ScopeType; + return mr == null ? UTF8String.Empty : mr.Name; + } + set { + var mr = ScopeType; + if (mr != null) + mr.Name = value; + } + } + + /// + ITypeDefOrRef IMemberRef.DeclaringType { + get { + var sig = TypeSig.RemovePinnedAndModifiers(); + + var gis = sig as GenericInstSig; + if (gis != null) + sig = gis.GenericType; + + var tdr = sig as TypeDefOrRefSig; + if (tdr != null) { + if (tdr.IsTypeDef || tdr.IsTypeRef) + return tdr.TypeDefOrRef.DeclaringType; + return null; // If it's another TypeSpec, just stop. Don't want possible inf recursion. + } + + return null; + } + } + + bool IIsTypeOrMethod.IsType { + get { return true; } + } + + bool IIsTypeOrMethod.IsMethod { + get { return false; } + } + + bool IMemberRef.IsField { + get { return false; } + } + + bool IMemberRef.IsTypeSpec { + get { return true; } + } + + bool IMemberRef.IsTypeRef { + get { return false; } + } + + bool IMemberRef.IsTypeDef { + get { return false; } + } + + bool IMemberRef.IsMethodSpec { + get { return false; } + } + + bool IMemberRef.IsMethodDef { + get { return false; } + } + + bool IMemberRef.IsMemberRef { + get { return false; } + } + + bool IMemberRef.IsFieldDef { + get { return false; } + } + + bool IMemberRef.IsPropertyDef { + get { return false; } + } + + bool IMemberRef.IsEventDef { + get { return false; } + } + + bool IMemberRef.IsGenericParam { + get { return false; } + } + + /// + public bool IsValueType { + get { + var sig = TypeSig; + return sig != null && sig.IsValueType; + } + } + + /// + public bool IsPrimitive { + get { + var sig = TypeSig; + return sig != null && sig.IsPrimitive; + } + } + + /// + public string TypeName { + get { return FullNameCreator.Name(this, false); } + } + + /// + public string ReflectionName { + get { return FullNameCreator.Name(this, true); } + } + + /// + string IType.Namespace { + get { return FullNameCreator.Namespace(this, false); } + } + + /// + public string ReflectionNamespace { + get { return FullNameCreator.Namespace(this, true); } + } + + /// + public string FullName { + get { return FullNameCreator.FullName(this, false); } + } + + /// + public string ReflectionFullName { + get { return FullNameCreator.FullName(this, true); } + } + + /// + public string AssemblyQualifiedName { + get { return FullNameCreator.AssemblyQualifiedName(this); } + } + + /// + public IAssembly DefinitionAssembly { + get { return FullNameCreator.DefinitionAssembly(this); } + } + + /// + public IScope Scope { + get { return FullNameCreator.Scope(this); } + } + + /// + public ITypeDefOrRef ScopeType { + get { return FullNameCreator.ScopeType(this); } + } + + /// + public bool ContainsGenericParameter { + get { return TypeHelper.ContainsGenericParameter(this); } + } + + /// + public ModuleDef Module { + get { return FullNameCreator.OwnerModule(this); } + } + + /// + /// From column TypeSpec.Signature + /// + public TypeSig TypeSig { + get { + if (!typeSigAndExtraData_isInitialized) + InitializeTypeSigAndExtraData(); + return typeSig; + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + typeSig = value; + if (!typeSigAndExtraData_isInitialized) + GetTypeSigAndExtraData_NoLock(out extraData); + typeSigAndExtraData_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + /// + /// Gets/sets the extra data that was found after the signature + /// + public byte[] ExtraData { + get { + if (!typeSigAndExtraData_isInitialized) + InitializeTypeSigAndExtraData(); + return extraData; + } + set { + if (!typeSigAndExtraData_isInitialized) + InitializeTypeSigAndExtraData(); + extraData = value; + } + } + /// + protected TypeSig typeSig; + /// + protected byte[] extraData; + /// + protected bool typeSigAndExtraData_isInitialized; + + void InitializeTypeSigAndExtraData() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (typeSigAndExtraData_isInitialized) + return; + typeSig = GetTypeSigAndExtraData_NoLock(out extraData); + typeSigAndExtraData_isInitialized = true; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// Called to initialize + protected virtual TypeSig GetTypeSigAndExtraData_NoLock(out byte[] extraData) { + extraData = null; + return null; + } + + /// + /// Gets all custom attributes + /// + public CustomAttributeCollection CustomAttributes { + get { + if (customAttributes == null) + InitializeCustomAttributes(); + return customAttributes; + } + } + /// + protected CustomAttributeCollection customAttributes; + /// Initializes + protected virtual void InitializeCustomAttributes() { + Interlocked.CompareExchange(ref customAttributes, new CustomAttributeCollection(), null); + } + + /// + public bool HasCustomAttributes { + get { return CustomAttributes.Count > 0; } + } + + /// + public override string ToString() { + return FullName; + } + } + + /// + /// A TypeSpec row created by the user and not present in the original .NET file + /// + public class TypeSpecUser : TypeSpec { + /// + /// Default constructor + /// + public TypeSpecUser() { + } + + /// + /// Constructor + /// + /// A type sig + public TypeSpecUser(TypeSig typeSig) { + this.typeSig = typeSig; + this.extraData = null; + this.typeSigAndExtraData_isInitialized = true; + } + } + + /// + /// Created from a row in the TypeSpec table + /// + sealed class TypeSpecMD : TypeSpec, IMDTokenProviderMD { + /// The module where this instance is located + readonly ModuleDefMD readerModule; + + readonly GenericParamContext gpContext; + readonly uint origRid; + readonly uint signatureOffset; + + /// + public uint OrigRid { + get { return origRid; } + } + + /// + protected override TypeSig GetTypeSigAndExtraData_NoLock(out byte[] extraData) { + var sig = readerModule.ReadTypeSignature(signatureOffset, gpContext, out extraData); + if (sig != null) + sig.Rid = origRid; + return sig; + } + + /// + protected override void InitializeCustomAttributes() { + var list = readerModule.MetaData.GetCustomAttributeRidList(Table.TypeSpec, origRid); + var tmp = new CustomAttributeCollection((int)list.Length, list, (list2, index) => readerModule.ReadCustomAttribute(((RidList)list2)[index])); + Interlocked.CompareExchange(ref customAttributes, tmp, null); + } + + /// + /// Constructor + /// + /// The module which contains this TypeSpec row + /// Row ID + /// Generic parameter context + /// If is null + /// If is invalid + public TypeSpecMD(ModuleDefMD readerModule, uint rid, GenericParamContext gpContext) { +#if DEBUG + if (readerModule == null) + throw new ArgumentNullException("readerModule"); + if (readerModule.TablesStream.TypeSpecTable.IsInvalidRID(rid)) + throw new BadImageFormatException(string.Format("TypeSpec rid {0} does not exist", rid)); +#endif + this.origRid = rid; + this.rid = rid; + this.readerModule = readerModule; + this.gpContext = gpContext; + this.signatureOffset = readerModule.TablesStream.ReadTypeSpecRow2(origRid); + } + } +} diff --git a/dnlib/DotNet/UTF8String.cs b/dnlib/DotNet/UTF8String.cs new file mode 100644 index 0000000..0eebccf --- /dev/null +++ b/dnlib/DotNet/UTF8String.cs @@ -0,0 +1,711 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Text; +using System.Threading; + +namespace dnlib.DotNet { + /// + /// Compares s + /// + public sealed class UTF8StringEqualityComparer : IEqualityComparer { + /// + /// The default instance + /// + public static readonly UTF8StringEqualityComparer Instance = new UTF8StringEqualityComparer(); + + /// + public bool Equals(UTF8String x, UTF8String y) { + return UTF8String.Equals(x, y); + } + + /// + public int GetHashCode(UTF8String obj) { + return UTF8String.GetHashCode(obj); + } + } + + /// + /// A UTF-8 encoded string where the original data is kept in memory to avoid conversions + /// when the data is not really valid UTF-8 encoded data + /// + /// When comparing strings, a byte compare is performed. The reason is that this + /// is what the CLR does when comparing strings in the #Strings stream. + [DebuggerDisplay("{String}")] + public sealed class UTF8String : IEquatable, IComparable { + /// + /// An empty + /// + public static readonly UTF8String Empty = new UTF8String(string.Empty); + + readonly byte[] data; + string asString; + + /// + /// Gets the value as a UTF8 decoded string. Only use it for display purposes, + /// not for serialization. + /// + public string String { + get { + if (asString == null) + Interlocked.CompareExchange(ref asString, ConvertFromUTF8(data), null); + return asString; + } + } + + /// + /// Gets the original encoded data. Don't modify this data. + /// + public byte[] Data { + get { return data; } + } + + /// + /// Gets the length of the this as a . I.e., it's the same as + /// String.Length. + /// + /// + public int Length { + get { return String.Length; } + } + + /// + /// Gets the length of the raw data. It's the same as Data.Length + /// + /// + public int DataLength { + get { return data == null ? 0 : data.Length; } + } + + /// + /// Checks whether is null or if its data is null. + /// + /// The instance to check + /// true if null or empty, false otherwise + public static bool IsNull(UTF8String utf8) { + return (object)utf8 == null || utf8.data == null; + } + + /// + /// Checks whether is null or if its data is null or the + /// data is zero length. + /// + /// The instance to check + /// true if null or empty, false otherwise + public static bool IsNullOrEmpty(UTF8String utf8) { + return (object)utf8 == null || utf8.data == null || utf8.data.Length == 0; + } + + /// Implicit conversion from to + public static implicit operator string(UTF8String s) { + return UTF8String.ToSystemString(s); + } + + /// Implicit conversion from to + public static implicit operator UTF8String(string s) { + return s == null ? null : new UTF8String(s); + } + + /// + /// Converts it to a + /// + /// The UTF-8 string instace or null + /// A or null if is null + public static string ToSystemString(UTF8String utf8) { + if ((object)utf8 == null || utf8.data == null) + return null; + if (utf8.data.Length == 0) + return string.Empty; + return utf8.String; + } + + /// + /// Converts it to a or an empty string if is null + /// + /// The UTF-8 string instace or null + /// A (never null) + public static string ToSystemStringOrEmpty(UTF8String utf8) { + return ToSystemString(utf8) ?? string.Empty; + } + + /// + /// Gets the hash code of a + /// + /// Input + public static int GetHashCode(UTF8String utf8) { + if (IsNullOrEmpty(utf8)) + return 0; + return Utils.GetHashCode(utf8.data); + } + + /// + public int CompareTo(UTF8String other) { + return CompareTo(this, other); + } + + /// + /// Compares two instances (case sensitive) + /// + /// Instance #1 or null + /// Instance #2 or null + /// < 0 if a < b, 0 if a == b, > 0 if a > b + public static int CompareTo(UTF8String a, UTF8String b) { + return Utils.CompareTo((object)a == null ? null : a.data, (object)b == null ? null : b.data); + } + + /// + /// Compares two instances (case insensitive) + /// + /// Instance #1 or null + /// Instance #2 or null + /// < 0 if a < b, 0 if a == b, > 0 if a > b + public static int CaseInsensitiveCompareTo(UTF8String a, UTF8String b) { + if ((object)a == (object)b) + return 0; + var sa = ToSystemString(a); + var sb = ToSystemString(b); + if ((object)sa == (object)sb) + return 0; + if (sa == null) + return -1; + if (sb == null) + return 1; + return sa.ToUpperInvariant().CompareTo(sb.ToUpperInvariant()); + } + + /// + /// Compares two instances (case insensitive) + /// + /// Instance #1 or null + /// Instance #2 or null + /// true if equals, false otherwise + public static bool CaseInsensitiveEquals(UTF8String a, UTF8String b) { + return CaseInsensitiveCompareTo(a, b) == 0; + } + + /// Overloaded operator + public static bool operator ==(UTF8String left, UTF8String right) { + return CompareTo(left, right) == 0; + } + + /// Overloaded operator + public static bool operator ==(UTF8String left, string right) { + return ToSystemString(left) == right; + } + + /// Overloaded operator + public static bool operator ==(string left, UTF8String right) { + return left == ToSystemString(right); + } + + /// Overloaded operator + public static bool operator !=(UTF8String left, UTF8String right) { + return CompareTo(left, right) != 0; + } + + /// Overloaded operator + public static bool operator !=(UTF8String left, string right) { + return ToSystemString(left) != right; + } + + /// Overloaded operator + public static bool operator !=(string left, UTF8String right) { + return left != ToSystemString(right); + } + + /// Overloaded operator + public static bool operator >(UTF8String left, UTF8String right) { + return CompareTo(left, right) > 0; + } + + /// Overloaded operator + public static bool operator <(UTF8String left, UTF8String right) { + return CompareTo(left, right) < 0; + } + + /// Overloaded operator + public static bool operator >=(UTF8String left, UTF8String right) { + return CompareTo(left, right) >= 0; + } + + /// Overloaded operator + public static bool operator <=(UTF8String left, UTF8String right) { + return CompareTo(left, right) <= 0; + } + + /// + /// Constructor + /// + /// UTF-8 data that this instance now owns + public UTF8String(byte[] data) { + this.data = data; + } + + /// + /// Constructor + /// + /// The string + public UTF8String(string s) + : this(s == null ? null : Encoding.UTF8.GetBytes(s)) { + } + + static string ConvertFromUTF8(byte[] data) { + if (data == null) + return null; + try { + return Encoding.UTF8.GetString(data); + } + catch { + } + return null; + } + + /// + /// Compares two instances + /// + /// First + /// Second + /// true if equals, false otherwise + public static bool Equals(UTF8String a, UTF8String b) { + return CompareTo(a, b) == 0; + } + + /// + public bool Equals(UTF8String other) { + return CompareTo(this, other) == 0; + } + + /// + public override bool Equals(object obj) { + var other = obj as UTF8String; + if ((object)other == null) + return false; + return CompareTo(this, other) == 0; + } + + /// + /// Checks whether exists in this string + /// + /// Value to find + /// true if exists in string or is the + /// empty string, else false + public bool Contains(string value) { + return String.Contains(value); + } + + /// + /// Checks whether matches the end of this string + /// + /// Value + /// + public bool EndsWith(string value) { + return String.EndsWith(value); + } + + /// + /// Checks whether matches the end of this string + /// + /// Value + /// true to ignore case + /// Culture info + /// + public bool EndsWith(string value, bool ignoreCase, CultureInfo culture) { + return String.EndsWith(value, ignoreCase, culture); + } + + /// + /// Checks whether matches the end of this string + /// + /// Value + /// Comparison type + /// + public bool EndsWith(string value, StringComparison comparisonType) { + return String.EndsWith(value, comparisonType); + } + + /// + /// Checks whether matches the beginning of this string + /// + /// Value + /// + public bool StartsWith(string value) { + return String.StartsWith(value); + } + + /// + /// Checks whether matches the beginning of this string + /// + /// Value + /// true to ignore case + /// Culture info + /// + public bool StartsWith(string value, bool ignoreCase, CultureInfo culture) { + return String.StartsWith(value, ignoreCase, culture); + } + + /// + /// Checks whether matches the beginning of this string + /// + /// Value + /// Comparison type + /// + public bool StartsWith(string value, StringComparison comparisonType) { + return String.StartsWith(value, comparisonType); + } + + /// + /// Compares this instance with + /// + /// Other string + /// < 0 if a < b, 0 if a == b, > 0 if a > b + public int CompareTo(string strB) { + return String.CompareTo(strB); + } + + /// + /// Returns the index of the first character in this string + /// + /// Character + /// The index of or -1 if not found + public int IndexOf(char value) { + return String.IndexOf(value); + } + + /// + /// Returns the index of the first character in this string + /// starting from index + /// + /// Character + /// Start index + /// The index of or -1 if not found + public int IndexOf(char value, int startIndex) { + return String.IndexOf(value, startIndex); + } + + /// + /// Returns the index of the first character in this string + /// starting from index for max + /// characters. + /// + /// Character + /// Start index + /// Max number of chars to scan + /// The index of or -1 if not found + public int IndexOf(char value, int startIndex, int count) { + return String.IndexOf(value, startIndex, count); + } + + /// + /// Returns the index of the first sub string in this string + /// + /// String + /// The index of or -1 if not found + public int IndexOf(string value) { + return String.IndexOf(value); + } + + /// + /// Returns the index of the first sub string in this string + /// starting from index + /// + /// String + /// Start index + /// The index of or -1 if not found + public int IndexOf(string value, int startIndex) { + return String.IndexOf(value, startIndex); + } + + /// + /// Returns the index of the first sub string in this string + /// starting from index for max + /// characters. + /// + /// String + /// Start index + /// Max number of chars to scan + /// The index of or -1 if not found + public int IndexOf(string value, int startIndex, int count) { + return String.IndexOf(value, startIndex, count); + } + + /// + /// Returns the index of the first sub string in this string + /// starting from index for max + /// characters. + /// + /// String + /// Start index + /// Max number of chars to scan + /// Comparison type + /// The index of or -1 if not found + public int IndexOf(string value, int startIndex, int count, StringComparison comparisonType) { + return String.IndexOf(value, startIndex, count, comparisonType); + } + + /// + /// Returns the index of the first sub string in this string + /// starting from index + /// + /// String + /// Start index + /// Comparison type + /// The index of or -1 if not found + public int IndexOf(string value, int startIndex, StringComparison comparisonType) { + return String.IndexOf(value, startIndex, comparisonType); + } + + /// + /// Returns the index of the first sub string in this string + /// + /// String + /// Comparison type + /// The index of or -1 if not found + public int IndexOf(string value, StringComparison comparisonType) { + return String.IndexOf(value, comparisonType); + } + + /// + /// Returns the index of the last character in this string + /// + /// Character + /// The index of or -1 if not found + public int LastIndexOf(char value) { + return String.LastIndexOf(value); + } + + /// + /// Returns the index of the last character in this string + /// starting from index + /// + /// Character + /// Start index + /// The index of or -1 if not found + public int LastIndexOf(char value, int startIndex) { + return String.LastIndexOf(value, startIndex); + } + + /// + /// Returns the index of the last character in this string + /// starting from index for max + /// characters. + /// + /// Character + /// Start index + /// Max number of chars to scan + /// The index of or -1 if not found + public int LastIndexOf(char value, int startIndex, int count) { + return String.LastIndexOf(value, startIndex, count); + } + + /// + /// Returns the index of the last sub string in this string + /// + /// String + /// The index of or -1 if not found + public int LastIndexOf(string value) { + return String.LastIndexOf(value); + } + + /// + /// Returns the index of the last sub string in this string + /// starting from index + /// + /// String + /// Start index + /// The index of or -1 if not found + public int LastIndexOf(string value, int startIndex) { + return String.LastIndexOf(value, startIndex); + } + + /// + /// Returns the index of the last sub string in this string + /// starting from index for max + /// characters. + /// + /// String + /// Start index + /// Max number of chars to scan + /// The index of or -1 if not found + public int LastIndexOf(string value, int startIndex, int count) { + return String.LastIndexOf(value, startIndex, count); + } + + /// + /// Returns the index of the last sub string in this string + /// starting from index for max + /// characters. + /// + /// String + /// Start index + /// Max number of chars to scan + /// Comparison type + /// The index of or -1 if not found + public int LastIndexOf(string value, int startIndex, int count, StringComparison comparisonType) { + return String.LastIndexOf(value, startIndex, count, comparisonType); + } + + /// + /// Returns the index of the last sub string in this string + /// starting from index + /// + /// String + /// Start index + /// Comparison type + /// The index of or -1 if not found + public int LastIndexOf(string value, int startIndex, StringComparison comparisonType) { + return String.LastIndexOf(value, startIndex, comparisonType); + } + + /// + /// Returns the index of the last sub string in this string + /// + /// String + /// Comparison type + /// The index of or -1 if not found + public int LastIndexOf(string value, StringComparison comparisonType) { + return String.LastIndexOf(value, comparisonType); + } + + /// + /// Inserts string at a index + /// + /// Start index + /// Value to insert + /// A new instance with the inserted at position + /// + public UTF8String Insert(int startIndex, string value) { + return new UTF8String(String.Insert(startIndex, value)); + } + + /// + /// Removes all characters starting from position + /// + /// Start index + /// A new instance + public UTF8String Remove(int startIndex) { + return new UTF8String(String.Remove(startIndex)); + } + + /// + /// Removes characters starting from position + /// + /// + /// Start index + /// Number of characters to remove + /// A new instance + public UTF8String Remove(int startIndex, int count) { + return new UTF8String(String.Remove(startIndex, count)); + } + + /// + /// Replaces all characters with + /// + /// Character to find + /// Character to replace all + /// A new instance + public UTF8String Replace(char oldChar, char newChar) { + return new UTF8String(String.Replace(oldChar, newChar)); + } + + /// + /// Replaces all sub strings with + /// + /// Sub string to find + /// Sub string to replace all + /// A new instance + public UTF8String Replace(string oldValue, string newValue) { + return new UTF8String(String.Replace(oldValue, newValue)); + } + + /// + /// Returns a sub string of this string starting at offset + /// + /// Start index + /// A new instance + public UTF8String Substring(int startIndex) { + return new UTF8String(String.Substring(startIndex)); + } + + /// + /// Returns a sub string of this string starting at offset . + /// Length of sub string is . + /// + /// Start index + /// Length of sub string + /// A new instance + public UTF8String Substring(int startIndex, int length) { + return new UTF8String(String.Substring(startIndex, length)); + } + + /// + /// Returns the lower case version of this string + /// + /// A new instance + public UTF8String ToLower() { + return new UTF8String(String.ToLower()); + } + + /// + /// Returns the lower case version of this string + /// + /// Culture info + /// A new instance + public UTF8String ToLower(CultureInfo culture) { + return new UTF8String(String.ToLower(culture)); + } + + /// + /// Returns the lower case version of this string using the invariant culture + /// + /// A new instance + public UTF8String ToLowerInvariant() { + return new UTF8String(String.ToLowerInvariant()); + } + + /// + /// Returns the upper case version of this string + /// + /// A new instance + public UTF8String ToUpper() { + return new UTF8String(String.ToUpper()); + } + + /// + /// Returns the upper case version of this string + /// + /// Culture info + /// A new instance + public UTF8String ToUpper(CultureInfo culture) { + return new UTF8String(String.ToUpper(culture)); + } + + /// + /// Returns the upper case version of this string using the invariant culture + /// + /// A new instance + public UTF8String ToUpperInvariant() { + return new UTF8String(String.ToUpperInvariant()); + } + + /// + /// Removes all leading and trailing whitespace characters + /// + /// A new instance + public UTF8String Trim() { + return new UTF8String(String.Trim()); + } + + /// + public override int GetHashCode() { + return UTF8String.GetHashCode(this); + } + + /// + public override string ToString() { + return String; + } + } +} diff --git a/dnlib/DotNet/Utils.cs b/dnlib/DotNet/Utils.cs new file mode 100644 index 0000000..dd0de3d --- /dev/null +++ b/dnlib/DotNet/Utils.cs @@ -0,0 +1,405 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace dnlib.DotNet { + /// + /// Compares byte arrays + /// + public sealed class ByteArrayEqualityComparer : IEqualityComparer { + /// + /// Default instance + /// + public static readonly ByteArrayEqualityComparer Instance = new ByteArrayEqualityComparer(); + + /// + public bool Equals(byte[] x, byte[] y) { + return Utils.Equals(x, y); + } + + /// + public int GetHashCode(byte[] obj) { + return Utils.GetHashCode(obj); + } + } + + static class Utils { + /// + /// Returns an assembly name string + /// + /// Simple assembly name + /// Version or null + /// Culture or null + /// Public key / public key token or null + /// Assembly attributes + /// An assembly name string + internal static string GetAssemblyNameString(UTF8String name, Version version, UTF8String culture, PublicKeyBase publicKey, AssemblyAttributes attributes) { + var sb = new StringBuilder(); + + foreach (var c in UTF8String.ToSystemStringOrEmpty(name)) { + if (c == ',' || c == '=') + sb.Append('\\'); + sb.Append(c); + } + + if (version != null) { + sb.Append(", Version="); + sb.Append(CreateVersionWithNoUndefinedValues(version).ToString()); + } + + if ((object)culture != null) { + sb.Append(", Culture="); + sb.Append(UTF8String.IsNullOrEmpty(culture) ? "neutral" : culture.String); + } + + sb.Append(", "); + sb.Append(publicKey == null || publicKey is PublicKeyToken ? "PublicKeyToken=" : "PublicKey="); + sb.Append(publicKey == null ? "null" : publicKey.ToString()); + + if ((attributes & AssemblyAttributes.Retargetable) != 0) + sb.Append(", Retargetable=Yes"); + + if ((attributes & AssemblyAttributes.ContentType_Mask) == AssemblyAttributes.ContentType_WindowsRuntime) + sb.Append(", ContentType=WindowsRuntime"); + + return sb.ToString(); + } + + /// + /// Convert a byte[] to a + /// + /// All bytes + /// true if output should be in upper case hex + /// as a hex string + internal static string ToHex(byte[] bytes, bool upper) { + if (bytes == null) + return ""; + var chars = new char[bytes.Length * 2]; + for (int i = 0, j = 0; i < bytes.Length; i++) { + byte b = bytes[i]; + chars[j++] = ToHexChar(b >> 4, upper); + chars[j++] = ToHexChar(b & 0x0F, upper); + } + return new string(chars); + } + + static char ToHexChar(int val, bool upper) { + if (0 <= val && val <= 9) + return (char)(val + (int)'0'); + return (char)(val - 10 + (upper ? (int)'A' : (int)'a')); + } + + /// + /// Converts a hex string to a byte[] + /// + /// A string with an even number of hex characters + /// converted to a byte[] or null + /// if is invalid + internal static byte[] ParseBytes(string hexString) { + try { + if (hexString.Length % 2 != 0) + return null; + var bytes = new byte[hexString.Length / 2]; + for (int i = 0; i < hexString.Length; i += 2) { + int upper = TryParseHexChar(hexString[i]); + int lower = TryParseHexChar(hexString[i + 1]); + if (upper < 0 || lower < 0) + return null; + bytes[i / 2] = (byte)((upper << 4) | lower); + } + return bytes; + } + catch { + return null; + } + } + + /// + /// Converts a character to a hex digit + /// + /// Hex character + /// 0x00-0x0F if successful, -1 if is not + /// a valid hex digit + static int TryParseHexChar(char c) { + if ('0' <= c && c <= '9') + return (ushort)c - (ushort)'0'; + if ('a' <= c && c <= 'f') + return 10 + (ushort)c - (ushort)'a'; + if ('A' <= c && c <= 'F') + return 10 + (ushort)c - (ushort)'A'; + return -1; + } + + /// + /// Compares two byte arrays + /// + /// Byte array #1 + /// Byte array #2 + /// < 0 if a < b, 0 if a == b, > 0 if a > b + internal static int CompareTo(byte[] a, byte[] b) { + if (a == b) + return 0; + if (a == null) + return -1; + if (b == null) + return 1; + int count = Math.Min(a.Length, b.Length); + for (int i = 0; i < count; i++) { + var ai = a[i]; + var bi = b[i]; + if (ai < bi) + return -1; + if (ai > bi) + return 1; + } + return a.Length.CompareTo(b.Length); + } + + /// + /// Checks whether two byte arrays are equal + /// + /// First + /// Second + /// true if same, false otherwise + internal static bool Equals(byte[] a, byte[] b) { + return CompareTo(a, b) == 0; + } + + /// + /// Gets the hash code of a byte array + /// + /// Byte array + /// The hash code + internal static int GetHashCode(byte[] a) { + if (a == null || a.Length == 0) + return 0; + int count = Math.Min(a.Length / 2, 20); + if (count == 0) + count = 1; + uint hash = 0; + for (int i = 0, j = a.Length - 1; i < count; i++, j--) { + hash ^= a[i] | ((uint)a[j] << 8); + hash = (hash << 13) | (hash >> 19); + } + return (int)hash; + } + + /// + /// Compares two versions + /// + /// This differs from if the build + /// and/or revision numbers haven't been initialized or if one of the args is null. + /// + /// Version #1 or null to be treated as v0.0.0.0 + /// Version #2 or null to be treated as v0.0.0.0 + /// < 0 if a < b, 0 if a == b, > 0 if a > b + internal static int CompareTo(Version a, Version b) { + if (a == null) + a = new Version(); + if (b == null) + b = new Version(); + if (a.Major != b.Major) + return a.Major.CompareTo(b.Major); + if (a.Minor != b.Minor) + return a.Minor.CompareTo(b.Minor); + if (GetDefaultVersionValue(a.Build) != GetDefaultVersionValue(b.Build)) + return GetDefaultVersionValue(a.Build).CompareTo(GetDefaultVersionValue(b.Build)); + return GetDefaultVersionValue(a.Revision).CompareTo(GetDefaultVersionValue(b.Revision)); + } + + /// + /// Checks whether two versions are the same + /// + /// This differs from if the build + /// and/or revision numbers haven't been initialized or if one of the args is null. + /// + /// Version #1 or null to be treated as v0.0.0.0 + /// Version #2 or null to be treated as v0.0.0.0 + /// true if same, false otherwise + internal static bool Equals(Version a, Version b) { + return CompareTo(a, b) == 0; + } + + /// + /// Creates a new instance with no undefined version values (eg. + /// the build and revision values won't be -1). + /// + /// A instance + /// A new instance + internal static Version CreateVersionWithNoUndefinedValues(Version a) { + if (a == null) + return new Version(0, 0, 0, 0); + return new Version(a.Major, a.Minor, GetDefaultVersionValue(a.Build), GetDefaultVersionValue(a.Revision)); + } + + static int GetDefaultVersionValue(int val) { + return val == -1 ? 0 : val; + } + + /// + /// Parses a version string + /// + /// Version string + /// A new or null if + /// is an invalid version + internal static Version ParseVersion(string versionString) { + try { + return Utils.CreateVersionWithNoUndefinedValues(new Version(versionString)); + } + catch { + return null; + } + } + + /// + /// Compares two locales (cultures) + /// + /// First + /// Second + /// < 0 if a < b, 0 if a == b, > 0 if a > b + internal static int LocaleCompareTo(UTF8String a, UTF8String b) { + return GetCanonicalLocale(a).CompareTo(GetCanonicalLocale(b)); + } + + /// + /// Compares two locales (cultures) + /// + /// First + /// Second + /// true if same, false otherwise + internal static bool LocaleEquals(UTF8String a, UTF8String b) { + return LocaleCompareTo(a, b) == 0; + } + + /// + /// Compares two locales (cultures) + /// + /// First + /// Second + /// < 0 if a < b, 0 if a == b, > 0 if a > b + internal static int LocaleCompareTo(UTF8String a, string b) { + return GetCanonicalLocale(a).CompareTo(GetCanonicalLocale(b)); + } + + /// + /// Compares two locales (cultures) + /// + /// First + /// Second + /// true if same, false otherwise + internal static bool LocaleEquals(UTF8String a, string b) { + return LocaleCompareTo(a, b) == 0; + } + + /// + /// Gets the hash code of a locale + /// + /// Value + /// The hash code + internal static int GetHashCodeLocale(UTF8String a) { + return GetCanonicalLocale(a).GetHashCode(); + } + + static string GetCanonicalLocale(UTF8String locale) { + return GetCanonicalLocale(UTF8String.ToSystemStringOrEmpty(locale)); + } + + static string GetCanonicalLocale(string locale) { + var s = locale.ToUpperInvariant(); + if (s == "NEUTRAL") + s = string.Empty; + return s; + } + + /// + /// Align up + /// + /// Value + /// Alignment + public static uint AlignUp(uint v, uint alignment) { + return (v + alignment - 1) & ~(alignment - 1); + } + + /// + /// Align up + /// + /// Value + /// Alignment + public static int AlignUp(int v, uint alignment) { + return (int)AlignUp((uint)v, alignment); + } + + /// + /// Gets length of compressed integer + /// + /// Integer + /// Size of compressed integer in bytes (1, 2 or 4 bytes) + /// can't be compressed (too big) + public static int GetCompressedUInt32Length(uint value) { + if (value <= 0x7F) + return 1; + if (value <= 0x3FFF) + return 2; + if (value <= 0x1FFFFFFF) + return 4; + throw new ArgumentOutOfRangeException("UInt32 value can't be compressed"); + } + + /// + /// Writes a compressed + /// + /// Writer + /// Value + /// can't be compressed (too big) + public static void WriteCompressedUInt32(this BinaryWriter writer, uint value) { + if (value <= 0x7F) + writer.Write((byte)value); + else if (value <= 0x3FFF) { + writer.Write((byte)((value >> 8) | 0x80)); + writer.Write((byte)value); + } + else if (value <= 0x1FFFFFFF) { + writer.Write((byte)((value >> 24) | 0xC0)); + writer.Write((byte)(value >> 16)); + writer.Write((byte)(value >> 8)); + writer.Write((byte)value); + } + else + throw new ArgumentOutOfRangeException("UInt32 value can't be compressed"); + } + + /// + /// Writes a compressed + /// + /// Writer + /// Value + /// can't be compressed (too big/small) + public static void WriteCompressedInt32(this BinaryWriter writer, int value) { + // This is almost identical to compressing a UInt32, except that we first + // recode value so the sign bit is in bit 0. Then we compress it the same + // way a UInt32 is compressed. + uint sign = (uint)value >> 31; + if (-0x40 <= value && value <= 0x3F) { + uint v = (uint)((value & 0x3F) << 1) | sign; + writer.Write((byte)v); + } + else if (-0x2000 <= value && value <= 0x1FFF) { + uint v = ((uint)(value & 0x1FFF) << 1) | sign; + writer.Write((byte)((v >> 8) | 0x80)); + writer.Write((byte)v); + } + else if (-0x10000000 <= value && value <= 0x0FFFFFFF) { + uint v = ((uint)(value & 0x0FFFFFFF) << 1) | sign; + writer.Write((byte)((v >> 24) | 0xC0)); + writer.Write((byte)(v >> 16)); + writer.Write((byte)(v >> 8)); + writer.Write((byte)v); + } + else + throw new ArgumentOutOfRangeException("Int32 value can't be compressed"); + } + } +} diff --git a/dnlib/DotNet/VTableFixups.cs b/dnlib/DotNet/VTableFixups.cs new file mode 100644 index 0000000..024012b --- /dev/null +++ b/dnlib/DotNet/VTableFixups.cs @@ -0,0 +1,232 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.PE; +using dnlib.IO; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.DotNet { + /// + /// All native vtables + /// + [DebuggerDisplay("RVA = {RVA}, Count = {VTables.Count}")] + public sealed class VTableFixups : IEnumerable { + RVA rva; + ThreadSafe.IList vtables; + + /// + /// Gets/sets the RVA of the vtable fixups + /// + public RVA RVA { + get { return rva; } + set { rva = value; } + } + + /// + /// Gets all s + /// + public ThreadSafe.IList VTables { + get { return vtables; } + } + + /// + /// Default constructor + /// + public VTableFixups() { + this.vtables = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Module + public VTableFixups(ModuleDefMD module) { + Initialize(module); + } + + void Initialize(ModuleDefMD module) { + var info = module.MetaData.ImageCor20Header.VTableFixups; + if (info.VirtualAddress == 0 || info.Size == 0) { + this.vtables = ThreadSafeListCreator.Create(); + return; + } + this.rva = info.VirtualAddress; + this.vtables = ThreadSafeListCreator.Create((int)info.Size / 8); + + var peImage = module.MetaData.PEImage; + using (var reader = peImage.CreateFullStream()) { + reader.Position = (long)peImage.ToFileOffset(info.VirtualAddress); + long endPos = reader.Position + info.Size; + while (reader.Position + 8 <= endPos && reader.CanRead(8)) { + RVA tableRva = (RVA)reader.ReadUInt32(); + int numSlots = reader.ReadUInt16(); + var flags = (VTableFlags)reader.ReadUInt16(); + var vtable = new VTable(tableRva, flags, numSlots); + vtables.Add(vtable); + + var pos = reader.Position; + reader.Position = (long)peImage.ToFileOffset(tableRva); + int slotSize = vtable.Is64Bit ? 8 : 4; + while (numSlots-- > 0 && reader.CanRead(slotSize)) { + vtable.Methods.Add(module.ResolveToken(reader.ReadUInt32()) as IMethod); + if (slotSize == 8) + reader.ReadUInt32(); + } + reader.Position = pos; + } + } + } + + /// + public IEnumerator GetEnumerator() { + return vtables.GetEnumerator(); + } + + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + } + + /// + /// See COR_VTABLE_XXX in CorHdr.h + /// + [Flags] + public enum VTableFlags : ushort { + /// + /// 32-bit vtable slots + /// + _32Bit = 0x01, + + /// + /// 64-bit vtable slots + /// + _64Bit = 0x02, + + /// + /// Transition from unmanaged code + /// + FromUnmanaged = 0x04, + + /// + /// Also retain app domain + /// + FromUnmanagedRetainAppDomain = 0x08, + + /// + /// Call most derived method + /// + CallMostDerived = 0x10, + } + + /// + /// One VTable accessed by native code + /// + public sealed class VTable : IEnumerable { + RVA rva; + VTableFlags flags; + readonly ThreadSafe.IList methods; + + /// + /// Gets/sets the of this vtable + /// + public RVA RVA { + get { return rva; } + set { rva = value; } + } + + /// + /// Gets/sets the flags + /// + public VTableFlags Flags { + get { return flags; } + set { flags = value; } + } + + /// + /// true if each vtable slot is 32 bits in size + /// + public bool Is32Bit { + get { return (flags & VTableFlags._32Bit) != 0; } + } + + /// + /// true if each vtable slot is 64 bits in size + /// + public bool Is64Bit { + get { return (flags & VTableFlags._64Bit) != 0; } + } + + /// + /// Gets the vtable methods + /// + public ThreadSafe.IList Methods { + get { return methods; } + } + + /// + /// Default constructor + /// + public VTable() { + this.methods = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// Flags + public VTable(VTableFlags flags) { + this.flags = flags; + this.methods = ThreadSafeListCreator.Create(); + } + + /// + /// Constructor + /// + /// RVA of this vtable + /// Flgas + /// Number of methods in vtable + public VTable(RVA rva, VTableFlags flags, int numSlots) { + this.rva = rva; + this.flags = flags; + this.methods = ThreadSafeListCreator.Create(numSlots); + } + + /// + /// Constructor + /// + /// RVA of this vtable + /// Flgas + /// Vtable methods + public VTable(RVA rva, VTableFlags flags, IEnumerable methods) { + this.rva = rva; + this.flags = flags; + this.methods = ThreadSafeListCreator.Create(methods); + } + + /// + public IEnumerator GetEnumerator() { + return methods.GetEnumerator(); + } + + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + + /// + public override string ToString() { + if (methods.Count == 0) + return string.Format("{0} {1:X8}", methods.Count, (uint)rva); + return string.Format("{0} {1:X8} {2}", methods.Count, (uint)rva, methods.Get(0, null)); + } + } +} diff --git a/dnlib/DotNet/VariantType.cs b/dnlib/DotNet/VariantType.cs new file mode 100644 index 0000000..9b0f6b9 --- /dev/null +++ b/dnlib/DotNet/VariantType.cs @@ -0,0 +1,117 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// Variant type (VT_XXX in the Windows SDK) + /// + public enum VariantType : uint { + /// + Empty = 0, + /// + None = 0, + /// + Null = 1, + /// + I2 = 2, + /// + I4 = 3, + /// + R4 = 4, + /// + R8 = 5, + /// + CY = 6, + /// + Date = 7, + /// + BStr = 8, + /// + Dispatch = 9, + /// + Error = 10, + /// + Bool = 11, + /// + Variant = 12, + /// + Unknown = 13, + /// + Decimal = 14, + /// + I1 = 16, + /// + UI1 = 17, + /// + UI2 = 18, + /// + UI4 = 19, + /// + I8 = 20, + /// + UI8 = 21, + /// + Int = 22, + /// + UInt = 23, + /// + Void = 24, + /// + HResult = 25, + /// + Ptr = 26, + /// + SafeArray = 27, + /// + CArray = 28, + /// + UserDefined = 29, + /// + LPStr = 30, + /// + LPWStr = 31, + /// + Record = 36, + /// + IntPtr = 37, + /// + UIntPtr = 38, + /// + FileTime = 64, + /// + Blob = 65, + /// + Stream = 66, + /// + Storage = 67, + /// + StreamedObject = 68, + /// + StoredObject = 69, + /// + BlobObject = 70, + /// + CF = 71, + /// + CLSID = 72, + /// + VersionedStream = 73, + /// + BStrBlob = 0x0FFF, + /// + Vector = 0x1000, + /// + Array = 0x2000, + /// + ByRef = 0x4000, + /// + Reserved = 0x8000, + /// + Illegal = 0xFFFF, + /// + IllegalMasked = 0x0FFF, + /// + TypeMask = 0x0FFF, + /// This wasn't present in the blob + NotInitialized = 0xFFFFFFFF, + } +} diff --git a/dnlib/DotNet/WinMDHelpers.cs b/dnlib/DotNet/WinMDHelpers.cs new file mode 100644 index 0000000..b5483be --- /dev/null +++ b/dnlib/DotNet/WinMDHelpers.cs @@ -0,0 +1,472 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet { + enum ClrAssembly { + Mscorlib, + SystemNumericsVectors, + SystemObjectModel, + SystemRuntime, + SystemRuntimeInteropServicesWindowsRuntime, + SystemRuntimeWindowsRuntime, + SystemRuntimeWindowsRuntimeUIXaml, + } + + static class WinMDHelpers { + struct ClassName : IEquatable { + public readonly UTF8String Namespace; + public readonly UTF8String Name; + // Not used when comparing for equality etc + public readonly bool IsValueType; + + public ClassName(UTF8String ns, UTF8String name, bool isValueType = false) { + this.Namespace = ns; + this.Name = name; + this.IsValueType = isValueType; + } + + public ClassName(string ns, string name, bool isValueType = false) { + this.Namespace = ns; + this.Name = name; + this.IsValueType = isValueType; + } + + public static bool operator ==(ClassName a, ClassName b) { + return a.Equals(b); + } + + public static bool operator !=(ClassName a, ClassName b) { + return !a.Equals(b); + } + + public bool Equals(ClassName other) { + // Don't check IsValueType + return UTF8String.Equals(Namespace, other.Namespace) && + UTF8String.Equals(Name, other.Name); + } + + public override bool Equals(object obj) { + if (!(obj is ClassName)) + return false; + return Equals((ClassName)obj); + } + + public override int GetHashCode() { + // Don't use IsValueType + return UTF8String.GetHashCode(Namespace) ^ UTF8String.GetHashCode(Name); + } + + public override string ToString() { + return string.Format("{0}.{1}", Namespace, Name); + } + } + + sealed class ProjectedClass { + public readonly ClassName WinMDClass; + public readonly ClassName ClrClass; + public readonly ClrAssembly ClrAssembly; + public readonly ClrAssembly ContractAssembly; + + public ProjectedClass(string mdns, string mdname, string clrns, string clrname, ClrAssembly clrAsm, ClrAssembly contractAsm, bool winMDValueType, bool clrValueType) { + this.WinMDClass = new ClassName(mdns, mdname, winMDValueType); + this.ClrClass = new ClassName(clrns, clrname, clrValueType); + this.ClrAssembly = clrAsm; + this.ContractAssembly = contractAsm; + } + + public override string ToString() { + return string.Format("{0} <-> {1}, {2}", WinMDClass, ClrClass, CreateAssembly(null, ContractAssembly)); + } + } + + // See https://github.com/dotnet/coreclr/blob/master/src/inc/winrtprojectedtypes.h + // To generate this code replace the contents of src/inc/winrtprojectedtypes.h with: + // DEFINE_PROJECTED_ENUM + // => DEFINE_PROJECTED_STRUCT + // ^DEFINE_PROJECTED\w*_STRUCT\s*\(("[^"]+"),\s*("[^"]+"),\s*("[^"]+"),\s*("[^"]+"),\s*(\w+),\s*(\w+).*$ + // => \t\t\tnew ProjectedClass(\1, \2, \3, \4, ClrAssembly.\5, ClrAssembly.\6, true, true), + // ^DEFINE_PROJECTED\w+\s*\(("[^"]+"),\s*("[^"]+"),\s*("[^"]+"),\s*("[^"]+"),\s*(\w+),\s*(\w+).*$ + // => \t\t\tnew ProjectedClass(\1, \2, \3, \4, ClrAssembly.\5, ClrAssembly.\6, false, false), + // Sometimes the types aren't both structs or both classes. Known cases: + // IReference`1 (class) vs Nullable`1 (struct) + // IKeyValuePair`2 (class) vs KeyValuePair`2 (struct) + // TypeName (struct) vs Type (class) + // HResult (struct) vs Exception (class) + // See md/winmd/adapter.cpp WinMDAdapter::RewriteTypeInSignature() or check the types + // in a decompiler. + static readonly ProjectedClass[] ProjectedClasses = new ProjectedClass[] { + new ProjectedClass("Windows.Foundation.Metadata", "AttributeUsageAttribute", "System", "AttributeUsageAttribute", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation.Metadata", "AttributeTargets", "System", "AttributeTargets", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, true, true), + + new ProjectedClass("Windows.UI", "Color", "Windows.UI", "Color", ClrAssembly.SystemRuntimeWindowsRuntime, ClrAssembly.SystemRuntimeWindowsRuntime, true, true), + + new ProjectedClass("Windows.Foundation", "DateTime", "System", "DateTimeOffset", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, true, true), + new ProjectedClass("Windows.Foundation", "EventHandler`1", "System", "EventHandler`1", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation", "EventRegistrationToken", "System.Runtime.InteropServices.WindowsRuntime", "EventRegistrationToken", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntimeInteropServicesWindowsRuntime, true, true), + new ProjectedClass("Windows.Foundation", "HResult", "System", "Exception", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, true, false), + new ProjectedClass("Windows.Foundation", "IReference`1", "System", "Nullable`1", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, true), + new ProjectedClass("Windows.Foundation", "Point", "Windows.Foundation", "Point", ClrAssembly.SystemRuntimeWindowsRuntime, ClrAssembly.SystemRuntimeWindowsRuntime, true, true), + new ProjectedClass("Windows.Foundation", "Rect", "Windows.Foundation", "Rect", ClrAssembly.SystemRuntimeWindowsRuntime, ClrAssembly.SystemRuntimeWindowsRuntime, true, true), + new ProjectedClass("Windows.Foundation", "Size", "Windows.Foundation", "Size", ClrAssembly.SystemRuntimeWindowsRuntime, ClrAssembly.SystemRuntimeWindowsRuntime, true, true), + new ProjectedClass("Windows.Foundation", "TimeSpan", "System", "TimeSpan", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, true, true), + new ProjectedClass("Windows.Foundation", "Uri", "System", "Uri", ClrAssembly.SystemRuntime, ClrAssembly.SystemRuntime, false, false), + + new ProjectedClass("Windows.Foundation", "IClosable", "System", "IDisposable", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + + new ProjectedClass("Windows.Foundation.Collections", "IIterable`1", "System.Collections.Generic", "IEnumerable`1", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation.Collections", "IVector`1", "System.Collections.Generic", "IList`1", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation.Collections", "IVectorView`1", "System.Collections.Generic", "IReadOnlyList`1", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation.Collections", "IMap`2", "System.Collections.Generic", "IDictionary`2", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation.Collections", "IMapView`2", "System.Collections.Generic", "IReadOnlyDictionary`2", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.Foundation.Collections", "IKeyValuePair`2", "System.Collections.Generic", "KeyValuePair`2", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, true), + + new ProjectedClass("Windows.UI.Xaml.Input", "ICommand", "System.Windows.Input", "ICommand", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + + new ProjectedClass("Windows.UI.Xaml.Interop", "IBindableIterable", "System.Collections", "IEnumerable", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + new ProjectedClass("Windows.UI.Xaml.Interop", "IBindableVector", "System.Collections", "IList", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, false, false), + + new ProjectedClass("Windows.UI.Xaml.Interop", "INotifyCollectionChanged", "System.Collections.Specialized", "INotifyCollectionChanged", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + new ProjectedClass("Windows.UI.Xaml.Interop", "NotifyCollectionChangedEventHandler", "System.Collections.Specialized", "NotifyCollectionChangedEventHandler", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + new ProjectedClass("Windows.UI.Xaml.Interop", "NotifyCollectionChangedEventArgs", "System.Collections.Specialized", "NotifyCollectionChangedEventArgs", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + new ProjectedClass("Windows.UI.Xaml.Interop", "NotifyCollectionChangedAction", "System.Collections.Specialized", "NotifyCollectionChangedAction", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, true, true), + + new ProjectedClass("Windows.UI.Xaml.Data", "INotifyPropertyChanged", "System.ComponentModel", "INotifyPropertyChanged", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + new ProjectedClass("Windows.UI.Xaml.Data", "PropertyChangedEventHandler", "System.ComponentModel", "PropertyChangedEventHandler", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + new ProjectedClass("Windows.UI.Xaml.Data", "PropertyChangedEventArgs", "System.ComponentModel", "PropertyChangedEventArgs", ClrAssembly.SystemObjectModel, ClrAssembly.SystemObjectModel, false, false), + + new ProjectedClass("Windows.UI.Xaml", "CornerRadius", "Windows.UI.Xaml", "CornerRadius", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml", "Duration", "Windows.UI.Xaml", "Duration", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml", "DurationType", "Windows.UI.Xaml", "DurationType", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml", "GridLength", "Windows.UI.Xaml", "GridLength", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml", "GridUnitType", "Windows.UI.Xaml", "GridUnitType", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml", "Thickness", "Windows.UI.Xaml", "Thickness", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + + new ProjectedClass("Windows.UI.Xaml.Interop", "TypeName", "System", "Type", ClrAssembly.Mscorlib, ClrAssembly.SystemRuntime, true, false), + + new ProjectedClass("Windows.UI.Xaml.Controls.Primitives", "GeneratorPosition", "Windows.UI.Xaml.Controls.Primitives", "GeneratorPosition", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + + new ProjectedClass("Windows.UI.Xaml.Media", "Matrix", "Windows.UI.Xaml.Media", "Matrix", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + + new ProjectedClass("Windows.UI.Xaml.Media.Animation", "KeyTime", "Windows.UI.Xaml.Media.Animation", "KeyTime", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml.Media.Animation", "RepeatBehavior", "Windows.UI.Xaml.Media.Animation", "RepeatBehavior", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + new ProjectedClass("Windows.UI.Xaml.Media.Animation", "RepeatBehaviorType", "Windows.UI.Xaml.Media.Animation", "RepeatBehaviorType", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + + new ProjectedClass("Windows.UI.Xaml.Media.Media3D", "Matrix3D", "Windows.UI.Xaml.Media.Media3D", "Matrix3D", ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml, true, true), + + new ProjectedClass("Windows.Foundation.Numerics", "Vector2", "System.Numerics", "Vector2", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + new ProjectedClass("Windows.Foundation.Numerics", "Vector3", "System.Numerics", "Vector3", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + new ProjectedClass("Windows.Foundation.Numerics", "Vector4", "System.Numerics", "Vector4", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + new ProjectedClass("Windows.Foundation.Numerics", "Matrix3x2", "System.Numerics", "Matrix3x2", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + new ProjectedClass("Windows.Foundation.Numerics", "Matrix4x4", "System.Numerics", "Matrix4x4", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + new ProjectedClass("Windows.Foundation.Numerics", "Plane", "System.Numerics", "Plane", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + new ProjectedClass("Windows.Foundation.Numerics", "Quaternion", "System.Numerics", "Quaternion", ClrAssembly.SystemNumericsVectors, ClrAssembly.SystemNumericsVectors, true, true), + }; + + static readonly Dictionary winMDToCLR = new Dictionary(); + + static WinMDHelpers() { + foreach (var projClass in ProjectedClasses) + winMDToCLR.Add(projClass.WinMDClass, projClass); + } + + static AssemblyRef ToCLR(ModuleDef module, ref UTF8String ns, ref UTF8String name) { + ProjectedClass pc; + if (!winMDToCLR.TryGetValue(new ClassName(ns, name), out pc)) + return null; + + ns = pc.ClrClass.Namespace; + name = pc.ClrClass.Name; + return CreateAssembly(module, pc.ContractAssembly); + } + + static AssemblyRef CreateAssembly(ModuleDef module, ClrAssembly clrAsm) { + var mscorlib = module == null ? null : module.CorLibTypes.AssemblyRef; + + var asm = new AssemblyRefUser(GetName(clrAsm), contractAsmVersion, new PublicKeyToken(GetPublicKeyToken(clrAsm)), UTF8String.Empty); + + if (mscorlib != null && mscorlib.Name == mscorlibName && mscorlib.Version != invalidWinMDVersion) + asm.Version = mscorlib.Version; + var mod = module as ModuleDefMD; + if (mod != null) { + Version ver = null; + foreach (var asmRef in mod.GetAssemblyRefs()) { + if (asmRef.IsContentTypeWindowsRuntime) + continue; + if (asmRef.Name != asm.Name) + continue; + if (asmRef.Culture != asm.Culture) + continue; + if (!PublicKeyBase.TokenEquals(asmRef.PublicKeyOrToken, asm.PublicKeyOrToken)) + continue; + if (asmRef.Version == invalidWinMDVersion) + continue; + + if (ver == null || asmRef.Version > ver) + ver = asmRef.Version; + } + if (ver != null) + asm.Version = ver; + } + + return asm; + } + static readonly Version contractAsmVersion = new Version(4, 0, 0, 0); + static readonly Version invalidWinMDVersion = new Version(255, 255, 255, 255); + static readonly UTF8String mscorlibName = new UTF8String("mscorlib"); + + static UTF8String GetName(ClrAssembly clrAsm) { + switch (clrAsm) { + case ClrAssembly.Mscorlib: return clrAsmName_Mscorlib; + case ClrAssembly.SystemNumericsVectors: return clrAsmName_SystemNumericsVectors; + case ClrAssembly.SystemObjectModel: return clrAsmName_SystemObjectModel; + case ClrAssembly.SystemRuntime: return clrAsmName_SystemRuntime; + case ClrAssembly.SystemRuntimeInteropServicesWindowsRuntime: return clrAsmName_SystemRuntimeInteropServicesWindowsRuntime; + case ClrAssembly.SystemRuntimeWindowsRuntime: return clrAsmName_SystemRuntimeWindowsRuntime; + case ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml: return clrAsmName_SystemRuntimeWindowsRuntimeUIXaml; + default: throw new InvalidOperationException(); + } + } + static readonly UTF8String clrAsmName_Mscorlib = new UTF8String("mscorlib"); + static readonly UTF8String clrAsmName_SystemNumericsVectors = new UTF8String("System.Numerics.Vectors"); + static readonly UTF8String clrAsmName_SystemObjectModel = new UTF8String("System.ObjectModel"); + static readonly UTF8String clrAsmName_SystemRuntime = new UTF8String("System.Runtime"); + static readonly UTF8String clrAsmName_SystemRuntimeInteropServicesWindowsRuntime = new UTF8String("System.Runtime.InteropServices.WindowsRuntime"); + static readonly UTF8String clrAsmName_SystemRuntimeWindowsRuntime = new UTF8String("System.Runtime.WindowsRuntime"); + static readonly UTF8String clrAsmName_SystemRuntimeWindowsRuntimeUIXaml = new UTF8String("System.Runtime.WindowsRuntime.UI.Xaml"); + + static byte[] GetPublicKeyToken(ClrAssembly clrAsm) { + switch (clrAsm) { + case ClrAssembly.Mscorlib: return neutralPublicKey; + case ClrAssembly.SystemNumericsVectors: return contractPublicKeyToken; + case ClrAssembly.SystemObjectModel: return contractPublicKeyToken; + case ClrAssembly.SystemRuntime: return contractPublicKeyToken; + case ClrAssembly.SystemRuntimeInteropServicesWindowsRuntime: return contractPublicKeyToken; + case ClrAssembly.SystemRuntimeWindowsRuntime: return neutralPublicKey; + case ClrAssembly.SystemRuntimeWindowsRuntimeUIXaml: return neutralPublicKey; + default: throw new InvalidOperationException(); + } + } + static readonly byte[] contractPublicKeyToken = new byte[] { 0xB0, 0x3F, 0x5F, 0x7F, 0x11, 0xD5, 0x0A, 0x3A }; + static readonly byte[] neutralPublicKey = new byte[] { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 }; + + /// + /// Converts WinMD type to a CLR type. Returns null + /// if it's not a CLR compatible WinMD type. + /// + /// Owner module or null + /// Type + /// + public static TypeRef ToCLR(ModuleDef module, TypeDef td) { + bool isClrValueType; + return ToCLR(module, td, out isClrValueType); + } + + /// + /// Converts WinMD type to a CLR type. Returns null + /// if it's not a CLR compatible WinMD type. + /// + /// Owner module or null + /// Type + /// true if the returned type is a value type + /// + public static TypeRef ToCLR(ModuleDef module, TypeDef td, out bool isClrValueType) { + isClrValueType = false; + if (td == null || !td.IsWindowsRuntime) + return null; + var asm = td.DefinitionAssembly; + if (asm == null || !asm.IsContentTypeWindowsRuntime) + return null; + + ProjectedClass pc; + if (!winMDToCLR.TryGetValue(new ClassName(td.Namespace, td.Name), out pc)) + return null; + + isClrValueType = pc.ClrClass.IsValueType; + return new TypeRefUser(module, pc.ClrClass.Namespace, pc.ClrClass.Name, CreateAssembly(module, pc.ContractAssembly)); + } + + /// + /// Converts WinMD type to a CLR type. Returns null + /// if it's not a CLR compatible WinMD type. + /// + /// Owner module or null + /// Type + /// + public static TypeRef ToCLR(ModuleDef module, TypeRef tr) { + bool isClrValueType; + return ToCLR(module, tr, out isClrValueType); + } + + /// + /// Converts WinMD type to a CLR type. Returns null + /// if it's not a CLR compatible WinMD type. + /// + /// Owner module or null + /// Type + /// true if the returned type is a value type + /// + public static TypeRef ToCLR(ModuleDef module, TypeRef tr, out bool isClrValueType) { + isClrValueType = false; + if (tr == null) + return null; + var defAsm = tr.DefinitionAssembly; + if (defAsm == null || !defAsm.IsContentTypeWindowsRuntime) + return null; + if (tr.DeclaringType != null) + return null; + + ProjectedClass pc; + if (!winMDToCLR.TryGetValue(new ClassName(tr.Namespace, tr.Name), out pc)) + return null; + + isClrValueType = pc.ClrClass.IsValueType; + return new TypeRefUser(module, pc.ClrClass.Namespace, pc.ClrClass.Name, CreateAssembly(module, pc.ContractAssembly)); + } + + /// + /// Converts WinMD type to a CLR type. Returns null + /// if it's not a CLR compatible WinMD type. + /// + /// Owner module or null + /// Type + /// + public static ExportedType ToCLR(ModuleDef module, ExportedType et) { + if (et == null) + return null; + var defAsm = et.DefinitionAssembly; + if (defAsm == null || !defAsm.IsContentTypeWindowsRuntime) + return null; + if (et.DeclaringType != null) + return null; + + ProjectedClass pc; + if (!winMDToCLR.TryGetValue(new ClassName(et.TypeNamespace, et.TypeName), out pc)) + return null; + + return new ExportedTypeUser(module, 0, pc.ClrClass.Namespace, pc.ClrClass.Name, et.Attributes, CreateAssembly(module, pc.ContractAssembly)); + } + + /// + /// Converts WinMD type to a CLR type. Returns null + /// if it's not a CLR compatible WinMD type. + /// + /// Owner module or null + /// Type + /// + public static TypeSig ToCLR(ModuleDef module, TypeSig ts) { + if (ts == null) + return null; + var et = ts.ElementType; + if (et != ElementType.Class && et != ElementType.ValueType) + return null; + + var tdr = ((ClassOrValueTypeSig)ts).TypeDefOrRef; + + TypeDef td; + TypeRef tr, newTr; + bool isClrValueType; + if ((td = tdr as TypeDef) != null) { + newTr = ToCLR(module, td, out isClrValueType); + if (newTr == null) + return null; + } + else if ((tr = tdr as TypeRef) != null) { + newTr = ToCLR(module, tr, out isClrValueType); + if (newTr == null) + return null; + } + else + return null; + + return isClrValueType ? + (TypeSig)new ValueTypeSig(newTr) : + new ClassSig(newTr); + } + + /// + /// Converts WinMD member reference to a CLR member reference. Returns + /// null if it's not a CLR compatible WinMD member reference. + /// + /// Owner module or null + /// Member reference + /// + public static MemberRef ToCLR(ModuleDef module, MemberRef mr) { + // See WinMDAdapter::CheckIfMethodImplImplementsARedirectedInterface + // in coreclr: md/winmd/adapter.cpp + if (mr == null) + return null; + if (mr.Name != CloseName) + return null; + + var msig = mr.MethodSig; + if (msig == null) + return null; + + var cl = mr.Class; + IMemberRefParent newCl; + TypeRef tr; + TypeSpec ts; + if ((tr = cl as TypeRef) != null) { + var newTr = ToCLR(module, tr); + if (newTr == null || !IsIDisposable(newTr)) + return null; + + newCl = newTr; + } + else if ((ts = cl as TypeSpec) != null) { + var gis = ts.TypeSig as GenericInstSig; + if (gis == null || !(gis.GenericType is ClassSig)) + return null; + tr = gis.GenericType.TypeRef; + if (tr == null) + return null; + + bool isClrValueType; + var newTr = ToCLR(module, tr, out isClrValueType); + if (newTr == null || !IsIDisposable(newTr)) + return null; + + newCl = new TypeSpecUser(new GenericInstSig(isClrValueType ? + (ClassOrValueTypeSig)new ValueTypeSig(newTr) : + new ClassSig(newTr), gis.GenericArguments)); + } + else + return null; + + return new MemberRefUser(mr.Module, DisposeName, msig, newCl); + } + static readonly UTF8String CloseName = new UTF8String("Close"); + static readonly UTF8String DisposeName = new UTF8String("Dispose"); + + static bool IsIDisposable(TypeRef tr) { + return tr.Name == IDisposableName && tr.Namespace == IDisposableNamespace; + } + static readonly UTF8String IDisposableNamespace = new UTF8String("System"); + static readonly UTF8String IDisposableName = new UTF8String("IDisposable"); + + /// + /// Converts WinMD method to a CLR member reference. Returns + /// null if it's not a CLR compatible WinMD method + /// + /// Owner module or null + /// Method + /// + public static MemberRef ToCLR(ModuleDef module, MethodDef md) { + if (md == null) + return null; + if (md.Name != CloseName) + return null; + var declType = md.DeclaringType; + if (declType == null) + return null; + + var tr = ToCLR(module, declType); + if (tr == null || !IsIDisposable(tr)) + return null; + + return new MemberRefUser(md.Module, DisposeName, md.MethodSig, tr); + } + } +} diff --git a/dnlib/DotNet/WinMDStatus.cs b/dnlib/DotNet/WinMDStatus.cs new file mode 100644 index 0000000..e285ce3 --- /dev/null +++ b/dnlib/DotNet/WinMDStatus.cs @@ -0,0 +1,23 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet { + /// + /// WinMD status + /// + public enum WinMDStatus { + /// + /// This is not a WinMD file + /// + None, + + /// + /// This is a pure WinMD file (not managed) + /// + Pure, + + /// + /// This is a managed WinMD file (created by eg. winmdexp.exe) + /// + Managed, + } +} diff --git a/dnlib/DotNet/Writer/BinaryReaderChunk.cs b/dnlib/DotNet/Writer/BinaryReaderChunk.cs new file mode 100644 index 0000000..5d06428 --- /dev/null +++ b/dnlib/DotNet/Writer/BinaryReaderChunk.cs @@ -0,0 +1,74 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// A chunk + /// + public class BinaryReaderChunk : IChunk { + FileOffset offset; + RVA rva; + readonly IBinaryReader data; + readonly uint virtualSize; + + /// + /// Gets the data + /// + public IBinaryReader Data { + get { return data; } + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Constructor + /// + /// The data + public BinaryReaderChunk(IBinaryReader data) + : this(data, (uint)data.Length) { + } + + /// + /// Constructor + /// + /// The data + /// Virtual size of + public BinaryReaderChunk(IBinaryReader data, uint virtualSize) { + this.data = data; + this.virtualSize = virtualSize; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return (uint)data.Length; + } + + /// + public uint GetVirtualSize() { + return virtualSize; + } + + /// + public void WriteTo(BinaryWriter writer) { + data.Position = 0; + data.WriteTo(writer); + } + } +} diff --git a/dnlib/DotNet/Writer/BlobHeap.cs b/dnlib/DotNet/Writer/BlobHeap.cs new file mode 100644 index 0000000..d86ceac --- /dev/null +++ b/dnlib/DotNet/Writer/BlobHeap.cs @@ -0,0 +1,160 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// #Blob heap + /// + public sealed class BlobHeap : HeapBase, IOffsetHeap { + readonly Dictionary cachedDict = new Dictionary(ByteArrayEqualityComparer.Instance); + readonly List cached = new List(); + uint nextOffset = 1; + byte[] originalData; + Dictionary userRawData; + + /// + public override string Name { + get { return "#Blob"; } + } + + /// + /// Populates blobs from an existing (eg. to preserve + /// blob offsets) + /// + /// The #Blob stream with the original content + public void Populate(BlobStream blobStream) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #Blob when it's read-only"); + if (originalData != null) + throw new InvalidOperationException("Can't call method twice"); + if (nextOffset != 1) + throw new InvalidOperationException("Add() has already been called"); + if (blobStream == null || blobStream.ImageStreamLength == 0) + return; + + using (var reader = blobStream.GetClonedImageStream()) { + originalData = reader.ReadAllBytes(); + nextOffset = (uint)originalData.Length; + Populate(reader); + } + } + + void Populate(IImageStream reader) { + reader.Position = 1; + while (reader.Position < reader.Length) { + uint offset = (uint)reader.Position; + uint len; + if (!reader.ReadCompressedUInt32(out len)) { + if (offset == reader.Position) + reader.Position++; + continue; + } + if (len == 0 || reader.Position + len > reader.Length) + continue; + + var data = reader.ReadBytes((int)len); + if (!cachedDict.ContainsKey(data)) + cachedDict[data] = offset; + } + } + + /// + /// Adds data to the #Blob heap + /// + /// The data + /// The offset of the data in the #Blob heap + public uint Add(byte[] data) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #Blob when it's read-only"); + if (data == null || data.Length == 0) + return 0; + + uint offset; + if (cachedDict.TryGetValue(data, out offset)) + return offset; + return AddToCache(data); + } + + /// + /// Adds data to the #Blob heap, but does not re-use an existing position + /// + /// The data + /// The offset of the data in the #Blob heap + public uint Create(byte[] data) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #Blob when it's read-only"); + return AddToCache(data ?? new byte[0]); + } + + uint AddToCache(byte[] data) { + uint offset; + cached.Add(data); + cachedDict[data] = offset = nextOffset; + nextOffset += (uint)GetRawDataSize(data); + return offset; + } + + /// + public override uint GetRawLength() { + return nextOffset; + } + + /// + protected override void WriteToImpl(BinaryWriter writer) { + if (originalData != null) + writer.Write(originalData); + else + writer.Write((byte)0); + + uint offset = originalData != null ? (uint)originalData.Length : 1; + foreach (var data in cached) { + int rawLen = GetRawDataSize(data); + byte[] rawData; + if (userRawData != null && userRawData.TryGetValue(offset, out rawData)) { + if (rawData.Length != rawLen) + throw new InvalidOperationException("Invalid length of raw data"); + writer.Write(rawData); + } + else { + writer.WriteCompressedUInt32((uint)data.Length); + writer.Write(data); + } + offset += (uint)rawLen; + } + } + + /// + public int GetRawDataSize(byte[] data) { + return Utils.GetCompressedUInt32Length((uint)data.Length) + data.Length; + } + + /// + public void SetRawData(uint offset, byte[] rawData) { + if (rawData == null) + throw new ArgumentNullException("rawData"); + if (userRawData == null) + userRawData = new Dictionary(); + userRawData[offset] = rawData; + } + + /// + public IEnumerable> GetAllRawData() { + var memStream = new MemoryStream(); + var writer = new BinaryWriter(memStream); + uint offset = originalData != null ? (uint)originalData.Length : 1; + foreach (var data in cached) { + memStream.Position = 0; + memStream.SetLength(0); + writer.WriteCompressedUInt32((uint)data.Length); + writer.Write(data); + yield return new KeyValuePair(offset, memStream.ToArray()); + offset += (uint)memStream.Length; + } + } + } +} diff --git a/dnlib/DotNet/Writer/ByteArrayChunk.cs b/dnlib/DotNet/Writer/ByteArrayChunk.cs new file mode 100644 index 0000000..75f1f9a --- /dev/null +++ b/dnlib/DotNet/Writer/ByteArrayChunk.cs @@ -0,0 +1,77 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Stores a byte array + /// + public sealed class ByteArrayChunk : IChunk { + readonly byte[] array; + FileOffset offset; + RVA rva; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the data + /// + public byte[] Data { + get { return array; } + } + + /// + /// Constructor + /// + /// The data. It will be owned by this instance and can't be modified by + /// other code if this instance is inserted as a key in a dictionary (because + /// return value will be different if you modify the array). If + /// it's never inserted as a key in a dictionary, then the contents can be modified, + /// but shouldn't be resized after has been called. + public ByteArrayChunk(byte[] array) { + this.array = array ?? new byte[0]; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return (uint)array.Length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write(array); + } + + /// + public override int GetHashCode() { + return Utils.GetHashCode(array); + } + + /// + public override bool Equals(object obj) { + var other = obj as ByteArrayChunk; + return other != null && Utils.Equals(array, other.array); + } + } +} diff --git a/dnlib/DotNet/Writer/ChunkList.cs b/dnlib/DotNet/Writer/ChunkList.cs new file mode 100644 index 0000000..9b44b7f --- /dev/null +++ b/dnlib/DotNet/Writer/ChunkList.cs @@ -0,0 +1,50 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +namespace dnlib.DotNet.Writer { + /// + /// Contains a list of s + /// + public class ChunkList : ChunkListBase where T : class, IChunk { + /// + /// Default constructor + /// + public ChunkList() { + this.chunks = new List(); + } + + /// + /// Add a + /// + /// The chunk to add or null if none + /// Chunk alignment + public void Add(T chunk, uint alignment) { + if (setOffsetCalled) + throw new InvalidOperationException("SetOffset() has already been called"); + if (chunk != null) + chunks.Add(new Elem(chunk, alignment)); + } + + /// + /// Remove a + /// + /// The chunk to remove or null if none + /// Alignment of the chunk, or null if the chunk cannot be removed. + public uint? Remove(T chunk) { + if (setOffsetCalled) + throw new InvalidOperationException("SetOffset() has already been called"); + if (chunk != null) { + for (int i = 0; i < chunks.Count; i++) { + if (chunks[i].chunk == chunk) { + uint alignment = chunks[i].alignment; + chunks.RemoveAt(i); + return alignment; + } + } + } + return null; + } + } +} diff --git a/dnlib/DotNet/Writer/ChunkListBase.cs b/dnlib/DotNet/Writer/ChunkListBase.cs new file mode 100644 index 0000000..0e7d898 --- /dev/null +++ b/dnlib/DotNet/Writer/ChunkListBase.cs @@ -0,0 +1,122 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Base class of chunk list types + /// + /// Chunk type + public abstract class ChunkListBase : IChunk where T : IChunk { + /// All chunks + protected List chunks; + uint length; + uint virtualSize; + /// true if has been called + protected bool setOffsetCalled; + FileOffset offset; + RVA rva; + + /// + /// Helper struct + /// + protected struct Elem { + /// Data + public readonly T chunk; + /// Alignment + public readonly uint alignment; + + /// + /// Constructor + /// + /// Chunk + /// Alignment + public Elem(T chunk, uint alignment) { + this.chunk = chunk; + this.alignment = alignment; + } + } + + /// + /// Equality comparer for + /// + protected sealed class ElemEqualityComparer : IEqualityComparer { + IEqualityComparer chunkComparer; + + /// + /// Constructor + /// + /// Compares the chunk type + public ElemEqualityComparer(IEqualityComparer chunkComparer) { + this.chunkComparer = chunkComparer; + } + + /// + public bool Equals(Elem x, Elem y) { + return x.alignment == y.alignment && + chunkComparer.Equals(x.chunk, y.chunk); + } + + /// + public int GetHashCode(Elem obj) { + return (int)obj.alignment + chunkComparer.GetHashCode(obj.chunk); + } + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + public virtual void SetOffset(FileOffset offset, RVA rva) { + setOffsetCalled = true; + this.offset = offset; + this.rva = rva; + length = 0; + virtualSize = 0; + foreach (var elem in chunks) { + uint paddingF = (uint)offset.AlignUp(elem.alignment) - (uint)offset; + uint paddingV = (uint)rva.AlignUp(elem.alignment) - (uint)rva; + offset += paddingF; + rva += paddingV; + elem.chunk.SetOffset(offset, rva); + uint chunkLenF = elem.chunk.GetFileLength(); + uint chunkLenV = elem.chunk.GetVirtualSize(); + offset += chunkLenF; + rva += chunkLenV; + length += paddingF + chunkLenF; + virtualSize += paddingV + chunkLenV; + } + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return virtualSize; + } + + /// + public void WriteTo(BinaryWriter writer) { + FileOffset offset2 = offset; + foreach (var elem in chunks) { + int paddingF = (int)offset2.AlignUp(elem.alignment) - (int)offset2; + writer.WriteZeros(paddingF); + elem.chunk.VerifyWriteTo(writer); + offset2 += (uint)paddingF + elem.chunk.GetFileLength(); + } + } + } +} diff --git a/dnlib/DotNet/Writer/CustomAttributeWriter.cs b/dnlib/DotNet/Writer/CustomAttributeWriter.cs new file mode 100644 index 0000000..1134527 --- /dev/null +++ b/dnlib/DotNet/Writer/CustomAttributeWriter.cs @@ -0,0 +1,751 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; + +namespace dnlib.DotNet.Writer { + /// + /// Helps write custom attributes + /// + public interface ICustomAttributeWriterHelper : IWriterError, IFullNameCreatorHelper { + } + + /// + /// Writes s + /// + public struct CustomAttributeWriter : IDisposable { + readonly ICustomAttributeWriterHelper helper; + RecursionCounter recursionCounter; + readonly MemoryStream outStream; + readonly BinaryWriter writer; + GenericArguments genericArguments; + + /// + /// Writes a custom attribute + /// + /// Helper class + /// The custom attribute + /// Custom attribute blob + public static byte[] Write(ICustomAttributeWriterHelper helper, CustomAttribute ca) { + using (var writer = new CustomAttributeWriter(helper)) { + writer.Write(ca); + return writer.GetResult(); + } + } + + /// + /// Writes custom attribute named arguments + /// + /// Helper class + /// Named arguments + /// The named args blob + internal static byte[] Write(ICustomAttributeWriterHelper helper, IList namedArgs) { + using (var writer = new CustomAttributeWriter(helper)) { + writer.Write(namedArgs); + return writer.GetResult(); + } + } + + CustomAttributeWriter(ICustomAttributeWriterHelper helper) { + this.helper = helper; + this.recursionCounter = new RecursionCounter(); + this.outStream = new MemoryStream(); + this.writer = new BinaryWriter(outStream); + this.genericArguments = null; + } + + byte[] GetResult() { + return outStream.ToArray(); + } + + void Write(CustomAttribute ca) { + if (ca == null) { + helper.Error("The custom attribute is null"); + return; + } + + // Check whether it's raw first. If it is, we don't care whether the ctor is + // invalid. Just use the raw data. + if (ca.IsRawBlob) { + if ((ca.ConstructorArguments != null && ca.ConstructorArguments.Count > 0) || (ca.NamedArguments != null && ca.NamedArguments.Count > 0)) + helper.Error("Raw custom attribute contains arguments and/or named arguments"); + writer.Write(ca.RawData); + return; + } + + if (ca.Constructor == null) { + helper.Error("Custom attribute ctor is null"); + return; + } + + var methodSig = GetMethodSig(ca.Constructor); + if (methodSig == null) { + helper.Error("Custom attribute ctor's method signature is invalid"); + return; + } + + if (ca.ConstructorArguments.Count != methodSig.Params.Count) + helper.Error("Custom attribute arguments count != method sig arguments count"); + if (methodSig.ParamsAfterSentinel != null && methodSig.ParamsAfterSentinel.Count > 0) + helper.Error("Custom attribute ctor has parameters after the sentinel"); + if (ca.NamedArguments.Count > ushort.MaxValue) + helper.Error("Custom attribute has too many named arguments"); + + // A generic custom attribute isn't allowed by most .NET languages (eg. C#) but + // the CLR probably supports it. + var mrCtor = ca.Constructor as MemberRef; + if (mrCtor != null) { + var owner = mrCtor.Class as TypeSpec; + if (owner != null) { + var gis = owner.TypeSig as GenericInstSig; + if (gis != null) { + genericArguments = new GenericArguments(); + genericArguments.PushTypeArgs(gis.GenericArguments); + } + } + } + + writer.Write((ushort)1); + + int numArgs = Math.Min(methodSig.Params.Count, ca.ConstructorArguments.Count); + for (int i = 0; i < numArgs; i++) + WriteValue(FixTypeSig(methodSig.Params[i]), ca.ConstructorArguments[i]); + + int numNamedArgs = Math.Min((int)ushort.MaxValue, ca.NamedArguments.Count); + writer.Write((ushort)numNamedArgs); + for (int i = 0; i < numNamedArgs; i++) + Write(ca.NamedArguments[i]); + } + + void Write(IList namedArgs) { + if (namedArgs == null || namedArgs.Count > 0x1FFFFFFF) { + helper.Error("Too many custom attribute named arguments"); + namedArgs = new CANamedArgument[0]; + } + writer.WriteCompressedUInt32((uint)namedArgs.Count); + for (int i = 0; i < namedArgs.Count; i++) + Write(namedArgs[i]); + } + + TypeSig FixTypeSig(TypeSig type) { + return SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers(); + } + + TypeSig SubstituteGenericParameter(TypeSig type) { + if (genericArguments == null) + return type; + return genericArguments.Resolve(type); + } + + void WriteValue(TypeSig argType, CAArgument value) { + if (argType == null || value.Type == null) { + helper.Error("Custom attribute argument type is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + var arrayType = argType as SZArraySig; + if (arrayType != null) { + var argsArray = value.Value as IList; + if (argsArray == null && value.Value != null) + helper.Error("CAArgument.Value is not null or an array"); + WriteArrayValue(arrayType, argsArray); + } + else + WriteElem(argType, value); + + recursionCounter.Decrement(); + } + + void WriteArrayValue(SZArraySig arrayType, IList args) { + if (arrayType == null) { + helper.Error("Custom attribute: Array type is null"); + return; + } + + if (args == null) + writer.Write(uint.MaxValue); + else { + writer.Write((uint)args.Count); + var arrayElementType = FixTypeSig(arrayType.Next); + for (int i = 0; i < args.Count; i++) + WriteValue(arrayElementType, args[i]); + } + } + + bool VerifyTypeAndValue(CAArgument value, ElementType etype) { + if (!VerifyType(value.Type, etype)) { + helper.Error("Custom attribute arg type != value.Type"); + return false; + } + if (!VerifyValue(value.Value, etype)) { + helper.Error("Custom attribute value.Value's type != value.Type"); + return false; + } + return true; + } + + bool VerifyTypeAndValue(CAArgument value, ElementType etype, Type valueType) { + if (!VerifyType(value.Type, etype)) { + helper.Error("Custom attribute arg type != value.Type"); + return false; + } + return value.Value == null || value.Value.GetType() == valueType; + } + + static bool VerifyType(TypeSig type, ElementType etype) { + type = type.RemoveModifiers(); + // Assume it's an enum if it's a ValueType + return type != null && (etype == type.ElementType || type.ElementType == ElementType.ValueType); + } + + static bool VerifyValue(object o, ElementType etype) { + if (o == null) + return false; + + switch (Type.GetTypeCode(o.GetType())) { + case TypeCode.Boolean: return etype == ElementType.Boolean; + case TypeCode.Char: return etype == ElementType.Char; + case TypeCode.SByte: return etype == ElementType.I1; + case TypeCode.Byte: return etype == ElementType.U1; + case TypeCode.Int16: return etype == ElementType.I2; + case TypeCode.UInt16: return etype == ElementType.U2; + case TypeCode.Int32: return etype == ElementType.I4; + case TypeCode.UInt32: return etype == ElementType.U4; + case TypeCode.Int64: return etype == ElementType.I8; + case TypeCode.UInt64: return etype == ElementType.U8; + case TypeCode.Single: return etype == ElementType.R4; + case TypeCode.Double: return etype == ElementType.R8; + default: return false; + } + } + + static ulong ToUInt64(object o) { + ulong result; + ToUInt64(o, out result); + return result; + } + + static bool ToUInt64(object o, out ulong result) { + if (o == null) { + result = 0; + return false; + } + + switch (Type.GetTypeCode(o.GetType())) { + case TypeCode.Boolean: + result = (bool)o ? 1UL : 0UL; + return true; + + case TypeCode.Char: + result = (ushort)(char)o; + return true; + + case TypeCode.SByte: + result = (ulong)(sbyte)o; + return true; + + case TypeCode.Byte: + result = (byte)o; + return true; + + case TypeCode.Int16: + result = (ulong)(short)o; + return true; + + case TypeCode.UInt16: + result = (ushort)o; + return true; + + case TypeCode.Int32: + result = (ulong)(int)o; + return true; + + case TypeCode.UInt32: + result = (uint)o; + return true; + + case TypeCode.Int64: + result = (ulong)(long)o; + return true; + + case TypeCode.UInt64: + result = (ulong)o; + return true; + + case TypeCode.Single: + result = (ulong)(float)o; + return true; + + case TypeCode.Double: + result = (ulong)(double)o; + return true; + } + + result = 0; + return false; + } + + static double ToDouble(object o) { + double result; + ToDouble(o, out result); + return result; + } + + static bool ToDouble(object o, out double result) { + if (o == null) { + result = double.NaN; + return false; + } + + switch (Type.GetTypeCode(o.GetType())) { + case TypeCode.Boolean: + result = (bool)o ? 1 : 0; + return true; + + case TypeCode.Char: + result = (ushort)(char)o; + return true; + + case TypeCode.SByte: + result = (sbyte)o; + return true; + + case TypeCode.Byte: + result = (byte)o; + return true; + + case TypeCode.Int16: + result = (short)o; + return true; + + case TypeCode.UInt16: + result = (ushort)o; + return true; + + case TypeCode.Int32: + result = (int)o; + return true; + + case TypeCode.UInt32: + result = (uint)o; + return true; + + case TypeCode.Int64: + result = (long)o; + return true; + + case TypeCode.UInt64: + result = (ulong)o; + return true; + + case TypeCode.Single: + result = (float)o; + return true; + + case TypeCode.Double: + result = (double)o; + return true; + } + + result = double.NaN; + return false; + } + + /// + /// Write a value + /// + /// The ctor arg type, field type, or property type + /// The value to write + void WriteElem(TypeSig argType, CAArgument value) { + if (argType == null) { + helper.Error("Custom attribute: Arg type is null"); + argType = value.Type; + if (argType == null) + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + TypeSig underlyingType; + ITypeDefOrRef tdr; + switch (argType.ElementType) { + case ElementType.Boolean: + if (!VerifyTypeAndValue(value, ElementType.Boolean)) + writer.Write(ToUInt64(value.Value) != 0); + else + writer.Write((bool)value.Value); + break; + + case ElementType.Char: + if (!VerifyTypeAndValue(value, ElementType.Char)) + writer.Write((ushort)ToUInt64(value.Value)); + else + writer.Write((ushort)(char)value.Value); + break; + + case ElementType.I1: + if (!VerifyTypeAndValue(value, ElementType.I1)) + writer.Write((sbyte)ToUInt64(value.Value)); + else + writer.Write((sbyte)value.Value); + break; + + case ElementType.U1: + if (!VerifyTypeAndValue(value, ElementType.U1)) + writer.Write((byte)ToUInt64(value.Value)); + else + writer.Write((byte)value.Value); + break; + + case ElementType.I2: + if (!VerifyTypeAndValue(value, ElementType.I2)) + writer.Write((short)ToUInt64(value.Value)); + else + writer.Write((short)value.Value); + break; + + case ElementType.U2: + if (!VerifyTypeAndValue(value, ElementType.U2)) + writer.Write((ushort)ToUInt64(value.Value)); + else + writer.Write((ushort)value.Value); + break; + + case ElementType.I4: + if (!VerifyTypeAndValue(value, ElementType.I4)) + writer.Write((int)ToUInt64(value.Value)); + else + writer.Write((int)value.Value); + break; + + case ElementType.U4: + if (!VerifyTypeAndValue(value, ElementType.U4)) + writer.Write((uint)ToUInt64(value.Value)); + else + writer.Write((uint)value.Value); + break; + + case ElementType.I8: + if (!VerifyTypeAndValue(value, ElementType.I8)) + writer.Write((long)ToUInt64(value.Value)); + else + writer.Write((long)value.Value); + break; + + case ElementType.U8: + if (!VerifyTypeAndValue(value, ElementType.U8)) + writer.Write(ToUInt64(value.Value)); + else + writer.Write((ulong)value.Value); + break; + + case ElementType.R4: + if (!VerifyTypeAndValue(value, ElementType.R4)) + writer.Write((float)ToDouble(value.Value)); + else + writer.Write((float)value.Value); + break; + + case ElementType.R8: + if (!VerifyTypeAndValue(value, ElementType.R8)) + writer.Write(ToDouble(value.Value)); + else + writer.Write((double)value.Value); + break; + + case ElementType.String: + if (VerifyTypeAndValue(value, ElementType.String, typeof(UTF8String))) + WriteUTF8String((UTF8String)value.Value); + else if (VerifyTypeAndValue(value, ElementType.String, typeof(string))) + WriteUTF8String((string)value.Value); + else + WriteUTF8String(UTF8String.Empty); + break; + + case ElementType.ValueType: + tdr = ((TypeDefOrRefSig)argType).TypeDefOrRef; + underlyingType = GetEnumUnderlyingType(argType); + if (underlyingType != null) + WriteElem(underlyingType, value); + else if (tdr is TypeRef && TryWriteEnumUnderlyingTypeValue(value.Value)) { + // No error. Assume it's an enum that couldn't be resolved. + } + else + helper.Error("Custom attribute value is not an enum"); + break; + + case ElementType.Class: + tdr = ((TypeDefOrRefSig)argType).TypeDefOrRef; + if (CheckCorLibType(argType, "Type")) { + if (CheckCorLibType(value.Type, "Type")) { + var ts = value.Value as TypeSig; + if (ts != null) + WriteType(ts); + else if (value.Value == null) + WriteUTF8String(null); + else { + helper.Error("Custom attribute value is not a type"); + WriteUTF8String(UTF8String.Empty); + } + } + else { + helper.Error("Custom attribute value type is not System.Type"); + WriteUTF8String(UTF8String.Empty); + } + break; + } + else if (tdr is TypeRef && TryWriteEnumUnderlyingTypeValue(value.Value)) { + // No error. Assume it's an enum that couldn't be resolved. + break; + } + goto default; + + case ElementType.SZArray: + WriteValue(argType, value); + break; + + case ElementType.Object: + WriteFieldOrPropType(value.Type); + WriteElem(value.Type, value); + break; + + case ElementType.End: + case ElementType.Void: + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Var: + case ElementType.Array: + case ElementType.GenericInst: + case ElementType.TypedByRef: + case ElementType.ValueArray: + case ElementType.I: + case ElementType.U: + case ElementType.R: + case ElementType.FnPtr: + case ElementType.MVar: + case ElementType.CModReqd: + case ElementType.CModOpt: + case ElementType.Internal: + case ElementType.Module: + case ElementType.Sentinel: + case ElementType.Pinned: + default: + helper.Error("Invalid or unsupported element type in custom attribute"); + break; + } + + recursionCounter.Decrement(); + } + + bool TryWriteEnumUnderlyingTypeValue(object o) { + if (o == null) + return false; + switch (Type.GetTypeCode(o.GetType())) { + case TypeCode.Boolean: writer.Write((bool)o); break; + case TypeCode.Char: writer.Write((ushort)(char)o); break; + case TypeCode.SByte: writer.Write((sbyte)o); break; + case TypeCode.Byte: writer.Write((byte)o); break; + case TypeCode.Int16: writer.Write((short)o); break; + case TypeCode.UInt16: writer.Write((ushort)o); break; + case TypeCode.Int32: writer.Write((int)o); break; + case TypeCode.UInt32: writer.Write((uint)o); break; + case TypeCode.Int64: writer.Write((long)o); break; + case TypeCode.UInt64: writer.Write((ulong)o); break; + default: return false; + } + return true; + } + + /// + /// Gets the enum's underlying type + /// + /// An enum type + /// The underlying type or null if we couldn't resolve the type ref + static TypeSig GetEnumUnderlyingType(TypeSig type) { + var td = GetEnumTypeDef(type); + if (td == null) + return null; + return td.GetEnumUnderlyingType().RemoveModifiers(); + } + + static TypeDef GetEnumTypeDef(TypeSig type) { + if (type == null) + return null; + var td = GetTypeDef(type); + if (td == null) + return null; + if (!td.IsEnum) + return null; + return td; + } + + /// + /// Converts to a , possibly resolving + /// a + /// + /// The type + /// A or null if we couldn't resolve the + /// or if is a type spec + static TypeDef GetTypeDef(TypeSig type) { + var tdr = type as TypeDefOrRefSig; + if (tdr != null) { + var td = tdr.TypeDef; + if (td != null) + return td; + + var tr = tdr.TypeRef; + if (tr != null) + return tr.Resolve(); + } + + return null; + } + + void Write(CANamedArgument namedArg) { + if (namedArg == null) { + helper.Error("Custom attribute named arg is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + if (namedArg.IsProperty) + writer.Write((byte)SerializationType.Property); + else + writer.Write((byte)SerializationType.Field); + + WriteFieldOrPropType(namedArg.Type); + WriteUTF8String(namedArg.Name); + WriteValue(namedArg.Type, namedArg.Argument); + + recursionCounter.Decrement(); + } + + void WriteFieldOrPropType(TypeSig type) { + type = type.RemoveModifiers(); + if (type == null) { + helper.Error("Custom attribute: Field/property type is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + ITypeDefOrRef tdr; + switch (type.ElementType) { + case ElementType.Boolean: writer.Write((byte)SerializationType.Boolean); break; + case ElementType.Char: writer.Write((byte)SerializationType.Char); break; + case ElementType.I1: writer.Write((byte)SerializationType.I1); break; + case ElementType.U1: writer.Write((byte)SerializationType.U1); break; + case ElementType.I2: writer.Write((byte)SerializationType.I2); break; + case ElementType.U2: writer.Write((byte)SerializationType.U2); break; + case ElementType.I4: writer.Write((byte)SerializationType.I4); break; + case ElementType.U4: writer.Write((byte)SerializationType.U4); break; + case ElementType.I8: writer.Write((byte)SerializationType.I8); break; + case ElementType.U8: writer.Write((byte)SerializationType.U8); break; + case ElementType.R4: writer.Write((byte)SerializationType.R4); break; + case ElementType.R8: writer.Write((byte)SerializationType.R8); break; + case ElementType.String: writer.Write((byte)SerializationType.String); break; + case ElementType.Object: writer.Write((byte)SerializationType.TaggedObject); break; + + case ElementType.SZArray: + writer.Write((byte)SerializationType.SZArray); + WriteFieldOrPropType(type.Next); + break; + + case ElementType.Class: + tdr = ((TypeDefOrRefSig)type).TypeDefOrRef; + if (CheckCorLibType(type, "Type")) + writer.Write((byte)SerializationType.Type); + else if (tdr is TypeRef) { + // Could be an enum TypeRef that couldn't be resolved, so the code + // assumed it's a class and created a ClassSig. + writer.Write((byte)SerializationType.Enum); + WriteType(tdr); + } + else + goto default; + break; + + case ElementType.ValueType: + tdr = ((TypeDefOrRefSig)type).TypeDefOrRef; + var enumType = GetEnumTypeDef(type); + // If TypeRef => assume it's an enum that couldn't be resolved + if (enumType != null || tdr is TypeRef) { + writer.Write((byte)SerializationType.Enum); + WriteType(tdr); + } + else { + helper.Error("Custom attribute type doesn't seem to be an enum."); + writer.Write((byte)SerializationType.Enum); + WriteType(tdr); + } + break; + + default: + helper.Error("Custom attribute: Invalid type"); + writer.Write((byte)0xFF); + break; + } + + recursionCounter.Decrement(); + } + + void WriteType(IType type) { + if (type == null) { + helper.Error("Custom attribute: Type is null"); + WriteUTF8String(UTF8String.Empty); + } + else + WriteUTF8String(FullNameCreator.AssemblyQualifiedName(type, helper)); + } + + static bool CheckCorLibType(TypeSig ts, string name) { + var tdrs = ts as TypeDefOrRefSig; + if (tdrs == null) + return false; + return CheckCorLibType(tdrs.TypeDefOrRef, name); + } + + static bool CheckCorLibType(ITypeDefOrRef tdr, string name) { + if (tdr == null) + return false; + if (!tdr.DefinitionAssembly.IsCorLib()) + return false; + if (tdr is TypeSpec) + return false; + return tdr.TypeName == name && tdr.Namespace == "System"; + } + + static MethodSig GetMethodSig(ICustomAttributeType ctor) { + return ctor == null ? null : ctor.MethodSig; + } + + void WriteUTF8String(UTF8String s) { + if ((object)s == null || s.Data == null) + writer.Write((byte)0xFF); + else { + writer.WriteCompressedUInt32((uint)s.Data.Length); + writer.Write(s.Data); + } + } + + /// + public void Dispose() { + if (outStream != null) + outStream.Dispose(); + if (writer != null) + ((IDisposable)writer).Dispose(); + } + } +} diff --git a/dnlib/DotNet/Writer/DebugDirectory.cs b/dnlib/DotNet/Writer/DebugDirectory.cs new file mode 100644 index 0000000..750f432 --- /dev/null +++ b/dnlib/DotNet/Writer/DebugDirectory.cs @@ -0,0 +1,105 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using dnlib.DotNet.Pdb; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Debug directory chunk + /// + public sealed class DebugDirectory : IChunk { + FileOffset offset; + RVA rva; + bool dontWriteAnything; + uint length; + internal IMAGE_DEBUG_DIRECTORY debugDirData; + uint timeDateStamp; + byte[] data; + + /// + /// Size of + /// + public const int HEADER_SIZE = 28; + + /// + /// Gets/sets the time date stamp that should be written. This should be the same time date + /// stamp that is written to the PE header. + /// + public uint TimeDateStamp { + get { return timeDateStamp; } + set { timeDateStamp = value; } + } + + /// + /// Gets/sets the raw debug data + /// + public byte[] Data { + get { return data; } + set { data = value; } + } + + /// + /// Set it to true if eg. the PDB file couldn't be created. If true, the size + /// of this chunk will be 0. + /// + public bool DontWriteAnything { + get { return dontWriteAnything; } + set { + if (length != 0) + throw new InvalidOperationException("SetOffset() has already been called"); + dontWriteAnything = value; + } + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + length = HEADER_SIZE; + if (data != null) // Could be null if dontWriteAnything is true + length += (uint)data.Length; + } + + /// + public uint GetFileLength() { + if (dontWriteAnything) + return 0; + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + if (dontWriteAnything) + return; + + writer.Write(debugDirData.Characteristics); + writer.Write(timeDateStamp); + writer.Write(debugDirData.MajorVersion); + writer.Write(debugDirData.MinorVersion); + writer.Write(debugDirData.Type); + writer.Write(debugDirData.SizeOfData); + writer.Write((uint)rva + HEADER_SIZE); + writer.Write((uint)offset + HEADER_SIZE); + writer.Write(data); + } + } +} diff --git a/dnlib/DotNet/Writer/DeclSecurityWriter.cs b/dnlib/DotNet/Writer/DeclSecurityWriter.cs new file mode 100644 index 0000000..71d40c5 --- /dev/null +++ b/dnlib/DotNet/Writer/DeclSecurityWriter.cs @@ -0,0 +1,98 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace dnlib.DotNet.Writer { + /// + /// Writes DeclSecurity blobs + /// + public struct DeclSecurityWriter : ICustomAttributeWriterHelper { + readonly ModuleDef module; + readonly IWriterError helper; + + /// + /// Creates a DeclSecurity blob from + /// + /// Owner module + /// List of s + /// Helps this class + /// A DeclSecurity blob + public static byte[] Write(ModuleDef module, IList secAttrs, IWriterError helper) { + return new DeclSecurityWriter(module, helper).Write(secAttrs); + } + + DeclSecurityWriter(ModuleDef module, IWriterError helper) { + this.module = module; + this.helper = helper; + } + + byte[] Write(IList secAttrs) { + if (secAttrs == null) + secAttrs = new SecurityAttribute[0]; + + var xml = DeclSecurity.GetNet1xXmlStringInternal(secAttrs); + if (xml != null) + return WriteFormat1(xml); + return WriteFormat2(secAttrs); + } + + byte[] WriteFormat1(string xml) { + return Encoding.Unicode.GetBytes(xml); + } + + byte[] WriteFormat2(IList secAttrs) { + using (var stream = new MemoryStream()) + using (var writer = new BinaryWriter(stream)) { + writer.Write((byte)'.'); + WriteCompressedUInt32(writer, (uint)secAttrs.Count); + + foreach (var sa in secAttrs) { + if (sa == null) { + helper.Error("SecurityAttribute is null"); + Write(writer, UTF8String.Empty); + WriteCompressedUInt32(writer, 1); + WriteCompressedUInt32(writer, 0); + continue; + } + var attrType = sa.AttributeType; + string fqn; + if (attrType == null) { + helper.Error("SecurityAttribute attribute type is null"); + fqn = string.Empty; + } + else + fqn = attrType.AssemblyQualifiedName; + Write(writer, fqn); + + var namedArgsBlob = CustomAttributeWriter.Write(this, sa.NamedArguments); + if (namedArgsBlob.Length > 0x1FFFFFFF) { + helper.Error("Named arguments blob size doesn't fit in 29 bits"); + namedArgsBlob = new byte[0]; + } + WriteCompressedUInt32(writer, (uint)namedArgsBlob.Length); + writer.Write(namedArgsBlob); + } + + return stream.ToArray(); + } + } + + uint WriteCompressedUInt32(BinaryWriter writer, uint value) { + return writer.WriteCompressedUInt32(helper, value); + } + + void Write(BinaryWriter writer, UTF8String s) { + writer.Write(helper, s); + } + + void IWriterError.Error(string message) { + helper.Error(message); + } + + bool IFullNameCreatorHelper.MustUseAssemblyName(IType type) { + return FullNameCreator.MustUseAssemblyName(module, type); + } + } +} diff --git a/dnlib/DotNet/Writer/Extensions.cs b/dnlib/DotNet/Writer/Extensions.cs new file mode 100644 index 0000000..71a92c8 --- /dev/null +++ b/dnlib/DotNet/Writer/Extensions.cs @@ -0,0 +1,24 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; + +namespace dnlib.DotNet.Writer { + /// + /// Extension methods + /// + public static partial class Extensions { + /// + /// Write zeros + /// + /// this + /// Number of zeros + public static void WriteZeros(this BinaryWriter writer, int count) { + if (count <= 0x20) { + for (int i = 0; i < count; i++) + writer.Write((byte)0); + } + else + writer.Write(new byte[count]); + } + } +} diff --git a/dnlib/DotNet/Writer/GuidHeap.cs b/dnlib/DotNet/Writer/GuidHeap.cs new file mode 100644 index 0000000..42c4e23 --- /dev/null +++ b/dnlib/DotNet/Writer/GuidHeap.cs @@ -0,0 +1,82 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; + +namespace dnlib.DotNet.Writer { + /// + /// #GUID heap + /// + public sealed class GuidHeap : HeapBase, IOffsetHeap { + readonly List guids = new List(); + Dictionary userRawData; + + /// + public override string Name { + get { return "#GUID"; } + } + + /// + /// Adds a guid to the #GUID heap + /// + /// The guid + /// The index of the guid in the #GUID heap + public uint Add(Guid? guid) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #GUID when it's read-only"); + if (guid == null) + return 0; + + // The number of GUIDs will almost always be 1 so there's no need for a dictionary. + // The only table that contains GUIDs is the Module table, and it has three GUID + // columns. Only one of them (Mvid) is normally set and the others are null. + int index = guids.IndexOf(guid.Value); + if (index >= 0) + return (uint)index + 1; + + guids.Add(guid.Value); + return (uint)guids.Count; + } + + /// + public override uint GetRawLength() { + return (uint)guids.Count * 16; + } + + /// + protected override void WriteToImpl(BinaryWriter writer) { + uint offset = 0; + foreach (var guid in guids) { + byte[] rawData; + if (userRawData == null || !userRawData.TryGetValue(offset, out rawData)) + rawData = guid.ToByteArray(); + writer.Write(rawData); + offset += 16; + } + } + + /// + public int GetRawDataSize(Guid data) { + return 16; + } + + /// + public void SetRawData(uint offset, byte[] rawData) { + if (rawData == null || rawData.Length != 16) + throw new ArgumentException("Invalid size of GUID raw data"); + if (userRawData == null) + userRawData = new Dictionary(); + userRawData[offset] = rawData; + } + + /// + public IEnumerable> GetAllRawData() { + uint offset = 0; + foreach (var guid in guids) { + yield return new KeyValuePair(offset, guid.ToByteArray()); + offset += 16; + } + } + } +} diff --git a/dnlib/DotNet/Writer/HeapBase.cs b/dnlib/DotNet/Writer/HeapBase.cs new file mode 100644 index 0000000..88c1e79 --- /dev/null +++ b/dnlib/DotNet/Writer/HeapBase.cs @@ -0,0 +1,90 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Base class of most heaps + /// + public abstract class HeapBase : IHeap { + internal const uint ALIGNMENT = 4; + FileOffset offset; + RVA rva; + + /// + /// true if has been called + /// + protected bool isReadOnly; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + public abstract string Name { get; } + + /// + public bool IsEmpty { + get { return GetRawLength() <= 1; } + } + + /// + /// true if offsets require 4 bytes instead of 2 bytes. + /// + public bool IsBig { + get { return GetFileLength() > 0xFFFF; } + } + + /// + public void SetReadOnly() { + isReadOnly = true; + } + + /// + public virtual void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return Utils.AlignUp(GetRawLength(), ALIGNMENT); + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + /// Gets the raw length of the heap + /// + /// Raw length of the heap + public abstract uint GetRawLength(); + + /// + public void WriteTo(BinaryWriter writer) { + WriteToImpl(writer); + writer.WriteZeros((int)(Utils.AlignUp(GetRawLength(), ALIGNMENT) - GetRawLength())); + } + + /// + /// Writes all data to at its current location. + /// + /// Destination + protected abstract void WriteToImpl(BinaryWriter writer); + + /// + public override string ToString() { + return Name; + } + } +} diff --git a/dnlib/DotNet/Writer/HotHeap.cs b/dnlib/DotNet/Writer/HotHeap.cs new file mode 100644 index 0000000..be4a0f8 --- /dev/null +++ b/dnlib/DotNet/Writer/HotHeap.cs @@ -0,0 +1,243 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.MD; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// The hot metadata heap: #!. MS' CLR 2.0+ can read this heap. It's used by native + /// images (NGEN'd) only, but if you patch the CLR, you can use it with normal non-NGEN'd + /// images as well. + /// It's only used by the CLR when the compressed heap (#~) is present, not when + /// the ENC heap (#-) is present. + /// + public abstract class HotHeap : HeapBase { + const uint HOT_HEAP_MAGIC = 0x484F4E44; // "HOND" + const int MAX_TABLES = (int)Table.GenericParamConstraint + 1; + const uint HOT_HEAP_DIR_SIZE = 4 + MAX_TABLES * 4; + const uint HH_ALIGNMENT = 4; + + uint totalLength; + readonly HotTable[] headers = new HotTable[MAX_TABLES]; + readonly List hotPools = new List(); + + /// + /// Gets the hot heap version + /// + public abstract HotHeapVersion HotHeapVersion { get; } + + /// + public override string Name { + get { return "#!"; } + } + + /// + /// Creates a instance + /// + /// The MD table + public abstract HotTable CreateHotTable(IMDTable mdTable); + + /// + /// Creates a instance + /// + /// Pool type + public abstract HotPool CreateHotPool(HeapType heapType); + + /// + /// Creates a hot heap instance + /// + /// Target module + public static HotHeap Create(ModuleDef module) { + return Create(GetHotHeapVersion(module)); + } + + /// + /// Creates a hot heap instance + /// + /// Hot heap version + public static HotHeap Create(HotHeapVersion version) { + switch (version) { + case HotHeapVersion.CLR20: return new HotHeap20(); + case HotHeapVersion.CLR40: return new HotHeap40(); + default: throw new ArgumentException("Invalid version"); + } + } + + /// + /// Returns the correct hot heap version that should be used + /// + /// Target module + public static HotHeapVersion GetHotHeapVersion(ModuleDef module) { + if (module.IsClr20) + return HotHeapVersion.CLR20; + return HotHeapVersion.CLR40; + } + + /// + /// Adds a hot table + /// + /// The hot table + public void Add(HotTable hotTable) { + var table = hotTable.Table; + if ((uint)table >= (uint)headers.Length) + throw new ArgumentException("Invalid table type"); + headers[(int)table] = hotTable; + } + + /// + /// Adds a hot pool + /// + /// The hot pool + public void Add(HotPool hotPool) { + hotPools.Add(hotPool); + } + + /// + public override void SetOffset(FileOffset offset, RVA rva) { + base.SetOffset(offset, rva); + + uint startOffs = (uint)offset; + + offset += HOT_HEAP_DIR_SIZE; + rva += HOT_HEAP_DIR_SIZE; + foreach (var header in headers) { + if (header == null) + continue; + header.SetOffset(offset, rva); + uint len = header.GetFileLength(); + offset += len; + rva += len; + Align(ref offset, ref rva); + } + + foreach (var hotPool in hotPools) { + Align(ref offset, ref rva); + hotPool.SetOffset(offset, rva); + uint len = hotPool.GetFileLength(); + offset += len; + rva += len; + } + + Align(ref offset, ref rva); + offset += hotPools.Count * 8; + rva += (uint)hotPools.Count * 8; + + offset += 8; + rva += 8; + + totalLength = (uint)offset - startOffs; + } + + static void Align(ref FileOffset offset, ref RVA rva) { + offset = offset.AlignUp(HH_ALIGNMENT); + rva = rva.AlignUp(HH_ALIGNMENT); + } + + /// + public override uint GetRawLength() { + return totalLength; + } + + /// + protected override void WriteToImpl(BinaryWriter writer) { + // The CLR doesn't verify this magic value + writer.Write(HOT_HEAP_MAGIC); + uint offs = HOT_HEAP_DIR_SIZE; + foreach (var header in headers) { + if (header == null) + writer.Write(0); + else { + writer.Write(offs); // any alignment, all bits are used + offs += header.GetFileLength(); + offs = Utils.AlignUp(offs, HH_ALIGNMENT); + } + } + + offs = HOT_HEAP_DIR_SIZE; + + foreach (var header in headers) { + if (header == null) + continue; + header.VerifyWriteTo(writer); + offs += header.GetFileLength(); + WriteAlign(writer, ref offs); + } + + var hotPoolOffset = new List(); + foreach (var hotPool in hotPools) { + WriteAlign(writer, ref offs); + hotPoolOffset.Add(writer.BaseStream.Position); + hotPool.VerifyWriteTo(writer); + offs += hotPool.GetFileLength(); + } + + WriteAlign(writer, ref offs); + long poolDBOffs = writer.BaseStream.Position; + for (int i = 0; i < hotPools.Count; i++) { + var hotPool = hotPools[i]; + writer.Write((uint)hotPool.HeapType); + // CLR 2.0: low 2 bits are ignored + // CLR 4.0: any alignment, all bits are used + writer.Write((uint)(poolDBOffs - hotPoolOffset[i] - hotPool.HeaderOffset)); + } + offs += (uint)hotPools.Count * 8; + + long hotMDDirOffs = writer.BaseStream.Position; + // any alignment + writer.Write((uint)(offs - HOT_HEAP_DIR_SIZE)); + // CLR 2.0: low 2 bits are ignored + // CLR 4.0: any alignment, all bits are used + writer.Write((uint)(hotMDDirOffs - poolDBOffs)); + } + + static void WriteAlign(BinaryWriter writer, ref uint offs) { + uint align = Utils.AlignUp(offs, HH_ALIGNMENT) - offs; + offs += align; + writer.WriteZeros((int)align); + } + } + + /// + /// CLR 2.0 (.NET 2.0 - 3.5) hot heap (#!) + /// + public sealed class HotHeap20 : HotHeap { + /// + public override HotHeapVersion HotHeapVersion { + get { return HotHeapVersion.CLR20; } + } + + /// + public override HotTable CreateHotTable(IMDTable mdTable) { + return new HotTable20(mdTable); + } + + /// + public override HotPool CreateHotPool(HeapType heapType) { + return new HotPool20(heapType); + } + } + + /// + /// CLR 4.0 (.NET 4.0 - 4.5) hot heap (#!) + /// + public sealed class HotHeap40 : HotHeap { + /// + public override HotHeapVersion HotHeapVersion { + get { return HotHeapVersion.CLR40; } + } + + /// + public override HotTable CreateHotTable(IMDTable mdTable) { + return new HotTable40(mdTable); + } + + /// + public override HotPool CreateHotPool(HeapType heapType) { + return new HotPool40(heapType); + } + } +} diff --git a/dnlib/DotNet/Writer/HotPool.cs b/dnlib/DotNet/Writer/HotPool.cs new file mode 100644 index 0000000..d629c51 --- /dev/null +++ b/dnlib/DotNet/Writer/HotPool.cs @@ -0,0 +1,391 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.MD; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Hot pool + /// + public abstract class HotPool : IChunk { + internal const uint HP_ALIGNMENT = 4; + FileOffset offset; + RVA rva; + readonly HeapType heapType; + Dictionary allData; + internal DataInfo[] dataList; + int[] sortedIndexes; + internal uint dataOffset; + internal uint indexesOffset; + internal uint ridsOffset; + internal uint headerOffset; + uint totalLength; + bool indexesIsSorted; + + internal class DataInfo { + public readonly uint HeapOffset; + public uint PoolOffset; + public readonly byte[] Data; + public DataInfo(uint heapOffset, byte[] data) { + this.HeapOffset = heapOffset; + this.Data = data; + } + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the offset of the data relative to the start of this chunk. This is valid only + /// after has been called. + /// + public uint DataOffset { + get { return dataOffset; } + } + + /// + /// Gets the offset of the indexes relative to the start of this chunk. This is valid only + /// after has been called. + /// + public uint IndexesOffset { + get { return indexesOffset; } + } + + /// + /// Gets the offset of the rids relative to the start of this chunk. This is valid only + /// after has been called. + /// + public uint RidsOffset { + get { return ridsOffset; } + } + + /// + /// Gets the offset of the header relative to the start of this chunk. This is valid only + /// after has been called. + /// + public uint HeaderOffset { + get { return headerOffset; } + } + + /// + /// Gets the pool type + /// + public HeapType HeapType { + get { return heapType; } + } + + /// + /// Constructor + /// + /// Pool type + internal HotPool(HeapType heapType) { + this.heapType = heapType; + this.allData = new Dictionary(); + } + + /// + /// Adds raw data + /// + /// Offset of data in the original heap. If it's the #GUID, this + /// should be (index - 1) * 16. + /// + public void Add(uint offset, byte[] rawData) { + if (dataList != null) + throw new InvalidOperationException("Can't Add() after CreateData() has been called"); + allData[offset] = rawData; + } + + /// + /// Creates if it hasn't been created yet + /// + void CreateData() { + if (dataList != null) + return; + + dataList = new DataInfo[allData.Count]; + int i = 0; + foreach (var kv in allData) + dataList[i++] = new DataInfo(kv.Key, kv.Value); + // Make sure it's sorted by heap offset + Array.Sort(dataList, (a, b) => a.HeapOffset.CompareTo(b.HeapOffset)); + + sortedIndexes = new int[allData.Count]; + for (i = 0; i < sortedIndexes.Length; i++) + sortedIndexes[i] = i; + + allData = null; + indexesIsSorted = false; + } + + /// + /// Creates the data and sorts it according to the original data's heap offsets + /// + public void SortData() { + CreateData(); + Array.Sort(sortedIndexes, (a, b) => a.CompareTo(b)); + indexesIsSorted = true; + } + + /// + /// Creates the data and shuffles it + /// + public void ShuffleData() { + ShuffleData(new Random()); + } + + /// + /// Creates the data and shuffles it + /// + /// Random number generator instance that should be used + public void ShuffleData(Random rand) { + CreateData(); + + int start = 0, len = sortedIndexes.Length; + GetValidShuffleRange(ref start, ref len); + Shuffle(rand, sortedIndexes, start, len); + + indexesIsSorted = true; + } + + /// + /// Returns the range that can be shuffled + /// + /// Start index + /// Length + internal virtual void GetValidShuffleRange(ref int start, ref int length) { + } + + static void Shuffle(Random rand, IList list, int start, int count) { + if (list == null || count <= 1) + return; + + // Fisher-Yates algo, see http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle + for (int i = count - 1; i > 0; i--) { + int j = rand.Next(i + 1); + T tmp = list[start + i]; + list[start + i] = list[start + j]; + list[start + j] = tmp; + } + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + CreateData(); + totalLength = SetOffsetImpl(); + } + + /// + /// Initializes all offsets + /// + /// Total size of data + internal abstract uint SetOffsetImpl(); + + internal uint GetDataSize() { + uint size = 0; + foreach (var data in dataList) + size += (uint)data.Data.Length; + return size; + } + + /// + public uint GetFileLength() { + return totalLength; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + // Sort it unless it's already been sorted. Don't want random order + // unless the user wants it. + if (!indexesIsSorted) + SortData(); + + WriteToImpl(writer); + dataList = null; + sortedIndexes = null; + } + + /// + /// Writes all data + /// + internal abstract void WriteToImpl(BinaryWriter writer); + + internal DataInfo[] GetPoolDataOrder() { + var dataList2 = (DataInfo[])dataList.Clone(); + Array.Sort(sortedIndexes, dataList2); + uint offset = 0; + foreach (var info in dataList2) { + info.PoolOffset = offset; + offset += (uint)info.Data.Length; + } + return dataList2; + } + } + + /// + /// CLR 2.0 (.NET 2.0 - 3.5) hot pool writer + /// + sealed class HotPool20 : HotPool { + /// + /// Constructor + /// + /// Pool type + public HotPool20(HeapType heapType) + : base(heapType) { + } + + /// + internal override void GetValidShuffleRange(ref int start, ref int length) { + // First one must always be first + start++; + length--; + } + + /// + internal override uint SetOffsetImpl() { + uint offs = 0; + + // data can be anywhere except where rids can be + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + dataOffset = offs; + offs += GetDataSize(); + + // indexes can be anywhere except where rids can be + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + indexesOffset = offs; + offs += ((uint)dataList.Length - 1) * 4; + + // rids must be right before the header + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + ridsOffset = offs; + offs += (uint)dataList.Length * 4; + + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + headerOffset = offs; + offs += 3 * 4; + + return offs; + } + + /// + internal override void WriteToImpl(BinaryWriter writer) { + uint offs = 0; + long startPos = writer.BaseStream.Position; + var dataList2 = GetPoolDataOrder(); + + // Write data + writer.WriteZeros((int)(dataOffset - offs)); + foreach (var kv in dataList2) + writer.Write(kv.Data); + offs = (uint)(writer.BaseStream.Position - startPos); + + // Write indexes (hot pool offsets) + writer.WriteZeros((int)(indexesOffset - offs)); + if (dataList.Length > 1) { + for (int i = 1; i < dataList.Length; i++) + writer.Write(dataList[i].PoolOffset); + } + offs = (uint)(writer.BaseStream.Position - startPos); + + // Write rids (heap offsets) + writer.WriteZeros((int)(ridsOffset - offs)); + foreach (var kv in dataList) + writer.Write(kv.HeapOffset); + offs = (uint)(writer.BaseStream.Position - startPos); + + // Write header + writer.WriteZeros((int)(headerOffset - offs)); + writer.Write(headerOffset - dataOffset); // any alignment + writer.Write(headerOffset - indexesOffset); // low 2 bits are ignored + writer.Write(headerOffset - ridsOffset); // low 2 bits are ignored + } + } + + /// + /// CLR 4.0 (.NET 4.0 - 4.5) hot pool writer + /// + sealed class HotPool40 : HotPool { + /// + /// Constructor + /// + /// Pool type + public HotPool40(HeapType heapType) + : base(heapType) { + } + + /// + internal override uint SetOffsetImpl() { + uint offs = 0; + + // data can be anywhere except where rids can be + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + dataOffset = offs; + offs += GetDataSize(); + + // indexes can be anywhere except where rids can be + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + indexesOffset = offs; + offs += (uint)dataList.Length * 4; + + // rids must be right before the header + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + ridsOffset = offs; + offs += (uint)dataList.Length * 4; + + offs = Utils.AlignUp(offs, HP_ALIGNMENT); + headerOffset = offs; + offs += 3 * 4; + + return offs; + } + + /// + internal override void WriteToImpl(BinaryWriter writer) { + uint offs = 0; + long startPos = writer.BaseStream.Position; + var dataList2 = GetPoolDataOrder(); + + // Write data + writer.WriteZeros((int)(dataOffset - offs)); + foreach (var info in dataList2) + writer.Write(info.Data); + offs = (uint)(writer.BaseStream.Position - startPos); + + // Write indexes (hot pool offsets) + writer.WriteZeros((int)(indexesOffset - offs)); + foreach (var info in dataList) + writer.Write(info.PoolOffset); + offs = (uint)(writer.BaseStream.Position - startPos); + + // Write rids (heap offsets) + writer.WriteZeros((int)(ridsOffset - offs)); + foreach (var kv in dataList) + writer.Write(kv.HeapOffset); + offs = (uint)(writer.BaseStream.Position - startPos); + + // Write header + writer.WriteZeros((int)(headerOffset - offs)); + writer.Write(headerOffset - ridsOffset); // must be 4-byte aligned + writer.Write(headerOffset - indexesOffset); // must be 4-byte aligned + writer.Write(headerOffset - dataOffset); // any alignment + } + } +} diff --git a/dnlib/DotNet/Writer/HotTable.cs b/dnlib/DotNet/Writer/HotTable.cs new file mode 100644 index 0000000..4a5fbe7 --- /dev/null +++ b/dnlib/DotNet/Writer/HotTable.cs @@ -0,0 +1,482 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.MD; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Hot metadata table base class + /// + public abstract class HotTable : IChunk { + /// + /// At most 64K rows can be used when only a partial table is stored in the + /// hot table. The first level table indexes into the second level table, + /// and the index is 16 bits. + /// + public const int MAX_ROWS = 0x10000; + internal const uint HT_ALIGNMENT = 4; + + FileOffset offset; + RVA rva; + + internal readonly IMDTable mdTable; + readonly HotHeapVersion version; + readonly int hotTableHeaderSize; + internal readonly int alignedHotTableHeaderSize; + uint totalLength; + + // full table fields + byte[] data; + + // partial table fields + internal List rids; + internal Dictionary partialData; + internal int shift; + uint mask; + internal ushort[] firstLevelTable; + internal byte[] secondLevelTable; + internal uint dataOffset; + internal uint firstLevelOffset; + internal uint secondLevelOffset; + + /// + /// true if we can write a partial table, false if we must write + /// the full table. + /// + public bool CanWritePartialTable { + get { + return data == null && rids != null && rids.Count <= MAX_ROWS; + } + } + + /// + /// Gets the full size of the table + /// + uint FullTableSize { + get { return (uint)(mdTable.Rows * mdTable.TableInfo.RowSize); } + } + + /// + /// Gets the table type + /// + public Table Table { + get { return mdTable.Table; } + } + + /// + /// Constructor + /// + /// Hot heap version + /// The MD table + internal HotTable(HotHeapVersion version, IMDTable mdTable) { + this.mdTable = mdTable; + this.version = version; + + switch (version) { + case HotHeapVersion.CLR20: + hotTableHeaderSize = 0x12; + break; + case HotHeapVersion.CLR40: + hotTableHeaderSize = 0x16; + break; + default: + throw new ArgumentException("Invalid hot heap version"); + } + + this.alignedHotTableHeaderSize = Utils.AlignUp(this.hotTableHeaderSize, HT_ALIGNMENT); + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + mdTable.SetReadOnly(); + if (CanWritePartialTable) { + InitializePartialData(); + totalLength = CalculatePartialTableLength(); + } + else + totalLength = CalculateFullTableLength(); + } + + /// + /// Calculates the total size required to write a partial table. It is only called if + /// the partial table will be written. + /// + internal abstract uint CalculatePartialTableLength(); + + /// + /// Calculates the total size required to write a full table. It is only called if + /// the full table will be written. + /// + uint CalculateFullTableLength() { + return (uint)alignedHotTableHeaderSize + FullTableSize; + } + + /// + public uint GetFileLength() { + return totalLength; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + /// Adds a row. This method must be called to write a partial table. If too many rows + /// are added (see ), then the full table will be written. If this + /// method is never called, a full table will be written. + /// + /// The row ID. This must be the new rid, so this method can only be + /// called after the table row has been assigned a new rid. + public void Add(uint rid) { + if (totalLength != 0) + throw new InvalidOperationException("Can't call Add() after SetOffset() has been called"); + if (partialData != null || data != null) + throw new InvalidOperationException("Can't add data when full/partial data has been created"); + if (rid == 0 || rid > (uint)mdTable.Rows) + return; + if (rids == null) + rids = new List(); + rids.Add(rid); + } + + /// + /// Calls the to write all its rows to a buffer. This is the data + /// that will be written to this hot table. If this is not explicitly called, it will + /// be implicitly called later when all data must be written. The table will be set to + /// read-only. If this method is called, all data will be written to the heap even if + /// has been called. + /// + public void CreateFullData() { + mdTable.SetReadOnly(); + rids = null; + if (data != null) + return; + + data = new byte[FullTableSize]; + var writer = new BinaryWriter(new MemoryStream(data)); + writer.Write(mdTable); + if (writer.BaseStream.Position != data.Length) + throw new InvalidOperationException("Didn't write all MD table data"); + } + + /// + /// Creates the partial data of all rows that have been 'd so far. + /// If a partial table can't be created, is automatically + /// called instead. If this method isn't explicitly called, it will be implicitly called + /// later when the partial data must be written. The table will be set to read-only. + /// + public void CreatePartialData() { + mdTable.SetReadOnly(); + if (!CanWritePartialTable) { + CreateFullData(); + return; + } + InitializePartialData(); + var memStream = new MemoryStream(mdTable.TableInfo.RowSize); + var writer = new BinaryWriter(memStream); + foreach (var rid in rids) { + memStream.Position = 0; + var row = mdTable.Get(rid); + writer.Write(mdTable, row); + partialData[rid] = memStream.ToArray(); + } + } + + void InitializePartialData() { + if (partialData != null) + return; + + partialData = new Dictionary(rids.Count); + foreach (var rid in rids) + partialData[rid] = null; + InitializePartialRids(); + } + + /// + public void WriteTo(BinaryWriter writer) { + if (CanWritePartialTable) + PartialWriteTo(writer); + else + FullWriteTo(writer); + + firstLevelTable = null; + secondLevelTable = null; + partialData = null; + rids = null; + data = null; + } + + /// + /// Writes the full table to the hot table + /// + /// Writer + void FullWriteTo(BinaryWriter writer) { + CreateFullData(); + + var startPos = writer.BaseStream.Position; + writer.Write(mdTable.Rows); // hot records + writer.Write(0); // offset of 1st level table + writer.Write(0); // offset of 2nd level table + if (version == HotHeapVersion.CLR40) + writer.Write(0); // offset of indexes table + writer.Write(alignedHotTableHeaderSize); // offset of hot data (4-byte aligned) + writer.Write((ushort)0); // shift count + writer.WriteZeros(alignedHotTableHeaderSize - (int)(writer.BaseStream.Position - startPos)); + writer.Write(data); + } + + /// + /// Writes the partial table to the hot table + /// + /// Writer + internal abstract void PartialWriteTo(BinaryWriter writer); + + static int CountMaxBits(uint val) { + int bits = 0; + while (val != 0) { + val >>= 1; + bits++; + } + return bits; + } + + void InitializePartialRids() { + shift = CalculateShift(); + mask = (1U << shift) - 1; + SortRids(); + CreateFirstAndSecondLevelTables(); + } + + int CalculateShift() { + mdTable.SetReadOnly(); + int maxBits = CountMaxBits((uint)mdTable.Rows); + if (maxBits >= 16) + return maxBits - 8; + else + return maxBits / 2; + } + + void SortRids() { + // Make sure dupes are removed + rids.Clear(); + rids.AddRange(partialData.Keys); + + rids.Sort((a, b) => { + uint la = a & mask; + uint lb = b & mask; + if (la != lb) + return la.CompareTo(lb); + return (a >> shift).CompareTo(b >> shift); + }); + } + + void CreateFirstAndSecondLevelTables() { + // rids has already been sorted, first on lower bits, then on upper bits + firstLevelTable = new ushort[(1 << shift) + 1]; + int prevRid = 0, i2 = 0; + for (; i2 < partialData.Count; i2++) { + int rid = (int)(rids[i2] & mask); + while (prevRid <= rid) + firstLevelTable[prevRid++] = (ushort)i2; + } + while (prevRid < firstLevelTable.Length) + firstLevelTable[prevRid++] = (ushort)i2; + + secondLevelTable = new byte[partialData.Count]; + for (int i = 0; i < secondLevelTable.Length; i++) + secondLevelTable[i] = (byte)(rids[i] >> shift); + } + + /// + /// Writes the data + /// + /// Writer + internal void WritePartialData(BinaryWriter writer) { + foreach (var rid in rids) + writer.Write(partialData[rid]); + } + + /// + /// Writes the first level table + /// + /// Writer + internal void WriteFirstLevelTable(BinaryWriter writer) { + foreach (var s in firstLevelTable) + writer.Write(s); + } + + /// + /// Writes the second level table + /// + /// Writer + internal void WriteSecondLevelTable(BinaryWriter writer) { + writer.Write(secondLevelTable); + } + } + + /// + /// CLR 2.0 (.NET 2.0 - 3.5) hot table + /// + public sealed class HotTable20 : HotTable { + /// + /// Constructor + /// + /// The MD table + public HotTable20(IMDTable mdTable) + : base(HotHeapVersion.CLR20, mdTable) { + } + + /// + internal override uint CalculatePartialTableLength() { + uint len = 0; + + len += (uint)alignedHotTableHeaderSize; + + // Data + len = Utils.AlignUp(len, HT_ALIGNMENT); + dataOffset = len; + len += (uint)(partialData.Count * mdTable.TableInfo.RowSize); + + // First level table + len = Utils.AlignUp(len, HT_ALIGNMENT); + firstLevelOffset = len; + len += (uint)(firstLevelTable.Length * 2); + + // Second level table + len = Utils.AlignUp(len, HT_ALIGNMENT); + secondLevelOffset = len; + len += (uint)secondLevelTable.Length; + + return len; + } + + /// + internal override void PartialWriteTo(BinaryWriter writer) { + var startPos = writer.BaseStream.Position; + writer.Write(partialData.Count);// hot records + writer.Write(firstLevelOffset); // any alignment, all bits are used + writer.Write(secondLevelOffset);// any alignment, all bits are used + writer.Write(dataOffset); // any alignment, all bits are used + writer.Write((ushort)shift);// shift count + writer.WriteZeros(alignedHotTableHeaderSize - (int)(writer.BaseStream.Position - startPos)); + + uint offs; + + // Data + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(dataOffset - offs)); + WritePartialData(writer); + + // First level table + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(firstLevelOffset - offs)); + WriteFirstLevelTable(writer); + + // Second level table + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(secondLevelOffset - offs)); + WriteSecondLevelTable(writer); + } + } + + /// + /// CLR 4.0 (.NET 4.0 - 4.5) partial hot table + /// + public sealed class HotTable40 : HotTable { + uint indexesOffset; + + /// + /// Constructor + /// + /// The MD table + public HotTable40(IMDTable mdTable) + : base(HotHeapVersion.CLR40, mdTable) { + } + + /// + internal override uint CalculatePartialTableLength() { + uint len = 0; + + len += (uint)alignedHotTableHeaderSize; + + // Data + len = Utils.AlignUp(len, HT_ALIGNMENT); + dataOffset = len; + len += (uint)(partialData.Count * mdTable.TableInfo.RowSize); + + // First level table + len = Utils.AlignUp(len, HT_ALIGNMENT); + firstLevelOffset = len; + len += (uint)(firstLevelTable.Length * 2); + + // Second level table + len = Utils.AlignUp(len, HT_ALIGNMENT); + secondLevelOffset = len; + len += (uint)secondLevelTable.Length; + + // Indexes table + len = Utils.AlignUp(len, HT_ALIGNMENT); + indexesOffset = len; + len += (uint)(partialData.Count * 2); + + return len; + } + + /// + internal override void PartialWriteTo(BinaryWriter writer) { + var startPos = writer.BaseStream.Position; + writer.Write(partialData.Count);// hot records + writer.Write(firstLevelOffset); // any alignment, all bits are used + writer.Write(secondLevelOffset);// any alignment, all bits are used + writer.Write(indexesOffset);// any alignment, all bits are used + writer.Write(dataOffset); // any alignment, all bits are used + writer.Write((ushort)shift);// shift count + writer.WriteZeros(alignedHotTableHeaderSize - (int)(writer.BaseStream.Position - startPos)); + + uint offs; + + // Data + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(dataOffset - offs)); + WritePartialData(writer); + + // First level table + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(firstLevelOffset - offs)); + WriteFirstLevelTable(writer); + + // Second level table + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(secondLevelOffset - offs)); + WriteSecondLevelTable(writer); + + // Indexes table + offs = (uint)(writer.BaseStream.Position - startPos); + writer.WriteZeros((int)(indexesOffset - offs)); + WriteIndexesTable(writer); + } + + void WriteIndexesTable(BinaryWriter writer) { + for (int i = 0; i < partialData.Count; i++) + writer.Write((ushort)i); + } + } +} diff --git a/dnlib/DotNet/Writer/IChunk.cs b/dnlib/DotNet/Writer/IChunk.cs new file mode 100644 index 0000000..ed11613 --- /dev/null +++ b/dnlib/DotNet/Writer/IChunk.cs @@ -0,0 +1,96 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Data that gets written to the file + /// + public interface IChunk { + /// + /// Gets the file offset. This is valid only after has been called. + /// + FileOffset FileOffset { get; } + + /// + /// Gets the RVA. This is valid only after has been called. + /// + RVA RVA { get; } + + /// + /// Called when the file offset and RVA are known + /// + /// File offset of this chunk + /// RVA of this chunk + void SetOffset(FileOffset offset, RVA rva); + + /// + /// Gets the raw file length of this chunk. Must only be called after + /// has been called. + /// + /// Length of this chunk + uint GetFileLength(); + + /// + /// Gets the virtual size of this chunk. Must only be called after + /// has been called. + /// + /// Virtual size of this chunk + uint GetVirtualSize(); + + /// + /// Writes all data to at its current location. It's only + /// called after and have been called. + /// You cannot assume that 's file position is the same as this + /// chunk's file position. + /// + /// Destination + void WriteTo(BinaryWriter writer); + } + + public static partial class Extensions { + /// + /// Writes all data to and verifies that all bytes were written + /// + /// this + /// Destination + /// Not all bytes were written + public static void VerifyWriteTo(this IChunk chunk, BinaryWriter writer) { + long pos = writer.BaseStream.Position; + chunk.WriteTo(writer); + if (writer.BaseStream.Position - pos != chunk.GetFileLength()) + throw new IOException("Did not write all bytes"); + } + + /// + /// Writes a data directory + /// + /// Writer + /// The data + internal static void WriteDataDirectory(this BinaryWriter writer, IChunk chunk) { + if (chunk == null || chunk.GetVirtualSize() == 0) + writer.Write(0UL); + else { + writer.Write((uint)chunk.RVA); + writer.Write(chunk.GetVirtualSize()); + } + } + + /// + /// Writes a data directory + /// + /// Writer + /// The data + /// Fixed size of + internal static void WriteDataDirectory(this BinaryWriter writer, IChunk chunk, uint size) { + if (chunk == null || chunk.GetVirtualSize() == 0 || size == 0) + writer.Write(0UL); + else { + writer.Write((uint)chunk.RVA); + writer.Write(size); + } + } + } +} diff --git a/dnlib/DotNet/Writer/IHeap.cs b/dnlib/DotNet/Writer/IHeap.cs new file mode 100644 index 0000000..80a871b --- /dev/null +++ b/dnlib/DotNet/Writer/IHeap.cs @@ -0,0 +1,23 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Writer { + /// + /// .NET Heap interface + /// + public interface IHeap : IChunk { + /// + /// Gets the name of the heap + /// + string Name { get; } + + /// + /// Checks whether the heap is empty + /// + bool IsEmpty { get; } + + /// + /// Called when the heap should be set to read-only mode + /// + void SetReadOnly(); + } +} diff --git a/dnlib/DotNet/Writer/IMetaDataListener.cs b/dnlib/DotNet/Writer/IMetaDataListener.cs new file mode 100644 index 0000000..6d70475 --- /dev/null +++ b/dnlib/DotNet/Writer/IMetaDataListener.cs @@ -0,0 +1,235 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Writer { + /// + /// Gets notified of various events when writing the metadata + /// + public interface IMetaDataListener { + /// + /// Called by + /// + /// The metadata + /// Type of metadata event + void OnMetaDataEvent(MetaData metaData, MetaDataEvent evt); + } + + /// + /// A which does nothing + /// + public sealed class DummyMetaDataListener : IMetaDataListener { + /// + /// An instance of this dummy listener + /// + public static readonly DummyMetaDataListener Instance = new DummyMetaDataListener(); + + /// + public void OnMetaDataEvent(MetaData metaData, MetaDataEvent evt) { + } + } + + /// + /// All events + /// + public enum MetaDataEvent { + /// + /// Creating the tables has just begun + /// + BeginCreateTables, + + /// + /// Before allocating all TypeDef RIDs + /// + AllocateTypeDefRids, + + /// + /// Before allocating all MemberDef RIDs + /// + AllocateMemberDefRids, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + AllocateMemberDefRids0, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + AllocateMemberDefRids1, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + AllocateMemberDefRids2, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + AllocateMemberDefRids3, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + AllocateMemberDefRids4, + + /// + /// The rids of types, fields, methods, events, properties and parameters are + /// now known. + /// + MemberDefRidsAllocated, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + InitializeTypeDefsAndMemberDefs0, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + InitializeTypeDefsAndMemberDefs1, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + InitializeTypeDefsAndMemberDefs2, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + InitializeTypeDefsAndMemberDefs3, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + InitializeTypeDefsAndMemberDefs4, + + /// + /// The tables and rows of all types, fields, methods, events, properties and parameters + /// have been initialized. Method body RVAs are still not known, and no method has been + /// written yet. + /// + MemberDefsInitialized, + + /// + /// Before sorting most tables + /// + BeforeSortTables, + + /// + /// Most of the tables that should be sorted have been sorted. The CustomAttribute + /// table is still unsorted since it's not been created yet. + /// + MostTablesSorted, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteTypeDefAndMemberDefCustomAttributes0, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteTypeDefAndMemberDefCustomAttributes1, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteTypeDefAndMemberDefCustomAttributes2, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteTypeDefAndMemberDefCustomAttributes3, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteTypeDefAndMemberDefCustomAttributes4, + + /// + /// Custom attributes of all types, fields, methods, events, properties and parameters + /// have now been written. + /// + MemberDefCustomAttributesWritten, + + /// + /// All resources are about to be added to the .NET resources table + /// + BeginAddResources, + + /// + /// All resources have been added to the .NET resources table + /// + EndAddResources, + + /// + /// All method bodies are about to be written + /// + BeginWriteMethodBodies, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies0, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies1, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies2, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies3, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies4, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies5, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies6, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies7, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies8, + + /// + /// Sent by the metadata writer so a UI can update its progress bar + /// + WriteMethodBodies9, + + /// + /// All method bodies have been written. Their RVAs are still not known. + /// + EndWriteMethodBodies, + + /// + /// All tables are now sorted, including the CustomAttribute table. + /// + OnAllTablesSorted, + + /// + /// All tables have been created and all rows populated. The only columns that haven't + /// been initialized yet are the ones that are RVAs. + /// + EndCreateTables, + } +} diff --git a/dnlib/DotNet/Writer/IModuleWriterListener.cs b/dnlib/DotNet/Writer/IModuleWriterListener.cs new file mode 100644 index 0000000..6371811 --- /dev/null +++ b/dnlib/DotNet/Writer/IModuleWriterListener.cs @@ -0,0 +1,356 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Writer { + /// + /// Gets notified of various events when writing a module + /// + public interface IModuleWriterListener { + /// + /// Called by and its sub classes. + /// + /// The module writer + /// Type of writer event + void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt); + } + + /// + /// A which does nothing + /// + public sealed class DummyModuleWriterListener : IModuleWriterListener { + /// + /// An instance of this dummy listener + /// + public static readonly DummyModuleWriterListener Instance = new DummyModuleWriterListener(); + + /// + public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { + } + } + + /// + /// All / events + /// + public enum ModuleWriterEvent { + /// + /// Writing has just begun + /// + Begin, + + /// + /// All PE sections have been created + /// + PESectionsCreated, + + /// + /// All chunks have been created + /// + ChunksCreated, + + /// + /// All chunks have been added to their sections + /// + ChunksAddedToSections, + + /// + /// Original event: . + /// Creating the metadata tables has just begun + /// + MDBeginCreateTables, + + /// + /// Original event: . + /// Before allocating all TypeDef RIDs + /// + MDAllocateTypeDefRids, + + /// + /// Original event: . + /// Before allocating all MemberDef RIDs + /// + MDAllocateMemberDefRids, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDAllocateMemberDefRids0, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDAllocateMemberDefRids1, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDAllocateMemberDefRids2, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDAllocateMemberDefRids3, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDAllocateMemberDefRids4, + + /// + /// Original event: . + /// The rids of types, fields, methods, events, properties and parameters are + /// now known. + /// + MDMemberDefRidsAllocated, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDInitializeTypeDefsAndMemberDefs0, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDInitializeTypeDefsAndMemberDefs1, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDInitializeTypeDefsAndMemberDefs2, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDInitializeTypeDefsAndMemberDefs3, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDInitializeTypeDefsAndMemberDefs4, + + /// + /// Original event: . + /// The tables and rows of all types, fields, methods, events, properties and parameters + /// have been initialized. Method body RVAs are still not known, and no method has been + /// written yet. + /// + MDMemberDefsInitialized, + + /// + /// Original event: . + /// Before sorting most tables + /// + MDBeforeSortTables, + + /// + /// Original event: . + /// Most of the tables that should be sorted have been sorted. The CustomAttribute + /// table is still unsorted since it's not been created yet. + /// + MDMostTablesSorted, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteTypeDefAndMemberDefCustomAttributes0, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteTypeDefAndMemberDefCustomAttributes1, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteTypeDefAndMemberDefCustomAttributes2, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteTypeDefAndMemberDefCustomAttributes3, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteTypeDefAndMemberDefCustomAttributes4, + + /// + /// Original event: . + /// Custom attributes of all types, fields, methods, events, properties and parameters + /// have now been written. + /// + MDMemberDefCustomAttributesWritten, + + /// + /// Original event: . + /// All resources are about to be added to the .NET resources table + /// + MDBeginAddResources, + + /// + /// Original event: . + /// All resources have been added to the .NET resources table + /// + MDEndAddResources, + + /// + /// Original event: . + /// All method bodies are about to be written + /// + MDBeginWriteMethodBodies, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies0, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies1, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies2, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies3, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies4, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies5, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies6, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies7, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies8, + + /// + /// Original event: . + /// Sent by the metadata writer so a UI can update its progress bar + /// + MDWriteMethodBodies9, + + /// + /// Original event: . + /// All method bodies have been written. Their RVAs are still not known. + /// + MDEndWriteMethodBodies, + + /// + /// Original event: . + /// All tables are now sorted, including the CustomAttribute table. + /// + MDOnAllTablesSorted, + + /// + /// Original event: . + /// All tables have been created and all rows populated. The only columns that haven't + /// been initialized yet are the ones that are RVAs. + /// + MDEndCreateTables, + + /// + /// This event occurs before the PDB file is written. This event occurs even if no PDB file + /// will be written. + /// + BeginWritePdb, + + /// + /// The PDB file has been written. This event occurs even if no PDB file has been written. + /// + EndWritePdb, + + /// + /// This event occurs just before all RVAs and file offsets of the chunks are calculated. + /// + BeginCalculateRvasAndFileOffsets, + + /// + /// File offsets and RVAs of all chunks are now known. This includes method body and + /// field RVAs. Nothing has been written to the destination stream yet. + /// + EndCalculateRvasAndFileOffsets, + + /// + /// This event occurs before all chunks are written to the destination stream, and after + /// all RVAs and file offsets are known. + /// + BeginWriteChunks, + + /// + /// All chunks have been written to the destination stream. + /// + EndWriteChunks, + + /// + /// This event occurs before the strong name signature is calculated. This event + /// occurs even if the assembly isn't strong name signed. + /// + BeginStrongNameSign, + + /// + /// This event occurs after the strong name signature has been calculated. This event + /// occurs even if the assembly isn't strong name signed. + /// + EndStrongNameSign, + + /// + /// This event occurs before the checksum in the PE header is updated. This event + /// occurs even if the checksum isn't updated. + /// + BeginWritePEChecksum, + + /// + /// This event occurs after the checksum in the PE header has been updated. This event + /// occurs even if the checksum isn't updated. + /// + EndWritePEChecksum, + + /// + /// Writing has ended + /// + End, + } +} diff --git a/dnlib/DotNet/Writer/IOffsetHeap.cs b/dnlib/DotNet/Writer/IOffsetHeap.cs new file mode 100644 index 0000000..1e47fae --- /dev/null +++ b/dnlib/DotNet/Writer/IOffsetHeap.cs @@ -0,0 +1,34 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; + +namespace dnlib.DotNet.Writer { + /// + /// Interface to get and set raw heap data. Implemented by the offset heaps: #Strings, + /// #GUID, #Blob, and #US. + /// + /// Type of cooked data + public interface IOffsetHeap { + /// + /// Gets the size of the data as raw data when written to the heap + /// + /// The data + /// Size of the data as raw data when written to the heap + int GetRawDataSize(TValue data); + + /// + /// Overrides what value should be written to the heap. + /// + /// Offset of value. Must match an offset returned by + /// + /// The new raw data. The size must match the raw size exactly. + void SetRawData(uint offset, byte[] rawData); + + /// + /// Gets all inserted raw data and their offsets. The returned array + /// is owned by the caller. + /// + /// An enumerable of all raw data and their offsets + IEnumerable> GetAllRawData(); + } +} diff --git a/dnlib/DotNet/Writer/IWriterError.cs b/dnlib/DotNet/Writer/IWriterError.cs new file mode 100644 index 0000000..2b88a65 --- /dev/null +++ b/dnlib/DotNet/Writer/IWriterError.cs @@ -0,0 +1,16 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.DotNet.Writer { + /// + /// Gets notified of errors. The default handler should normally throw since the written data + /// will probably be invalid. Any error can be ignored. + /// + public interface IWriterError { + /// + /// Called when an error is detected (eg. a null pointer or other invalid value). The error + /// can be ignored but the written data won't be valid. + /// + /// Error message + void Error(string message); + } +} diff --git a/dnlib/DotNet/Writer/ImageCor20Header.cs b/dnlib/DotNet/Writer/ImageCor20Header.cs new file mode 100644 index 0000000..0610a9b --- /dev/null +++ b/dnlib/DotNet/Writer/ImageCor20Header.cs @@ -0,0 +1,143 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// Options to + /// + public sealed class Cor20HeaderOptions { + /// + /// Default major runtime version + /// + public const ushort DEFAULT_MAJOR_RT_VER = 2; + + /// + /// Default minor runtime version + /// + public const ushort DEFAULT_MINOR_RT_VER = 5; + + /// + /// Major runtime version + /// + public ushort? MajorRuntimeVersion; + + /// + /// Minor runtime version + /// + public ushort? MinorRuntimeVersion; + + /// + /// Flags + /// + public ComImageFlags? Flags; + + /// + /// Entry point or null. Either a Method/File token or an RVA. + /// + public uint? EntryPoint; + + /// + /// Default constructor + /// + public Cor20HeaderOptions() { + } + + /// + /// Constructor + /// + /// Flags + public Cor20HeaderOptions(ComImageFlags flags) { + this.Flags = flags; + } + + /// + /// Constructor + /// + /// Major runtime version (default is ) + /// Minor runtime version (default is ) + /// Flags + public Cor20HeaderOptions(ushort major, ushort minor, ComImageFlags flags) { + this.MajorRuntimeVersion = major; + this.MinorRuntimeVersion = minor; + this.Flags = flags; + } + } + + /// + /// .NET header + /// + public sealed class ImageCor20Header : IChunk { + FileOffset offset; + RVA rva; + Cor20HeaderOptions options; + + /// + /// Gets/sets the + /// + public MetaData MetaData { get; set; } + + /// + /// Gets/sets the .NET resources + /// + public NetResources NetResources { get; set; } + + /// + /// Gets/sets the strong name signature + /// + public StrongNameSignature StrongNameSignature { get; set; } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Constructor + /// + /// Options + public ImageCor20Header(Cor20HeaderOptions options) { + this.options = options; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return 0x48; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write(0x48); // cb + writer.Write(options.MajorRuntimeVersion ?? Cor20HeaderOptions.DEFAULT_MAJOR_RT_VER); + writer.Write(options.MinorRuntimeVersion ?? Cor20HeaderOptions.DEFAULT_MINOR_RT_VER); + writer.WriteDataDirectory(MetaData); + writer.Write((uint)(options.Flags ?? ComImageFlags.ILOnly)); + writer.Write(options.EntryPoint ?? 0); + writer.WriteDataDirectory(NetResources); + writer.WriteDataDirectory(StrongNameSignature); + writer.WriteDataDirectory(null); // Code manager table + writer.WriteDataDirectory(null); // Vtable fixups + writer.WriteDataDirectory(null); // Export address table jumps + writer.WriteDataDirectory(null); // Managed native header + } + } +} diff --git a/dnlib/DotNet/Writer/ImportAddressTable.cs b/dnlib/DotNet/Writer/ImportAddressTable.cs new file mode 100644 index 0000000..ab183bf --- /dev/null +++ b/dnlib/DotNet/Writer/ImportAddressTable.cs @@ -0,0 +1,52 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Import address table chunk + /// + public sealed class ImportAddressTable : IChunk { + FileOffset offset; + RVA rva; + + /// + /// Gets/sets the + /// + public ImportDirectory ImportDirectory { get; set; } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return 8; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write((uint)ImportDirectory.CorXxxMainRVA); + writer.Write(0); + } + } +} diff --git a/dnlib/DotNet/Writer/ImportDirectory.cs b/dnlib/DotNet/Writer/ImportDirectory.cs new file mode 100644 index 0000000..ffc16de --- /dev/null +++ b/dnlib/DotNet/Writer/ImportDirectory.cs @@ -0,0 +1,112 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using System.Text; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Import directory chunk + /// + public sealed class ImportDirectory : IChunk { + FileOffset offset; + RVA rva; + bool isExeFile; + uint length; + RVA importLookupTableRVA; + RVA corXxxMainRVA; + RVA mscoreeDllRVA; + int stringsPadding; + + /// + /// Gets/sets the + /// + public ImportAddressTable ImportAddressTable { get; set; } + + /// + /// Gets the RVA of _CorDllMain/_CorExeMain in the import lookup table + /// + public RVA CorXxxMainRVA { + get { return corXxxMainRVA; } + } + + /// + /// Gets RVA of _CorExeMain/_CorDllMain in the IAT + /// + public RVA IatCorXxxMainRVA { + get { return ImportAddressTable.RVA; } + } + + /// + /// Gets/sets a value indicating whether this is a EXE or a DLL file + /// + public bool IsExeFile { + get { return isExeFile; } + set { isExeFile = value; } + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + const uint STRINGS_ALIGNMENT = 16; + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + length = 0x28; + importLookupTableRVA = rva + length; + length += 8; + + stringsPadding = (int)(rva.AlignUp(STRINGS_ALIGNMENT) - rva); + length += (uint)stringsPadding; + corXxxMainRVA = rva + length; + length += 0xE; + mscoreeDllRVA = rva + length; + length += 0xC; + length++; + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write((uint)importLookupTableRVA); + writer.Write(0); // DateTimeStamp + writer.Write(0); // ForwarderChain + writer.Write((uint)mscoreeDllRVA); // Name + writer.Write((uint)ImportAddressTable.RVA); + writer.Write(0UL); + writer.Write(0UL); + writer.Write(0); + + // ImportLookupTable + writer.Write((uint)corXxxMainRVA); + writer.Write(0); + + writer.WriteZeros(stringsPadding); + writer.Write((ushort)0); + writer.Write(Encoding.UTF8.GetBytes(IsExeFile ? "_CorExeMain\0" : "_CorDllMain\0")); + writer.Write(Encoding.UTF8.GetBytes("mscoree.dll\0")); + + writer.Write((byte)0); + } + } +} diff --git a/dnlib/DotNet/Writer/MDTable.cs b/dnlib/DotNet/Writer/MDTable.cs new file mode 100644 index 0000000..b3874f9 --- /dev/null +++ b/dnlib/DotNet/Writer/MDTable.cs @@ -0,0 +1,204 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// MD table interface + /// + public interface IMDTable { + /// + /// Gets the table type + /// + Table Table { get; } + + /// + /// true if the table is empty + /// + bool IsEmpty { get; } + + /// + /// Gets the number of rows in this table + /// + int Rows { get; } + + /// + /// Gets/sets a value indicating whether it's sorted + /// + bool IsSorted { get; set; } + + /// + /// true if has been called + /// + bool IsReadOnly { get; } + + /// + /// Gets/sets the + /// + TableInfo TableInfo { get; set; } + + /// + /// Called when the table can't be modified any more + /// + void SetReadOnly(); + + /// + /// Gets a raw row + /// + /// Row ID + /// The raw row + IRawRow Get(uint rid); + + /// + /// Gets all raw rows + /// + IEnumerable GetRawRows(); + } + + /// + /// Creates rows in a table. Rows can optionally be shared to create a compact table. + /// + /// The raw row type + public sealed class MDTable : IMDTable, IEnumerable where T : IRawRow { + readonly Table table; + readonly Dictionary cachedDict; + readonly List cached; + TableInfo tableInfo; + bool isSorted; + bool isReadOnly; + + /// + public Table Table { + get { return table; } + } + + /// + public bool IsEmpty { + get { return cached.Count == 0; } + } + + /// + public int Rows { + get { return cached.Count; } + } + + /// + public bool IsSorted { + get { return isSorted; } + set { isSorted = value; } + } + + /// + public bool IsReadOnly { + get { return isReadOnly; } + } + + /// + public TableInfo TableInfo { + get { return tableInfo; } + set { tableInfo = value; } + } + + /// + /// Gets the value with rid + /// + /// The row ID + public T this[uint rid] { + get { return cached[(int)rid - 1]; } + } + + /// + public IRawRow Get(uint rid) { + return this[rid]; + } + + /// + /// Constructor + /// + /// The table type + /// Equality comparer + public MDTable(Table table, IEqualityComparer equalityComparer) { + this.table = table; + this.cachedDict = new Dictionary(equalityComparer); + this.cached = new List(); + } + + /// + public void SetReadOnly() { + isReadOnly = true; + } + + /// + /// Adds a row. If the row already exists, returns a rid to the existing one, else + /// it's created and a new rid is returned. + /// + /// The row. It's now owned by us and must NOT be modified by the caller. + /// The RID (row ID) of the row + public uint Add(T row) { + if (isReadOnly) + throw new ModuleWriterException(string.Format("Trying to modify table {0} after it's been set to read-only", table)); + uint rid; + if (cachedDict.TryGetValue(row, out rid)) + return rid; + return Create(row); + } + + /// + /// Creates a new row even if this row already exists. + /// + /// The row. It's now owned by us and must NOT be modified by the caller. + /// The RID (row ID) of the row + public uint Create(T row) { + if (isReadOnly) + throw new ModuleWriterException(string.Format("Trying to modify table {0} after it's been set to read-only", table)); + uint rid = (uint)cached.Count + 1; + if (!cachedDict.ContainsKey(row)) + cachedDict[row] = rid; + cached.Add(row); + return rid; + } + + /// + /// Re-adds all added rows. Should be called if rows have been modified after being + /// inserted. + /// + public void ReAddRows() { + if (isReadOnly) + throw new ModuleWriterException(string.Format("Trying to modify table {0} after it's been set to read-only", table)); + cachedDict.Clear(); + for (int i = 0; i < cached.Count; i++) { + uint rid = (uint)i + 1; + var row = cached[i]; + if (!cachedDict.ContainsKey(row)) + cachedDict[row] = rid; + } + } + + /// + /// Reset the table. + /// + public void Reset() { + if (isReadOnly) + throw new ModuleWriterException(string.Format("Trying to modify table {0} after it's been set to read-only", table)); + cachedDict.Clear(); + cached.Clear(); + } + + /// + public IEnumerator GetEnumerator() { + return cached.GetEnumerator(); + } + + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + + /// + public IEnumerable GetRawRows() { + foreach (var rawRow in cached) + yield return rawRow; + } + } +} diff --git a/dnlib/DotNet/Writer/MDTableWriter.cs b/dnlib/DotNet/Writer/MDTableWriter.cs new file mode 100644 index 0000000..755e743 --- /dev/null +++ b/dnlib/DotNet/Writer/MDTableWriter.cs @@ -0,0 +1,711 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// Writes s + /// + public static class MDTableWriter { + /// + /// Writes a raw row + /// + /// Writer + /// Table + /// Row + public static void Write(this BinaryWriter writer, IMDTable table, IRawRow row) { + if (table.Table == Table.Constant) { + var cols = table.TableInfo.Columns; + var row2 = (RawConstantRow)row; + writer.Write(row2.Type); + writer.Write(row2.Padding); + cols[1].Write(writer, row2.Parent); + cols[2].Write(writer, row2.Value); + } + else { + var cols = table.TableInfo.Columns; + foreach (var col in cols) + col.Write(writer, row.Read(col.Index)); + } + } + + /// + /// Writes a metadata table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, IMDTable table) { + switch (table.Table) { + case Table.Module: writer.Write((MDTable)table); break; + case Table.TypeRef: writer.Write((MDTable)table); break; + case Table.TypeDef: writer.Write((MDTable)table); break; + case Table.FieldPtr: writer.Write((MDTable)table); break; + case Table.Field: writer.Write((MDTable)table); break; + case Table.MethodPtr: writer.Write((MDTable)table); break; + case Table.Method: writer.Write((MDTable)table); break; + case Table.ParamPtr: writer.Write((MDTable)table); break; + case Table.Param: writer.Write((MDTable)table); break; + case Table.InterfaceImpl: writer.Write((MDTable)table); break; + case Table.MemberRef: writer.Write((MDTable)table); break; + case Table.Constant: writer.Write((MDTable)table); break; + case Table.CustomAttribute: writer.Write((MDTable)table); break; + case Table.FieldMarshal: writer.Write((MDTable)table); break; + case Table.DeclSecurity: writer.Write((MDTable)table); break; + case Table.ClassLayout: writer.Write((MDTable)table); break; + case Table.FieldLayout: writer.Write((MDTable)table); break; + case Table.StandAloneSig: writer.Write((MDTable)table); break; + case Table.EventMap: writer.Write((MDTable)table); break; + case Table.EventPtr: writer.Write((MDTable)table); break; + case Table.Event: writer.Write((MDTable)table); break; + case Table.PropertyMap: writer.Write((MDTable)table); break; + case Table.PropertyPtr: writer.Write((MDTable)table); break; + case Table.Property: writer.Write((MDTable)table); break; + case Table.MethodSemantics: writer.Write((MDTable)table); break; + case Table.MethodImpl: writer.Write((MDTable)table); break; + case Table.ModuleRef: writer.Write((MDTable)table); break; + case Table.TypeSpec: writer.Write((MDTable)table); break; + case Table.ImplMap: writer.Write((MDTable)table); break; + case Table.FieldRVA: writer.Write((MDTable)table); break; + case Table.ENCLog: writer.Write((MDTable)table); break; + case Table.ENCMap: writer.Write((MDTable)table); break; + case Table.Assembly: writer.Write((MDTable)table); break; + case Table.AssemblyProcessor: writer.Write((MDTable)table); break; + case Table.AssemblyOS: writer.Write((MDTable)table); break; + case Table.AssemblyRef: writer.Write((MDTable)table); break; + case Table.AssemblyRefProcessor: writer.Write((MDTable)table); break; + case Table.AssemblyRefOS: writer.Write((MDTable)table); break; + case Table.File: writer.Write((MDTable)table); break; + case Table.ExportedType: writer.Write((MDTable)table); break; + case Table.ManifestResource:writer.Write((MDTable)table); break; + case Table.NestedClass: writer.Write((MDTable)table); break; + case Table.GenericParam: writer.Write((MDTable)table); break; + case Table.MethodSpec: writer.Write((MDTable)table); break; + case Table.GenericParamConstraint: writer.Write((MDTable)table); break; + + default: + var cols = table.TableInfo.Columns; + foreach (var row in table.GetRawRows()) { + foreach (var col in cols) + col.Write(writer, row.Read(col.Index)); + } + break; + } + } + + /// + /// Writes a Module table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Generation); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.Mvid); + cols[3].Write(writer, row.EncId); + cols[4].Write(writer, row.EncBaseId); + } + } + + /// + /// Writes a TypeRef table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.ResolutionScope); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.Namespace); + } + } + + /// + /// Writes a TypeDef table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Flags); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.Namespace); + cols[3].Write(writer, row.Extends); + cols[4].Write(writer, row.FieldList); + cols[5].Write(writer, row.MethodList); + } + } + + /// + /// Writes a FieldPtr table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Field); + } + + /// + /// Writes a Field table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Flags); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.Signature); + } + } + + /// + /// Writes a MethodPtr table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Method); + } + + /// + /// Writes a Method table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.RVA); + writer.Write(row.ImplFlags); + writer.Write(row.Flags); + cols[3].Write(writer, row.Name); + cols[4].Write(writer, row.Signature); + cols[5].Write(writer, row.ParamList); + } + } + + /// + /// Writes a ParamPtr table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Param); + } + + /// + /// Writes a Param table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Flags); + writer.Write(row.Sequence); + cols[2].Write(writer, row.Name); + } + } + + /// + /// Writes a InterfaceImpl table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Class); + cols[1].Write(writer, row.Interface); + } + } + + /// + /// Writes a MemberRef table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Class); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.Signature); + } + } + + /// + /// Writes a Constant table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Type); + writer.Write(row.Padding); + cols[1].Write(writer, row.Parent); + cols[2].Write(writer, row.Value); + } + } + + /// + /// Writes a CustomAttribute table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Parent); + cols[1].Write(writer, row.Type); + cols[2].Write(writer, row.Value); + } + } + + /// + /// Writes a FieldMarshal table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Parent); + cols[1].Write(writer, row.NativeType); + } + } + + /// + /// Writes a DeclSecurity table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Action); + cols[1].Write(writer, row.Parent); + cols[2].Write(writer, row.PermissionSet); + } + } + + /// + /// Writes a ClassLayout table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.PackingSize); + writer.Write(row.ClassSize); + cols[2].Write(writer, row.Parent); + } + } + + /// + /// Writes a FieldLayout table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.OffSet); + cols[1].Write(writer, row.Field); + } + } + + /// + /// Writes a StandAloneSig table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Signature); + } + + /// + /// Writes a EventMap table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Parent); + cols[1].Write(writer, row.EventList); + } + } + + /// + /// Writes a EventPtr table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Event); + } + + /// + /// Writes a Event table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.EventFlags); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.EventType); + } + } + + /// + /// Writes a PropertyMap table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Parent); + cols[1].Write(writer, row.PropertyList); + } + } + + /// + /// Writes a PropertyPtr table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Property); + } + + /// + /// Writes a Property table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.PropFlags); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.Type); + } + } + + /// + /// Writes a MethodSemantics table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Semantic); + cols[1].Write(writer, row.Method); + cols[2].Write(writer, row.Association); + } + } + + /// + /// Writes a MethodImpl table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Class); + cols[1].Write(writer, row.MethodBody); + cols[2].Write(writer, row.MethodDeclaration); + } + } + + /// + /// Writes a ModuleRef table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Name); + } + + /// + /// Writes a TypeSpec table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) + cols[0].Write(writer, row.Signature); + } + + /// + /// Writes a ImplMap table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.MappingFlags); + cols[1].Write(writer, row.MemberForwarded); + cols[2].Write(writer, row.ImportName); + cols[3].Write(writer, row.ImportScope); + } + } + + /// + /// Writes a FieldRVA table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.RVA); + cols[1].Write(writer, row.Field); + } + } + + /// + /// Writes a ENCLog table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + foreach (var row in table) { + writer.Write(row.Token); + writer.Write(row.FuncCode); + } + } + + /// + /// Writes a ENCMap table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + foreach (var row in table) + writer.Write(row.Token); + } + + /// + /// Writes a Assembly table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.HashAlgId); + writer.Write(row.MajorVersion); + writer.Write(row.MinorVersion); + writer.Write(row.BuildNumber); + writer.Write(row.RevisionNumber); + writer.Write(row.Flags); + cols[6].Write(writer, row.PublicKey); + cols[7].Write(writer, row.Name); + cols[8].Write(writer, row.Locale); + } + } + + /// + /// Writes a AssemblyProcessor table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + foreach (var row in table) + writer.Write(row.Processor); + } + + /// + /// Writes a AssemblyOS table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + foreach (var row in table) { + writer.Write(row.OSPlatformId); + writer.Write(row.OSMajorVersion); + writer.Write(row.OSMinorVersion); + } + } + + /// + /// Writes a AssemblyRef table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.MajorVersion); + writer.Write(row.MinorVersion); + writer.Write(row.BuildNumber); + writer.Write(row.RevisionNumber); + writer.Write(row.Flags); + cols[5].Write(writer, row.PublicKeyOrToken); + cols[6].Write(writer, row.Name); + cols[7].Write(writer, row.Locale); + cols[8].Write(writer, row.HashValue); + } + } + + /// + /// Writes a AssemblyRefProcessor table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Processor); + cols[1].Write(writer, row.AssemblyRef); + } + } + + /// + /// Writes a AssemblyRefOS table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.OSPlatformId); + writer.Write(row.OSMajorVersion); + writer.Write(row.OSMinorVersion); + cols[3].Write(writer, row.AssemblyRef); + } + } + + /// + /// Writes a File table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Flags); + cols[1].Write(writer, row.Name); + cols[2].Write(writer, row.HashValue); + } + } + + /// + /// Writes a ExportedType table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Flags); + writer.Write(row.TypeDefId); + cols[2].Write(writer, row.TypeName); + cols[3].Write(writer, row.TypeNamespace); + cols[4].Write(writer, row.Implementation); + } + } + + /// + /// Writes a ManifestResource table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + writer.Write(row.Offset); + writer.Write(row.Flags); + cols[2].Write(writer, row.Name); + cols[3].Write(writer, row.Implementation); + } + } + + /// + /// Writes a NestedClass table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.NestedClass); + cols[1].Write(writer, row.EnclosingClass); + } + } + + /// + /// Writes a GenericParam table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + bool useKindColumn = cols.Count >= 5; + foreach (var row in table) { + writer.Write(row.Number); + writer.Write(row.Flags); + cols[2].Write(writer, row.Owner); + cols[3].Write(writer, row.Name); + if (useKindColumn) + cols[4].Write(writer, row.Kind); + } + } + + /// + /// Writes a MethodSpec table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Method); + cols[1].Write(writer, row.Instantiation); + } + } + + /// + /// Writes a GenericParamConstraint table + /// + /// Writer + /// Table + public static void Write(this BinaryWriter writer, MDTable table) { + var cols = table.TableInfo.Columns; + foreach (var row in table) { + cols[0].Write(writer, row.Owner); + cols[1].Write(writer, row.Constraint); + } + } + } +} diff --git a/dnlib/DotNet/Writer/MarshalBlobWriter.cs b/dnlib/DotNet/Writer/MarshalBlobWriter.cs new file mode 100644 index 0000000..ae65035 --- /dev/null +++ b/dnlib/DotNet/Writer/MarshalBlobWriter.cs @@ -0,0 +1,145 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; + +namespace dnlib.DotNet.Writer { + /// + /// Writes field marshal blobs + /// + public struct MarshalBlobWriter : IDisposable, IFullNameCreatorHelper { + readonly ModuleDef module; + readonly MemoryStream outStream; + readonly BinaryWriter writer; + readonly IWriterError helper; + + /// + /// Creates a field marshal blob from + /// + /// Owner module + /// Marshal type + /// Helps this class + /// A field marshal blob or null if is + /// null + public static byte[] Write(ModuleDef module, MarshalType marshalType, IWriterError helper) { + using (var writer = new MarshalBlobWriter(module, helper)) + return writer.Write(marshalType); + } + + MarshalBlobWriter(ModuleDef module, IWriterError helper) { + this.module = module; + this.outStream = new MemoryStream(); + this.writer = new BinaryWriter(outStream); + this.helper = helper; + } + + byte[] Write(MarshalType marshalType) { + if (marshalType == null) + return null; + + var type = marshalType.NativeType; + if (type != NativeType.RawBlob) { + if ((uint)type > byte.MaxValue) + helper.Error("Invalid MarshalType.NativeType"); + writer.Write((byte)type); + } + bool canWrite = true; + switch (type) { + case NativeType.FixedSysString: + var fixedSysString = (FixedSysStringMarshalType)marshalType; + if (fixedSysString.IsSizeValid) + WriteCompressedUInt32((uint)fixedSysString.Size); + break; + + case NativeType.SafeArray: + var safeArray = (SafeArrayMarshalType)marshalType; + if (UpdateCanWrite(safeArray.IsVariantTypeValid, "VariantType", ref canWrite)) + WriteCompressedUInt32((uint)safeArray.VariantType); + if (UpdateCanWrite(safeArray.IsUserDefinedSubTypeValid, "UserDefinedSubType", ref canWrite)) + Write(safeArray.UserDefinedSubType.AssemblyQualifiedName); + break; + + case NativeType.FixedArray: + var fixedArray = (FixedArrayMarshalType)marshalType; + if (UpdateCanWrite(fixedArray.IsSizeValid, "Size", ref canWrite)) + WriteCompressedUInt32((uint)fixedArray.Size); + if (UpdateCanWrite(fixedArray.IsElementTypeValid, "ElementType", ref canWrite)) + WriteCompressedUInt32((uint)fixedArray.ElementType); + break; + + case NativeType.Array: + var array = (ArrayMarshalType)marshalType; + if (UpdateCanWrite(array.IsElementTypeValid, "ElementType", ref canWrite)) + WriteCompressedUInt32((uint)array.ElementType); + if (UpdateCanWrite(array.IsParamNumberValid, "ParamNumber", ref canWrite)) + WriteCompressedUInt32((uint)array.ParamNumber); + if (UpdateCanWrite(array.IsSizeValid, "Size", ref canWrite)) + WriteCompressedUInt32((uint)array.Size); + if (UpdateCanWrite(array.IsFlagsValid, "Flags", ref canWrite)) + WriteCompressedUInt32((uint)array.Flags); + break; + + case NativeType.CustomMarshaler: + var custMarshaler = (CustomMarshalType)marshalType; + Write(custMarshaler.Guid); + Write(custMarshaler.NativeTypeName); + var cm = custMarshaler.CustomMarshaler; + var cmName = cm == null ? string.Empty : FullNameCreator.AssemblyQualifiedName(cm, this); + Write(cmName); + Write(custMarshaler.Cookie); + break; + + case NativeType.IUnknown: + case NativeType.IDispatch: + case NativeType.IntF: + var iface = (InterfaceMarshalType)marshalType; + if (iface.IsIidParamIndexValid) + WriteCompressedUInt32((uint)iface.IidParamIndex); + break; + + case NativeType.RawBlob: + var data = ((RawMarshalType)marshalType).Data; + if (data != null) + writer.Write(data); + break; + + default: + break; + } + + writer.Flush(); + return outStream.ToArray(); + } + + bool UpdateCanWrite(bool isValid, string field, ref bool canWriteMore) { + if (!canWriteMore) { + if (isValid) + helper.Error(string.Format("MarshalType field {0} is valid even though a previous field was invalid", field)); + return canWriteMore; + } + + if (!isValid) + canWriteMore = false; + + return canWriteMore; + } + + uint WriteCompressedUInt32(uint value) { + return writer.WriteCompressedUInt32(helper, value); + } + + void Write(UTF8String s) { + writer.Write(helper, s); + } + + /// + public void Dispose() { + if (outStream != null) + outStream.Dispose(); + } + + bool IFullNameCreatorHelper.MustUseAssemblyName(IType type) { + return FullNameCreator.MustUseAssemblyName(module, type); + } + } +} diff --git a/dnlib/DotNet/Writer/MaxStackCalculator.cs b/dnlib/DotNet/Writer/MaxStackCalculator.cs new file mode 100644 index 0000000..7654194 --- /dev/null +++ b/dnlib/DotNet/Writer/MaxStackCalculator.cs @@ -0,0 +1,149 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.DotNet.Emit; + +namespace dnlib.DotNet.Writer { + /// + /// Calculates max stack usage by using a simple pass over all instructions. This value + /// can be placed in the fat method header's MaxStack field. + /// + public struct MaxStackCalculator { + readonly IList instructions; + readonly IList exceptionHandlers; + readonly Dictionary stackHeights; + int errors; + + /// + /// Gets max stack value + /// + /// All instructions + /// All exception handlers + /// Max stack value + public static uint GetMaxStack(IList instructions, IList exceptionHandlers) { + uint maxStack; + new MaxStackCalculator(instructions, exceptionHandlers).Calculate(out maxStack); + return maxStack; + } + + /// + /// Gets max stack value + /// + /// All instructions + /// All exception handlers + /// Updated with max stack value + /// true if no errors were detected, false otherwise + public static bool GetMaxStack(IList instructions, IList exceptionHandlers, out uint maxStack) { + return new MaxStackCalculator(instructions, exceptionHandlers).Calculate(out maxStack); + } + + MaxStackCalculator(IList instructions, IList exceptionHandlers) { + this.instructions = instructions; + this.exceptionHandlers = exceptionHandlers; + this.stackHeights = new Dictionary(); + this.errors = 0; + } + + bool Calculate(out uint maxStack) { + foreach (var eh in exceptionHandlers) { + if (eh == null) + continue; + if (eh.TryStart != null) + stackHeights[eh.TryStart] = 0; + if (eh.FilterStart != null) + stackHeights[eh.FilterStart] = 1; + if (eh.HandlerStart != null) { + bool pushed = eh.HandlerType == ExceptionHandlerType.Catch || eh.HandlerType == ExceptionHandlerType.Filter; + stackHeights[eh.HandlerStart] = pushed ? 1 : 0; + } + } + + int stack = 0; + bool resetStack = false; + foreach (var instr in instructions) { + if (instr == null) + continue; + + if (resetStack) { + stackHeights.TryGetValue(instr, out stack); + resetStack = false; + } + stack = WriteStack(instr, stack); + + if (instr.OpCode.Code == Code.Jmp) { + if (stack != 0) + errors++; + } + else { + int pushes, pops; + instr.CalculateStackUsage(out pushes, out pops); + if (pops == -1) + stack = 0; + else { + stack -= pops; + if (stack < 0) { + errors++; + stack = 0; + } + stack += pushes; + } + } + if (stack < 0) { + errors++; + stack = 0; + } + + switch (instr.OpCode.FlowControl) { + case FlowControl.Branch: + WriteStack(instr.Operand as Instruction, stack); + resetStack = true; + break; + + case FlowControl.Call: + if (instr.OpCode.Code == Code.Jmp) + resetStack = true; + break; + + case FlowControl.Cond_Branch: + if (instr.OpCode.Code == Code.Switch) { + var targets = instr.Operand as IList; + if (targets != null) { + foreach (var target in targets) + WriteStack(target, stack); + } + } + else + WriteStack(instr.Operand as Instruction, stack); + break; + + case FlowControl.Return: + case FlowControl.Throw: + resetStack = true; + break; + } + } + + stack = 0; + foreach (var v in stackHeights.Values) + stack = Math.Max(stack, v); + maxStack = (uint)stack; + return errors == 0; + } + + int WriteStack(Instruction instr, int stack) { + if (instr == null) { + errors++; + return stack; + } + int stack2; + if (stackHeights.TryGetValue(instr, out stack2)) { + if (stack != stack2) + errors++; + return stack2; + } + stackHeights[instr] = stack; + return stack; + } + } +} diff --git a/dnlib/DotNet/Writer/MetaData.cs b/dnlib/DotNet/Writer/MetaData.cs new file mode 100644 index 0000000..ebe43b5 --- /dev/null +++ b/dnlib/DotNet/Writer/MetaData.cs @@ -0,0 +1,2766 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using dnlib.IO; +using dnlib.PE; +using dnlib.DotNet.MD; +using dnlib.DotNet.Emit; + +namespace dnlib.DotNet.Writer { + /// + /// flags + /// + [Flags] + public enum MetaDataFlags : uint { + /// + /// Preserves all rids in the TypeRef table + /// + PreserveTypeRefRids = 1, + + /// + /// Preserves all rids in the TypeDef table + /// + PreserveTypeDefRids = 2, + + /// + /// Preserves all rids in the Field table + /// + PreserveFieldRids = 4, + + /// + /// Preserves all rids in the Method table + /// + PreserveMethodRids = 8, + + /// + /// Preserves all rids in the Param table + /// + PreserveParamRids = 0x10, + + /// + /// Preserves all rids in the MemberRef table + /// + PreserveMemberRefRids = 0x20, + + /// + /// Preserves all rids in the StandAloneSig table + /// + PreserveStandAloneSigRids = 0x40, + + /// + /// Preserves all rids in the Event table + /// + PreserveEventRids = 0x80, + + /// + /// Preserves all rids in the Property table + /// + PreservePropertyRids = 0x100, + + /// + /// Preserves all rids in the TypeSpec table + /// + PreserveTypeSpecRids = 0x200, + + /// + /// Preserves all rids in the MethodSpec table + /// + PreserveMethodSpecRids = 0x400, + + /// + /// Preserves all method rids, i.e., Method, MemberRef and + /// MethodSpec rids. + /// + PreserveAllMethodRids = PreserveMethodRids | PreserveMemberRefRids | PreserveMethodSpecRids, + + /// + /// Preserves all rids in the following tables: TypeRef, TypeDef, + /// Field, Method, Param, MemberRef, StandAloneSig, + /// Event, Property, TypeSpec, MethodSpec + /// + PreserveRids = PreserveTypeRefRids | + PreserveTypeDefRids | + PreserveFieldRids | + PreserveMethodRids | + PreserveParamRids | + PreserveMemberRefRids | + PreserveStandAloneSigRids | + PreserveEventRids | + PreservePropertyRids | + PreserveTypeSpecRids | + PreserveMethodSpecRids, + + /// + /// Preserves all offsets in the #Strings heap (the original #Strings heap will be saved + /// in the new file). Type names, field names, and other non-user strings are stored + /// in the #Strings heap. + /// + PreserveStringsOffsets = 0x800, + + /// + /// Preserves all offsets in the #US heap (the original #US heap will be saved + /// in the new file). User strings (referenced by the ldstr instruction) are stored in + /// the #US heap. + /// + PreserveUSOffsets = 0x1000, + + /// + /// Preserves all offsets in the #Blob heap (the original #Blob heap will be saved + /// in the new file). Custom attributes, signatures and other blobs are stored in the + /// #Blob heap. + /// + PreserveBlobOffsets = 0x2000, + + /// + /// Preserves the extra data that is present after the original signature in the #Blob + /// heap. This extra data shouldn't be present but might be present if an obfuscator + /// has added this extra data and is eg. using it to decrypt stuff. + /// + PreserveExtraSignatureData = 0x4000, + + /// + /// Preserves as much as possible + /// + PreserveAll = PreserveRids | PreserveStringsOffsets | PreserveUSOffsets | + PreserveBlobOffsets | PreserveExtraSignatureData, + + /// + /// The original method body's max stack field should be used and a new one should not + /// be calculated. + /// + KeepOldMaxStack = 0x8000, + + /// + /// Always create the #GUID heap even if it's empty + /// + AlwaysCreateGuidHeap = 0x10000, + + /// + /// Always create the #Strings heap even if it's empty + /// + AlwaysCreateStringsHeap = 0x20000, + + /// + /// Always create the #US heap even if it's empty + /// + AlwaysCreateUSHeap = 0x40000, + + /// + /// Always create the #Blob heap even if it's empty + /// + AlwaysCreateBlobHeap = 0x80000, + } + + /// + /// options + /// + public sealed class MetaDataOptions { + MetaDataHeaderOptions metaDataHeaderOptions; + TablesHeapOptions tablesHeapOptions; + List otherHeaps; + List otherHeapsEnd; + + /// + /// Gets/sets the options. This is never null. + /// + public MetaDataHeaderOptions MetaDataHeaderOptions { + get { return metaDataHeaderOptions ?? (metaDataHeaderOptions = new MetaDataHeaderOptions()); } + set { metaDataHeaderOptions = value; } + } + + /// + /// Gets/sets the options. This is never null. + /// + public TablesHeapOptions TablesHeapOptions { + get { return tablesHeapOptions ?? (tablesHeapOptions = new TablesHeapOptions()); } + set { tablesHeapOptions = value; } + } + + /// + /// Various options + /// + public MetaDataFlags Flags; + + /// + /// Any additional heaps that should be added to the beginning of the heaps list + /// + public List OtherHeaps { + get { return otherHeaps ?? (otherHeaps = new List()); } + } + + /// + /// Any additional heaps that should be added to end of the heaps list + /// + public List OtherHeapsEnd { + get { return otherHeapsEnd ?? (otherHeapsEnd = new List()); } + } + + /// + /// Default constructor + /// + public MetaDataOptions() { + } + + /// + /// Constructor + /// + /// Flags + public MetaDataOptions(MetaDataFlags flags) { + this.Flags = flags; + } + + /// + /// Constructor + /// + /// Meta data header options + public MetaDataOptions(MetaDataHeaderOptions mdhOptions) { + this.metaDataHeaderOptions = mdhOptions; + } + + /// + /// Constructor + /// + /// Meta data header options + /// Flags + public MetaDataOptions(MetaDataHeaderOptions mdhOptions, MetaDataFlags flags) { + this.Flags = flags; + this.metaDataHeaderOptions = mdhOptions; + } + } + + /// + /// .NET meta data + /// + public abstract class MetaData : IChunk, ISignatureWriterHelper, ITokenCreator, ICustomAttributeWriterHelper { + uint length; + FileOffset offset; + RVA rva; + readonly MetaDataOptions options; + IMetaDataListener listener; + ILogger logger; + internal readonly ModuleDef module; + internal readonly UniqueChunkList constants; + internal readonly MethodBodyChunks methodBodies; + internal readonly NetResources netResources; + internal readonly MetaDataHeader metaDataHeader; + internal HotHeap hotHeap; + internal readonly TablesHeap tablesHeap; + internal readonly StringsHeap stringsHeap; + internal readonly USHeap usHeap; + internal readonly GuidHeap guidHeap; + internal readonly BlobHeap blobHeap; + internal List allTypeDefs; + internal readonly Rows moduleDefInfos = new Rows(); + internal readonly SortedRows interfaceImplInfos = new SortedRows(); + internal readonly SortedRows hasConstantInfos = new SortedRows(); + internal readonly SortedRows customAttributeInfos = new SortedRows(); + internal readonly SortedRows fieldMarshalInfos = new SortedRows(); + internal readonly SortedRows declSecurityInfos = new SortedRows(); + internal readonly SortedRows classLayoutInfos = new SortedRows(); + internal readonly SortedRows fieldLayoutInfos = new SortedRows(); + internal readonly Rows eventMapInfos = new Rows(); + internal readonly Rows propertyMapInfos = new Rows(); + internal readonly SortedRows methodSemanticsInfos = new SortedRows(); + internal readonly SortedRows methodImplInfos = new SortedRows(); + internal readonly Rows moduleRefInfos = new Rows(); + internal readonly SortedRows implMapInfos = new SortedRows(); + internal readonly SortedRows fieldRVAInfos = new SortedRows(); + internal readonly Rows assemblyInfos = new Rows(); + internal readonly Rows assemblyRefInfos = new Rows(); + internal readonly Rows fileDefInfos = new Rows(); + internal readonly Rows exportedTypeInfos = new Rows(); + internal readonly Rows manifestResourceInfos = new Rows(); + internal readonly SortedRows nestedClassInfos = new SortedRows(); + internal readonly SortedRows genericParamInfos = new SortedRows(); + internal readonly SortedRows genericParamConstraintInfos = new SortedRows(); + internal readonly Dictionary methodToBody = new Dictionary(); + internal readonly Dictionary methodToNativeBody = new Dictionary(); + internal readonly Dictionary embeddedResourceToByteArray = new Dictionary(); + readonly Dictionary fieldToInitialValue = new Dictionary(); + + /// + /// Gets/sets the listener + /// + public IMetaDataListener Listener { + get { return listener ?? (listener = DummyMetaDataListener.Instance); } + set { listener = value; } + } + + /// + /// Gets/sets the logger + /// + public ILogger Logger { + get { return logger; } + set { logger = value; } + } + + /// + /// Gets the module + /// + public ModuleDef Module { + get { return module; } + } + + /// + /// Gets the constants + /// + public UniqueChunkList Constants { + get { return constants; } + } + + /// + /// Gets the method body chunks + /// + public MethodBodyChunks MethodBodyChunks { + get { return methodBodies; } + } + + /// + /// Gets the .NET resources + /// + public NetResources NetResources { + get { return netResources; } + } + + /// + /// Gets the MD header + /// + public MetaDataHeader MetaDataHeader { + get { return metaDataHeader; } + } + + /// + /// Gets/sets the hot heap (#!) + /// + public HotHeap HotHeap { + get { return hotHeap; } + set { hotHeap = value; } + } + + /// + /// Gets the tables heap. Access to this heap is not recommended, but is useful if you + /// want to add random table entries. + /// + public TablesHeap TablesHeap { + get { return tablesHeap; } + } + + /// + /// Gets the #Strings heap. Access to this heap is not recommended, but is useful if you + /// want to add random strings. + /// + public StringsHeap StringsHeap { + get { return stringsHeap; } + } + + /// + /// Gets the #US heap. Access to this heap is not recommended, but is useful if + /// you want to add random user strings. + /// + public USHeap USHeap { + get { return usHeap; } + } + + /// + /// Gets the #GUID heap. Access to this heap is not recommended, but is useful if you + /// want to add random GUIDs. + /// + public GuidHeap GuidHeap { + get { return guidHeap; } + } + + /// + /// Gets the #Blob heap. Access to this heap is not recommended, but is useful if you + /// want to add random blobs. + /// + public BlobHeap BlobHeap { + get { return blobHeap; } + } + + /// + /// The public key that should be used instead of the one in . + /// + internal byte[] AssemblyPublicKey { get; set; } + + internal sealed class SortedRows where T : class where TRow : class { + public List infos = new List(); + Dictionary toRid = new Dictionary(); + bool isSorted; + + public struct Info { + public T data; + public TRow row; + public Info(T data, TRow row) { + this.data = data; + this.row = row; + } + } + + public void Add(T data, TRow row) { + if (isSorted) + throw new ModuleWriterException(string.Format("Adding a row after it's been sorted. Table: {0}", row.GetType())); + infos.Add(new Info(data, row)); + toRid[data] = (uint)toRid.Count + 1; + } + + public void Sort(Comparison.Info> comparison) { + infos.Sort(comparison); + toRid.Clear(); + for (int i = 0; i < infos.Count; i++) + toRid[infos[i].data] = (uint)i + 1; + isSorted = true; + } + + public uint Rid(T data) { + return toRid[data]; + } + + public bool TryGetRid(T data, out uint rid) { + if (data == null) { + rid = 0; + return false; + } + return toRid.TryGetValue(data, out rid); + } + } + + internal sealed class Rows where T : class { + Dictionary dict = new Dictionary(); + + public int Count { + get { return dict.Count; } + } + + public bool TryGetRid(T value, out uint rid) { + if (value == null) { + rid = 0; + return false; + } + return dict.TryGetValue(value, out rid); + } + + public bool Exists(T value) { + return dict.ContainsKey(value); + } + + public void Add(T value, uint rid) { + dict.Add(value, rid); + } + + public uint Rid(T value) { + return dict[value]; + } + + public void SetRid(T value, uint rid) { + dict[value] = rid; + } + } + + /// + /// Creates a instance + /// + /// Module + /// Constants list + /// Method bodies list + /// .NET resources list + /// A new instance + public static MetaData Create(ModuleDef module, UniqueChunkList constants, MethodBodyChunks methodBodies, NetResources netResources) { + return Create(module, constants, methodBodies, netResources, null); + } + + /// + /// Creates a instance + /// + /// Module + /// Constants list + /// Method bodies list + /// .NET resources list + /// Options + /// A new instance + public static MetaData Create(ModuleDef module, UniqueChunkList constants, MethodBodyChunks methodBodies, NetResources netResources, MetaDataOptions options) { + if (options == null) + options = new MetaDataOptions(); + if ((options.Flags & MetaDataFlags.PreserveRids) != 0 && module is ModuleDefMD) + return new PreserveTokensMetaData(module, constants, methodBodies, netResources, options); + return new NormalMetaData(module, constants, methodBodies, netResources, options); + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the bit + /// + public bool PreserveTypeRefRids { + get { return (options.Flags & MetaDataFlags.PreserveTypeRefRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveTypeDefRids { + get { return (options.Flags & MetaDataFlags.PreserveTypeDefRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveFieldRids { + get { return (options.Flags & MetaDataFlags.PreserveFieldRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveMethodRids { + get { return (options.Flags & MetaDataFlags.PreserveMethodRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveParamRids { + get { return (options.Flags & MetaDataFlags.PreserveParamRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveMemberRefRids { + get { return (options.Flags & MetaDataFlags.PreserveMemberRefRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveStandAloneSigRids { + get { return (options.Flags & MetaDataFlags.PreserveStandAloneSigRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveEventRids { + get { return (options.Flags & MetaDataFlags.PreserveEventRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreservePropertyRids { + get { return (options.Flags & MetaDataFlags.PreservePropertyRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveTypeSpecRids { + get { return (options.Flags & MetaDataFlags.PreserveTypeSpecRids) != 0; } + } + + /// + /// Gets the bit + /// + public bool PreserveMethodSpecRids { + get { return (options.Flags & MetaDataFlags.PreserveMethodSpecRids) != 0; } + } + + /// + /// Gets/sets the bit + /// + public bool PreserveStringsOffsets { + get { return (options.Flags & MetaDataFlags.PreserveStringsOffsets) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.PreserveStringsOffsets; + else + options.Flags &= ~MetaDataFlags.PreserveStringsOffsets; + } + } + + /// + /// Gets/sets the bit + /// + public bool PreserveUSOffsets { + get { return (options.Flags & MetaDataFlags.PreserveUSOffsets) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.PreserveUSOffsets; + else + options.Flags &= ~MetaDataFlags.PreserveUSOffsets; + } + } + + /// + /// Gets/sets the bit + /// + public bool PreserveBlobOffsets { + get { return (options.Flags & MetaDataFlags.PreserveBlobOffsets) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.PreserveBlobOffsets; + else + options.Flags &= ~MetaDataFlags.PreserveBlobOffsets; + } + } + + /// + /// Gets/sets the bit + /// + public bool PreserveExtraSignatureData { + get { return (options.Flags & MetaDataFlags.PreserveExtraSignatureData) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.PreserveExtraSignatureData; + else + options.Flags &= ~MetaDataFlags.PreserveExtraSignatureData; + } + } + + /// + /// Gets/sets the bit + /// + public bool KeepOldMaxStack { + get { return (options.Flags & MetaDataFlags.KeepOldMaxStack) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.KeepOldMaxStack; + else + options.Flags &= ~MetaDataFlags.KeepOldMaxStack; + } + } + + /// + /// Gets/sets the bit + /// + public bool AlwaysCreateGuidHeap { + get { return (options.Flags & MetaDataFlags.AlwaysCreateGuidHeap) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.AlwaysCreateGuidHeap; + else + options.Flags &= ~MetaDataFlags.AlwaysCreateGuidHeap; + } + } + + /// + /// Gets/sets the bit + /// + public bool AlwaysCreateStringsHeap { + get { return (options.Flags & MetaDataFlags.AlwaysCreateStringsHeap) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.AlwaysCreateStringsHeap; + else + options.Flags &= ~MetaDataFlags.AlwaysCreateStringsHeap; + } + } + + /// + /// Gets/sets the bit + /// + public bool AlwaysCreateUSHeap { + get { return (options.Flags & MetaDataFlags.AlwaysCreateUSHeap) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.AlwaysCreateUSHeap; + else + options.Flags &= ~MetaDataFlags.AlwaysCreateUSHeap; + } + } + + /// + /// Gets/sets the bit + /// + public bool AlwaysCreateBlobHeap { + get { return (options.Flags & MetaDataFlags.AlwaysCreateBlobHeap) != 0; } + set { + if (value) + options.Flags |= MetaDataFlags.AlwaysCreateBlobHeap; + else + options.Flags &= ~MetaDataFlags.AlwaysCreateBlobHeap; + } + } + + /// + /// If true, use the original Field RVAs. If it has no RVA, assume it's a new + /// field value and create a new Field RVA. + /// + internal bool KeepFieldRVA { get; set; } + + /// + /// Gets the number of methods that will be written. + /// + protected abstract int NumberOfMethods { get; } + + /// + /// Constructor + /// + /// Module + /// Constants list + /// Method bodies list + /// .NET resources list + /// Options + internal MetaData(ModuleDef module, UniqueChunkList constants, MethodBodyChunks methodBodies, NetResources netResources, MetaDataOptions options) { + this.module = module; + this.constants = constants; + this.methodBodies = methodBodies; + this.netResources = netResources; + this.options = options ?? new MetaDataOptions(); + this.metaDataHeader = new MetaDataHeader(this.options.MetaDataHeaderOptions); + this.tablesHeap = new TablesHeap(this.options.TablesHeapOptions); + this.stringsHeap = new StringsHeap(); + this.usHeap = new USHeap(); + this.guidHeap = new GuidHeap(); + this.blobHeap = new BlobHeap(); + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(ModuleDef module) { + uint rid; + moduleDefInfos.TryGetRid(module, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(TypeRef tr); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(TypeDef td); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(FieldDef fd); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(MethodDef md); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(ParamDef pd); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(InterfaceImpl ii) { + uint rid; + interfaceImplInfos.TryGetRid(ii, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(MemberRef mr); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetConstantRid(IHasConstant hc) { + uint rid; + hasConstantInfos.TryGetRid(hc, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetCustomAttributeRid(CustomAttribute ca) { + uint rid; + customAttributeInfos.TryGetRid(ca, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetFieldMarshalRid(IHasFieldMarshal hfm) { + uint rid; + fieldMarshalInfos.TryGetRid(hfm, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(DeclSecurity ds) { + uint rid; + declSecurityInfos.TryGetRid(ds, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetClassLayoutRid(TypeDef td) { + uint rid; + classLayoutInfos.TryGetRid(td, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetFieldLayoutRid(FieldDef fd) { + uint rid; + fieldLayoutInfos.TryGetRid(fd, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(StandAloneSig sas); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetEventMapRid(TypeDef td) { + uint rid; + eventMapInfos.TryGetRid(td, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(EventDef ed); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetPropertyMapRid(TypeDef td) { + uint rid; + propertyMapInfos.TryGetRid(td, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(PropertyDef pd); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetMethodSemanticsRid(MethodDef md) { + uint rid; + methodSemanticsInfos.TryGetRid(md, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(ModuleRef mr) { + uint rid; + moduleRefInfos.TryGetRid(mr, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(TypeSpec ts); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetImplMapRid(IMemberForwarded mf) { + uint rid; + implMapInfos.TryGetRid(mf, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetFieldRVARid(FieldDef fd) { + uint rid; + fieldRVAInfos.TryGetRid(fd, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(AssemblyDef asm) { + uint rid; + assemblyInfos.TryGetRid(asm, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(AssemblyRef asmRef) { + uint rid; + assemblyRefInfos.TryGetRid(asmRef, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(FileDef fd) { + uint rid; + fileDefInfos.TryGetRid(fd, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(ExportedType et) { + uint rid; + exportedTypeInfos.TryGetRid(et, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetManifestResourceRid(Resource resource) { + uint rid; + manifestResourceInfos.TryGetRid(resource, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetNestedClassRid(TypeDef td) { + uint rid; + nestedClassInfos.TryGetRid(td, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(GenericParam gp) { + uint rid; + genericParamInfos.TryGetRid(gp, out rid); + return rid; + } + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public abstract uint GetRid(MethodSpec ms); + + /// + /// Gets the new rid + /// + /// Value + /// Its new rid or 0 + public uint GetRid(GenericParamConstraint gpc) { + uint rid; + genericParamConstraintInfos.TryGetRid(gpc, out rid); + return rid; + } + + /// + /// Gets the + /// + /// Method + /// The or null if is + /// null or not a method defined in this module. + public MethodBody GetMethodBody(MethodDef md) { + if (md == null) + return null; + MethodBody mb; + methodToBody.TryGetValue(md, out mb); + return mb; + } + + /// + /// Gets a method's local variable signature token + /// + /// Method + /// Locals sig token or 0 + public uint GetLocalVarSigToken(MethodDef md) { + var mb = GetMethodBody(md); + return mb == null ? 0 : mb.LocalVarSigTok; + } + + /// + /// Gets the where the resource data will be stored + /// + /// Embedded resource + /// A instance or null if + /// is invalid + public ByteArrayChunk GetChunk(EmbeddedResource er) { + if (er == null) + return null; + ByteArrayChunk chunk; + embeddedResourceToByteArray.TryGetValue(er, out chunk); + return chunk; + } + + /// + /// Gets the where the initial value is stored + /// + /// Field + /// A instance or null if + /// is invalid + public ByteArrayChunk GetInitialValueChunk(FieldDef fd) { + if (fd == null) + return null; + ByteArrayChunk chunk; + fieldToInitialValue.TryGetValue(fd, out chunk); + return chunk; + } + + ILogger GetLogger() { + return logger ?? DummyLogger.ThrowModuleWriterExceptionOnErrorInstance; + } + + /// + /// Called when an error is detected + /// + /// Error message + /// Optional message arguments + protected void Error(string message, params object[] args) { + GetLogger().Log(this, LoggerEvent.Error, message, args); + } + + /// + /// Called to warn of something + /// + /// Warning message + /// Optional message arguments + protected void Warning(string message, params object[] args) { + GetLogger().Log(this, LoggerEvent.Warning, message, args); + } + + /// + /// Creates the .NET metadata tables + /// + public void CreateTables() { + Listener.OnMetaDataEvent(this, MetaDataEvent.BeginCreateTables); + + if (module.Types.Count == 0 || module.Types[0] == null) + throw new ModuleWriterException("Missing global type"); + + var moduleDefMD = module as ModuleDefMD; + if (moduleDefMD != null) { + if (PreserveStringsOffsets) + stringsHeap.Populate(moduleDefMD.StringsStream); + if (PreserveUSOffsets) + usHeap.Populate(moduleDefMD.USStream); + if (PreserveBlobOffsets) + blobHeap.Populate(moduleDefMD.BlobStream); + } + + Create(); + } + + /// + /// Updates each Method row's RVA column if it has any code + /// + void UpdateMethodRvas() { + foreach (var kv in methodToBody) { + var method = kv.Key; + var body = kv.Value; + var row = tablesHeap.MethodTable[GetRid(method)]; + row.RVA = (uint)body.RVA; + } + foreach (var kv in methodToNativeBody) { + var method = kv.Key; + var body = kv.Value; + var row = tablesHeap.MethodTable[GetRid(method)]; + row.RVA = (uint)body.RVA; + } + } + + /// + /// Updates the FieldRVA rows + /// + void UpdateFieldRvas() { + foreach (var kv in fieldToInitialValue) { + var field = kv.Key; + var iv = kv.Value; + var row = tablesHeap.FieldRVATable[fieldRVAInfos.Rid(field)]; + row.RVA = (uint)iv.RVA; + } + } + + void Create() { + Initialize(); + allTypeDefs = GetAllTypeDefs(); + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateTypeDefRids); + AllocateTypeDefRids(); + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids); + AllocateMemberDefRids(); + Listener.OnMetaDataEvent(this, MetaDataEvent.MemberDefRidsAllocated); + + AddModule(module); + InitializeTypeDefsAndMemberDefs(); + Listener.OnMetaDataEvent(this, MetaDataEvent.MemberDefsInitialized); + + InitializeVTableFixups(); + + AddExportedTypes(); + InitializeEntryPoint(); + if (module.Assembly != null) + AddAssembly(module.Assembly, AssemblyPublicKey); + + Listener.OnMetaDataEvent(this, MetaDataEvent.BeforeSortTables); + SortTables(); + InitializeGenericParamConstraintTable(); + Listener.OnMetaDataEvent(this, MetaDataEvent.MostTablesSorted); + + WriteTypeDefAndMemberDefCustomAttributes(); + Listener.OnMetaDataEvent(this, MetaDataEvent.MemberDefCustomAttributesWritten); + + Listener.OnMetaDataEvent(this, MetaDataEvent.BeginAddResources); + AddResources(module.Resources); + Listener.OnMetaDataEvent(this, MetaDataEvent.EndAddResources); + + Listener.OnMetaDataEvent(this, MetaDataEvent.BeginWriteMethodBodies); + WriteMethodBodies(); + Listener.OnMetaDataEvent(this, MetaDataEvent.EndWriteMethodBodies); + + BeforeSortingCustomAttributes(); + InitializeCustomAttributeTable(); + Listener.OnMetaDataEvent(this, MetaDataEvent.OnAllTablesSorted); + + EverythingInitialized(); + Listener.OnMetaDataEvent(this, MetaDataEvent.EndCreateTables); + } + + /// + /// Initializes all TypeDef, Field, Method, Event, + /// Property and Param rows. Other tables that are related to these six + /// tables are also updated. No custom attributes are written yet, though. Method bodies + /// aren't written either. + /// + void InitializeTypeDefsAndMemberDefs() { + int numTypes = allTypeDefs.Count; + int typeNum = 0; + int notifyNum = 0; + const int numNotifyEvents = 5; // InitializeTypeDefsAndMemberDefs0 - InitializeTypeDefsAndMemberDefs4 + int notifyAfter = numTypes / numNotifyEvents; + + foreach (var type in allTypeDefs) { + if (typeNum++ == notifyAfter && notifyNum < numNotifyEvents) { + Listener.OnMetaDataEvent(this, MetaDataEvent.InitializeTypeDefsAndMemberDefs0 + notifyNum++); + notifyAfter += numTypes / numNotifyEvents; + } + + if (type == null) { + Error("TypeDef is null"); + continue; + } + uint typeRid = GetRid(type); + var typeRow = tablesHeap.TypeDefTable[typeRid]; + typeRow.Flags = (uint)type.Attributes; + typeRow.Name = stringsHeap.Add(type.Name); + typeRow.Namespace = stringsHeap.Add(type.Namespace); + typeRow.Extends = type.BaseType == null ? 0 : AddTypeDefOrRef(type.BaseType); + AddGenericParams(new MDToken(Table.TypeDef, typeRid), type.GenericParameters); + AddDeclSecurities(new MDToken(Table.TypeDef, typeRid), type.DeclSecurities); + AddInterfaceImpls(typeRid, type.Interfaces); + AddClassLayout(type); + AddNestedType(type, type.DeclaringType); + + foreach (var field in type.Fields) { + if (field == null) { + Error("Field is null. TypeDef {0} ({1:X8})", type, type.MDToken.Raw); + continue; + } + uint rid = GetRid(field); + var row = tablesHeap.FieldTable[rid]; + row.Flags = (ushort)field.Attributes; + row.Name = stringsHeap.Add(field.Name); + row.Signature = GetSignature(field.Signature); + AddFieldLayout(field); + AddFieldMarshal(new MDToken(Table.Field, rid), field); + AddFieldRVA(field); + AddImplMap(new MDToken(Table.Field, rid), field); + AddConstant(new MDToken(Table.Field, rid), field); + } + + foreach (var method in type.Methods) { + if (method == null) { + Error("Method is null. TypeDef {0} ({1:X8})", type, type.MDToken.Raw); + continue; + } + uint rid = GetRid(method); + var row = tablesHeap.MethodTable[rid]; + row.ImplFlags = (ushort)method.ImplAttributes; + row.Flags = (ushort)method.Attributes; + row.Name = stringsHeap.Add(method.Name); + row.Signature = GetSignature(method.Signature); + AddGenericParams(new MDToken(Table.Method, rid), method.GenericParameters); + AddDeclSecurities(new MDToken(Table.Method, rid), method.DeclSecurities); + AddImplMap(new MDToken(Table.Method, rid), method); + AddMethodImpls(method, method.Overrides); + foreach (var pd in method.ParamDefs) { + if (pd == null) { + Error("Param is null. Method {0} ({1:X8})", method, method.MDToken.Raw); + continue; + } + uint pdRid = GetRid(pd); + var pdRow = tablesHeap.ParamTable[pdRid]; + pdRow.Flags = (ushort)pd.Attributes; + pdRow.Sequence = pd.Sequence; + pdRow.Name = stringsHeap.Add(pd.Name); + AddConstant(new MDToken(Table.Param, pdRid), pd); + AddFieldMarshal(new MDToken(Table.Param, pdRid), pd); + } + } + + if (!IsEmpty(type.Events)) { + foreach (var evt in type.Events) { + if (evt == null) { + Error("Event is null. TypeDef {0} ({1:X8})", type, type.MDToken.Raw); + continue; + } + uint rid = GetRid(evt); + var row = tablesHeap.EventTable[rid]; + row.EventFlags = (ushort)evt.Attributes; + row.Name = stringsHeap.Add(evt.Name); + row.EventType = AddTypeDefOrRef(evt.EventType); + AddMethodSemantics(evt); + } + } + + if (!IsEmpty(type.Properties)) { + foreach (var prop in type.Properties) { + if (prop == null) { + Error("Property is null. TypeDef {0} ({1:X8})", type, type.MDToken.Raw); + continue; + } + uint rid = GetRid(prop); + var row = tablesHeap.PropertyTable[rid]; + row.PropFlags = (ushort)prop.Attributes; + row.Name = stringsHeap.Add(prop.Name); + row.Type = GetSignature(prop.Type); + AddConstant(new MDToken(Table.Property, rid), prop); + AddMethodSemantics(prop); + } + } + } + while (notifyNum < numNotifyEvents) + Listener.OnMetaDataEvent(this, MetaDataEvent.InitializeTypeDefsAndMemberDefs0 + notifyNum++); + } + + /// + /// Writes TypeDef, Field, Method, Event, + /// Property and Param custom attributes. + /// + void WriteTypeDefAndMemberDefCustomAttributes() { + int numTypes = allTypeDefs.Count; + int typeNum = 0; + int notifyNum = 0; + const int numNotifyEvents = 5; // WriteTypeDefAndMemberDefCustomAttributes0 - WriteTypeDefAndMemberDefCustomAttributes4 + int notifyAfter = numTypes / numNotifyEvents; + + foreach (var type in allTypeDefs) { + if (typeNum++ == notifyAfter && notifyNum < numNotifyEvents) { + Listener.OnMetaDataEvent(this, MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes0 + notifyNum++); + notifyAfter += numTypes / numNotifyEvents; + } + + if (type == null) + continue; + AddCustomAttributes(Table.TypeDef, GetRid(type), type); + + foreach (var field in type.Fields) { + if (field == null) + continue; + AddCustomAttributes(Table.Field, GetRid(field), field); + } + + foreach (var method in type.Methods) { + if (method == null) + continue; + AddCustomAttributes(Table.Method, GetRid(method), method); + foreach (var pd in method.ParamDefs) { + if (pd == null) + continue; + AddCustomAttributes(Table.Param, GetRid(pd), pd); + } + } + foreach (var evt in type.Events) { + if (evt == null) + continue; + AddCustomAttributes(Table.Event, GetRid(evt), evt); + } + foreach (var prop in type.Properties) { + if (prop == null) + continue; + AddCustomAttributes(Table.Property, GetRid(prop), prop); + } + } + while (notifyNum < numNotifyEvents) + Listener.OnMetaDataEvent(this, MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes0 + notifyNum++); + } + + /// + /// Adds the tokens of all methods in all vtables, if any + /// + void InitializeVTableFixups() { + var fixups = module.VTableFixups; + if (fixups == null || fixups.VTables.Count == 0) + return; + + foreach (var vtable in fixups) { + if (vtable == null) { + Error("VTable is null"); + continue; + } + foreach (var method in vtable) { + if (method == null) { + Error("VTable method is null"); + continue; + } + AddMDTokenProvider(method); + } + } + } + + void AddExportedTypes() { + foreach (var et in module.ExportedTypes) + AddExportedType(et); + } + + /// + /// Adds the entry point. It's only needed if it's a since if it's + /// a , it will have already been added. + /// + void InitializeEntryPoint() { + var epFile = module.ManagedEntryPoint as FileDef; + if (epFile != null) + AddFile(epFile); + } + + /// + /// Sorts all unsorted tables except GenericParamConstraint and CustomAttribute + /// + void SortTables() { + classLayoutInfos.Sort((a, b) => a.row.Parent.CompareTo(b.row.Parent)); + hasConstantInfos.Sort((a, b) => a.row.Parent.CompareTo(b.row.Parent)); + declSecurityInfos.Sort((a, b) => a.row.Parent.CompareTo(b.row.Parent)); + fieldLayoutInfos.Sort((a, b) => a.row.Field.CompareTo(b.row.Field)); + fieldMarshalInfos.Sort((a, b) => a.row.Parent.CompareTo(b.row.Parent)); + fieldRVAInfos.Sort((a, b) => a.row.Field.CompareTo(b.row.Field)); + implMapInfos.Sort((a, b) => a.row.MemberForwarded.CompareTo(b.row.MemberForwarded)); + methodImplInfos.Sort((a, b) => a.row.Class.CompareTo(b.row.Class)); + methodSemanticsInfos.Sort((a, b)=> a.row.Association.CompareTo(b.row.Association)); + nestedClassInfos.Sort((a, b) => a.row.NestedClass.CompareTo(b.row.NestedClass)); + genericParamInfos.Sort((a, b) => { + if (a.row.Owner != b.row.Owner) + return a.row.Owner.CompareTo(b.row.Owner); + return a.row.Number.CompareTo(b.row.Number); + }); + interfaceImplInfos.Sort((a, b) => { + if (a.row.Class != b.row.Class) + return a.row.Class.CompareTo(b.row.Class); + return a.row.Interface.CompareTo(b.row.Interface); + }); + + tablesHeap.ClassLayoutTable.IsSorted = true; + tablesHeap.ConstantTable.IsSorted = true; + tablesHeap.DeclSecurityTable.IsSorted = true; + tablesHeap.FieldLayoutTable.IsSorted = true; + tablesHeap.FieldMarshalTable.IsSorted = true; + tablesHeap.FieldRVATable.IsSorted = true; + tablesHeap.GenericParamTable.IsSorted = true; + tablesHeap.ImplMapTable.IsSorted = true; + tablesHeap.InterfaceImplTable.IsSorted = true; + tablesHeap.MethodImplTable.IsSorted = true; + tablesHeap.MethodSemanticsTable.IsSorted = true; + tablesHeap.NestedClassTable.IsSorted = true; + + // These two are also sorted + tablesHeap.EventMapTable.IsSorted = true; + tablesHeap.PropertyMapTable.IsSorted = true; + + foreach (var info in classLayoutInfos.infos) tablesHeap.ClassLayoutTable.Create(info.row); + foreach (var info in hasConstantInfos.infos) tablesHeap.ConstantTable.Create(info.row); + foreach (var info in declSecurityInfos.infos) tablesHeap.DeclSecurityTable.Create(info.row); + foreach (var info in fieldLayoutInfos.infos) tablesHeap.FieldLayoutTable.Create(info.row); + foreach (var info in fieldMarshalInfos.infos) tablesHeap.FieldMarshalTable.Create(info.row); + foreach (var info in fieldRVAInfos.infos) tablesHeap.FieldRVATable.Create(info.row); + foreach (var info in genericParamInfos.infos) tablesHeap.GenericParamTable.Create(info.row); + foreach (var info in implMapInfos.infos) tablesHeap.ImplMapTable.Create(info.row); + foreach (var info in interfaceImplInfos.infos) tablesHeap.InterfaceImplTable.Create(info.row); + foreach (var info in methodImplInfos.infos) tablesHeap.MethodImplTable.Create(info.row); + foreach (var info in methodSemanticsInfos.infos) tablesHeap.MethodSemanticsTable.Create(info.row); + foreach (var info in nestedClassInfos.infos) tablesHeap.NestedClassTable.Create(info.row); + + foreach (var info in interfaceImplInfos.infos) + AddCustomAttributes(Table.InterfaceImpl, interfaceImplInfos.Rid(info.data), info.data); + foreach (var info in declSecurityInfos.infos) + AddCustomAttributes(Table.DeclSecurity, declSecurityInfos.Rid(info.data), info.data); + foreach (var info in genericParamInfos.infos) + AddCustomAttributes(Table.GenericParam, genericParamInfos.Rid(info.data), info.data); + } + + /// + /// Initializes the GenericParamConstraint table + /// + void InitializeGenericParamConstraintTable() { + foreach (var type in allTypeDefs) { + if (type == null) + continue; + AddGenericParamConstraints(type.GenericParameters); + foreach (var method in type.Methods) { + if (method == null) + continue; + AddGenericParamConstraints(method.GenericParameters); + } + } + genericParamConstraintInfos.Sort((a, b) => a.row.Owner.CompareTo(b.row.Owner)); + tablesHeap.GenericParamConstraintTable.IsSorted = true; + foreach (var info in genericParamConstraintInfos.infos) + tablesHeap.GenericParamConstraintTable.Create(info.row); + foreach (var info in genericParamConstraintInfos.infos) + AddCustomAttributes(Table.GenericParamConstraint, genericParamConstraintInfos.Rid(info.data), info.data); + } + + /// + /// Inserts all custom attribute rows in the table and sorts it + /// + void InitializeCustomAttributeTable() { + customAttributeInfos.Sort((a, b) => a.row.Parent.CompareTo(b.row.Parent)); + tablesHeap.CustomAttributeTable.IsSorted = true; + foreach (var info in customAttributeInfos.infos) + tablesHeap.CustomAttributeTable.Create(info.row); + } + + /// + /// Writes all method bodies + /// + void WriteMethodBodies() { + int numMethods = NumberOfMethods; + int methodNum = 0; + int notifyNum = 0; + const int numNotifyEvents = 10; // WriteMethodBodies0 - WriteMethodBodies9 + int notifyAfter = numMethods / numNotifyEvents; + + bool keepMaxStack = KeepOldMaxStack; + foreach (var type in allTypeDefs) { + if (type == null) + continue; + + foreach (var method in type.Methods) { + if (method == null) + continue; + + if (methodNum++ == notifyAfter && notifyNum < numNotifyEvents) { + Listener.OnMetaDataEvent(this, MetaDataEvent.WriteMethodBodies0 + notifyNum++); + notifyAfter += numMethods / numNotifyEvents; + } + + if (method.MethodBody == null) + continue; + + var cilBody = method.Body; + if (cilBody != null) { + if (cilBody.Instructions.Count == 0 && cilBody.Variables.Count == 0) + continue; + var writer = new MethodBodyWriter(this, cilBody, keepMaxStack || cilBody.KeepOldMaxStack); + writer.Write(); + var mb = methodBodies.Add(new MethodBody(writer.Code, writer.ExtraSections, writer.LocalVarSigTok)); + methodToBody[method] = mb; + continue; + } + + var nativeBody = method.NativeBody; + if (nativeBody != null) { + methodToNativeBody[method] = nativeBody; + continue; + } + + Error("Unsupported method body"); + } + } + while (notifyNum < numNotifyEvents) + Listener.OnMetaDataEvent(this, MetaDataEvent.WriteMethodBodies0 + notifyNum++); + } + + /// + /// Checks whether a list is empty or whether it contains only nulls + /// + /// Any type + /// The list + /// true if the list is empty or if it contains only nulls, false otherwise + protected static bool IsEmpty(IList list) where T : class { + if (list == null) + return true; + foreach (var e in list) { + if (e != null) + return false; + } + return true; + } + + /// + public MDToken GetToken(object o) { + var tp = o as IMDTokenProvider; + if (tp != null) + return new MDToken(tp.MDToken.Table, AddMDTokenProvider(tp)); + + var s = o as string; + if (s != null) + return new MDToken((Table)0x70, usHeap.Add(s)); + + var methodSig = o as MethodSig; + if (methodSig != null) + return new MDToken(Table.StandAloneSig, AddStandAloneSig(methodSig, methodSig.OriginalToken)); + + if (o == null) + Error("Instruction operand is null"); + else + Error("Invalid instruction operand"); + return new MDToken((Table)0xFF, 0x00FFFFFF); + } + + /// + public virtual MDToken GetToken(IList locals, uint origToken) { + if (locals == null || locals.Count == 0) + return new MDToken((Table)0, 0); + + var row = new RawStandAloneSigRow(GetSignature(new LocalSig(locals, false))); + uint rid = tablesHeap.StandAloneSigTable.Add(row); + //TODO: Add custom attributes + return new MDToken(Table.StandAloneSig, rid); + } + + /// + /// Adds a + /// + /// Method signature + /// Original StandAloneSig token or 0 if none + /// Its new rid + protected virtual uint AddStandAloneSig(MethodSig methodSig, uint origToken) { + if (methodSig == null) { + Error("StandAloneSig: MethodSig is null"); + return 0; + } + + var row = new RawStandAloneSigRow(GetSignature(methodSig)); + uint rid = tablesHeap.StandAloneSigTable.Add(row); + //TODO: Add custom attributes + return rid; + } + + uint AddMDTokenProvider(IMDTokenProvider tp) { + if (tp != null) { + switch (tp.MDToken.Table) { + case Table.Module: + return AddModule((ModuleDef)tp); + + case Table.TypeRef: + return AddTypeRef((TypeRef)tp); + + case Table.TypeDef: + return GetRid((TypeDef)tp); + + case Table.Field: + return GetRid((FieldDef)tp); + + case Table.Method: + return GetRid((MethodDef)tp); + + case Table.Param: + return GetRid((ParamDef)tp); + + case Table.MemberRef: + return AddMemberRef((MemberRef)tp); + + case Table.StandAloneSig: + return AddStandAloneSig((StandAloneSig)tp); + + case Table.Event: + return GetRid((EventDef)tp); + + case Table.Property: + return GetRid((PropertyDef)tp); + + case Table.ModuleRef: + return AddModuleRef((ModuleRef)tp); + + case Table.TypeSpec: + return AddTypeSpec((TypeSpec)tp); + + case Table.Assembly: + return AddAssembly((AssemblyDef)tp, null); + + case Table.AssemblyRef: + return AddAssemblyRef((AssemblyRef)tp); + + case Table.File: + return AddFile((FileDef)tp); + + case Table.ExportedType: + return AddExportedType((ExportedType)tp); + + case Table.MethodSpec: + return AddMethodSpec((MethodSpec)tp); + + case Table.FieldPtr: + case Table.MethodPtr: + case Table.ParamPtr: + case Table.InterfaceImpl: + case Table.Constant: + case Table.CustomAttribute: + case Table.FieldMarshal: + case Table.DeclSecurity: + case Table.ClassLayout: + case Table.FieldLayout: + case Table.EventMap: + case Table.EventPtr: + case Table.PropertyMap: + case Table.PropertyPtr: + case Table.MethodSemantics: + case Table.MethodImpl: + case Table.ImplMap: + case Table.FieldRVA: + case Table.ENCLog: + case Table.ENCMap: + case Table.AssemblyProcessor: + case Table.AssemblyOS: + case Table.AssemblyRefProcessor: + case Table.AssemblyRefOS: + case Table.ManifestResource: + case Table.NestedClass: + case Table.GenericParam: + case Table.GenericParamConstraint: + default: + break; + } + } + + if (tp == null) + Error("IMDTokenProvider is null"); + else + Error("Invalid IMDTokenProvider"); + return 0; + } + + /// + /// Adds a + /// + /// Value + /// Its encoded token + protected uint AddTypeDefOrRef(ITypeDefOrRef tdr) { + if (tdr == null) { + Error("TypeDefOrRef is null"); + return 0; + } + + var token = new MDToken(tdr.MDToken.Table, AddMDTokenProvider(tdr)); + uint encodedToken; + if (!CodedToken.TypeDefOrRef.Encode(token, out encodedToken)) { + Error("Can't encode TypeDefOrRef token {0:X8}", token.Raw); + encodedToken = 0; + } + return encodedToken; + } + + /// + /// Adds a + /// + /// Value + /// Its encoded token + protected uint AddResolutionScope(IResolutionScope rs) { + if (rs == null) { + Error("ResolutionScope is null"); + return 0; + } + + var token = new MDToken(rs.MDToken.Table, AddMDTokenProvider(rs)); + uint encodedToken; + if (!CodedToken.ResolutionScope.Encode(token, out encodedToken)) { + Error("Can't encode ResolutionScope token {0:X8}", token.Raw); + encodedToken = 0; + } + return encodedToken; + } + + /// + /// Adds a + /// + /// Value + /// Its encoded token + protected uint AddMethodDefOrRef(IMethodDefOrRef mdr) { + if (mdr == null) { + Error("MethodDefOrRef is null"); + return 0; + } + + var token = new MDToken(mdr.MDToken.Table, AddMDTokenProvider(mdr)); + uint encodedToken; + if (!CodedToken.MethodDefOrRef.Encode(token, out encodedToken)) { + Error("Can't encode MethodDefOrRef token {0:X8}", token.Raw); + encodedToken = 0; + } + return encodedToken; + } + + /// + /// Adds a + /// + /// Value + /// Its encoded token + protected uint AddMemberRefParent(IMemberRefParent parent) { + if (parent == null) { + Error("MemberRefParent is null"); + return 0; + } + + var token = new MDToken(parent.MDToken.Table, AddMDTokenProvider(parent)); + uint encodedToken; + if (!CodedToken.MemberRefParent.Encode(token, out encodedToken)) { + Error("Can't encode MemberRefParent token {0:X8}", token.Raw); + encodedToken = 0; + } + return encodedToken; + } + + /// + /// Adds a + /// + /// Value + /// Its encoded token + protected uint AddImplementation(IImplementation impl) { + if (impl == null) { + Error("Implementation is null"); + return 0; + } + + var token = new MDToken(impl.MDToken.Table, AddMDTokenProvider(impl)); + uint encodedToken; + if (!CodedToken.Implementation.Encode(token, out encodedToken)) { + Error("Can't encode Implementation token {0:X8}", token.Raw); + encodedToken = 0; + } + return encodedToken; + } + + /// + /// Adds a + /// + /// Value + /// Its encoded token + protected uint AddCustomAttributeType(ICustomAttributeType cat) { + if (cat == null) { + Error("CustomAttributeType is null"); + return 0; + } + + var token = new MDToken(cat.MDToken.Table, AddMDTokenProvider(cat)); + uint encodedToken; + if (!CodedToken.CustomAttributeType.Encode(token, out encodedToken)) { + Error("Can't encode CustomAttributeType token {0:X8}", token.Raw); + encodedToken = 0; + } + return encodedToken; + } + + /// + /// Adds a NestedType row + /// + /// Nested type + /// Declaring type + protected void AddNestedType(TypeDef nestedType, TypeDef declaringType) { + if (nestedType == null || declaringType == null) + return; + uint nestedRid = GetRid(nestedType); + uint dtRid = GetRid(declaringType); + if (nestedRid == 0 || dtRid == 0) + return; + var row = new RawNestedClassRow(nestedRid, dtRid); + nestedClassInfos.Add(declaringType, row); + } + + /// + /// Adds a Module row + /// + /// Module + /// Its new rid + protected uint AddModule(ModuleDef module) { + if (module == null) { + Error("Module is null"); + return 0; + } + if (this.module != module) + Error("Module {0} must be referenced with a ModuleRef, not a ModuleDef", module); + uint rid; + if (moduleDefInfos.TryGetRid(module, out rid)) + return rid; + var row = new RawModuleRow(module.Generation, + stringsHeap.Add(module.Name), + guidHeap.Add(module.Mvid), + guidHeap.Add(module.EncId), + guidHeap.Add(module.EncBaseId)); + rid = tablesHeap.ModuleTable.Add(row); + moduleDefInfos.Add(module, rid); + AddCustomAttributes(Table.Module, rid, module); + return rid; + } + + /// + /// Adds a ModuleRef row + /// + /// Module ref + /// Its new rid + protected uint AddModuleRef(ModuleRef modRef) { + if (modRef == null) { + Error("ModuleRef is null"); + return 0; + } + uint rid; + if (moduleRefInfos.TryGetRid(modRef, out rid)) + return rid; + var row = new RawModuleRefRow(stringsHeap.Add(modRef.Name)); + rid = tablesHeap.ModuleRefTable.Add(row); + moduleRefInfos.Add(modRef, rid); + AddCustomAttributes(Table.ModuleRef, rid, modRef); + return rid; + } + + /// + /// Adds an AssemblyRef row + /// + /// Assembly ref + /// Its new rid + protected uint AddAssemblyRef(AssemblyRef asmRef) { + if (asmRef == null) { + Error("AssemblyRef is null"); + return 0; + } + uint rid; + if (assemblyRefInfos.TryGetRid(asmRef, out rid)) + return rid; + var version = Utils.CreateVersionWithNoUndefinedValues(asmRef.Version); + var row = new RawAssemblyRefRow((ushort)version.Major, + (ushort)version.Minor, + (ushort)version.Build, + (ushort)version.Revision, + (uint)asmRef.Attributes, + blobHeap.Add(PublicKeyBase.GetRawData(asmRef.PublicKeyOrToken)), + stringsHeap.Add(asmRef.Name), + stringsHeap.Add(asmRef.Culture), + blobHeap.Add(asmRef.Hash)); + rid = tablesHeap.AssemblyRefTable.Add(row); + assemblyRefInfos.Add(asmRef, rid); + AddCustomAttributes(Table.AssemblyRef, rid, asmRef); + return rid; + } + + /// + /// Adds an Assembly row + /// + /// Assembly + /// The public key that should be used + /// Its new rid + protected uint AddAssembly(AssemblyDef asm, byte[] publicKey) { + if (asm == null) { + Error("Assembly is null"); + return 0; + } + uint rid; + if (assemblyInfos.TryGetRid(asm, out rid)) + return rid; + + var asmAttrs = asm.Attributes; + if (publicKey != null) + asmAttrs |= AssemblyAttributes.PublicKey; + else + publicKey = PublicKeyBase.GetRawData(asm.PublicKeyOrToken); + + var version = Utils.CreateVersionWithNoUndefinedValues(asm.Version); + var row = new RawAssemblyRow((uint)asm.HashAlgorithm, + (ushort)version.Major, + (ushort)version.Minor, + (ushort)version.Build, + (ushort)version.Revision, + (uint)asmAttrs, + blobHeap.Add(publicKey), + stringsHeap.Add(asm.Name), + stringsHeap.Add(asm.Culture)); + rid = tablesHeap.AssemblyTable.Add(row); + assemblyInfos.Add(asm, rid); + AddDeclSecurities(new MDToken(Table.Assembly, rid), asm.DeclSecurities); + AddCustomAttributes(Table.Assembly, rid, asm); + return rid; + } + + /// + /// Adds generic parameters + /// + /// New token of owner + /// All generic params + protected void AddGenericParams(MDToken token, IList gps) { + if (gps == null) + return; + foreach (var gp in gps) + AddGenericParam(token, gp); + } + + /// + /// Adds a generic param + /// + /// New token of owner + /// Generic paramater + protected void AddGenericParam(MDToken owner, GenericParam gp) { + if (gp == null) { + Error("GenericParam is null"); + return; + } + uint encodedOwner; + if (!CodedToken.TypeOrMethodDef.Encode(owner, out encodedOwner)) { + Error("Can't encode TypeOrMethodDef token {0:X8}", owner.Raw); + encodedOwner = 0; + } + var row = new RawGenericParamRow(gp.Number, + (ushort)gp.Flags, + encodedOwner, + stringsHeap.Add(gp.Name), + gp.Kind == null ? 0 : AddTypeDefOrRef(gp.Kind)); + genericParamInfos.Add(gp, row); + } + + void AddGenericParamConstraints(IList gps) { + if (gps == null) + return; + foreach (var gp in gps) { + if (gp == null) + continue; + uint rid = genericParamInfos.Rid(gp); + AddGenericParamConstraints(rid, gp.GenericParamConstraints); + } + } + + /// + /// Adds generic parameter constraints + /// + /// New rid of owner generic param + /// Its constraints + protected void AddGenericParamConstraints(uint gpRid, IList constraints) { + if (constraints == null) + return; + foreach (var gpc in constraints) + AddGenericParamConstraint(gpRid, gpc); + } + + /// + /// Adds a generic parameter constraint + /// + /// New rid of owner generic param + /// Generic paramter constraint + protected void AddGenericParamConstraint(uint gpRid, GenericParamConstraint gpc) { + if (gpc == null) { + Error("GenericParamConstraint is null"); + return; + } + var row = new RawGenericParamConstraintRow(gpRid, AddTypeDefOrRef(gpc.Constraint)); + genericParamConstraintInfos.Add(gpc, row); + } + + /// + /// Adds a InterfaceImpl row + /// + /// New rid of owner + /// All interfaces + protected void AddInterfaceImpls(uint typeDefRid, IList ifaces) { + foreach (var iface in ifaces) { + if (iface == null) + continue; + var row = new RawInterfaceImplRow(typeDefRid, + AddTypeDefOrRef(iface.Interface)); + interfaceImplInfos.Add(iface, row); + } + } + + /// + /// Adds a FieldLayout row + /// + /// Owner field + protected void AddFieldLayout(FieldDef field) { + if (field == null || field.FieldOffset == null) + return; + var rid = GetRid(field); + var row = new RawFieldLayoutRow(field.FieldOffset.Value, rid); + fieldLayoutInfos.Add(field, row); + } + + /// + /// Adds a FieldMarshal row + /// + /// New owner token + /// Owner + protected void AddFieldMarshal(MDToken parent, IHasFieldMarshal hfm) { + if (hfm == null || hfm.MarshalType == null) + return; + var fieldMarshal = hfm.MarshalType; + uint encodedParent; + if (!CodedToken.HasFieldMarshal.Encode(parent, out encodedParent)) { + Error("Can't encode HasFieldMarshal token {0:X8}", parent.Raw); + encodedParent = 0; + } + var row = new RawFieldMarshalRow(encodedParent, + blobHeap.Add(MarshalBlobWriter.Write(module, fieldMarshal, this))); + fieldMarshalInfos.Add(hfm, row); + } + + /// + /// Adds a FieldRVA row + /// + /// The field + protected void AddFieldRVA(FieldDef field) { + if (field.RVA != 0 && KeepFieldRVA) { + uint rid = GetRid(field); + var row = new RawFieldRVARow((uint)field.RVA, rid); + fieldRVAInfos.Add(field, row); + } + else { + if (field == null || field.InitialValue == null) + return; + var ivBytes = field.InitialValue; + if (!VerifyFieldSize(field, ivBytes.Length)) + Error("Field {0} ({1:X8}) initial value size != size of field type", field, field.MDToken.Raw); + uint rid = GetRid(field); + var iv = constants.Add(new ByteArrayChunk(ivBytes), ModuleWriterBase.DEFAULT_CONSTANTS_ALIGNMENT); + fieldToInitialValue[field] = iv; + var row = new RawFieldRVARow(0, rid); + fieldRVAInfos.Add(field, row); + } + } + + static bool VerifyFieldSize(FieldDef field, int size) { + if (field == null) + return false; + var sig = field.FieldSig; + if (sig == null) + return false; + return field.GetFieldSize() == size; + } + + /// + /// Adds a ImplMap row + /// + /// New owner token + /// Owner + protected void AddImplMap(MDToken parent, IMemberForwarded mf) { + if (mf == null || mf.ImplMap == null) + return; + var implMap = mf.ImplMap; + uint encodedParent; + if (!CodedToken.MemberForwarded.Encode(parent, out encodedParent)) { + Error("Can't encode MemberForwarded token {0:X8}", parent.Raw); + encodedParent = 0; + } + var row = new RawImplMapRow((ushort)implMap.Attributes, + encodedParent, + stringsHeap.Add(implMap.Name), + AddModuleRef(implMap.Module)); + implMapInfos.Add(mf, row); + } + + /// + /// Adds a Constant row + /// + /// New owner token + /// Owner + protected void AddConstant(MDToken parent, IHasConstant hc) { + if (hc == null || hc.Constant == null) + return; + var constant = hc.Constant; + uint encodedParent; + if (!CodedToken.HasConstant.Encode(parent, out encodedParent)) { + Error("Can't encode HasConstant token {0:X8}", parent.Raw); + encodedParent = 0; + } + var row = new RawConstantRow((byte)constant.Type, 0, + encodedParent, + blobHeap.Add(GetConstantValueAsByteArray(constant.Type, constant.Value))); + hasConstantInfos.Add(hc, row); + } + + static readonly byte[] constantClassByteArray = new byte[4]; + static readonly byte[] constantDefaultByteArray = new byte[8]; + byte[] GetConstantValueAsByteArray(ElementType etype, object o) { + if (o == null) { + if (etype == ElementType.Class) + return constantClassByteArray; + Error("Constant is null"); + return constantDefaultByteArray; + } + + var typeCode = Type.GetTypeCode(o.GetType()); + switch (typeCode) { + case TypeCode.Boolean: + VerifyConstantType(etype, ElementType.Boolean); + return BitConverter.GetBytes((bool)o); + + case TypeCode.Char: + VerifyConstantType(etype, ElementType.Char); + return BitConverter.GetBytes((char)o); + + case TypeCode.SByte: + VerifyConstantType(etype, ElementType.I1); + return new byte[1] { (byte)(sbyte)o }; + + case TypeCode.Byte: + VerifyConstantType(etype, ElementType.U1); + return new byte[1] { (byte)o }; + + case TypeCode.Int16: + VerifyConstantType(etype, ElementType.I2); + return BitConverter.GetBytes((short)o); + + case TypeCode.UInt16: + VerifyConstantType(etype, ElementType.U2); + return BitConverter.GetBytes((ushort)o); + + case TypeCode.Int32: + VerifyConstantType(etype, ElementType.I4); + return BitConverter.GetBytes((int)o); + + case TypeCode.UInt32: + VerifyConstantType(etype, ElementType.U4); + return BitConverter.GetBytes((uint)o); + + case TypeCode.Int64: + VerifyConstantType(etype, ElementType.I8); + return BitConverter.GetBytes((long)o); + + case TypeCode.UInt64: + VerifyConstantType(etype, ElementType.U8); + return BitConverter.GetBytes((ulong)o); + + case TypeCode.Single: + VerifyConstantType(etype, ElementType.R4); + return BitConverter.GetBytes((float)o); + + case TypeCode.Double: + VerifyConstantType(etype, ElementType.R8); + return BitConverter.GetBytes((double)o); + + case TypeCode.String: + VerifyConstantType(etype, ElementType.String); + return Encoding.Unicode.GetBytes((string)o); + + default: + Error("Invalid constant type: {0}", typeCode); + return constantDefaultByteArray; + } + } + + void VerifyConstantType(ElementType realType, ElementType expectedType) { + if (realType != expectedType) + Error("Constant value's type is the wrong type: {0} != {1}", realType, expectedType); + } + + /// + /// Adds a DeclSecurity row + /// + /// New owner token + /// All DeclSecurity rows + protected void AddDeclSecurities(MDToken parent, IList declSecurities) { + if (declSecurities == null) + return; + uint encodedParent; + if (!CodedToken.HasDeclSecurity.Encode(parent, out encodedParent)) { + Error("Can't encode HasDeclSecurity token {0:X8}", parent.Raw); + encodedParent = 0; + } + foreach (var decl in declSecurities) { + if (decl == null) + continue; + var row = new RawDeclSecurityRow((short)decl.Action, + encodedParent, + blobHeap.Add(DeclSecurityWriter.Write(module, decl.SecurityAttributes, this))); + declSecurityInfos.Add(decl, row); + } + } + + /// + /// Adds MethodSemantics rows + /// + /// Event + protected void AddMethodSemantics(EventDef evt) { + if (evt == null) { + Error("Event is null"); + return; + } + uint rid = GetRid(evt); + if (rid == 0) + return; + var token = new MDToken(Table.Event, rid); + AddMethodSemantics(token, evt.AddMethod, MethodSemanticsAttributes.AddOn); + AddMethodSemantics(token, evt.RemoveMethod, MethodSemanticsAttributes.RemoveOn); + AddMethodSemantics(token, evt.InvokeMethod, MethodSemanticsAttributes.Fire); + AddMethodSemantics(token, evt.OtherMethods, MethodSemanticsAttributes.Other); + } + + /// + /// Adds MethodSemantics rows + /// + /// Property + protected void AddMethodSemantics(PropertyDef prop) { + if (prop == null) { + Error("Property is null"); + return; + } + uint rid = GetRid(prop); + if (rid == 0) + return; + var token = new MDToken(Table.Property, rid); + AddMethodSemantics(token, prop.GetMethods, MethodSemanticsAttributes.Getter); + AddMethodSemantics(token, prop.SetMethods, MethodSemanticsAttributes.Setter); + AddMethodSemantics(token, prop.OtherMethods, MethodSemanticsAttributes.Other); + } + + void AddMethodSemantics(MDToken owner, IList methods, MethodSemanticsAttributes attrs) { + if (methods == null) + return; + foreach (var method in methods) + AddMethodSemantics(owner, method, attrs); + } + + void AddMethodSemantics(MDToken owner, MethodDef method, MethodSemanticsAttributes flags) { + if (method == null) + return; + uint methodRid = GetRid(method); + if (methodRid == 0) + return; + uint encodedOwner; + if (!CodedToken.HasSemantic.Encode(owner, out encodedOwner)) { + Error("Can't encode HasSemantic token {0:X8}", owner.Raw); + encodedOwner = 0; + } + var row = new RawMethodSemanticsRow((ushort)flags, methodRid, encodedOwner); + methodSemanticsInfos.Add(method, row); + } + + void AddMethodImpls(MethodDef method, IList overrides) { + if (overrides == null) + return; + if (method.DeclaringType == null) { + Error("Method declaring type == null. Method {0} ({1:X8})", method, method.MDToken.Raw); + return; + } + uint rid = GetRid(method.DeclaringType); + foreach (var ovr in overrides) { + var row = new RawMethodImplRow(rid, + AddMethodDefOrRef(ovr.MethodBody), + AddMethodDefOrRef(ovr.MethodDeclaration)); + methodImplInfos.Add(method, row); + } + } + + /// + /// Adds a ClassLayout row + /// + /// Type + protected void AddClassLayout(TypeDef type) { + if (type == null || type.ClassLayout == null) + return; + var rid = GetRid(type); + var classLayout = type.ClassLayout; + var row = new RawClassLayoutRow(classLayout.PackingSize, classLayout.ClassSize, rid); + classLayoutInfos.Add(type, row); + } + + void AddResources(IList resources) { + if (resources == null) + return; + foreach (var resource in resources) + AddResource(resource); + } + + void AddResource(Resource resource) { + var er = resource as EmbeddedResource; + if (er != null) { + AddEmbeddedResource(er); + return; + } + + var alr = resource as AssemblyLinkedResource; + if (alr != null) { + AddAssemblyLinkedResource(alr); + return; + } + + var lr = resource as LinkedResource; + if (lr != null) { + AddLinkedResource(lr); + return; + } + + if (resource == null) + Error("Resource is null"); + else + Error("Invalid resource type: {0}", resource.GetType()); + } + + uint AddEmbeddedResource(EmbeddedResource er) { + if (er == null) { + Error("EmbeddedResource is null"); + return 0; + } + uint rid; + if (manifestResourceInfos.TryGetRid(er, out rid)) + return rid; + var row = new RawManifestResourceRow(netResources.NextOffset, + (uint)er.Attributes, + stringsHeap.Add(er.Name), + 0); + rid = tablesHeap.ManifestResourceTable.Add(row); + manifestResourceInfos.Add(er, rid); + embeddedResourceToByteArray[er] = netResources.Add(er.Data); + //TODO: Add custom attributes + return rid; + } + + uint AddAssemblyLinkedResource(AssemblyLinkedResource alr) { + if (alr == null) { + Error("AssemblyLinkedResource is null"); + return 0; + } + uint rid; + if (manifestResourceInfos.TryGetRid(alr, out rid)) + return rid; + var row = new RawManifestResourceRow(0, + (uint)alr.Attributes, + stringsHeap.Add(alr.Name), + AddImplementation(alr.Assembly)); + rid = tablesHeap.ManifestResourceTable.Add(row); + manifestResourceInfos.Add(alr, rid); + //TODO: Add custom attributes + return rid; + } + + uint AddLinkedResource(LinkedResource lr) { + if (lr == null) { + Error("LinkedResource is null"); + return 0; + } + uint rid; + if (manifestResourceInfos.TryGetRid(lr, out rid)) + return rid; + var row = new RawManifestResourceRow(0, + (uint)lr.Attributes, + stringsHeap.Add(lr.Name), + AddImplementation(lr.File)); + rid = tablesHeap.ManifestResourceTable.Add(row); + manifestResourceInfos.Add(lr, rid); + //TODO: Add custom attributes + return rid; + } + + /// + /// Adds a File row + /// + /// File + /// Its new rid + protected uint AddFile(FileDef file) { + if (file == null) { + Error("FileDef is null"); + return 0; + } + uint rid; + if (fileDefInfos.TryGetRid(file, out rid)) + return rid; + var row = new RawFileRow((uint)file.Flags, + stringsHeap.Add(file.Name), + blobHeap.Add(file.HashValue)); //TODO: Re-calculate the hash value if possible + rid = tablesHeap.FileTable.Add(row); + fileDefInfos.Add(file, rid); + AddCustomAttributes(Table.File, rid, file); + return rid; + } + + /// + /// Adds a ExportedType row + /// + /// Exported type + /// Its new rid + protected uint AddExportedType(ExportedType et) { + if (et == null) { + Error("ExportedType is null"); + return 0; + } + uint rid; + if (exportedTypeInfos.TryGetRid(et, out rid)) + return rid; + exportedTypeInfos.Add(et, 0); // Prevent inf recursion + var row = new RawExportedTypeRow((uint)et.Attributes, + et.TypeDefId, //TODO: Should be updated with the new rid + stringsHeap.Add(et.TypeName), + stringsHeap.Add(et.TypeNamespace), + AddImplementation(et.Implementation)); + rid = tablesHeap.ExportedTypeTable.Add(row); + exportedTypeInfos.SetRid(et, rid); + AddCustomAttributes(Table.ExportedType, rid, et); + return rid; + } + + /// + /// Gets a #Blob offset of a type signature + /// + /// Type sig + /// Extra data to append the signature if + /// is true. + /// #Blob offset + protected uint GetSignature(TypeSig ts, byte[] extraData) { + byte[] blob; + if (ts == null) { + Error("TypeSig is null"); + blob = null; + } + else + blob = SignatureWriter.Write(this, ts); + AppendExtraData(ref blob, extraData); + return blobHeap.Add(blob); + } + + /// + /// Gets a #Blob offset of a calling convention signature + /// + /// Signature + /// #Blob offset + protected uint GetSignature(CallingConventionSig sig) { + if (sig == null) { + Error("CallingConventionSig is null"); + return 0; + } + + var blob = SignatureWriter.Write(this, sig); + AppendExtraData(ref blob, sig.ExtraData); + return blobHeap.Add(blob); + } + + void AppendExtraData(ref byte[] blob, byte[] extraData) { + if (PreserveExtraSignatureData && extraData != null && extraData.Length > 0) { + int blen = blob == null ? 0 : blob.Length; + Array.Resize(ref blob, blen + extraData.Length); + Array.Copy(extraData, 0, blob, blen, extraData.Length); + } + } + + /// + /// Adds a CustomAttribute row + /// + /// Owner table + /// New owner rid + /// Onwer + protected void AddCustomAttributes(Table table, uint rid, IHasCustomAttribute hca) { + AddCustomAttributes(table, rid, hca.CustomAttributes); + } + + void AddCustomAttributes(Table table, uint rid, CustomAttributeCollection caList) { + var token = new MDToken(table, rid); + foreach (var ca in caList) + AddCustomAttribute(token, ca); + } + + void AddCustomAttribute(MDToken token, CustomAttribute ca) { + if (ca == null) { + Error("Custom attribute is null"); + return; + } + uint encodedToken; + if (!CodedToken.HasCustomAttribute.Encode(token, out encodedToken)) { + Error("Can't encode HasCustomAttribute token {0:X8}", token.Raw); + encodedToken = 0; + } + var caBlob = CustomAttributeWriter.Write(this, ca); + var row = new RawCustomAttributeRow(encodedToken, + AddCustomAttributeType(ca.Constructor), + blobHeap.Add(caBlob)); + customAttributeInfos.Add(ca, row); + } + + /// + uint ISignatureWriterHelper.ToEncodedToken(ITypeDefOrRef typeDefOrRef) { + return AddTypeDefOrRef(typeDefOrRef); + } + + /// + void IWriterError.Error(string message) { + Error(message); + } + + /// + bool IFullNameCreatorHelper.MustUseAssemblyName(IType type) { + return FullNameCreator.MustUseAssemblyName(module, type); + } + + /// + /// Called before any other methods + /// + protected virtual void Initialize() { + } + + /// + /// Gets all s that should be saved in the meta data + /// + protected abstract List GetAllTypeDefs(); + + /// + /// Initializes TypeDef rids and creates raw rows, but does not initialize + /// any columns. + /// + protected abstract void AllocateTypeDefRids(); + + /// + /// Allocates Field, Method, Property, Event, Param: + /// rid and raw row, but doesn't initialize the raw row. + /// Initializes TypeDef columns: FieldList, MethodList. + /// Initializes Method column: ParamList. + /// Initializes and . + /// + protected abstract void AllocateMemberDefRids(); + + /// + /// Adds a . Its custom attributes are also added. + /// + /// Type reference + /// Its new rid + protected abstract uint AddTypeRef(TypeRef tr); + + /// + /// Adds a . Its custom attributes are also added. + /// + /// Type spec + /// Its new rid + protected abstract uint AddTypeSpec(TypeSpec ts); + + /// + /// Adds a . Its custom attributes are also added. + /// + /// Member ref + /// Its new rid + protected abstract uint AddMemberRef(MemberRef mr); + + /// + /// Adds a . Its custom attributes are also added. + /// + /// Stand alone sig + /// Its new rid + protected abstract uint AddStandAloneSig(StandAloneSig sas); + + /// + /// Adds a . Its custom attributes are also added. + /// + /// Method spec + /// Its new rid + protected abstract uint AddMethodSpec(MethodSpec ms); + + /// + /// Called before sorting the CustomAttribute table. This is the last time anything + /// can be inserted into this table. + /// + protected virtual void BeforeSortingCustomAttributes() { + } + + /// + /// Called after everything has been initialized. The sub class can initialize more + /// rows if necessary or do nothing. After this method has been called, nothing else + /// can be added. + /// + protected virtual void EverythingInitialized() { + } + + const uint HEAP_ALIGNMENT = 4; + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + stringsHeap.SetReadOnly(); + blobHeap.SetReadOnly(); + guidHeap.SetReadOnly(); + tablesHeap.SetReadOnly(); + tablesHeap.BigStrings = stringsHeap.IsBig; + tablesHeap.BigBlob = blobHeap.IsBig; + tablesHeap.BigGuid = guidHeap.IsBig; + + metaDataHeader.Heaps = GetHeaps(); + + metaDataHeader.SetOffset(offset, rva); + uint len = metaDataHeader.GetFileLength(); + offset += len; + rva += len; + + foreach (var heap in metaDataHeader.Heaps) { + offset = offset.AlignUp(HEAP_ALIGNMENT); + rva = rva.AlignUp(HEAP_ALIGNMENT); + heap.SetOffset(offset, rva); + len = heap.GetFileLength(); + offset += len; + rva += len; + } + length = rva - this.rva; + + UpdateMethodRvas(); + UpdateFieldRvas(); + } + + IList GetHeaps() { + var heaps = new List(); + + if (options.OtherHeaps != null) + heaps.AddRange(options.OtherHeaps); + + // The #! heap must be added before the other heaps or the CLR can + // sometimes flag an error. Eg., it can check whether a pointer is valid. + // It does this by comparing the pointer to the last valid address for + // the particular heap. If this pointer really is in the #! heap and the + // #! heap is at an address > than the other heap, then the CLR will think + // it's an invalid pointer. + if (hotHeap != null) // Don't check whether it's empty + heaps.Add(hotHeap); + + heaps.Add(tablesHeap); + if (!stringsHeap.IsEmpty || AlwaysCreateStringsHeap) + heaps.Add(stringsHeap); + if (!usHeap.IsEmpty || AlwaysCreateUSHeap) + heaps.Add(usHeap); + if (!guidHeap.IsEmpty || AlwaysCreateGuidHeap) + heaps.Add(guidHeap); + if (!blobHeap.IsEmpty || AlwaysCreateBlobHeap) + heaps.Add(blobHeap); + + if (options.OtherHeapsEnd != null) + heaps.AddRange(options.OtherHeapsEnd); + + return heaps; + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + var rva2 = rva; + metaDataHeader.VerifyWriteTo(writer); + rva2 += metaDataHeader.GetFileLength(); + + foreach (var heap in metaDataHeader.Heaps) { + writer.WriteZeros((int)(rva2.AlignUp(HEAP_ALIGNMENT) - rva2)); + rva2 = rva2.AlignUp(HEAP_ALIGNMENT); + heap.VerifyWriteTo(writer); + rva2 += heap.GetFileLength(); + } + } + + /// + /// Sorts the s + /// + /// All s + /// A sorted list + protected static List Sort(IEnumerable pds) { + var sorted = new List(pds); + sorted.Sort((a, b) => { + if (a == null) + return -1; + if (b == null) + return 1; + return a.Sequence.CompareTo(b.Sequence); + }); + return sorted; + } + } +} diff --git a/dnlib/DotNet/Writer/MetaDataHeader.cs b/dnlib/DotNet/Writer/MetaDataHeader.cs new file mode 100644 index 0000000..22a51c6 --- /dev/null +++ b/dnlib/DotNet/Writer/MetaDataHeader.cs @@ -0,0 +1,162 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.IO; +using System.Text; +using dnlib.IO; +using dnlib.PE; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// options + /// + public sealed class MetaDataHeaderOptions { + /// + /// Default version string + /// + public const string DEFAULT_VERSION_STRING = MDHeaderRuntimeVersion.MS_CLR_20; + + /// + /// Default header signature + /// + public const uint DEFAULT_SIGNATURE = 0x424A5342; + + /// + /// MD header signature. Default value is + /// + public uint? Signature; + + /// + /// Major version. Default is 1. MS' CLR supports v0.x (x >= 19) and v1.1, nothing else. + /// + public ushort? MajorVersion; + + /// + /// Minor version. Default is 1. + /// + public ushort? MinorVersion; + + /// + /// Reserved and should be 0. + /// + public uint? Reserved1; + + /// + /// Version string. Default is . It's stored as a + /// zero-terminated UTF-8 string. Length should be <= 255 bytes. + /// + public string VersionString; + + /// + /// Storage flags should be 0 + /// + public StorageFlags? StorageFlags; + + /// + /// Reserved and should be 0 + /// + public byte? Reserved2; + } + + /// + /// Meta data header. IMAGE_COR20_HEADER.MetaData points to this header. + /// + public sealed class MetaDataHeader : IChunk { + IList heaps; + readonly MetaDataHeaderOptions options; + uint length; + FileOffset offset; + RVA rva; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets/sets the heaps + /// + public IList Heaps { + get { return heaps; } + set { heaps = value; } + } + + /// + /// Default constructor + /// + public MetaDataHeader() + : this(null) { + } + + /// + /// Constructor + /// + /// Options + public MetaDataHeader(MetaDataHeaderOptions options) { + this.options = options ?? new MetaDataHeaderOptions(); + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + length = 16; + length += (uint)GetVersionString().Length; + length = Utils.AlignUp(length, 4); + length += 4; + foreach (var heap in heaps) { + length += 8; + length += (uint)GetAsciizName(heap.Name).Length; + length = Utils.AlignUp(length, 4); + } + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write(options.Signature ?? MetaDataHeaderOptions.DEFAULT_SIGNATURE); + writer.Write(options.MajorVersion ?? 1); + writer.Write(options.MinorVersion ?? 1); + writer.Write(options.Reserved1 ?? 0); + var s = GetVersionString(); + writer.Write(Utils.AlignUp(s.Length, 4)); + writer.Write(s); + writer.WriteZeros(Utils.AlignUp(s.Length, 4) - s.Length); + writer.Write((byte)(options.StorageFlags ?? 0)); + writer.Write(options.Reserved2 ?? 0); + writer.Write((ushort)heaps.Count); + foreach (var heap in heaps) { + writer.Write((uint)(heap.FileOffset - offset)); + writer.Write(heap.GetFileLength()); + writer.Write(s = GetAsciizName(heap.Name)); + if (s.Length > 32) + throw new ModuleWriterException(string.Format("Heap name '{0}' is > 32 bytes", heap.Name)); + writer.WriteZeros(Utils.AlignUp(s.Length, 4) - s.Length); + } + } + + byte[] GetVersionString() { + return Encoding.UTF8.GetBytes((options.VersionString ?? MetaDataHeaderOptions.DEFAULT_VERSION_STRING) + "\0"); + } + + byte[] GetAsciizName(string s) { + return Encoding.ASCII.GetBytes(s + "\0"); + } + } +} diff --git a/dnlib/DotNet/Writer/MethodBody.cs b/dnlib/DotNet/Writer/MethodBody.cs new file mode 100644 index 0000000..8c8da06 --- /dev/null +++ b/dnlib/DotNet/Writer/MethodBody.cs @@ -0,0 +1,165 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Method body chunk + /// + public sealed class MethodBody : IChunk { + const uint EXTRA_SECTIONS_ALIGNMENT = 4; + + readonly bool isTiny; + readonly byte[] code; + readonly byte[] extraSections; + uint length; + FileOffset offset; + RVA rva; + uint localVarSigTok; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the code + /// + public byte[] Code { + get { return code; } + } + + /// + /// Gets the extra sections (exception handlers) or null + /// + public byte[] ExtraSections { + get { return extraSections; } + } + + /// + /// Gets the token of the locals + /// + public uint LocalVarSigTok { + get { return localVarSigTok; } + } + + /// + /// true if it's a fat body + /// + public bool IsFat { + get { return !isTiny; } + } + + /// + /// true if it's a tiny body + /// + public bool IsTiny { + get { return isTiny; } + } + + /// + /// true if there's an extra section + /// + public bool HasExtraSections { + get { return extraSections != null && extraSections.Length > 0; } + } + + /// + /// Constructor + /// + /// Code + public MethodBody(byte[] code) + : this(code, null, 0) { + } + + /// + /// Constructor + /// + /// Code + /// Extra sections or null + public MethodBody(byte[] code, byte[] extraSections) + : this(code, extraSections, 0) { + } + + /// + /// Constructor + /// + /// Code + /// Extra sections or null + /// Token of locals + public MethodBody(byte[] code, byte[] extraSections, uint localVarSigTok) { + this.isTiny = (code[0] & 3) == 2; + this.code = code; + this.extraSections = extraSections; + this.localVarSigTok = localVarSigTok; + } + + /// + /// Gets the approximate size of the method body (code + exception handlers) + /// + public int GetSizeOfMethodBody() { + int len = code.Length; + if (extraSections != null) { + len = Utils.AlignUp(len, EXTRA_SECTIONS_ALIGNMENT); + len += extraSections.Length; + len = Utils.AlignUp(len, EXTRA_SECTIONS_ALIGNMENT); + } + return len; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + if (HasExtraSections) { + RVA rva2 = rva + (uint)code.Length; + rva2 = rva2.AlignUp(EXTRA_SECTIONS_ALIGNMENT); + rva2 += (uint)extraSections.Length; + length = (uint)rva2 - (uint)rva; + } + else + length = (uint)code.Length; + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write(code); + if (HasExtraSections) { + RVA rva2 = rva + (uint)code.Length; + writer.WriteZeros((int)rva2.AlignUp(EXTRA_SECTIONS_ALIGNMENT) - (int)rva2); + writer.Write(extraSections); + } + } + + /// + public override int GetHashCode() { + return Utils.GetHashCode(code) + Utils.GetHashCode(extraSections); + } + + /// + public override bool Equals(object obj) { + var other = obj as MethodBody; + if (other == null) + return false; + return Utils.Equals(code, other.code) && + Utils.Equals(extraSections, other.extraSections); + } + } +} diff --git a/dnlib/DotNet/Writer/MethodBodyChunks.cs b/dnlib/DotNet/Writer/MethodBodyChunks.cs new file mode 100644 index 0000000..33ab214 --- /dev/null +++ b/dnlib/DotNet/Writer/MethodBodyChunks.cs @@ -0,0 +1,154 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Stores all method body chunks + /// + public sealed class MethodBodyChunks : IChunk { + const uint FAT_BODY_ALIGNMENT = 4; + Dictionary tinyMethodsDict; + Dictionary fatMethodsDict; + readonly List tinyMethods; + readonly List fatMethods; + readonly bool shareBodies; + FileOffset offset; + RVA rva; + uint length; + bool setOffsetCalled; + readonly bool alignFatBodies; + uint savedBytes; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the number of bytes saved by re-using method bodies + /// + public uint SavedBytes { + get { return savedBytes; } + } + + /// + /// Constructor + /// + /// true if bodies can be shared + public MethodBodyChunks(bool shareBodies) { + this.shareBodies = shareBodies; + this.alignFatBodies = true; + if (shareBodies) { + tinyMethodsDict = new Dictionary(); + fatMethodsDict = new Dictionary(); + } + tinyMethods = new List(); + fatMethods = new List(); + } + + /// + /// Adds a and returns the one that has been cached + /// + /// The method body + /// The cached method body + public MethodBody Add(MethodBody methodBody) { + if (setOffsetCalled) + throw new InvalidOperationException("SetOffset() has already been called"); + if (shareBodies) { + var dict = methodBody.IsFat ? fatMethodsDict : tinyMethodsDict; + MethodBody cached; + if (dict.TryGetValue(methodBody, out cached)) { + savedBytes += (uint)methodBody.GetSizeOfMethodBody(); + return cached; + } + dict[methodBody] = methodBody; + } + var list = methodBody.IsFat ? fatMethods : tinyMethods; + list.Add(methodBody); + return methodBody; + } + + /// + /// Removes the specified method body from this chunk + /// + /// The method body + /// true if the method body is removed + public bool Remove(MethodBody methodBody) { + if (setOffsetCalled) + throw new InvalidOperationException("SetOffset() has already been called"); + var list = methodBody.IsFat ? fatMethods : tinyMethods; + return list.Remove(methodBody); + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + setOffsetCalled = true; + this.offset = offset; + this.rva = rva; + + tinyMethodsDict = null; + fatMethodsDict = null; + + var rva2 = rva; + foreach (var mb in tinyMethods) { + mb.SetOffset(offset, rva2); + uint len = mb.GetFileLength(); + rva2 += len; + offset += len; + } + + foreach (var mb in fatMethods) { + if (alignFatBodies) { + uint padding = (uint)rva2.AlignUp(FAT_BODY_ALIGNMENT) - (uint)rva2; + rva2 += padding; + offset += padding; + } + mb.SetOffset(offset, rva2); + uint len = mb.GetFileLength(); + rva2 += len; + offset += len; + } + + length = (uint)rva2 - (uint)rva; + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + var rva2 = rva; + foreach (var mb in tinyMethods) { + mb.VerifyWriteTo(writer); + rva2 += mb.GetFileLength(); + } + + foreach (var mb in fatMethods) { + if (alignFatBodies) { + int padding = (int)rva2.AlignUp(FAT_BODY_ALIGNMENT) - (int)rva2; + writer.WriteZeros(padding); + rva2 += (uint)padding; + } + mb.VerifyWriteTo(writer); + rva2 += mb.GetFileLength(); + } + } + } +} diff --git a/dnlib/DotNet/Writer/MethodBodyWriter.cs b/dnlib/DotNet/Writer/MethodBodyWriter.cs new file mode 100644 index 0000000..25aac1f --- /dev/null +++ b/dnlib/DotNet/Writer/MethodBodyWriter.cs @@ -0,0 +1,315 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.Emit; + +namespace dnlib.DotNet.Writer { + /// + /// Returns tokens of token types, strings and signatures + /// + public interface ITokenCreator : IWriterError { + /// + /// Gets the token of + /// + /// A token type or a string or a signature + /// The token + MDToken GetToken(object o); + + /// + /// Gets a StandAloneSig token + /// + /// All locals + /// The original token or 0 if none + /// A StandAloneSig token or 0 if is + /// empty. + MDToken GetToken(IList locals, uint origToken); + } + + /// + /// Writes CIL method bodies + /// + public sealed class MethodBodyWriter : MethodBodyWriterBase { + readonly ITokenCreator helper; + readonly CilBody cilBody; + readonly bool keepMaxStack; + uint codeSize; + uint maxStack; + byte[] code; + byte[] extraSections; + uint localVarSigTok; + + /// + /// Gets the code as a byte array. This is valid only after calling . + /// The size of this array is not necessarily a multiple of 4, even if there are exception + /// handlers present. See also + /// + public byte[] Code { + get { return code; } + } + + /// + /// Gets the extra sections (exception handlers) as a byte array or null if there + /// are no exception handlers. This is valid only after calling + /// + public byte[] ExtraSections { + get { return extraSections; } + } + + /// + /// Gets the token of the locals + /// + public uint LocalVarSigTok { + get { return localVarSigTok; } + } + + /// + /// Constructor + /// + /// Helps this instance + /// The CIL method body + public MethodBodyWriter(ITokenCreator helper, CilBody cilBody) + : this(helper, cilBody, false) { + } + + /// + /// Constructor + /// + /// Helps this instance + /// The CIL method body + /// Keep the original max stack value that has been initialized + /// in + public MethodBodyWriter(ITokenCreator helper, CilBody cilBody, bool keepMaxStack) + : base(cilBody.Instructions, cilBody.ExceptionHandlers) { + this.helper = helper; + this.cilBody = cilBody; + this.keepMaxStack = keepMaxStack; + } + + /// + /// Writes the method body + /// + public void Write() { + codeSize = InitializeInstructionOffsets(); + maxStack = keepMaxStack ? cilBody.MaxStack : GetMaxStack(); + if (NeedFatHeader()) + WriteFatHeader(); + else + WriteTinyHeader(); + if (exceptionHandlers.Count > 0) + WriteExceptionHandlers(); + } + + /// + /// Gets the code and (possible) exception handlers in one array. The exception handlers + /// are 4-byte aligned. + /// + /// The code and any exception handlers + public byte[] GetFullMethodBody() { + int padding = Utils.AlignUp(code.Length, 4) - code.Length; + var bytes = new byte[code.Length + (extraSections == null ? 0 : padding + extraSections.Length)]; + Array.Copy(code, 0, bytes, 0, code.Length); + if (extraSections != null) + Array.Copy(extraSections, 0, bytes, code.Length + padding, extraSections.Length); + return bytes; + } + + bool NeedFatHeader() { + //TODO: If locals has cust attrs, we also need a fat header + return codeSize > 0x3F || + exceptionHandlers.Count > 0 || + cilBody.HasVariables || + maxStack > 8; + } + + void WriteFatHeader() { + if (maxStack > ushort.MaxValue) { + Error("MaxStack is too big"); + maxStack = ushort.MaxValue; + } + + ushort flags = 0x3003; + if (exceptionHandlers.Count > 0) + flags |= 8; + if (cilBody.InitLocals) + flags |= 0x10; + + code = new byte[12 + codeSize]; + var writer = new BinaryWriter(new MemoryStream(code)); + writer.Write(flags); + writer.Write((ushort)maxStack); + writer.Write(codeSize); + writer.Write(localVarSigTok = helper.GetToken(GetLocals(), cilBody.LocalVarSigTok).Raw); + if (WriteInstructions(writer) != codeSize) + Error("Didn't write all code bytes"); + } + + IList GetLocals() { + var localsSig = new TypeSig[cilBody.Variables.Count]; + for (int i = 0; i < cilBody.Variables.Count; i++) + localsSig[i] = cilBody.Variables[i].Type; + return localsSig; + } + + void WriteTinyHeader() { + localVarSigTok = 0; + code = new byte[1 + codeSize]; + var writer = new BinaryWriter(new MemoryStream(code)); + writer.Write((byte)((codeSize << 2) | 2)); + if (WriteInstructions(writer) != codeSize) + Error("Didn't write all code bytes"); + } + + void WriteExceptionHandlers() { + var outStream = new MemoryStream(); + var writer = new BinaryWriter(outStream); + if (NeedFatExceptionClauses()) + WriteFatExceptionClauses(writer); + else + WriteSmallExceptionClauses(writer); + extraSections = outStream.ToArray(); + } + + bool NeedFatExceptionClauses() { + // Size must fit in a byte, and since one small exception record is 12 bytes + // and header is 4 bytes: x*12+4 <= 255 ==> x <= 20 + if (exceptionHandlers.Count > 20) + return true; + + foreach (var eh in exceptionHandlers) { + if (!FitsInSmallExceptionClause(eh.TryStart, eh.TryEnd)) + return true; + if (!FitsInSmallExceptionClause(eh.HandlerStart, eh.HandlerEnd)) + return true; + } + + return false; + } + + bool FitsInSmallExceptionClause(Instruction start, Instruction end) { + uint offs1 = GetOffset2(start); + uint offs2 = GetOffset2(end); + if (offs2 < offs1) + return false; + return offs1 <= ushort.MaxValue && offs2 - offs1 <= byte.MaxValue; + } + + uint GetOffset2(Instruction instr) { + if (instr == null) + return codeSize; + return GetOffset(instr); + } + + void WriteFatExceptionClauses(BinaryWriter writer) { + const int maxExceptionHandlers = (0x00FFFFFF - 4) / 24; + int numExceptionHandlers = exceptionHandlers.Count; + if (numExceptionHandlers > maxExceptionHandlers) { + Error("Too many exception handlers"); + numExceptionHandlers = maxExceptionHandlers; + } + + writer.Write((((uint)numExceptionHandlers * 24 + 4) << 8) | 0x41); + for (int i = 0; i < numExceptionHandlers; i++) { + var eh = exceptionHandlers[i]; + uint offs1, offs2; + + writer.Write((uint)eh.HandlerType); + + offs1 = GetOffset2(eh.TryStart); + offs2 = GetOffset2(eh.TryEnd); + if (offs2 <= offs1) + Error("Exception handler: TryEnd <= TryStart"); + writer.Write(offs1); + writer.Write(offs2 - offs1); + + offs1 = GetOffset2(eh.HandlerStart); + offs2 = GetOffset2(eh.HandlerEnd); + if (offs2 <= offs1) + Error("Exception handler: HandlerEnd <= HandlerStart"); + writer.Write(offs1); + writer.Write(offs2 - offs1); + + if (eh.HandlerType == ExceptionHandlerType.Catch) + writer.Write(helper.GetToken(eh.CatchType).Raw); + else if (eh.HandlerType == ExceptionHandlerType.Filter) + writer.Write(GetOffset2(eh.FilterStart)); + else + writer.Write(0); + } + } + + void WriteSmallExceptionClauses(BinaryWriter writer) { + const int maxExceptionHandlers = (0xFF - 4) / 12; + int numExceptionHandlers = exceptionHandlers.Count; + if (numExceptionHandlers > maxExceptionHandlers) { + Error("Too many exception handlers"); + numExceptionHandlers = maxExceptionHandlers; + } + + writer.Write((((uint)numExceptionHandlers * 12 + 4) << 8) | 1); + for (int i = 0; i < numExceptionHandlers; i++) { + var eh = exceptionHandlers[i]; + uint offs1, offs2; + + writer.Write((ushort)eh.HandlerType); + + offs1 = GetOffset2(eh.TryStart); + offs2 = GetOffset2(eh.TryEnd); + if (offs2 <= offs1) + Error("Exception handler: TryEnd <= TryStart"); + writer.Write((ushort)offs1); + writer.Write((byte)(offs2 - offs1)); + + offs1 = GetOffset2(eh.HandlerStart); + offs2 = GetOffset2(eh.HandlerEnd); + if (offs2 <= offs1) + Error("Exception handler: HandlerEnd <= HandlerStart"); + writer.Write((ushort)offs1); + writer.Write((byte)(offs2 - offs1)); + + if (eh.HandlerType == ExceptionHandlerType.Catch) + writer.Write(helper.GetToken(eh.CatchType).Raw); + else if (eh.HandlerType == ExceptionHandlerType.Filter) + writer.Write(GetOffset2(eh.FilterStart)); + else + writer.Write(0); + } + } + + /// + protected override void ErrorImpl(string message) { + helper.Error(message); + } + + /// + protected override void WriteInlineField(BinaryWriter writer, Instruction instr) { + writer.Write(helper.GetToken(instr.Operand).Raw); + } + + /// + protected override void WriteInlineMethod(BinaryWriter writer, Instruction instr) { + writer.Write(helper.GetToken(instr.Operand).Raw); + } + + /// + protected override void WriteInlineSig(BinaryWriter writer, Instruction instr) { + writer.Write(helper.GetToken(instr.Operand).Raw); + } + + /// + protected override void WriteInlineString(BinaryWriter writer, Instruction instr) { + writer.Write(helper.GetToken(instr.Operand).Raw); + } + + /// + protected override void WriteInlineTok(BinaryWriter writer, Instruction instr) { + writer.Write(helper.GetToken(instr.Operand).Raw); + } + + /// + protected override void WriteInlineType(BinaryWriter writer, Instruction instr) { + writer.Write(helper.GetToken(instr.Operand).Raw); + } + } +} diff --git a/dnlib/DotNet/Writer/MethodBodyWriterBase.cs b/dnlib/DotNet/Writer/MethodBodyWriterBase.cs new file mode 100644 index 0000000..af659c6 --- /dev/null +++ b/dnlib/DotNet/Writer/MethodBodyWriterBase.cs @@ -0,0 +1,413 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.Emit; + +namespace dnlib.DotNet.Writer { + /// + /// Base class of all CIL method body writers + /// + public abstract class MethodBodyWriterBase { + /// + protected readonly IList instructions; + /// + protected readonly IList exceptionHandlers; + readonly Dictionary offsets = new Dictionary(); + uint firstInstructionOffset; + int errors; + + /// + /// true if there was at least one error + /// + public bool ErrorDetected { + get { return errors > 0; } + } + + /// + /// Constructor + /// + /// All instructions + /// All exception handlers + protected MethodBodyWriterBase(IList instructions, IList exceptionHandlers) { + this.instructions = instructions; + this.exceptionHandlers = exceptionHandlers; + } + + /// + /// Called when an error is detected (eg. a null pointer). The error can be + /// ignored but the method won't be valid. + /// + /// Error message + protected void Error(string message) { + errors++; + ErrorImpl(message); + } + + /// + /// Called when an error is detected (eg. a null pointer). The error can be + /// ignored but the method won't be valid. + /// + /// Error message + protected virtual void ErrorImpl(string message) { + } + + /// + /// Gets max stack value + /// + protected uint GetMaxStack() { + if (instructions.Count == 0) + return 0; + uint maxStack; + if (!MaxStackCalculator.GetMaxStack(instructions, exceptionHandlers, out maxStack)) { + Error("Error calculating max stack value. If the method's obfuscated, set CilBody.KeepOldMaxStack or MetaDataOptions.Flags (KeepOldMaxStack, global option) to ignore this error. Otherwise fix your generated CIL code so it conforms to the ECMA standard."); + maxStack += 8; + } + return maxStack; + } + + /// + /// Gets the offset of an instruction + /// + /// The instruction + /// The offset or 0 if is null or not + /// present in the list of all instructions. + protected uint GetOffset(Instruction instr) { + if (instr == null) { + Error("Instruction is null"); + return 0; + } + uint offset; + if (offsets.TryGetValue(instr, out offset)) + return offset; + Error("Found some other method's instruction or a removed instruction. You probably removed an instruction that is the target of a branch instruction or an instruction that's the first/last instruction in an exception handler."); + return 0; + } + + /// + /// Initializes instruction offsets and returns the total code size + /// + /// Size of code + protected uint InitializeInstructionOffsets() { + uint offset = 0; + foreach (var instr in instructions) { + if (instr == null) + continue; + offsets[instr] = offset; + offset += GetSizeOfInstruction(instr); + } + return offset; + } + + /// + /// Gets the size of an instruction + /// + /// The instruction + /// Size of the instruction in bytes + protected virtual uint GetSizeOfInstruction(Instruction instr) { + return (uint)instr.GetSize(); + } + + /// + /// Writes all instructions to at its current offset + /// + /// The instruction writer + /// Number of bytes written + protected uint WriteInstructions(BinaryWriter writer) { + firstInstructionOffset = (uint)writer.BaseStream.Position; + foreach (var instr in instructions) { + if (instr == null) + continue; + WriteInstruction(writer, instr); + } + return ToInstructionOffset(writer); + } + + /// + /// Gets the current offset in the instruction stream. This offset is relative to + /// the first written instruction. + /// + /// The instruction writer + /// Current offset, relative to the first written instruction + protected uint ToInstructionOffset(BinaryWriter writer) { + return (uint)writer.BaseStream.Position - firstInstructionOffset; + } + + /// + /// Writes an instruction + /// + /// The instruction writer + /// The instruction + protected virtual void WriteInstruction(BinaryWriter writer, Instruction instr) { + WriteOpCode(writer, instr); + WriteOperand(writer, instr); + } + + /// + /// Writes an instruction's opcode + /// + /// The instruction writer + /// The instruction + protected virtual void WriteOpCode(BinaryWriter writer, Instruction instr) { + var code = instr.OpCode.Code; + if ((ushort)code <= 0xFF) + writer.Write((byte)code); + else if (((ushort)code >> 8) == 0xFE) { + writer.Write((byte)((ushort)code >> 8)); + writer.Write((byte)code); + } + else if (code == Code.UNKNOWN1) + writer.Write((byte)Code.Nop); + else if (code == Code.UNKNOWN2) + writer.Write((ushort)(((ushort)Code.Nop << 8) | Code.Nop)); + else { + Error("Unknown instruction"); + writer.Write((byte)Code.Nop); + } + } + + /// + /// Writes an instruction's operand + /// + /// The instruction writer + /// The instruction + protected virtual void WriteOperand(BinaryWriter writer, Instruction instr) { + switch (instr.OpCode.OperandType) { + case OperandType.InlineBrTarget: WriteInlineBrTarget(writer, instr); break; + case OperandType.InlineField: WriteInlineField(writer, instr); break; + case OperandType.InlineI: WriteInlineI(writer, instr); break; + case OperandType.InlineI8: WriteInlineI8(writer, instr); break; + case OperandType.InlineMethod: WriteInlineMethod(writer, instr); break; + case OperandType.InlineNone: WriteInlineNone(writer, instr); break; + case OperandType.InlinePhi: WriteInlinePhi(writer, instr); break; + case OperandType.InlineR: WriteInlineR(writer, instr); break; + case OperandType.InlineSig: WriteInlineSig(writer, instr); break; + case OperandType.InlineString: WriteInlineString(writer, instr); break; + case OperandType.InlineSwitch: WriteInlineSwitch(writer, instr); break; + case OperandType.InlineTok: WriteInlineTok(writer, instr); break; + case OperandType.InlineType: WriteInlineType(writer, instr); break; + case OperandType.InlineVar: WriteInlineVar(writer, instr); break; + case OperandType.ShortInlineBrTarget: WriteShortInlineBrTarget(writer, instr); break; + case OperandType.ShortInlineI: WriteShortInlineI(writer, instr); break; + case OperandType.ShortInlineR: WriteShortInlineR(writer, instr); break; + case OperandType.ShortInlineVar: WriteShortInlineVar(writer, instr); break; + + default: + Error("Unknown operand type"); + break; + } + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineBrTarget(BinaryWriter writer, Instruction instr) { + uint displ = GetOffset(instr.Operand as Instruction) - (ToInstructionOffset(writer) + 4); + writer.Write(displ); + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected abstract void WriteInlineField(BinaryWriter writer, Instruction instr); + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineI(BinaryWriter writer, Instruction instr) { + if (instr.Operand is int) + writer.Write((int)instr.Operand); + else { + Error("Operand is not an Int32"); + writer.Write(0); + } + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineI8(BinaryWriter writer, Instruction instr) { + if (instr.Operand is long) + writer.Write((long)instr.Operand); + else { + Error("Operand is not an Int64"); + writer.Write(0L); + } + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected abstract void WriteInlineMethod(BinaryWriter writer, Instruction instr); + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineNone(BinaryWriter writer, Instruction instr) { + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlinePhi(BinaryWriter writer, Instruction instr) { + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineR(BinaryWriter writer, Instruction instr) { + if (instr.Operand is double) + writer.Write((double)instr.Operand); + else { + Error("Operand is not a Double"); + writer.Write(0D); + } + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected abstract void WriteInlineSig(BinaryWriter writer, Instruction instr); + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected abstract void WriteInlineString(BinaryWriter writer, Instruction instr); + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineSwitch(BinaryWriter writer, Instruction instr) { + var targets = instr.Operand as IList; + if (targets == null) { + Error("switch operand is not a list of instructions"); + writer.Write(0); + } + else { + uint offsetAfter = (uint)(ToInstructionOffset(writer) + 4 + targets.Count * 4); + writer.Write(targets.Count); + foreach (var target in targets) + writer.Write(GetOffset(target) - offsetAfter); + } + } + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected abstract void WriteInlineTok(BinaryWriter writer, Instruction instr); + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected abstract void WriteInlineType(BinaryWriter writer, Instruction instr); + + /// + /// Writes an operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteInlineVar(BinaryWriter writer, Instruction instr) { + var variable = instr.Operand as IVariable; + if (variable == null) { + Error("Operand is not a local/arg"); + writer.Write((ushort)0); + } + else if (ushort.MinValue <= variable.Index && variable.Index <= ushort.MaxValue) + writer.Write((ushort)variable.Index); + else { + Error("Local/arg index doesn't fit in a UInt16"); + writer.Write((ushort)0); + } + } + + /// + /// Writes a operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteShortInlineBrTarget(BinaryWriter writer, Instruction instr) { + int displ = (int)(GetOffset(instr.Operand as Instruction) - (ToInstructionOffset(writer) + 1)); + if (sbyte.MinValue <= displ && displ <= sbyte.MaxValue) + writer.Write((sbyte)displ); + else { + Error("Target instruction is too far away for a short branch. Use the long branch or call CilBody.SimplifyBranches() and CilBody.OptimizeBranches()"); + writer.Write((byte)0); + } + } + + /// + /// Writes a operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteShortInlineI(BinaryWriter writer, Instruction instr) { + if (instr.Operand is sbyte) + writer.Write((sbyte)instr.Operand); + else if (instr.Operand is byte) + writer.Write((byte)instr.Operand); + else { + Error("Operand is not a Byte or a SByte"); + writer.Write((byte)0); + } + } + + /// + /// Writes a operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteShortInlineR(BinaryWriter writer, Instruction instr) { + if (instr.Operand is float) + writer.Write((float)instr.Operand); + else { + Error("Operand is not a Single"); + writer.Write(0F); + } + } + + /// + /// Writes a operand + /// + /// Instruction writer + /// Instruction + protected virtual void WriteShortInlineVar(BinaryWriter writer, Instruction instr) { + var variable = instr.Operand as IVariable; + if (variable == null) { + Error("Operand is not a local/arg"); + writer.Write((byte)0); + } + else if (byte.MinValue <= variable.Index && variable.Index <= byte.MaxValue) + writer.Write((byte)variable.Index); + else { + Error("Local/arg index doesn't fit in a Byte. Use the longer ldloc/ldarg/stloc/starg instruction."); + writer.Write((byte)0); + } + } + } +} diff --git a/dnlib/DotNet/Writer/ModuleWriter.cs b/dnlib/DotNet/Writer/ModuleWriter.cs new file mode 100644 index 0000000..02fe004 --- /dev/null +++ b/dnlib/DotNet/Writer/ModuleWriter.cs @@ -0,0 +1,312 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using System.IO; +using dnlib.DotNet.MD; +using dnlib.W32Resources; + +namespace dnlib.DotNet.Writer { + /// + /// options + /// + public sealed class ModuleWriterOptions : ModuleWriterOptionsBase { + /// + /// Default constructor + /// + public ModuleWriterOptions() { + } + + /// + /// Constructor + /// + /// The module + public ModuleWriterOptions(ModuleDef module) + : this(module, null) { + } + + /// + /// Constructor + /// + /// The module + /// Module writer listener + public ModuleWriterOptions(ModuleDef module, IModuleWriterListener listener) + : base(module, listener) { + } + } + + /// + /// Writes a .NET PE file. See also + /// + public sealed class ModuleWriter : ModuleWriterBase { + const uint DEFAULT_IAT_ALIGNMENT = 4; + const uint DEFAULT_IMPORTDIRECTORY_ALIGNMENT = 4; + const uint DEFAULT_STARTUPSTUB_ALIGNMENT = 1; + const uint DEFAULT_RELOC_ALIGNMENT = 4; + + readonly ModuleDef module; + ModuleWriterOptions options; + + List sections; + PESection textSection; + PESection rsrcSection; + PESection relocSection; + + PEHeaders peHeaders; + ImportAddressTable importAddressTable; + ImageCor20Header imageCor20Header; + ImportDirectory importDirectory; + StartupStub startupStub; + RelocDirectory relocDirectory; + + /// + public override ModuleDef Module { + get { return module; } + } + + /// + public override ModuleWriterOptionsBase TheOptions { + get { return Options; } + } + + /// + /// Gets/sets the writer options. This is never null + /// + public ModuleWriterOptions Options { + get { return options ?? (options = new ModuleWriterOptions(module)); } + set { options = value; } + } + + /// + /// Gets all s + /// + public override List Sections { + get { return sections; } + } + + /// + /// Gets the .text section + /// + public override PESection TextSection { + get { return textSection; } + } + + /// + /// Gets the .rsrc section or null if there's none + /// + public override PESection RsrcSection { + get { return rsrcSection; } + } + + /// + /// Gets the .reloc section or null if there's none + /// + public PESection RelocSection { + get { return relocSection; } + } + + /// + /// Gets the PE headers + /// + public PEHeaders PEHeaders { + get { return peHeaders; } + } + + /// + /// Gets the IAT or null if there's none + /// + public ImportAddressTable ImportAddressTable { + get { return importAddressTable; } + } + + /// + /// Gets the .NET header + /// + public ImageCor20Header ImageCor20Header { + get { return imageCor20Header; } + } + + /// + /// Gets the import directory or null if there's none + /// + public ImportDirectory ImportDirectory { + get { return importDirectory; } + } + + /// + /// Gets the startup stub or null if there's none + /// + public StartupStub StartupStub { + get { return startupStub; } + } + + /// + /// Gets the reloc directory or null if there's none + /// + public RelocDirectory RelocDirectory { + get { return relocDirectory; } + } + + /// + /// Constructor + /// + /// The module + public ModuleWriter(ModuleDef module) + : this(module, null) { + } + + /// + /// Constructor + /// + /// The module + /// Options or null + public ModuleWriter(ModuleDef module, ModuleWriterOptions options) { + this.module = module; + this.options = options; + } + + /// + protected override long WriteImpl() { + Initialize(); + metaData.CreateTables(); + return WriteFile(); + } + + void Initialize() { + CreateSections(); + Listener.OnWriterEvent(this, ModuleWriterEvent.PESectionsCreated); + + CreateChunks(); + Listener.OnWriterEvent(this, ModuleWriterEvent.ChunksCreated); + + AddChunksToSections(); + Listener.OnWriterEvent(this, ModuleWriterEvent.ChunksAddedToSections); + } + + /// + protected override Win32Resources GetWin32Resources() { + return Options.Win32Resources ?? module.Win32Resources; + } + + void CreateSections() { + sections = new List(); + sections.Add(textSection = new PESection(".text", 0x60000020)); + if (GetWin32Resources() != null) + sections.Add(rsrcSection = new PESection(".rsrc", 0x40000040)); + if (!Options.Is64Bit) + sections.Add(relocSection = new PESection(".reloc", 0x42000040)); + } + + void CreateChunks() { + peHeaders = new PEHeaders(Options.PEHeadersOptions); + + if (!Options.Is64Bit) { + importAddressTable = new ImportAddressTable(); + importDirectory = new ImportDirectory(); + startupStub = new StartupStub(); + relocDirectory = new RelocDirectory(); + } + + CreateStrongNameSignature(); + + imageCor20Header = new ImageCor20Header(Options.Cor20HeaderOptions); + CreateMetaDataChunks(module); + + CreateDebugDirectory(); + + if (importDirectory != null) + importDirectory.IsExeFile = Options.IsExeFile; + + peHeaders.IsExeFile = Options.IsExeFile; + } + + void AddChunksToSections() { + textSection.Add(importAddressTable, DEFAULT_IAT_ALIGNMENT); + textSection.Add(imageCor20Header, DEFAULT_COR20HEADER_ALIGNMENT); + textSection.Add(strongNameSignature, DEFAULT_STRONGNAMESIG_ALIGNMENT); + textSection.Add(constants, DEFAULT_CONSTANTS_ALIGNMENT); + textSection.Add(methodBodies, DEFAULT_METHODBODIES_ALIGNMENT); + textSection.Add(netResources, DEFAULT_NETRESOURCES_ALIGNMENT); + textSection.Add(metaData, DEFAULT_METADATA_ALIGNMENT); + textSection.Add(debugDirectory, DEFAULT_DEBUGDIRECTORY_ALIGNMENT); + textSection.Add(importDirectory, DEFAULT_IMPORTDIRECTORY_ALIGNMENT); + textSection.Add(startupStub, DEFAULT_STARTUPSTUB_ALIGNMENT); + if (rsrcSection != null) + rsrcSection.Add(win32Resources, DEFAULT_WIN32_RESOURCES_ALIGNMENT); + if (relocSection != null) + relocSection.Add(relocDirectory, DEFAULT_RELOC_ALIGNMENT); + } + + long WriteFile() { + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginWritePdb); + WritePdbFile(); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndWritePdb); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginCalculateRvasAndFileOffsets); + var chunks = new List(); + chunks.Add(peHeaders); + foreach (var section in sections) + chunks.Add(section); + peHeaders.PESections = sections; + CalculateRvasAndFileOffsets(chunks, 0, 0, peHeaders.FileAlignment, peHeaders.SectionAlignment); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndCalculateRvasAndFileOffsets); + + InitializeChunkProperties(); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginWriteChunks); + var writer = new BinaryWriter(destStream); + WriteChunks(writer, chunks, 0, peHeaders.FileAlignment); + long imageLength = writer.BaseStream.Position - destStreamBaseOffset; + Listener.OnWriterEvent(this, ModuleWriterEvent.EndWriteChunks); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginStrongNameSign); + if (Options.StrongNameKey != null) + StrongNameSign((long)strongNameSignature.FileOffset); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndStrongNameSign); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginWritePEChecksum); + if (Options.AddCheckSum) + peHeaders.WriteCheckSum(writer, imageLength); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndWritePEChecksum); + + return imageLength; + } + + void InitializeChunkProperties() { + Options.Cor20HeaderOptions.EntryPoint = GetEntryPoint(); + + if (importAddressTable != null) { + importAddressTable.ImportDirectory = importDirectory; + importDirectory.ImportAddressTable = importAddressTable; + startupStub.ImportDirectory = importDirectory; + startupStub.PEHeaders = peHeaders; + relocDirectory.StartupStub = startupStub; + } + peHeaders.StartupStub = startupStub; + peHeaders.ImageCor20Header = imageCor20Header; + peHeaders.ImportAddressTable = importAddressTable; + peHeaders.ImportDirectory = importDirectory; + peHeaders.Win32Resources = win32Resources; + peHeaders.RelocDirectory = relocDirectory; + peHeaders.DebugDirectory = debugDirectory; + imageCor20Header.MetaData = metaData; + imageCor20Header.NetResources = netResources; + imageCor20Header.StrongNameSignature = strongNameSignature; + } + + uint GetEntryPoint() { + var methodEntryPoint = module.ManagedEntryPoint as MethodDef; + if (methodEntryPoint != null) + return new MDToken(Table.Method, metaData.GetRid(methodEntryPoint)).Raw; + + var fileEntryPoint = module.ManagedEntryPoint as FileDef; + if (fileEntryPoint != null) + return new MDToken(Table.File, metaData.GetRid(fileEntryPoint)).Raw; + + uint nativeEntryPoint = (uint)module.NativeEntryPoint; + if (nativeEntryPoint != 0) + return nativeEntryPoint; + + return 0; + } + } +} diff --git a/dnlib/DotNet/Writer/ModuleWriterBase.cs b/dnlib/DotNet/Writer/ModuleWriterBase.cs new file mode 100644 index 0000000..2163a78 --- /dev/null +++ b/dnlib/DotNet/Writer/ModuleWriterBase.cs @@ -0,0 +1,906 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.DotNet.Pdb; +using dnlib.PE; +using dnlib.W32Resources; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// Common module writer options base class + /// + public class ModuleWriterOptionsBase { + IModuleWriterListener listener; + PEHeadersOptions peHeadersOptions; + Cor20HeaderOptions cor20HeaderOptions; + MetaDataOptions metaDataOptions; + ILogger logger; + ILogger metaDataLogger; + Win32Resources win32Resources; + StrongNameKey strongNameKey; + StrongNamePublicKey strongNamePublicKey; + + /// + /// Gets/sets the listener + /// + public IModuleWriterListener Listener { + get { return listener; } + set { listener = value; } + } + + /// + /// Gets/sets the logger. If this is null, any errors result in a + /// being thrown. To disable this behavior, either + /// create your own logger or use . + /// + public ILogger Logger { + get { return logger; } + set { logger = value; } + } + + /// + /// Gets/sets the writer logger. If this is null, use + /// . + /// + public ILogger MetaDataLogger { + get { return metaDataLogger; } + set { metaDataLogger = value; } + } + + /// + /// Gets/sets the options. This is never null. + /// + public PEHeadersOptions PEHeadersOptions { + get { return peHeadersOptions ?? (peHeadersOptions = new PEHeadersOptions()); } + set { peHeadersOptions = value; } + } + + /// + /// Gets/sets the options. This is never null. + /// + public Cor20HeaderOptions Cor20HeaderOptions { + get { return cor20HeaderOptions ?? (cor20HeaderOptions = new Cor20HeaderOptions()); } + set { cor20HeaderOptions = value; } + } + + /// + /// Gets/sets the options. This is never null. + /// + public MetaDataOptions MetaDataOptions { + get { return metaDataOptions ?? (metaDataOptions = new MetaDataOptions()); } + set { metaDataOptions = value; } + } + + /// + /// Gets/sets the Win32 resources. If this is null, use the module's + /// Win32 resources if any. + /// + public Win32Resources Win32Resources { + get { return win32Resources; } + set { win32Resources = value; } + } + + /// + /// Gets/sets the strong name key. When you enhance strong name sign an assembly, + /// this instance's HashAlgorithm must be initialized to its public key's HashAlgorithm. + /// You should call + /// to initialize this property if you use normal strong name signing. + /// You should call + /// or + /// to initialize this property if you use enhanced strong name signing. + /// + public StrongNameKey StrongNameKey { + get { return strongNameKey; } + set { strongNameKey = value; } + } + + /// + /// Gets/sets the new public key that should be used. If this is null, use + /// the public key generated from . If it is also null, + /// use the module's Assembly's public key. + /// You should call + /// or + /// to initialize this property if you use enhanced strong name signing. + /// + public StrongNamePublicKey StrongNamePublicKey { + get { return strongNamePublicKey; } + set { strongNamePublicKey = value; } + } + + /// + /// true if method bodies can be shared (two or more method bodies can share the + /// same RVA), false if method bodies can't be shared. Don't enable it if there + /// must be a 1:1 relationship with method bodies and their RVAs. + /// + public bool ShareMethodBodies { get; set; } + + /// + /// true if the PE header CheckSum field should be updated, false if the + /// CheckSum field isn't updated. + /// + public bool AddCheckSum { get; set; } + + /// + /// true if it's a 64-bit module, false if it's a 32-bit or AnyCPU module. + /// + public bool Is64Bit { + get { + if (!PEHeadersOptions.Machine.HasValue) + return false; + return PEHeadersOptions.Machine == Machine.IA64 || + PEHeadersOptions.Machine == Machine.AMD64 || + PEHeadersOptions.Machine == Machine.ARM64; + } + } + + /// + /// Gets/sets the module kind + /// + public ModuleKind ModuleKind { get; set; } + + /// + /// true if it should be written as an EXE file, false if it should be + /// written as a DLL file. + /// + public bool IsExeFile { + get { + return ModuleKind != ModuleKind.Dll && + ModuleKind != ModuleKind.NetModule; + } + } + + /// + /// Set it to true to enable writing a PDB file. Default is false (a PDB file + /// won't be written to disk). + /// + public bool WritePdb { get; set; } + + /// + /// PDB file name. If it's null a PDB file with the same name as the output assembly + /// will be created but with a PDB extension. must be true or + /// this property is ignored. + /// + public string PdbFileName { get; set; } + + /// + /// PDB stream. If this is initialized, then you should also set + /// to the name of the PDB file since the file name must be written to the PE debug directory. + /// must be true or this property is ignored. + /// + public Stream PdbStream { get; set; } + + /// + /// If or aren't enough, this can be used + /// to create a new instance. must be + /// true or this property is ignored. + /// + public CreatePdbSymbolWriterDelegate CreatePdbSymbolWriter { get; set; } + + /// + /// Default constructor + /// + protected ModuleWriterOptionsBase() { + ShareMethodBodies = true; + ModuleKind = ModuleKind.Windows; + } + + /// + /// Constructor + /// + /// The module + protected ModuleWriterOptionsBase(ModuleDef module) + : this(module, null) { + } + + /// + /// Constructor + /// + /// The module + /// Module writer listener + protected ModuleWriterOptionsBase(ModuleDef module, IModuleWriterListener listener) { + this.listener = listener; + ShareMethodBodies = true; + MetaDataOptions.MetaDataHeaderOptions.VersionString = module.RuntimeVersion; + ModuleKind = module.Kind; + PEHeadersOptions.Machine = module.Machine; + PEHeadersOptions.Characteristics = module.Characteristics; + PEHeadersOptions.DllCharacteristics = module.DllCharacteristics; + if (module.Kind == ModuleKind.Windows) + PEHeadersOptions.Subsystem = Subsystem.WindowsGui; + else + PEHeadersOptions.Subsystem = Subsystem.WindowsCui; + PEHeadersOptions.NumberOfRvaAndSizes = 0x10; + Cor20HeaderOptions.Flags = module.Cor20HeaderFlags; + + if (module.Assembly != null && !PublicKeyBase.IsNullOrEmpty2(module.Assembly.PublicKey)) + Cor20HeaderOptions.Flags |= ComImageFlags.StrongNameSigned; + + if (module.Cor20HeaderRuntimeVersion != null) { + Cor20HeaderOptions.MajorRuntimeVersion = (ushort)(module.Cor20HeaderRuntimeVersion.Value >> 16); + Cor20HeaderOptions.MinorRuntimeVersion = (ushort)module.Cor20HeaderRuntimeVersion.Value; + } + else if (module.IsClr1x) { + Cor20HeaderOptions.MajorRuntimeVersion = 2; + Cor20HeaderOptions.MinorRuntimeVersion = 0; + } + else { + Cor20HeaderOptions.MajorRuntimeVersion = 2; + Cor20HeaderOptions.MinorRuntimeVersion = 5; + } + + if (module.TablesHeaderVersion != null) { + MetaDataOptions.TablesHeapOptions.MajorVersion = (byte)(module.TablesHeaderVersion.Value >> 8); + MetaDataOptions.TablesHeapOptions.MinorVersion = (byte)module.TablesHeaderVersion.Value; + } + else if (module.IsClr1x) { + // Generics aren't supported + MetaDataOptions.TablesHeapOptions.MajorVersion = 1; + MetaDataOptions.TablesHeapOptions.MinorVersion = 0; + } + else { + // Generics are supported + MetaDataOptions.TablesHeapOptions.MajorVersion = 2; + MetaDataOptions.TablesHeapOptions.MinorVersion = 0; + } + + // Some tools crash if #GUID is missing so always create it by default + MetaDataOptions.Flags |= MetaDataFlags.AlwaysCreateGuidHeap; + + var modDefMD = module as ModuleDefMD; + if (modDefMD != null) { + var ntHeaders = modDefMD.MetaData.PEImage.ImageNTHeaders; + PEHeadersOptions.TimeDateStamp = ntHeaders.FileHeader.TimeDateStamp; + PEHeadersOptions.MajorLinkerVersion = ntHeaders.OptionalHeader.MajorLinkerVersion; + PEHeadersOptions.MinorLinkerVersion = ntHeaders.OptionalHeader.MinorLinkerVersion; + PEHeadersOptions.ImageBase = ntHeaders.OptionalHeader.ImageBase; + AddCheckSum = ntHeaders.OptionalHeader.CheckSum != 0; + } + + if (Is64Bit) { + PEHeadersOptions.Characteristics &= ~Characteristics._32BitMachine; + PEHeadersOptions.Characteristics |= Characteristics.LargeAddressAware; + } + else + PEHeadersOptions.Characteristics |= Characteristics._32BitMachine; + } + + /// + /// Initializes and + /// for normal strong name signing. + /// + /// Module + /// Signature strong name key pair + public void InitializeStrongNameSigning(ModuleDef module, StrongNameKey signatureKey) { + StrongNameKey = signatureKey; + StrongNamePublicKey = null; + if (module.Assembly != null) + module.Assembly.CustomAttributes.RemoveAll("System.Reflection.AssemblySignatureKeyAttribute"); + } + + /// + /// Initializes and + /// for enhanced strong name signing (without key migration). See + /// http://msdn.microsoft.com/en-us/library/hh415055.aspx + /// + /// Module + /// Signature strong name key pair + /// Signature public key + public void InitializeEnhancedStrongNameSigning(ModuleDef module, StrongNameKey signatureKey, StrongNamePublicKey signaturePubKey) { + InitializeStrongNameSigning(module, signatureKey); + StrongNameKey.HashAlgorithm = signaturePubKey.HashAlgorithm; + } + + /// + /// Initializes and + /// for enhanced strong name signing (with key migration). See + /// http://msdn.microsoft.com/en-us/library/hh415055.aspx + /// + /// Module + /// Signature strong name key pair + /// Signature public key + /// Identity strong name key pair + /// Identity public key + public void InitializeEnhancedStrongNameSigning(ModuleDef module, StrongNameKey signatureKey, StrongNamePublicKey signaturePubKey, StrongNameKey identityKey, StrongNamePublicKey identityPubKey) { + StrongNameKey = signatureKey; + StrongNameKey.HashAlgorithm = signaturePubKey.HashAlgorithm; + StrongNamePublicKey = identityPubKey; + if (module.Assembly != null) + module.Assembly.UpdateOrCreateAssemblySignatureKeyAttribute(identityPubKey, identityKey, signaturePubKey); + } + } + + /// + /// Creates a new instance + /// + /// Module writer + /// A new instance + public delegate ISymbolWriter2 CreatePdbSymbolWriterDelegate(ModuleWriterBase writer); + + /// + /// Module writer base class + /// + public abstract class ModuleWriterBase : IMetaDataListener, ILogger { + /// Default alignment of all constants + protected internal const uint DEFAULT_CONSTANTS_ALIGNMENT = 8; + /// Default alignment of all method bodies + protected const uint DEFAULT_METHODBODIES_ALIGNMENT = 4; + /// Default alignment of all .NET resources + protected const uint DEFAULT_NETRESOURCES_ALIGNMENT = 8; + /// Default alignment of the .NET metadata + protected const uint DEFAULT_METADATA_ALIGNMENT = 4; + /// Default Win32 resources alignment + protected internal const uint DEFAULT_WIN32_RESOURCES_ALIGNMENT = 8; + /// Default strong name signature alignment + protected const uint DEFAULT_STRONGNAMESIG_ALIGNMENT = 16; + /// Default COR20 header alignment + protected const uint DEFAULT_COR20HEADER_ALIGNMENT = 4; + /// Default debug directory alignment + protected const uint DEFAULT_DEBUGDIRECTORY_ALIGNMENT = 4; + + /// See + protected Stream destStream; + /// See + protected UniqueChunkList constants; + /// See + protected MethodBodyChunks methodBodies; + /// See + protected NetResources netResources; + /// See + protected MetaData metaData; + /// See + protected Win32ResourcesChunk win32Resources; + /// Offset where the module is written. Usually 0. + protected long destStreamBaseOffset; + IModuleWriterListener listener; + /// Debug directory + protected DebugDirectory debugDirectory; + + string createdPdbFileName; + + /// + /// Strong name signature + /// + protected StrongNameSignature strongNameSignature; + + /// + /// Returns the module writer options + /// + public abstract ModuleWriterOptionsBase TheOptions { get; } + + /// + /// Gets/sets the module writer listener + /// + protected IModuleWriterListener Listener { + get { return listener ?? DummyModuleWriterListener.Instance; } + set { listener = value; } + } + + /// + /// Gets the destination stream + /// + public Stream DestinationStream { + get { return destStream; } + } + + /// + /// Gets the constants + /// + public UniqueChunkList Constants { + get { return constants; } + } + + /// + /// Gets the method bodies + /// + public MethodBodyChunks MethodBodies { + get { return methodBodies; } + } + + /// + /// Gets the .NET resources + /// + public NetResources NetResources { + get { return netResources; } + } + + /// + /// Gets the .NET metadata + /// + public MetaData MetaData { + get { return metaData; } + } + + /// + /// Gets the Win32 resources or null if there's none + /// + public Win32ResourcesChunk Win32Resources { + get { return win32Resources; } + } + + /// + /// Gets the strong name signature or null if there's none + /// + public StrongNameSignature StrongNameSignature { + get { return strongNameSignature; } + } + + /// + /// Gets all s + /// + public abstract List Sections { get; } + + /// + /// Gets the .text section + /// + public abstract PESection TextSection { get; } + + /// + /// Gets the .rsrc section or null if there's none + /// + public abstract PESection RsrcSection { get; } + + /// + /// Gets the debug directory or null if there's none + /// + public DebugDirectory DebugDirectory { + get { return debugDirectory; } + } + + /// + /// true if this is a , false if + /// this is a . + /// + public bool IsNativeWriter { + get { return this is NativeModuleWriter; } + } + + /// + /// Writes the module to a file + /// + /// File name. The file will be truncated if it exists. + public void Write(string fileName) { + using (var dest = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { + dest.SetLength(0); + try { + Write(dest); + } + catch { + // Writing failed. Delete the file since it's useless. + dest.Close(); + DeleteFileNoThrow(fileName); + throw; + } + } + } + + static void DeleteFileNoThrow(string fileName) { + if (string.IsNullOrEmpty(fileName)) + return; + try { + File.Delete(fileName); + } + catch { + } + } + + /// + /// Writes the module to a + /// + /// Destination stream + public void Write(Stream dest) { + if (TheOptions.StrongNameKey != null || TheOptions.StrongNamePublicKey != null) + TheOptions.Cor20HeaderOptions.Flags |= ComImageFlags.StrongNameSigned; + + Listener = TheOptions.Listener ?? DummyModuleWriterListener.Instance; + destStream = dest; + destStreamBaseOffset = destStream.Position; + Listener.OnWriterEvent(this, ModuleWriterEvent.Begin); + var imageLength = WriteImpl(); + destStream.Position = destStreamBaseOffset + imageLength; + Listener.OnWriterEvent(this, ModuleWriterEvent.End); + } + + /// + /// Returns the module that is written + /// + public abstract ModuleDef Module { get; } + + /// + /// Writes the module to . and + /// have been initialized when this method is called. + /// + /// Number of bytes written + protected abstract long WriteImpl(); + + /// + /// Creates the strong name signature if the module has one of the strong name flags + /// set or wants to sign the assembly. + /// + protected void CreateStrongNameSignature() { + if (TheOptions.StrongNameKey != null) + strongNameSignature = new StrongNameSignature(TheOptions.StrongNameKey.SignatureSize); + else if (Module.Assembly != null && !PublicKeyBase.IsNullOrEmpty2(Module.Assembly.PublicKey)) { + int len = Module.Assembly.PublicKey.Data.Length - 0x20; + strongNameSignature = new StrongNameSignature(len > 0 ? len : 0x80); + } + else if (((TheOptions.Cor20HeaderOptions.Flags ?? Module.Cor20HeaderFlags) & ComImageFlags.StrongNameSigned) != 0) + strongNameSignature = new StrongNameSignature(0x80); + } + + /// + /// Creates the .NET metadata chunks (constants, method bodies, .NET resources, + /// the metadata, and Win32 resources) + /// + /// + protected void CreateMetaDataChunks(ModuleDef module) { + constants = new UniqueChunkList(); + methodBodies = new MethodBodyChunks(TheOptions.ShareMethodBodies); + netResources = new NetResources(DEFAULT_NETRESOURCES_ALIGNMENT); + + metaData = MetaData.Create(module, constants, methodBodies, netResources, TheOptions.MetaDataOptions); + metaData.Logger = TheOptions.MetaDataLogger ?? this; + metaData.Listener = this; + + // StrongNamePublicKey is used if the user wants to override the assembly's + // public key or when enhanced strong naming the assembly. + var pk = TheOptions.StrongNamePublicKey; + if (pk != null) + metaData.AssemblyPublicKey = pk.CreatePublicKey(); + else if (TheOptions.StrongNameKey != null) + metaData.AssemblyPublicKey = TheOptions.StrongNameKey.PublicKey; + + var w32Resources = GetWin32Resources(); + if (w32Resources != null) + win32Resources = new Win32ResourcesChunk(w32Resources); + } + + /// + /// Gets the Win32 resources that should be written to the new image or null if none + /// + protected abstract Win32Resources GetWin32Resources(); + + /// + /// Calculates and of all s + /// + /// All chunks + /// Starting file offset + /// Starting RVA + /// File alignment + /// Section alignment + protected void CalculateRvasAndFileOffsets(List chunks, FileOffset offset, RVA rva, uint fileAlignment, uint sectionAlignment) { + foreach (var chunk in chunks) { + chunk.SetOffset(offset, rva); + offset += chunk.GetFileLength(); + rva += chunk.GetVirtualSize(); + offset = offset.AlignUp(fileAlignment); + rva = rva.AlignUp(sectionAlignment); + } + } + + /// + /// Writes all chunks to + /// + /// The writer + /// All chunks + /// File offset of first chunk + /// File alignment + protected void WriteChunks(BinaryWriter writer, List chunks, FileOffset offset, uint fileAlignment) { + foreach (var chunk in chunks) { + chunk.VerifyWriteTo(writer); + offset += chunk.GetFileLength(); + var newOffset = offset.AlignUp(fileAlignment); + writer.WriteZeros((int)(newOffset - offset)); + offset = newOffset; + } + } + + /// + /// Strong name sign the assembly + /// + /// Strong name signature offset + protected void StrongNameSign(long snSigOffset) { + var snSigner = new StrongNameSigner(destStream, destStreamBaseOffset); + snSigner.WriteSignature(TheOptions.StrongNameKey, snSigOffset); + } + + bool CanWritePdb() { + return TheOptions.WritePdb && Module.PdbState != null; + } + + /// + /// Creates the debug directory if a PDB file should be written + /// + protected void CreateDebugDirectory() { + if (CanWritePdb()) + debugDirectory = new DebugDirectory(); + } + + /// + /// Write the PDB file. The caller should send the PDB events before and after calling this + /// method. + /// + protected void WritePdbFile() { + if (!CanWritePdb()) + return; + if (debugDirectory == null) + throw new InvalidOperationException("debugDirectory is null but WritePdb is true"); + + var pdbState = Module.PdbState; + if (pdbState == null) { + Error("TheOptions.WritePdb is true but module has no PdbState"); + debugDirectory.DontWriteAnything = true; + return; + } + + var symWriter = GetSymbolWriter2(); + if (symWriter == null) { + Error("Could not create a PDB symbol writer. A Windows OS might be required."); + debugDirectory.DontWriteAnything = true; + return; + } + + var pdbWriter = new PdbWriter(symWriter, pdbState, metaData); + try { + pdbWriter.Logger = TheOptions.Logger; + pdbWriter.Write(); + + debugDirectory.Data = pdbWriter.GetDebugInfo(out debugDirectory.debugDirData); + debugDirectory.TimeDateStamp = GetTimeDateStamp(); + pdbWriter.Dispose(); + } + catch { + pdbWriter.Dispose(); + DeleteFileNoThrow(createdPdbFileName); + throw; + } + } + + uint GetTimeDateStamp() { + var td = TheOptions.PEHeadersOptions.TimeDateStamp; + if (td.HasValue) + return (uint)td; + TheOptions.PEHeadersOptions.TimeDateStamp = PEHeadersOptions.CreateNewTimeDateStamp(); + return (uint)TheOptions.PEHeadersOptions.TimeDateStamp; + } + + ISymbolWriter2 GetSymbolWriter2() { + if (TheOptions.CreatePdbSymbolWriter != null) { + var writer = TheOptions.CreatePdbSymbolWriter(this); + if (writer != null) + return writer; + } + + if (TheOptions.PdbStream != null) { + return SymbolWriterCreator.Create(TheOptions.PdbStream, + TheOptions.PdbFileName ?? + GetStreamName(TheOptions.PdbStream) ?? + GetDefaultPdbFileName()); + } + + if (!string.IsNullOrEmpty(TheOptions.PdbFileName)) { + createdPdbFileName = TheOptions.PdbFileName; + return SymbolWriterCreator.Create(createdPdbFileName); + } + + createdPdbFileName = GetDefaultPdbFileName(); + if (createdPdbFileName == null) + return null; + return SymbolWriterCreator.Create(createdPdbFileName); + } + + static string GetStreamName(Stream stream) { + var fs = stream as FileStream; + return fs == null ? null : fs.Name; + } + + string GetDefaultPdbFileName() { + var destFileName = GetStreamName(destStream); + if (string.IsNullOrEmpty(destFileName)) { + Error("TheOptions.WritePdb is true but it's not possible to guess the default PDB file name. Set PdbFileName to the name of the PDB file."); + return null; + } + + return Path.ChangeExtension(destFileName, "pdb"); + } + + /// + void IMetaDataListener.OnMetaDataEvent(MetaData metaData, MetaDataEvent evt) { + switch (evt) { + case MetaDataEvent.BeginCreateTables: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDBeginCreateTables); + break; + + case MetaDataEvent.AllocateTypeDefRids: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateTypeDefRids); + break; + + case MetaDataEvent.AllocateMemberDefRids: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateMemberDefRids); + break; + + case MetaDataEvent.AllocateMemberDefRids0: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateMemberDefRids0); + break; + + case MetaDataEvent.AllocateMemberDefRids1: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateMemberDefRids1); + break; + + case MetaDataEvent.AllocateMemberDefRids2: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateMemberDefRids2); + break; + + case MetaDataEvent.AllocateMemberDefRids3: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateMemberDefRids3); + break; + + case MetaDataEvent.AllocateMemberDefRids4: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDAllocateMemberDefRids4); + break; + + case MetaDataEvent.MemberDefRidsAllocated: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDMemberDefRidsAllocated); + break; + + case MetaDataEvent.InitializeTypeDefsAndMemberDefs0: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDInitializeTypeDefsAndMemberDefs0); + break; + + case MetaDataEvent.InitializeTypeDefsAndMemberDefs1: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDInitializeTypeDefsAndMemberDefs1); + break; + + case MetaDataEvent.InitializeTypeDefsAndMemberDefs2: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDInitializeTypeDefsAndMemberDefs2); + break; + + case MetaDataEvent.InitializeTypeDefsAndMemberDefs3: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDInitializeTypeDefsAndMemberDefs3); + break; + + case MetaDataEvent.InitializeTypeDefsAndMemberDefs4: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDInitializeTypeDefsAndMemberDefs4); + break; + + case MetaDataEvent.MemberDefsInitialized: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDMemberDefsInitialized); + break; + + case MetaDataEvent.BeforeSortTables: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDBeforeSortTables); + break; + + case MetaDataEvent.MostTablesSorted: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDMostTablesSorted); + break; + + case MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes0: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteTypeDefAndMemberDefCustomAttributes0); + break; + + case MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes1: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteTypeDefAndMemberDefCustomAttributes1); + break; + + case MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes2: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteTypeDefAndMemberDefCustomAttributes2); + break; + + case MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes3: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteTypeDefAndMemberDefCustomAttributes3); + break; + + case MetaDataEvent.WriteTypeDefAndMemberDefCustomAttributes4: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteTypeDefAndMemberDefCustomAttributes4); + break; + + case MetaDataEvent.MemberDefCustomAttributesWritten: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDMemberDefCustomAttributesWritten); + break; + + case MetaDataEvent.BeginAddResources: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDBeginAddResources); + break; + + case MetaDataEvent.EndAddResources: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDEndAddResources); + break; + + case MetaDataEvent.BeginWriteMethodBodies: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDBeginWriteMethodBodies); + break; + + case MetaDataEvent.WriteMethodBodies0: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies0); + break; + + case MetaDataEvent.WriteMethodBodies1: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies1); + break; + + case MetaDataEvent.WriteMethodBodies2: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies2); + break; + + case MetaDataEvent.WriteMethodBodies3: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies3); + break; + + case MetaDataEvent.WriteMethodBodies4: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies4); + break; + + case MetaDataEvent.WriteMethodBodies5: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies5); + break; + + case MetaDataEvent.WriteMethodBodies6: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies6); + break; + + case MetaDataEvent.WriteMethodBodies7: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies7); + break; + + case MetaDataEvent.WriteMethodBodies8: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies8); + break; + + case MetaDataEvent.WriteMethodBodies9: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDWriteMethodBodies9); + break; + + case MetaDataEvent.EndWriteMethodBodies: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDEndWriteMethodBodies); + break; + + case MetaDataEvent.OnAllTablesSorted: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDOnAllTablesSorted); + break; + + case MetaDataEvent.EndCreateTables: + Listener.OnWriterEvent(this, ModuleWriterEvent.MDEndCreateTables); + break; + + default: + break; + } + } + + ILogger GetLogger() { + return TheOptions.Logger ?? DummyLogger.ThrowModuleWriterExceptionOnErrorInstance; + } + + /// + void ILogger.Log(object sender, LoggerEvent loggerEvent, string format, params object[] args) { + GetLogger().Log(this, loggerEvent, format, args); + } + + /// + bool ILogger.IgnoresEvent(LoggerEvent loggerEvent) { + return GetLogger().IgnoresEvent(loggerEvent); + } + + /// + /// Logs an error message + /// + /// Format + /// Format args + protected void Error(string format, params object[] args) { + GetLogger().Log(this, LoggerEvent.Error, format, args); + } + + /// + /// Logs a warning message + /// + /// Format + /// Format args + protected void Warning(string format, params object[] args) { + GetLogger().Log(this, LoggerEvent.Warning, format, args); + } + } +} diff --git a/dnlib/DotNet/Writer/ModuleWriterException.cs b/dnlib/DotNet/Writer/ModuleWriterException.cs new file mode 100644 index 0000000..50975f8 --- /dev/null +++ b/dnlib/DotNet/Writer/ModuleWriterException.cs @@ -0,0 +1,34 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.DotNet.Writer { + /// + /// Thrown when the module writer encounters an unrecoverable error + /// + [Serializable] + public class ModuleWriterException : Exception { + /// + /// Default constructor + /// + public ModuleWriterException() { + } + + /// + /// Constructor + /// + /// Error message + public ModuleWriterException(string message) + : base(message) { + } + + /// + /// Constructor + /// + /// Error message + /// Other exception + public ModuleWriterException(string message, Exception innerException) + : base(message, innerException) { + } + } +} diff --git a/dnlib/DotNet/Writer/NativeModuleWriter.cs b/dnlib/DotNet/Writer/NativeModuleWriter.cs new file mode 100644 index 0000000..2c09141 --- /dev/null +++ b/dnlib/DotNet/Writer/NativeModuleWriter.cs @@ -0,0 +1,714 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.PE; +using dnlib.W32Resources; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// options + /// + public sealed class NativeModuleWriterOptions : ModuleWriterOptionsBase { + /// + /// If true, any extra data after the PE data in the original file is also saved + /// at the end of the new file. Enable this option if some protector has written data to + /// the end of the file and uses it at runtime. + /// + public bool KeepExtraPEData { get; set; } + + /// + /// If true, keep the original Win32 resources + /// + public bool KeepWin32Resources { get; set; } + + /// + /// Constructor + /// + /// Module + public NativeModuleWriterOptions(ModuleDefMD module) + : this(module, null) { + } + + /// + /// Constructor + /// + /// Module + /// Module writer listener + public NativeModuleWriterOptions(ModuleDefMD module, IModuleWriterListener listener) + : base(module, listener) { + + // C++ .NET mixed mode assemblies sometimes/often call Module.ResolveMethod(), + // so method metadata tokens must be preserved. + MetaDataOptions.Flags |= MetaDataFlags.PreserveAllMethodRids; + } + } + + /// + /// A module writer that supports saving mixed-mode modules (modules with native code). + /// The original image will be re-used. See also + /// + public sealed class NativeModuleWriter : ModuleWriterBase { + /// The original .NET module + readonly ModuleDefMD module; + + /// All options + NativeModuleWriterOptions options; + + /// + /// Any extra data found at the end of the original file. This is null if there's + /// no extra data or if is + /// false. + /// + BinaryReaderChunk extraData; + + /// The original PE headers + BinaryReaderChunk headerSection; + + /// The original PE sections and their data + List origSections; + + /// Original PE image + readonly IPEImage peImage; + + /// New sections we've added and their data + List sections; + + /// New .text section where we put some stuff, eg. .NET metadata + PESection textSection; + + /// The new COR20 header + ByteArrayChunk imageCor20Header; + + /// + /// New .rsrc section where we put the new Win32 resources. This is null if there + /// are no Win32 resources or if + /// is true + /// + PESection rsrcSection; + + /// + /// Offset in of the PE checksum field. + /// + long checkSumOffset; + + /// + /// Original PE section + /// + public sealed class OrigSection : IDisposable { + /// PE section + public ImageSectionHeader PESection; + /// PE section data + public BinaryReaderChunk Chunk; + + /// + /// Constructor + /// + /// PE section + public OrigSection(ImageSectionHeader peSection) { + this.PESection = peSection; + } + + /// + public void Dispose() { + if (Chunk != null) + Chunk.Data.Dispose(); + Chunk = null; + PESection = null; + } + + /// + public override string ToString() { + uint offs = Chunk.Data is IImageStream ? (uint)((IImageStream)Chunk.Data).FileOffset : 0; + return string.Format("{0} FO:{1:X8} L:{2:X8}", PESection.DisplayName, offs, (uint)Chunk.Data.Length); + } + } + + /// + /// Gets the module + /// + public ModuleDefMD ModuleDefMD { + get { return module; } + } + + /// + public override ModuleDef Module { + get { return module; } + } + + /// + public override ModuleWriterOptionsBase TheOptions { + get { return Options; } + } + + /// + /// Gets/sets the writer options. This is never null + /// + public NativeModuleWriterOptions Options { + get { return options ?? (options = new NativeModuleWriterOptions(module)); } + set { options = value; } + } + + /// + /// Gets all s + /// + public override List Sections { + get { return sections; } + } + + /// + /// Gets the original PE sections and their data + /// + public List OrigSections { + get { return origSections; } + } + + /// + /// Gets the .text section + /// + public override PESection TextSection { + get { return textSection; } + } + + /// + /// Gets the .rsrc section or null if there's none + /// + public override PESection RsrcSection { + get { return rsrcSection; } + } + + /// + /// Constructor + /// + /// The module + /// Options or null + public NativeModuleWriter(ModuleDefMD module, NativeModuleWriterOptions options) { + this.module = module; + this.options = options; + this.peImage = module.MetaData.PEImage; + } + + /// + protected override long WriteImpl() { + try { + return Write(); + } + finally { + if (origSections != null) { + foreach (var section in origSections) + section.Dispose(); + } + if (headerSection != null) + headerSection.Data.Dispose(); + if (extraData != null) + extraData.Data.Dispose(); + } + } + + long Write() { + Initialize(); + + // It's not safe to create new Field RVAs so re-use them all. The user can override + // this by setting field.RVA = 0 when creating a new field.InitialValue. + metaData.KeepFieldRVA = true; + + metaData.CreateTables(); + return WriteFile(); + } + + void Initialize() { + CreateSections(); + Listener.OnWriterEvent(this, ModuleWriterEvent.PESectionsCreated); + + CreateChunks(); + Listener.OnWriterEvent(this, ModuleWriterEvent.ChunksCreated); + + AddChunksToSections(); + Listener.OnWriterEvent(this, ModuleWriterEvent.ChunksAddedToSections); + } + + void CreateSections() { + CreatePESections(); + CreateRawSections(); + CreateHeaderSection(); + CreateExtraData(); + } + + void CreateChunks() { + CreateMetaDataChunks(module); + + CreateDebugDirectory(); + + imageCor20Header = new ByteArrayChunk(new byte[0x48]); + CreateStrongNameSignature(); + } + + void AddChunksToSections() { + textSection.Add(imageCor20Header, DEFAULT_COR20HEADER_ALIGNMENT); + textSection.Add(strongNameSignature, DEFAULT_STRONGNAMESIG_ALIGNMENT); + textSection.Add(constants, DEFAULT_CONSTANTS_ALIGNMENT); + textSection.Add(methodBodies, DEFAULT_METHODBODIES_ALIGNMENT); + textSection.Add(netResources, DEFAULT_NETRESOURCES_ALIGNMENT); + textSection.Add(metaData, DEFAULT_METADATA_ALIGNMENT); + textSection.Add(debugDirectory, DEFAULT_DEBUGDIRECTORY_ALIGNMENT); + if (rsrcSection != null) + rsrcSection.Add(win32Resources, DEFAULT_WIN32_RESOURCES_ALIGNMENT); + } + + /// + protected override Win32Resources GetWin32Resources() { + if (Options.KeepWin32Resources) + return null; + return Options.Win32Resources ?? module.Win32Resources; + } + + void CreatePESections() { + sections = new List(); + sections.Add(textSection = new PESection(".text", 0x60000020)); + if (GetWin32Resources() != null) + sections.Add(rsrcSection = new PESection(".rsrc", 0x40000040)); + } + + /// + /// Gets the raw section data of the image. The sections are saved in + /// . + /// + void CreateRawSections() { + var fileAlignment = peImage.ImageNTHeaders.OptionalHeader.FileAlignment; + origSections = new List(peImage.ImageSectionHeaders.Count); + + foreach (var peSection in peImage.ImageSectionHeaders) { + var newSection = new OrigSection(peSection); + origSections.Add(newSection); + uint sectionSize = Utils.AlignUp(peSection.SizeOfRawData, fileAlignment); + newSection.Chunk = new BinaryReaderChunk(peImage.CreateStream(peSection.VirtualAddress, sectionSize), peSection.VirtualSize); + } + } + + /// + /// Creates the PE header "section" + /// + void CreateHeaderSection() { + uint afterLastSectHeader = GetOffsetAfterLastSectionHeader() + (uint)sections.Count * 0x28; + uint firstRawOffset = Math.Min(GetFirstRawDataFileOffset(), peImage.ImageNTHeaders.OptionalHeader.SectionAlignment); + uint headerLen = afterLastSectHeader; + if (firstRawOffset > headerLen) + headerLen = firstRawOffset; + headerLen = Utils.AlignUp(headerLen, peImage.ImageNTHeaders.OptionalHeader.FileAlignment); + if (headerLen <= peImage.ImageNTHeaders.OptionalHeader.SectionAlignment) { + headerSection = new BinaryReaderChunk(peImage.CreateStream(0, headerLen)); + return; + } + + //TODO: Support this too + throw new ModuleWriterException("Could not create header"); + } + + uint GetOffsetAfterLastSectionHeader() { + var lastSect = peImage.ImageSectionHeaders[peImage.ImageSectionHeaders.Count - 1]; + return (uint)lastSect.EndOffset; + } + + uint GetFirstRawDataFileOffset() { + uint len = uint.MaxValue; + foreach (var section in peImage.ImageSectionHeaders) + len = Math.Min(len, section.PointerToRawData); + return len; + } + + /// + /// Saves any data that is appended to the original PE file + /// + void CreateExtraData() { + if (!Options.KeepExtraPEData) + return; + var lastOffs = GetLastFileSectionOffset(); + extraData = new BinaryReaderChunk(peImage.CreateStream((FileOffset)lastOffs)); + if (extraData.Data.Length == 0) { + extraData.Data.Dispose(); + extraData = null; + } + } + + uint GetLastFileSectionOffset() { + uint rva = 0; + foreach (var sect in origSections) + rva = Math.Max(rva, (uint)sect.PESection.VirtualAddress + sect.PESection.SizeOfRawData); + return (uint)peImage.ToFileOffset((RVA)(rva - 1)) + 1; + } + + long WriteFile() { + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginWritePdb); + WritePdbFile(); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndWritePdb); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginCalculateRvasAndFileOffsets); + + var chunks = new List(); + chunks.Add(headerSection); + foreach (var origSection in origSections) + chunks.Add(origSection.Chunk); + foreach (var section in sections) + chunks.Add(section); + if (extraData != null) + chunks.Add(extraData); + + CalculateRvasAndFileOffsets(chunks, 0, 0, peImage.ImageNTHeaders.OptionalHeader.FileAlignment, peImage.ImageNTHeaders.OptionalHeader.SectionAlignment); + foreach (var section in origSections) { + if (section.Chunk.RVA != section.PESection.VirtualAddress) + throw new ModuleWriterException("Invalid section RVA"); + } + Listener.OnWriterEvent(this, ModuleWriterEvent.EndCalculateRvasAndFileOffsets); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginWriteChunks); + var writer = new BinaryWriter(destStream); + WriteChunks(writer, chunks, 0, peImage.ImageNTHeaders.OptionalHeader.FileAlignment); + long imageLength = writer.BaseStream.Position - destStreamBaseOffset; + UpdateHeaderFields(writer); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndWriteChunks); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginStrongNameSign); + if (Options.StrongNameKey != null) + StrongNameSign((long)strongNameSignature.FileOffset); + Listener.OnWriterEvent(this, ModuleWriterEvent.EndStrongNameSign); + + Listener.OnWriterEvent(this, ModuleWriterEvent.BeginWritePEChecksum); + if (Options.AddCheckSum) { + destStream.Position = destStreamBaseOffset; + uint newCheckSum = new BinaryReader(destStream).CalculatePECheckSum(imageLength, checkSumOffset); + writer.BaseStream.Position = checkSumOffset; + writer.Write(newCheckSum); + } + Listener.OnWriterEvent(this, ModuleWriterEvent.EndWritePEChecksum); + + return imageLength; + } + + /// + /// true if image is 64-bit + /// + bool Is64Bit() { + return peImage.ImageNTHeaders.OptionalHeader is ImageOptionalHeader64; + } + + Characteristics GetCharacteristics() { + var ch = module.Characteristics; + if (Is64Bit()) + ch &= ~Characteristics._32BitMachine; + else + ch |= Characteristics._32BitMachine; + if (Options.IsExeFile) + ch &= ~Characteristics.Dll; + else + ch |= Characteristics.Dll; + return ch; + } + + /// + /// Updates the PE header and COR20 header fields that need updating. All sections are + /// also updated, and the new ones are added. + /// + void UpdateHeaderFields(BinaryWriter writer) { + long fileHeaderOffset = destStreamBaseOffset + (long)peImage.ImageNTHeaders.FileHeader.StartOffset; + long optionalHeaderOffset = destStreamBaseOffset + (long)peImage.ImageNTHeaders.OptionalHeader.StartOffset; + long sectionsOffset = destStreamBaseOffset + (long)peImage.ImageSectionHeaders[0].StartOffset; + long dataDirOffset = destStreamBaseOffset + (long)peImage.ImageNTHeaders.OptionalHeader.EndOffset - 16 * 8; + long cor20Offset = destStreamBaseOffset + (long)imageCor20Header.FileOffset; + + uint fileAlignment = peImage.ImageNTHeaders.OptionalHeader.FileAlignment; + uint sectionAlignment = peImage.ImageNTHeaders.OptionalHeader.SectionAlignment; + + // Update PE file header + var peOptions = Options.PEHeadersOptions; + writer.BaseStream.Position = fileHeaderOffset; + writer.Write((ushort)(peOptions.Machine ?? module.Machine)); + writer.Write((ushort)(origSections.Count + sections.Count)); + WriteUInt32(writer, peOptions.TimeDateStamp); + WriteUInt32(writer, peOptions.PointerToSymbolTable); + WriteUInt32(writer, peOptions.NumberOfSymbols); + writer.BaseStream.Position += 2; // sizeof(SizeOfOptionalHeader) + writer.Write((ushort)(peOptions.Characteristics ?? GetCharacteristics())); + + // Update optional header + var sectionSizes = new SectionSizes(fileAlignment, sectionAlignment, headerSection.GetVirtualSize(), GetSectionSizeInfos); + writer.BaseStream.Position = optionalHeaderOffset; + bool is32BitOptionalHeader = peImage.ImageNTHeaders.OptionalHeader is ImageOptionalHeader32; + if (is32BitOptionalHeader) { + writer.BaseStream.Position += 2; + WriteByte(writer, peOptions.MajorLinkerVersion); + WriteByte(writer, peOptions.MinorLinkerVersion); + writer.Write(sectionSizes.SizeOfCode); + writer.Write(sectionSizes.SizeOfInitdData); + writer.Write(sectionSizes.SizeOfUninitdData); + writer.BaseStream.Position += 4; // EntryPoint + writer.Write(sectionSizes.BaseOfCode); + writer.Write(sectionSizes.BaseOfData); + WriteUInt32(writer, peOptions.ImageBase); + writer.BaseStream.Position += 8; // SectionAlignment, FileAlignment + WriteUInt16(writer, peOptions.MajorOperatingSystemVersion); + WriteUInt16(writer, peOptions.MinorOperatingSystemVersion); + WriteUInt16(writer, peOptions.MajorImageVersion); + WriteUInt16(writer, peOptions.MinorImageVersion); + WriteUInt16(writer, peOptions.MajorSubsystemVersion); + WriteUInt16(writer, peOptions.MinorSubsystemVersion); + WriteUInt32(writer, peOptions.Win32VersionValue); + writer.Write(sectionSizes.SizeOfImage); + writer.Write(sectionSizes.SizeOfHeaders); + checkSumOffset = writer.BaseStream.Position; + writer.Write(0); // CheckSum + WriteUInt16(writer, peOptions.Subsystem); + WriteUInt16(writer, peOptions.DllCharacteristics); + WriteUInt32(writer, peOptions.SizeOfStackReserve); + WriteUInt32(writer, peOptions.SizeOfStackCommit); + WriteUInt32(writer, peOptions.SizeOfHeapReserve); + WriteUInt32(writer, peOptions.SizeOfHeapCommit); + WriteUInt32(writer, peOptions.LoaderFlags); + WriteUInt32(writer, peOptions.NumberOfRvaAndSizes); + } + else { + writer.BaseStream.Position += 2; + WriteByte(writer, peOptions.MajorLinkerVersion); + WriteByte(writer, peOptions.MinorLinkerVersion); + writer.Write(sectionSizes.SizeOfCode); + writer.Write(sectionSizes.SizeOfInitdData); + writer.Write(sectionSizes.SizeOfUninitdData); + writer.BaseStream.Position += 4; // EntryPoint + writer.Write(sectionSizes.BaseOfCode); + WriteUInt64(writer, peOptions.ImageBase); + writer.BaseStream.Position += 8; // SectionAlignment, FileAlignment + WriteUInt16(writer, peOptions.MajorOperatingSystemVersion); + WriteUInt16(writer, peOptions.MinorOperatingSystemVersion); + WriteUInt16(writer, peOptions.MajorImageVersion); + WriteUInt16(writer, peOptions.MinorImageVersion); + WriteUInt16(writer, peOptions.MajorSubsystemVersion); + WriteUInt16(writer, peOptions.MinorSubsystemVersion); + WriteUInt32(writer, peOptions.Win32VersionValue); + writer.Write(sectionSizes.SizeOfImage); + writer.Write(sectionSizes.SizeOfHeaders); + checkSumOffset = writer.BaseStream.Position; + writer.Write(0); // CheckSum + WriteUInt16(writer, peOptions.Subsystem ?? GetSubsystem()); + WriteUInt16(writer, peOptions.DllCharacteristics ?? module.DllCharacteristics); + WriteUInt64(writer, peOptions.SizeOfStackReserve); + WriteUInt64(writer, peOptions.SizeOfStackCommit); + WriteUInt64(writer, peOptions.SizeOfHeapReserve); + WriteUInt64(writer, peOptions.SizeOfHeapCommit); + WriteUInt32(writer, peOptions.LoaderFlags); + WriteUInt32(writer, peOptions.NumberOfRvaAndSizes); + } + + // Update Win32 resources data directory, if we wrote a new one + if (win32Resources != null) { + writer.BaseStream.Position = dataDirOffset + 2 * 8; + writer.WriteDataDirectory(win32Resources); + } + + // Clear the security descriptor directory + writer.BaseStream.Position = dataDirOffset + 4 * 8; + writer.WriteDataDirectory(null); + + // Write a new debug directory + writer.BaseStream.Position = dataDirOffset + 6 * 8; + writer.WriteDataDirectory(debugDirectory, DebugDirectory.HEADER_SIZE); + + // Write a new Metadata data directory + writer.BaseStream.Position = dataDirOffset + 14 * 8; + writer.WriteDataDirectory(imageCor20Header); + + // Update old sections, and add new sections + writer.BaseStream.Position = sectionsOffset; + foreach (var section in origSections) { + writer.BaseStream.Position += 0x14; + writer.Write((uint)section.Chunk.FileOffset); // PointerToRawData + writer.BaseStream.Position += 0x10; + } + foreach (var section in sections) + section.WriteHeaderTo(writer, fileAlignment, sectionAlignment, (uint)section.RVA); + + // Write the .NET header + writer.BaseStream.Position = cor20Offset; + writer.Write(0x48); // cb + WriteUInt16(writer, Options.Cor20HeaderOptions.MajorRuntimeVersion); + WriteUInt16(writer, Options.Cor20HeaderOptions.MinorRuntimeVersion); + writer.WriteDataDirectory(metaData); + uint entryPoint; + writer.Write((uint)GetComImageFlags(GetEntryPoint(out entryPoint))); + writer.Write(Options.Cor20HeaderOptions.EntryPoint ?? entryPoint); + writer.WriteDataDirectory(netResources); + writer.WriteDataDirectory(strongNameSignature); + WriteDataDirectory(writer, module.MetaData.ImageCor20Header.CodeManagerTable); + WriteDataDirectory(writer, module.MetaData.ImageCor20Header.VTableFixups); + WriteDataDirectory(writer, module.MetaData.ImageCor20Header.ExportAddressTableJumps); + WriteDataDirectory(writer, module.MetaData.ImageCor20Header.ManagedNativeHeader); + + UpdateVTableFixups(writer); + } + + static void WriteDataDirectory(BinaryWriter writer, ImageDataDirectory dataDir) { + writer.Write((uint)dataDir.VirtualAddress); + writer.Write(dataDir.Size); + } + + static void WriteByte(BinaryWriter writer, byte? value) { + if (value == null) + writer.BaseStream.Position++; + else + writer.Write(value.Value); + } + + static void WriteUInt16(BinaryWriter writer, ushort? value) { + if (value == null) + writer.BaseStream.Position += 2; + else + writer.Write(value.Value); + } + + static void WriteUInt16(BinaryWriter writer, Subsystem? value) { + if (value == null) + writer.BaseStream.Position += 2; + else + writer.Write((ushort)value.Value); + } + + static void WriteUInt16(BinaryWriter writer, DllCharacteristics? value) { + if (value == null) + writer.BaseStream.Position += 2; + else + writer.Write((ushort)value.Value); + } + + static void WriteUInt32(BinaryWriter writer, uint? value) { + if (value == null) + writer.BaseStream.Position += 4; + else + writer.Write(value.Value); + } + + static void WriteUInt32(BinaryWriter writer, ulong? value) { + if (value == null) + writer.BaseStream.Position += 4; + else + writer.Write((uint)value.Value); + } + + static void WriteUInt64(BinaryWriter writer, ulong? value) { + if (value == null) + writer.BaseStream.Position += 8; + else + writer.Write(value.Value); + } + + ComImageFlags GetComImageFlags(bool isManagedEntryPoint) { + var flags = Options.Cor20HeaderOptions.Flags ?? module.Cor20HeaderFlags; + if (Options.Cor20HeaderOptions.EntryPoint != null) + return flags; + if (isManagedEntryPoint) + return flags & ~ComImageFlags.NativeEntryPoint; + return flags | ComImageFlags.NativeEntryPoint; + } + + Subsystem GetSubsystem() { + if (module.Kind == ModuleKind.Windows) + return Subsystem.WindowsGui; + return Subsystem.WindowsCui; + } + + /// + /// Converts to a file offset in the destination stream + /// + /// RVA + long ToWriterOffset(RVA rva) { + if (rva == 0) + return 0; + foreach (var sect in origSections) { + var section = sect.PESection; + if (section.VirtualAddress <= rva && rva < section.VirtualAddress + Math.Max(section.VirtualSize, section.SizeOfRawData)) + return destStreamBaseOffset + (long)sect.Chunk.FileOffset + (rva - section.VirtualAddress); + } + return 0; + } + + IEnumerable GetSectionSizeInfos() { + foreach (var section in origSections) + yield return new SectionSizeInfo(section.Chunk.GetVirtualSize(), section.PESection.Characteristics); + foreach (var section in sections) + yield return new SectionSizeInfo(section.GetVirtualSize(), section.Characteristics); + } + + void UpdateVTableFixups(BinaryWriter writer) { + var vtableFixups = module.VTableFixups; + if (vtableFixups == null || vtableFixups.VTables.Count == 0) + return; + + writer.BaseStream.Position = ToWriterOffset(vtableFixups.RVA); + if (writer.BaseStream.Position == 0) { + Error("Could not convert RVA to file offset"); + return; + } + foreach (var vtable in vtableFixups) { + if (vtable.Methods.Count > ushort.MaxValue) + throw new ModuleWriterException("Too many methods in vtable"); + writer.Write((uint)vtable.RVA); + writer.Write((ushort)vtable.Methods.Count); + writer.Write((ushort)vtable.Flags); + + long pos = writer.BaseStream.Position; + writer.BaseStream.Position = ToWriterOffset(vtable.RVA); + if (writer.BaseStream.Position == 0) + Error("Could not convert RVA to file offset"); + else { + foreach (var method in vtable.Methods) { + writer.Write(GetMethodToken(method)); + if (vtable.Is64Bit) + writer.Write(0); + } + } + writer.BaseStream.Position = pos; + } + } + + uint GetMethodToken(IMethod method) { + var md = method as MethodDef; + if (md != null) + return new MDToken(Table.Method, metaData.GetRid(md)).Raw; + + var mr = method as MemberRef; + if (mr != null) + return new MDToken(Table.MemberRef, metaData.GetRid(mr)).Raw; + + var ms = method as MethodSpec; + if (ms != null) + return new MDToken(Table.MethodSpec, metaData.GetRid(ms)).Raw; + + if (method == null) + Error("VTable method is null"); + else + Error("Invalid VTable method type: {0}", method.GetType()); + return 0; + } + + /// + /// Gets the entry point + /// + /// Updated with entry point (either a token or RVA of native method) + /// true if it's a managed entry point or there's no entry point, + /// false if it's a native entry point + bool GetEntryPoint(out uint ep) { + var epMethod = module.ManagedEntryPoint as MethodDef; + if (epMethod != null) { + ep = new MDToken(Table.Method, metaData.GetRid(epMethod)).Raw; + return true; + } + var file = module.ManagedEntryPoint as FileDef; + if (file != null) { + ep = new MDToken(Table.File, metaData.GetRid(file)).Raw; + return true; + } + ep = (uint)module.NativeEntryPoint; + return ep == 0; + } + } +} diff --git a/dnlib/DotNet/Writer/NetResources.cs b/dnlib/DotNet/Writer/NetResources.cs new file mode 100644 index 0000000..3f8a854 --- /dev/null +++ b/dnlib/DotNet/Writer/NetResources.cs @@ -0,0 +1,98 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// .NET resources + /// + public sealed class NetResources : IChunk { + readonly List resources = new List(); + readonly uint alignment; + uint length; + bool setOffsetCalled; + FileOffset offset; + RVA rva; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets offset of next resource. This offset is relative to the start of + /// the .NET resources and is always aligned. + /// + public uint NextOffset { + get { return length; } + } + + /// + /// Constructor + /// + /// Alignment of all resources + public NetResources(uint alignment) { + this.alignment = alignment; + } + + /// + /// Adds a resource + /// + /// The resource data + /// The resource data + public ByteArrayChunk Add(IImageStream stream) { + if (setOffsetCalled) + throw new InvalidOperationException("SetOffset() has already been called"); + var rawData = stream.ReadAllBytes(); + length = Utils.AlignUp(length + 4 + (uint)rawData.Length, alignment); + var data = new ByteArrayChunk(rawData); + resources.Add(data); + return data; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + setOffsetCalled = true; + this.offset = offset; + this.rva = rva; + foreach (var resource in resources) { + resource.SetOffset(offset + 4, rva + 4); + uint len = 4 + resource.GetFileLength(); + offset = (offset + len).AlignUp(alignment); + rva = (rva + len).AlignUp(alignment); + } + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + RVA rva2 = rva; + foreach (var resourceData in resources) { + writer.Write(resourceData.GetFileLength()); + resourceData.VerifyWriteTo(writer); + rva2 += 4 + resourceData.GetFileLength(); + int padding = (int)rva2.AlignUp(alignment) - (int)rva2; + writer.WriteZeros(padding); + rva2 += (uint)padding; + } + } + } +} diff --git a/dnlib/DotNet/Writer/NormalMetaData.cs b/dnlib/DotNet/Writer/NormalMetaData.cs new file mode 100644 index 0000000..59023a2 --- /dev/null +++ b/dnlib/DotNet/Writer/NormalMetaData.cs @@ -0,0 +1,337 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// Does not preserve metadata tokens + /// + sealed class NormalMetaData : MetaData { + readonly Rows typeRefInfos = new Rows(); + readonly Rows typeDefInfos = new Rows(); + readonly Rows fieldDefInfos = new Rows(); + readonly Rows methodDefInfos = new Rows(); + readonly Rows paramDefInfos = new Rows(); + readonly Rows memberRefInfos = new Rows(); + readonly Rows standAloneSigInfos = new Rows(); + readonly Rows eventDefInfos = new Rows(); + readonly Rows propertyDefInfos = new Rows(); + readonly Rows typeSpecInfos = new Rows(); + readonly Rows methodSpecInfos = new Rows(); + + protected override int NumberOfMethods { + get { return methodDefInfos.Count; } + } + + /// + /// Constructor + /// + /// Module + /// Constants list + /// Method bodies list + /// .NET resources list + /// Options + public NormalMetaData(ModuleDef module, UniqueChunkList constants, MethodBodyChunks methodBodies, NetResources netResources, MetaDataOptions options) + : base(module, constants, methodBodies, netResources, options) { + } + + /// + protected override List GetAllTypeDefs() { + // All nested types must be after their enclosing type. This is exactly + // what module.GetTypes() does. + return new List(module.GetTypes()); + } + + /// + protected override void AllocateTypeDefRids() { + foreach (var type in allTypeDefs) { + if (type == null) + continue; + uint rid = tablesHeap.TypeDefTable.Create(new RawTypeDefRow()); + typeDefInfos.Add(type, rid); + } + } + + /// + protected override void AllocateMemberDefRids() { + int numTypes = allTypeDefs.Count; + int typeNum = 0; + int notifyNum = 0; + const int numNotifyEvents = 5; // AllocateMemberDefRids0 - AllocateMemberDefRids4 + int notifyAfter = numTypes / numNotifyEvents; + + uint fieldListRid = 1, methodListRid = 1; + uint eventListRid = 1, propertyListRid = 1; + uint paramListRid = 1; + foreach (var type in allTypeDefs) { + if (typeNum++ == notifyAfter && notifyNum < numNotifyEvents) { + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids0 + notifyNum++); + notifyAfter += numTypes / numNotifyEvents; + } + + if (type == null) + continue; + uint typeRid = GetRid(type); + var typeRow = tablesHeap.TypeDefTable[typeRid]; + typeRow.FieldList = fieldListRid; + typeRow.MethodList = methodListRid; + + foreach (var field in type.Fields) { + if (field == null) + continue; + uint rid = fieldListRid++; + if (rid != tablesHeap.FieldTable.Create(new RawFieldRow())) + throw new ModuleWriterException("Invalid field rid"); + fieldDefInfos.Add(field, rid); + } + + foreach (var method in type.Methods) { + if (method == null) + continue; + uint rid = methodListRid++; + var row = new RawMethodRow(0, 0, 0, 0, 0, paramListRid); + if (rid != tablesHeap.MethodTable.Create(row)) + throw new ModuleWriterException("Invalid method rid"); + methodDefInfos.Add(method, rid); + foreach (var pd in Sort(method.ParamDefs)) { + if (pd == null) + continue; + uint pdRid = paramListRid++; + if (pdRid != tablesHeap.ParamTable.Create(new RawParamRow())) + throw new ModuleWriterException("Invalid param rid"); + paramDefInfos.Add(pd, pdRid); + } + } + + if (!IsEmpty(type.Events)) { + uint eventMapRid = tablesHeap.EventMapTable.Create(new RawEventMapRow(typeRid, eventListRid)); + eventMapInfos.Add(type, eventMapRid); + foreach (var evt in type.Events) { + if (evt == null) + continue; + uint rid = eventListRid++; + if (rid != tablesHeap.EventTable.Create(new RawEventRow())) + throw new ModuleWriterException("Invalid event rid"); + eventDefInfos.Add(evt, rid); + } + } + + if (!IsEmpty(type.Properties)) { + uint propertyMapRid = tablesHeap.PropertyMapTable.Create(new RawPropertyMapRow(typeRid, propertyListRid)); + propertyMapInfos.Add(type, propertyMapRid); + foreach (var prop in type.Properties) { + if (prop == null) + continue; + uint rid = propertyListRid++; + if (rid != tablesHeap.PropertyTable.Create(new RawPropertyRow())) + throw new ModuleWriterException("Invalid property rid"); + propertyDefInfos.Add(prop, rid); + } + } + } + while (notifyNum < numNotifyEvents) + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids0 + notifyNum++); + } + + /// + public override uint GetRid(TypeRef tr) { + uint rid; + typeRefInfos.TryGetRid(tr, out rid); + return rid; + } + + /// + public override uint GetRid(TypeDef td) { + uint rid; + if (typeDefInfos.TryGetRid(td, out rid)) + return rid; + if (td == null) + Error("TypeDef is null"); + else + Error("TypeDef {0} ({1:X8}) is not defined in this module ({2}). A type was removed that is still referenced by this module.", td, td.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(FieldDef fd) { + uint rid; + if (fieldDefInfos.TryGetRid(fd, out rid)) + return rid; + if (fd == null) + Error("Field is null"); + else + Error("Field {0} ({1:X8}) is not defined in this module ({2}). A field was removed that is still referenced by this module.", fd, fd.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(MethodDef md) { + uint rid; + if (methodDefInfos.TryGetRid(md, out rid)) + return rid; + if (md == null) + Error("Method is null"); + else + Error("Method {0} ({1:X8}) is not defined in this module ({2}). A method was removed that is still referenced by this module.", md, md.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(ParamDef pd) { + uint rid; + if (paramDefInfos.TryGetRid(pd, out rid)) + return rid; + if (pd == null) + Error("Param is null"); + else + Error("Param {0} ({1:X8}) is not defined in this module ({2}). A parameter was removed that is still referenced by this module.", pd, pd.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(MemberRef mr) { + uint rid; + memberRefInfos.TryGetRid(mr, out rid); + return rid; + } + + /// + public override uint GetRid(StandAloneSig sas) { + uint rid; + standAloneSigInfos.TryGetRid(sas, out rid); + return rid; + } + + /// + public override uint GetRid(EventDef ed) { + uint rid; + if (eventDefInfos.TryGetRid(ed, out rid)) + return rid; + if (ed == null) + Error("Event is null"); + else + Error("Event {0} ({1:X8}) is not defined in this module ({2}). An event was removed that is still referenced by this module.", ed, ed.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(PropertyDef pd) { + uint rid; + if (propertyDefInfos.TryGetRid(pd, out rid)) + return rid; + if (pd == null) + Error("Property is null"); + else + Error("Property {0} ({1:X8}) is not defined in this module ({2}). A property was removed that is still referenced by this module.", pd, pd.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(TypeSpec ts) { + uint rid; + typeSpecInfos.TryGetRid(ts, out rid); + return rid; + } + + /// + public override uint GetRid(MethodSpec ms) { + uint rid; + methodSpecInfos.TryGetRid(ms, out rid); + return rid; + } + + /// + protected override uint AddTypeRef(TypeRef tr) { + if (tr == null) { + Error("TypeRef is null"); + return 0; + } + uint rid; + if (typeRefInfos.TryGetRid(tr, out rid)) { + if (rid == 0) + Error("TypeRef {0:X8} has an infinite ResolutionScope loop", tr.MDToken.Raw); + return rid; + } + typeRefInfos.Add(tr, 0); // Prevent inf recursion + var row = new RawTypeRefRow(AddResolutionScope(tr.ResolutionScope), + stringsHeap.Add(tr.Name), + stringsHeap.Add(tr.Namespace)); + rid = tablesHeap.TypeRefTable.Add(row); + typeRefInfos.SetRid(tr, rid); + AddCustomAttributes(Table.TypeRef, rid, tr); + return rid; + } + + /// + protected override uint AddTypeSpec(TypeSpec ts) { + if (ts == null) { + Error("TypeSpec is null"); + return 0; + } + uint rid; + if (typeSpecInfos.TryGetRid(ts, out rid)) { + if (rid == 0) + Error("TypeSpec {0:X8} has an infinite TypeSig loop", ts.MDToken.Raw); + return rid; + } + typeSpecInfos.Add(ts, 0); // Prevent inf recursion + var row = new RawTypeSpecRow(GetSignature(ts.TypeSig, ts.ExtraData)); + rid = tablesHeap.TypeSpecTable.Add(row); + typeSpecInfos.SetRid(ts, rid); + AddCustomAttributes(Table.TypeSpec, rid, ts); + return rid; + } + + /// + protected override uint AddMemberRef(MemberRef mr) { + if (mr == null) { + Error("MemberRef is null"); + return 0; + } + uint rid; + if (memberRefInfos.TryGetRid(mr, out rid)) + return rid; + var row = new RawMemberRefRow(AddMemberRefParent(mr.Class), + stringsHeap.Add(mr.Name), + GetSignature(mr.Signature)); + rid = tablesHeap.MemberRefTable.Add(row); + memberRefInfos.Add(mr, rid); + AddCustomAttributes(Table.MemberRef, rid, mr); + return rid; + } + + /// + protected override uint AddStandAloneSig(StandAloneSig sas) { + if (sas == null) { + Error("StandAloneSig is null"); + return 0; + } + uint rid; + if (standAloneSigInfos.TryGetRid(sas, out rid)) + return rid; + var row = new RawStandAloneSigRow(GetSignature(sas.Signature)); + rid = tablesHeap.StandAloneSigTable.Add(row); + standAloneSigInfos.Add(sas, rid); + AddCustomAttributes(Table.StandAloneSig, rid, sas); + return rid; + } + + /// + protected override uint AddMethodSpec(MethodSpec ms) { + if (ms == null) { + Error("MethodSpec is null"); + return 0; + } + uint rid; + if (methodSpecInfos.TryGetRid(ms, out rid)) + return rid; + var row = new RawMethodSpecRow(AddMethodDefOrRef(ms.Method), + GetSignature(ms.Instantiation)); + rid = tablesHeap.MethodSpecTable.Add(row); + methodSpecInfos.Add(ms, rid); + AddCustomAttributes(Table.MethodSpec, rid, ms); + return rid; + } + } +} diff --git a/dnlib/DotNet/Writer/PEHeaders.cs b/dnlib/DotNet/Writer/PEHeaders.cs new file mode 100644 index 0000000..5a58f16 --- /dev/null +++ b/dnlib/DotNet/Writer/PEHeaders.cs @@ -0,0 +1,484 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// options + /// + public sealed class PEHeadersOptions { + /// + /// Default DLL characteristics + /// + public const DllCharacteristics DefaultDllCharacteristics = dnlib.PE.DllCharacteristics.TerminalServerAware | dnlib.PE.DllCharacteristics.NoSeh | dnlib.PE.DllCharacteristics.NxCompat | dnlib.PE.DllCharacteristics.DynamicBase; + + /// + /// Default subsystem value + /// + public const Subsystem DEFAULT_SUBSYSTEM = dnlib.PE.Subsystem.WindowsGui; + + /// + /// Default major linker version + /// + public const byte DEFAULT_MAJOR_LINKER_VERSION = 11; + + /// + /// Default minor linker version + /// + public const byte DEFAULT_MINOR_LINKER_VERSION = 0; + + /// + /// IMAGE_FILE_HEADER.Machine value + /// + public Machine? Machine; + + /// + /// IMAGE_FILE_HEADER.TimeDateStamp value + /// + public uint? TimeDateStamp; + + /// + /// IMAGE_FILE_HEADER.PointerToSymbolTable value + /// + public uint? PointerToSymbolTable; + + /// + /// IMAGE_FILE_HEADER.NumberOfSymbols value + /// + public uint? NumberOfSymbols; + + /// + /// IMAGE_FILE_HEADER.Characteristics value. bit + /// is ignored and set/cleared depending on whether it's a EXE or a DLL file. + /// + public Characteristics? Characteristics; + + /// + /// IMAGE_OPTIONAL_HEADER.MajorLinkerVersion value + /// + public byte? MajorLinkerVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.MinorLinkerVersion value + /// + public byte? MinorLinkerVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.ImageBase value + /// + public ulong? ImageBase; + + /// + /// IMAGE_OPTIONAL_HEADER.SectionAlignment value + /// + public uint? SectionAlignment; + + /// + /// IMAGE_OPTIONAL_HEADER.FileAlignment value + /// + public uint? FileAlignment; + + /// + /// IMAGE_OPTIONAL_HEADER.MajorOperatingSystemVersion value + /// + public ushort? MajorOperatingSystemVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.MinorOperatingSystemVersion value + /// + public ushort? MinorOperatingSystemVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.MajorImageVersion value + /// + public ushort? MajorImageVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.MinorImageVersion value + /// + public ushort? MinorImageVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.MajorSubsystemVersion value + /// + public ushort? MajorSubsystemVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.MinorSubsystemVersion value + /// + public ushort? MinorSubsystemVersion; + + /// + /// IMAGE_OPTIONAL_HEADER.Win32VersionValue value + /// + public uint? Win32VersionValue; + + /// + /// IMAGE_OPTIONAL_HEADER.Subsystem value + /// + public Subsystem? Subsystem; + + /// + /// IMAGE_OPTIONAL_HEADER.DllCharacteristics value + /// + public DllCharacteristics? DllCharacteristics; + + /// + /// IMAGE_OPTIONAL_HEADER.SizeOfStackReserve value + /// + public ulong? SizeOfStackReserve; + + /// + /// IMAGE_OPTIONAL_HEADER.SizeOfStackCommit value + /// + public ulong? SizeOfStackCommit; + + /// + /// IMAGE_OPTIONAL_HEADER.SizeOfHeapReserve value + /// + public ulong? SizeOfHeapReserve; + + /// + /// IMAGE_OPTIONAL_HEADER.SizeOfHeapCommit value + /// + public ulong? SizeOfHeapCommit; + + /// + /// IMAGE_OPTIONAL_HEADER.LoaderFlags value + /// + public uint? LoaderFlags; + + /// + /// IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes value + /// + public uint? NumberOfRvaAndSizes; + + /// + /// Creates a new time date stamp using current time + /// + /// A new time date stamp + public static uint CreateNewTimeDateStamp() { + return (uint)(DateTime.UtcNow - Epoch).TotalSeconds; + } + static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + } + + /// + /// DOS and PE headers + /// + public sealed class PEHeaders : IChunk { + IList sections; + readonly PEHeadersOptions options; + FileOffset offset; + RVA rva; + uint length; + readonly uint sectionAlignment; + readonly uint fileAlignment; + ulong imageBase; + long startOffset; + long checkSumOffset; + bool isExeFile; + + // Copied from Partition II.25.2.1 + static readonly byte[] dosHeader = new byte[0x80] { + 0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x0E, 0x1F, 0xBA, 0x0E, 0x00, 0xB4, 0x09, 0xCD, + 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x21, 0x54, 0x68, + 0x69, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, + 0x61, 0x6D, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6E, + 0x20, 0x69, 0x6E, 0x20, 0x44, 0x4F, 0x53, 0x20, + 0x6D, 0x6F, 0x64, 0x65, 0x2E, 0x0D, 0x0D, 0x0A, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + + /// + /// Gets/sets the native entry point + /// + public StartupStub StartupStub { get; set; } + + /// + /// Gets/sets the COR20 header + /// + public ImageCor20Header ImageCor20Header { get; set; } + + /// + /// Gets/sets the IAT + /// + public ImportAddressTable ImportAddressTable { get; set; } + + /// + /// Gets/sets the + /// + public ImportDirectory ImportDirectory { get; set; } + + /// + /// Gets/sets the Win32 resources + /// + public Win32ResourcesChunk Win32Resources { get; set; } + + /// + /// Gets/sets the relocation directory + /// + public RelocDirectory RelocDirectory { get; set; } + + /// + /// Gets/sets the debug directory + /// + public DebugDirectory DebugDirectory { get; set; } + + /// + /// Gets the image base + /// + public ulong ImageBase { + get { return imageBase; } + } + + /// + /// Gets/sets a value indicating whether this is a EXE or a DLL file + /// + public bool IsExeFile { + get { return isExeFile; } + set { isExeFile = value; } + } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the section alignment + /// + public uint SectionAlignment { + get { return sectionAlignment; } + } + + /// + /// Gets the file alignment + /// + public uint FileAlignment { + get { return fileAlignment; } + } + + /// + /// Gets/sets the s + /// + public IList PESections { + get { return sections; } + set { sections = value; } + } + + /// + /// Default constructor + /// + public PEHeaders() + : this(new PEHeadersOptions()) { + } + + /// + /// Constructor + /// + /// Options + public PEHeaders(PEHeadersOptions options) { + this.options = options ?? new PEHeadersOptions(); + this.sectionAlignment = this.options.SectionAlignment ?? 0x2000; + this.fileAlignment = this.options.FileAlignment ?? 0x200; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + length = (uint)dosHeader.Length; + length += 4 + 0x14; + length += Use32BitOptionalHeader() ? 0xE0U : 0xF0; + length += (uint)sections.Count * 0x28; + + if (Use32BitOptionalHeader()) + imageBase = options.ImageBase ?? 0x00400000; + else + imageBase = options.ImageBase ?? 0x0000000140000000; + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + IEnumerable GetSectionSizeInfos() { + foreach (var section in PESections) + yield return new SectionSizeInfo(section.GetVirtualSize(), section.Characteristics); + } + + /// + public void WriteTo(BinaryWriter writer) { + startOffset = writer.BaseStream.Position; + + // DOS header + writer.Write(dosHeader); + + // PE magic + writer.Write(0x00004550); + + // Image file header + writer.Write((ushort)GetMachine()); + writer.Write((ushort)sections.Count); + writer.Write(options.TimeDateStamp ?? PEHeadersOptions.CreateNewTimeDateStamp()); + writer.Write(options.PointerToSymbolTable ?? 0); + writer.Write(options.NumberOfSymbols ?? 0); + writer.Write((ushort)(Use32BitOptionalHeader() ? 0xE0U : 0xF0)); + writer.Write((ushort)GetCharacteristics()); + + var sectionSizes = new SectionSizes(fileAlignment, sectionAlignment, length, () => GetSectionSizeInfos()); + + // Image optional header + uint ep = StartupStub == null ? 0 : (uint)StartupStub.EntryPointRVA; + if (Use32BitOptionalHeader()) { + writer.Write((ushort)0x010B); + writer.Write(options.MajorLinkerVersion ?? PEHeadersOptions.DEFAULT_MAJOR_LINKER_VERSION); + writer.Write(options.MinorLinkerVersion ?? PEHeadersOptions.DEFAULT_MINOR_LINKER_VERSION); + writer.Write(sectionSizes.SizeOfCode); + writer.Write(sectionSizes.SizeOfInitdData); + writer.Write(sectionSizes.SizeOfUninitdData); + writer.Write(ep); + writer.Write(sectionSizes.BaseOfCode); + writer.Write(sectionSizes.BaseOfData); + writer.Write((uint)imageBase); + writer.Write(sectionAlignment); + writer.Write(fileAlignment); + writer.Write(options.MajorOperatingSystemVersion ?? 4); + writer.Write(options.MinorOperatingSystemVersion ?? 0); + writer.Write(options.MajorImageVersion ?? 0); + writer.Write(options.MinorImageVersion ?? 0); + writer.Write(options.MajorSubsystemVersion ?? 4); + writer.Write(options.MinorSubsystemVersion ?? 0); + writer.Write(options.Win32VersionValue ?? 0); + writer.Write(sectionSizes.SizeOfImage); + writer.Write(sectionSizes.SizeOfHeaders); + checkSumOffset = writer.BaseStream.Position; + writer.Write(0); // CheckSum + writer.Write((ushort)(options.Subsystem ?? PEHeadersOptions.DEFAULT_SUBSYSTEM)); + writer.Write((ushort)(options.DllCharacteristics ?? PEHeadersOptions.DefaultDllCharacteristics)); + writer.Write((uint)(options.SizeOfStackReserve ?? 0x00100000)); + writer.Write((uint)(options.SizeOfStackCommit ?? 0x00001000)); + writer.Write((uint)(options.SizeOfHeapReserve ?? 0x00100000)); + writer.Write((uint)(options.SizeOfHeapCommit ?? 0x00001000)); + writer.Write(options.LoaderFlags ?? 0x00000000); + writer.Write(options.NumberOfRvaAndSizes ?? 0x00000010); + } + else { + writer.Write((ushort)0x020B); + writer.Write(options.MajorLinkerVersion ?? PEHeadersOptions.DEFAULT_MAJOR_LINKER_VERSION); + writer.Write(options.MinorLinkerVersion ?? PEHeadersOptions.DEFAULT_MINOR_LINKER_VERSION); + writer.Write(sectionSizes.SizeOfCode); + writer.Write(sectionSizes.SizeOfInitdData); + writer.Write(sectionSizes.SizeOfUninitdData); + writer.Write(ep); + writer.Write(sectionSizes.BaseOfCode); + writer.Write(imageBase); + writer.Write(sectionAlignment); + writer.Write(fileAlignment); + writer.Write(options.MajorOperatingSystemVersion ?? 4); + writer.Write(options.MinorOperatingSystemVersion ?? 0); + writer.Write(options.MajorImageVersion ?? 0); + writer.Write(options.MinorImageVersion ?? 0); + writer.Write(options.MajorSubsystemVersion ?? 4); + writer.Write(options.MinorSubsystemVersion ?? 0); + writer.Write(options.Win32VersionValue ?? 0); + writer.Write(sectionSizes.SizeOfImage); + writer.Write(sectionSizes.SizeOfHeaders); + checkSumOffset = writer.BaseStream.Position; + writer.Write(0); // CheckSum + writer.Write((ushort)(options.Subsystem ?? PEHeadersOptions.DEFAULT_SUBSYSTEM)); + writer.Write((ushort)(options.DllCharacteristics ?? PEHeadersOptions.DefaultDllCharacteristics)); + writer.Write(options.SizeOfStackReserve ?? 0x0000000000400000); + writer.Write(options.SizeOfStackCommit ?? 0x0000000000004000); + writer.Write(options.SizeOfHeapReserve ?? 0x0000000000100000); + writer.Write(options.SizeOfHeapCommit ?? 0x0000000000002000); + writer.Write(options.LoaderFlags ?? 0x00000000); + writer.Write(options.NumberOfRvaAndSizes ?? 0x00000010); + } + + writer.WriteDataDirectory(null); // Export table + writer.WriteDataDirectory(ImportDirectory); + writer.WriteDataDirectory(Win32Resources); + writer.WriteDataDirectory(null); // Exception table + writer.WriteDataDirectory(null); // Certificate table + writer.WriteDataDirectory(RelocDirectory); + writer.WriteDataDirectory(DebugDirectory, DebugDirectory.HEADER_SIZE); + writer.WriteDataDirectory(null); // Architecture-specific data + writer.WriteDataDirectory(null); // Global pointer register RVA + writer.WriteDataDirectory(null); // Thread local storage + writer.WriteDataDirectory(null); // Load configuration table + writer.WriteDataDirectory(null); // Bound import table + writer.WriteDataDirectory(ImportAddressTable); + writer.WriteDataDirectory(null); // Delay import descriptor + writer.WriteDataDirectory(ImageCor20Header); + writer.WriteDataDirectory(null); // Reserved + + // Sections + uint rva = Utils.AlignUp(sectionSizes.SizeOfHeaders, sectionAlignment); + foreach (var section in sections) + rva += section.WriteHeaderTo(writer, fileAlignment, sectionAlignment, rva); + } + + /// + /// Calculates the PE checksum and writes it to the checksum field + /// + /// Writer + /// Length of PE file + public void WriteCheckSum(BinaryWriter writer, long length) { + writer.BaseStream.Position = startOffset; + uint checkSum = new BinaryReader(writer.BaseStream).CalculatePECheckSum(length, checkSumOffset); + writer.BaseStream.Position = checkSumOffset; + writer.Write(checkSum); + } + + Machine GetMachine() { + return options.Machine ?? Machine.I386; + } + + bool Use32BitOptionalHeader() { + var mach = GetMachine(); + return mach != Machine.IA64 && mach != Machine.AMD64 && mach != Machine.ARM64; + } + + Characteristics GetCharacteristics() { + var chr = options.Characteristics ?? GetDefaultCharacteristics(); + if (IsExeFile) + chr &= ~Characteristics.Dll; + else + chr |= Characteristics.Dll; + return chr; + } + + Characteristics GetDefaultCharacteristics() { + if (Use32BitOptionalHeader()) + return Characteristics._32BitMachine | Characteristics.ExecutableImage; + return Characteristics.ExecutableImage | Characteristics.LargeAddressAware; + } + } +} diff --git a/dnlib/DotNet/Writer/PESection.cs b/dnlib/DotNet/Writer/PESection.cs new file mode 100644 index 0000000..1ca3fbc --- /dev/null +++ b/dnlib/DotNet/Writer/PESection.cs @@ -0,0 +1,91 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using System.Text; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// A PE section + /// + public sealed class PESection : ChunkList { + string name; + uint characteristics; + + /// + /// Gets the name + /// + public string Name { + get { return name; } + set { name = value; } + } + + /// + /// Gets the Characteristics + /// + public uint Characteristics { + get { return characteristics; } + set { characteristics = value; } + } + + /// + /// true if this is a code section + /// + public bool IsCode { + get { return (characteristics & 0x20) != 0; } + } + + /// + /// true if this is an initialized data section + /// + public bool IsInitializedData { + get { return (characteristics & 0x40) != 0; } + } + + /// + /// true if this is an uninitialized data section + /// + public bool IsUninitializedData { + get { return (characteristics & 0x80) != 0; } + } + + /// + /// Constructor + /// + /// Section name + /// Section characteristics + public PESection(string name, uint characteristics) { + this.name = name; + this.characteristics = characteristics; + } + + /// + /// Writes the section header to at its current position. + /// Returns aligned virtual size (aligned to ) + /// + /// Writer + /// File alignment + /// Section alignment + /// Current + public uint WriteHeaderTo(BinaryWriter writer, uint fileAlignment, uint sectionAlignment, uint rva) { + uint vs = GetVirtualSize(); + uint fileLen = GetFileLength(); + uint alignedVs = Utils.AlignUp(vs, sectionAlignment); + uint rawSize = Utils.AlignUp(fileLen, fileAlignment); + uint dataOffset = (uint)FileOffset; + + writer.Write(Encoding.UTF8.GetBytes(Name + "\0\0\0\0\0\0\0\0"), 0, 8); + writer.Write(vs); // VirtualSize + writer.Write((uint)rva); // VirtualAddress + writer.Write(rawSize); // SizeOfRawData + writer.Write(dataOffset); // PointerToRawData + writer.Write(0); // PointerToRelocations + writer.Write(0); // PointerToLinenumbers + writer.Write((ushort)0); // NumberOfRelocations + writer.Write((ushort)0); // NumberOfLinenumbers + writer.Write(Characteristics); + + return alignedVs; + } + } +} diff --git a/dnlib/DotNet/Writer/PreserveTokensMetaData.cs b/dnlib/DotNet/Writer/PreserveTokensMetaData.cs new file mode 100644 index 0000000..f9e0904 --- /dev/null +++ b/dnlib/DotNet/Writer/PreserveTokensMetaData.cs @@ -0,0 +1,1243 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// Preserves metadata tokens + /// + sealed class PreserveTokensMetaData : MetaData { + readonly ModuleDefMD mod; + readonly Rows typeRefInfos = new Rows(); + readonly Dictionary typeToRid = new Dictionary(); + MemberDefDict fieldDefInfos; + MemberDefDict methodDefInfos; + MemberDefDict paramDefInfos; + readonly Rows memberRefInfos = new Rows(); + readonly Rows standAloneSigInfos = new Rows(); + MemberDefDict eventDefInfos; + MemberDefDict propertyDefInfos; + readonly Rows typeSpecInfos = new Rows(); + readonly Rows methodSpecInfos = new Rows(); + readonly Dictionary callConvTokenToSignature = new Dictionary(); + + [DebuggerDisplay("{Rid} -> {NewRid} {Def}")] + sealed class MemberDefInfo where T : IMDTokenProvider { + public readonly T Def; + + /// + /// Its real rid + /// + public uint Rid; + + /// + /// Its logical rid or real rid. If the ptr table exists (eg. MethodPtr), then it's + /// an index into it, else it's the real rid. + /// + public uint NewRid; + + public MemberDefInfo(T def, uint rid) { + this.Def = def; + this.Rid = rid; + this.NewRid = rid; + } + } + + [DebuggerDisplay("Count = {Count}")] + sealed class MemberDefDict where T : IMDTokenProvider { + readonly Type defMDType; + uint userRid = 0x01000000; + uint newRid = 1; + int numDefMDs; + int numDefUsers; + int tableSize; + bool wasSorted; + readonly bool preserveRids; + readonly bool enableRidToInfo; + readonly Dictionary> defToInfo = new Dictionary>(); + Dictionary> ridToInfo; + readonly List> defs = new List>(); + List> sortedDefs; + readonly Dictionary collectionPositions = new Dictionary(); + + /// + /// Gets total number of defs in the list. It does not necessarily return + /// the table size. Use for that. + /// + public int Count { + get { return defs.Count; } + } + + /// + /// Gets the number of rows that need to be created in the table + /// + public int TableSize { + get { return tableSize; } + } + + /// + /// Returns true if the ptr table (eg. MethodPtr) is needed + /// + public bool NeedPtrTable { + get { return preserveRids && !wasSorted; } + } + + public MemberDefDict(Type defMDType, bool preserveRids) + : this(defMDType, preserveRids, false) { + } + + public MemberDefDict(Type defMDType, bool preserveRids, bool enableRidToInfo) { + this.defMDType = defMDType; + this.preserveRids = preserveRids; + this.enableRidToInfo = enableRidToInfo; + } + + public uint Rid(T def) { + return defToInfo[def].Rid; + } + + public bool TryGetRid(T def, out uint rid) { + MemberDefInfo info; + if (def == null || !defToInfo.TryGetValue(def, out info)) { + rid = 0; + return false; + } + rid = info.Rid; + return true; + } + + /// + /// Sorts the table + /// + /// Comparer + public void Sort(Comparison> comparer) { + if (!preserveRids) { + // It's already sorted + sortedDefs = defs; + return; + } + + sortedDefs = new List>(defs); + sortedDefs.Sort(comparer); + wasSorted = true; + for (int i = 0; i < sortedDefs.Count; i++) { + var def = sortedDefs[i]; + uint newRid = (uint)i + 1; + def.NewRid = newRid; + if (def.Rid != newRid) + wasSorted = false; + } + } + + public MemberDefInfo Get(int i) { + return defs[i]; + } + + public MemberDefInfo GetSorted(int i) { + return sortedDefs[i]; + } + + public MemberDefInfo GetByRid(uint rid) { + MemberDefInfo info; + ridToInfo.TryGetValue(rid, out info); + return info; + } + + /// + /// Adds a def. must be called after adding the last def. + /// + /// The def + /// Collection position + public void Add(T def, int collPos) { + uint rid; + if (def.GetType() == defMDType) { + numDefMDs++; + rid = preserveRids ? def.Rid : newRid++; + } + else { + numDefUsers++; + rid = preserveRids ? userRid++ : newRid++; + } + + var info = new MemberDefInfo(def, rid); + defToInfo[def] = info; + defs.Add(info); + collectionPositions.Add(def, collPos); + } + + /// + /// Must be called after 'ing the last def + /// + public void SortDefs() { + // It's already sorted if we don't preserve rids + if (preserveRids) { + // Sort all def MDs before user defs + defs.Sort((a, b) => a.Rid.CompareTo(b.Rid)); + + // Fix user created defs' rids + uint newRid = numDefMDs == 0 ? 1 : defs[numDefMDs - 1].Rid + 1; + for (int i = numDefMDs; i < defs.Count; i++) + defs[i].Rid = newRid++; + + // Now we know total table size + tableSize = (int)newRid - 1; + } + else + tableSize = defs.Count; + + if (enableRidToInfo) { + ridToInfo = new Dictionary>(defs.Count); + foreach (var info in defs) + ridToInfo.Add(info.Rid, info); + } + + if ((uint)tableSize > 0x00FFFFFF) + throw new ModuleWriterException("Table is too big"); + } + + public int GetCollectionPosition(T def) { + return collectionPositions[def]; + } + } + + protected override int NumberOfMethods { + get { return methodDefInfos.Count; } + } + + /// + /// Constructor + /// + /// Module + /// Constants list + /// Method bodies list + /// .NET resources list + /// Options + public PreserveTokensMetaData(ModuleDef module, UniqueChunkList constants, MethodBodyChunks methodBodies, NetResources netResources, MetaDataOptions options) + : base(module, constants, methodBodies, netResources, options) { + mod = module as ModuleDefMD; + if (mod == null) + throw new ModuleWriterException("Not a ModuleDefMD"); + } + + /// + public override uint GetRid(TypeRef tr) { + uint rid; + typeRefInfos.TryGetRid(tr, out rid); + return rid; + } + + /// + public override uint GetRid(TypeDef td) { + if (td == null) { + Error("TypeDef is null"); + return 0; + } + uint rid; + if (typeToRid.TryGetValue(td, out rid)) + return rid; + Error("TypeDef {0} ({1:X8}) is not defined in this module ({2}). A type was removed that is still referenced by this module.", td, td.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(FieldDef fd) { + uint rid; + if (fieldDefInfos.TryGetRid(fd, out rid)) + return rid; + if (fd == null) + Error("Field is null"); + else + Error("Field {0} ({1:X8}) is not defined in this module ({2}). A field was removed that is still referenced by this module.", fd, fd.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(MethodDef md) { + uint rid; + if (methodDefInfos.TryGetRid(md, out rid)) + return rid; + if (md == null) + Error("Method is null"); + else + Error("Method {0} ({1:X8}) is not defined in this module ({2}). A method was removed that is still referenced by this module.", md, md.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(ParamDef pd) { + uint rid; + if (paramDefInfos.TryGetRid(pd, out rid)) + return rid; + if (pd == null) + Error("Param is null"); + else + Error("Param {0} ({1:X8}) is not defined in this module ({2}). A parameter was removed that is still referenced by this module.", pd, pd.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(MemberRef mr) { + uint rid; + memberRefInfos.TryGetRid(mr, out rid); + return rid; + } + + /// + public override uint GetRid(StandAloneSig sas) { + uint rid; + standAloneSigInfos.TryGetRid(sas, out rid); + return rid; + } + + /// + public override uint GetRid(EventDef ed) { + uint rid; + if (eventDefInfos.TryGetRid(ed, out rid)) + return rid; + if (ed == null) + Error("Event is null"); + else + Error("Event {0} ({1:X8}) is not defined in this module ({2}). An event was removed that is still referenced by this module.", ed, ed.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(PropertyDef pd) { + uint rid; + if (propertyDefInfos.TryGetRid(pd, out rid)) + return rid; + if (pd == null) + Error("Property is null"); + else + Error("Property {0} ({1:X8}) is not defined in this module ({2}). A property was removed that is still referenced by this module.", pd, pd.MDToken.Raw, module); + return 0; + } + + /// + public override uint GetRid(TypeSpec ts) { + uint rid; + typeSpecInfos.TryGetRid(ts, out rid); + return rid; + } + + /// + public override uint GetRid(MethodSpec ms) { + uint rid; + methodSpecInfos.TryGetRid(ms, out rid); + return rid; + } + + /// + protected override void Initialize() { + fieldDefInfos = new MemberDefDict(typeof(FieldDefMD), PreserveFieldRids); + methodDefInfos = new MemberDefDict(typeof(MethodDefMD), PreserveMethodRids, true); + paramDefInfos = new MemberDefDict(typeof(ParamDefMD), PreserveParamRids); + eventDefInfos = new MemberDefDict(typeof(EventDefMD), PreserveEventRids); + propertyDefInfos = new MemberDefDict(typeof(PropertyDefMD), PreservePropertyRids); + + CreateEmptyTableRows(); + } + + /// + protected override List GetAllTypeDefs() { + if (!PreserveTypeDefRids) { + var types2 = new List(module.GetTypes()); + InitializeTypeToRid(types2); + return types2; + } + + var typeToIndex = new Dictionary(); + var types = new List(); + uint index = 0; + const uint IS_TYPEDEFMD = 0x80000000; + const uint INDEX_BITS = 0x00FFFFFF; + foreach (var type in module.GetTypes()) { + if (type == null) + continue; + types.Add(type); + uint val = (uint)index++; + if (type.GetType() == typeof(TypeDefMD)) + val |= IS_TYPEDEFMD; + typeToIndex[type] = val; + } + + var globalType = types[0]; + types.Sort((a, b) => { + if (a == b) + return 0; + // Make sure the global type is always sorted first, even if it's + // a TypeDefUser + if (a == globalType) + return -1; + if (b == globalType) + return 1; + + // Sort all TypeDefMDs before all TypeDefUsers + uint ai = typeToIndex[a]; + uint bi = typeToIndex[b]; + bool amd = (ai & IS_TYPEDEFMD) != 0; + bool bmd = (bi & IS_TYPEDEFMD) != 0; + if (amd == bmd) { // Both are TypeDefMDs or both are TypeDefUsers + // If TypeDefMDs, only compare rids since rids are preserved + if (amd) + return a.Rid.CompareTo(b.Rid); + + // If TypeDefUsers, rids aren't preserved so compare by index + return (ai & INDEX_BITS).CompareTo(bi & INDEX_BITS); + } + if (amd) + return -1; + return 1; + }); + + // Some of the original types may have been removed. Create dummy types + // so TypeDef rids can be preserved. + var newTypes = new List(types.Count); + uint prevRid = 1; + newTypes.Add(globalType); + for (int i = 1; i < types.Count; i++) { + var type = types[i]; + + // TypeDefUsers were sorted last so when we reach one, we can stop + if (type.GetType() != typeof(TypeDefMD)) { + while (i < types.Count) + newTypes.Add(types[i++]); + break; + } + + uint currRid = type.Rid; + int extraTypes = (int)(currRid - prevRid - 1); + if (extraTypes != 0) { // always >= 0 since currRid > prevRid + // At least one type has been removed. Create dummy types. + for (int j = 0; j < extraTypes; j++) + newTypes.Add(new TypeDefUser("dummy", Guid.NewGuid().ToString("B"), module.CorLibTypes.Object.TypeDefOrRef)); + } + newTypes.Add(type); + prevRid = currRid; + } + + InitializeTypeToRid(newTypes); + return newTypes; + } + + void InitializeTypeToRid(IEnumerable types) { + uint rid = 1; + foreach (var type in types) { + if (type == null) + continue; + if (typeToRid.ContainsKey(type)) + continue; + typeToRid[type] = rid++; + } + } + + /// + protected override void AllocateTypeDefRids() { + foreach (var type in allTypeDefs) { + uint rid = tablesHeap.TypeDefTable.Create(new RawTypeDefRow()); + if (typeToRid[type] != rid) + throw new ModuleWriterException("Got a different rid than expected"); + } + } + + /// + /// Reserves rows in TypeRef, MemberRef, StandAloneSig, + /// TypeSpec and MethodSpec where we will store the original rows + /// to make sure they get the same rid. Any user created rows will be stored at + /// the end of each table. + /// + void CreateEmptyTableRows() { + uint rows; + + if (PreserveTypeRefRids) { + rows = mod.TablesStream.TypeRefTable.Rows; + for (uint i = 0; i < rows; i++) + tablesHeap.TypeRefTable.Create(new RawTypeRefRow()); + } + + if (PreserveMemberRefRids) { + rows = mod.TablesStream.MemberRefTable.Rows; + for (uint i = 0; i < rows; i++) + tablesHeap.MemberRefTable.Create(new RawMemberRefRow()); + } + + if (PreserveStandAloneSigRids) { + rows = mod.TablesStream.StandAloneSigTable.Rows; + for (uint i = 0; i < rows; i++) + tablesHeap.StandAloneSigTable.Create(new RawStandAloneSigRow()); + } + + if (PreserveTypeSpecRids) { + rows = mod.TablesStream.TypeSpecTable.Rows; + for (uint i = 0; i < rows; i++) + tablesHeap.TypeSpecTable.Create(new RawTypeSpecRow()); + } + + if (PreserveMethodSpecRids) { + rows = mod.TablesStream.MethodSpecTable.Rows; + for (uint i = 0; i < rows; i++) + tablesHeap.MethodSpecTable.Create(new RawMethodSpecRow()); + } + } + + /// + /// Adds any non-referenced rows that haven't been added yet but are present in + /// the original file. If there are any non-referenced rows, it's usually a sign + /// that an obfuscator has encrypted one or more methods or that it has added + /// some rows it uses to decrypt something. + /// + void InitializeUninitializedTableRows() { + InitializeTypeRefTableRows(); + InitializeMemberRefTableRows(); + InitializeStandAloneSigTableRows(); + InitializeTypeSpecTableRows(); + InitializeMethodSpecTableRows(); + } + + bool initdTypeRef = false; + void InitializeTypeRefTableRows() { + if (!PreserveTypeRefRids || initdTypeRef) + return; + initdTypeRef = true; + + uint rows = mod.TablesStream.TypeRefTable.Rows; + for (uint rid = 1; rid <= rows; rid++) + AddTypeRef(mod.ResolveTypeRef(rid)); + tablesHeap.TypeRefTable.ReAddRows(); + } + + bool initdMemberRef = false; + void InitializeMemberRefTableRows() { + if (!PreserveMemberRefRids || initdMemberRef) + return; + initdMemberRef = true; + + uint rows = mod.TablesStream.MemberRefTable.Rows; + for (uint rid = 1; rid <= rows; rid++) + AddMemberRef(mod.ResolveMemberRef(rid), true); + tablesHeap.MemberRefTable.ReAddRows(); + } + + bool initdStandAloneSig = false; + void InitializeStandAloneSigTableRows() { + if (!PreserveStandAloneSigRids || initdStandAloneSig) + return; + initdStandAloneSig = true; + + uint rows = mod.TablesStream.StandAloneSigTable.Rows; + for (uint rid = 1; rid <= rows; rid++) + AddStandAloneSig(mod.ResolveStandAloneSig(rid), true); + tablesHeap.StandAloneSigTable.ReAddRows(); + } + + bool initdTypeSpec = false; + void InitializeTypeSpecTableRows() { + if (!PreserveTypeSpecRids || initdTypeSpec) + return; + initdTypeSpec = true; + + uint rows = mod.TablesStream.TypeSpecTable.Rows; + for (uint rid = 1; rid <= rows; rid++) + AddTypeSpec(mod.ResolveTypeSpec(rid), true); + tablesHeap.TypeSpecTable.ReAddRows(); + } + + bool initdMethodSpec = false; + void InitializeMethodSpecTableRows() { + if (!PreserveMethodSpecRids || initdMethodSpec) + return; + initdMethodSpec = true; + + uint rows = mod.TablesStream.MethodSpecTable.Rows; + for (uint rid = 1; rid <= rows; rid++) + AddMethodSpec(mod.ResolveMethodSpec(rid), true); + tablesHeap.MethodSpecTable.ReAddRows(); + } + + /// + protected override void AllocateMemberDefRids() { + FindMemberDefs(); + + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids0); + + for (int i = 1; i <= fieldDefInfos.TableSize; i++) { + if ((uint)i != tablesHeap.FieldTable.Create(new RawFieldRow())) + throw new ModuleWriterException("Invalid field rid"); + } + + for (int i = 1; i <= methodDefInfos.TableSize; i++) { + if ((uint)i != tablesHeap.MethodTable.Create(new RawMethodRow())) + throw new ModuleWriterException("Invalid method rid"); + } + + for (int i = 1; i <= paramDefInfos.TableSize; i++) { + if ((uint)i != tablesHeap.ParamTable.Create(new RawParamRow())) + throw new ModuleWriterException("Invalid param rid"); + } + + for (int i = 1; i <= eventDefInfos.TableSize; i++) { + if ((uint)i != tablesHeap.EventTable.Create(new RawEventRow())) + throw new ModuleWriterException("Invalid event rid"); + } + + for (int i = 1; i <= propertyDefInfos.TableSize; i++) { + if ((uint)i != tablesHeap.PropertyTable.Create(new RawPropertyRow())) + throw new ModuleWriterException("Invalid property rid"); + } + + SortFields(); + SortMethods(); + SortParameters(); + SortEvents(); + SortProperties(); + + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids1); + + if (fieldDefInfos.NeedPtrTable) { + for (int i = 0; i < fieldDefInfos.Count; i++) { + var info = fieldDefInfos.GetSorted(i); + if ((uint)i + 1 != tablesHeap.FieldPtrTable.Add(new RawFieldPtrRow(info.Rid))) + throw new ModuleWriterException("Invalid field ptr rid"); + } + ReUseDeletedFieldRows(); + } + + if (methodDefInfos.NeedPtrTable) { + for (int i = 0; i < methodDefInfos.Count; i++) { + var info = methodDefInfos.GetSorted(i); + if ((uint)i + 1 != tablesHeap.MethodPtrTable.Add(new RawMethodPtrRow(info.Rid))) + throw new ModuleWriterException("Invalid method ptr rid"); + } + ReUseDeletedMethodRows(); + } + + if (paramDefInfos.NeedPtrTable) { + // NOTE: peverify does not support the ParamPtr table. It's a bug. + for (int i = 0; i < paramDefInfos.Count; i++) { + var info = paramDefInfos.GetSorted(i); + if ((uint)i + 1 != tablesHeap.ParamPtrTable.Add(new RawParamPtrRow(info.Rid))) + throw new ModuleWriterException("Invalid param ptr rid"); + } + ReUseDeletedParamRows(); + } + + if (eventDefInfos.NeedPtrTable) { + for (int i = 0; i < eventDefInfos.Count; i++) { + var info = eventDefInfos.GetSorted(i); + if ((uint)i + 1 != tablesHeap.EventPtrTable.Add(new RawEventPtrRow(info.Rid))) + throw new ModuleWriterException("Invalid event ptr rid"); + } + } + + if (propertyDefInfos.NeedPtrTable) { + for (int i = 0; i < propertyDefInfos.Count; i++) { + var info = propertyDefInfos.GetSorted(i); + if ((uint)i + 1 != tablesHeap.PropertyPtrTable.Add(new RawPropertyPtrRow(info.Rid))) + throw new ModuleWriterException("Invalid property ptr rid"); + } + } + + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids2); + + InitializeMethodAndFieldList(); + InitializeParamList(); + InitializeEventMap(); + InitializePropertyMap(); + + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids3); + + // We must re-use deleted event/property rows after we've initialized + // the event/prop map tables. + if (eventDefInfos.NeedPtrTable) + ReUseDeletedEventRows(); + if (propertyDefInfos.NeedPtrTable) + ReUseDeletedPropertyRows(); + + Listener.OnMetaDataEvent(this, MetaDataEvent.AllocateMemberDefRids4); + + InitializeTypeRefTableRows(); + InitializeTypeSpecTableRows(); + InitializeMemberRefTableRows(); + InitializeMethodSpecTableRows(); + } + + /// + /// Re-uses all Field rows which aren't owned by any type due to the fields + /// having been deleted by the user. The reason we must do this is that the + /// FieldPtr and Field tables must be the same size. + /// + void ReUseDeletedFieldRows() { + if (tablesHeap.FieldPtrTable.IsEmpty) + return; + if (fieldDefInfos.TableSize == tablesHeap.FieldPtrTable.Rows) + return; + + var hasOwner = new bool[fieldDefInfos.TableSize]; + for (int i = 0; i < fieldDefInfos.Count; i++) + hasOwner[(int)fieldDefInfos.Get(i).Rid - 1] = true; + + CreateDummyPtrTableType(); + + uint fieldSig = GetSignature(new FieldSig(module.CorLibTypes.Byte)); + for (int i = 0; i < hasOwner.Length; i++) { + if (hasOwner[i]) + continue; + uint frid = (uint)i + 1; + + var frow = tablesHeap.FieldTable[frid]; + frow.Flags = (ushort)(FieldAttributes.Public | FieldAttributes.Static); + frow.Name = stringsHeap.Add(string.Format("f{0:X6}", frid)); + frow.Signature = fieldSig; + tablesHeap.FieldPtrTable.Create(new RawFieldPtrRow(frid)); + } + + if (fieldDefInfos.TableSize != tablesHeap.FieldPtrTable.Rows) + throw new ModuleWriterException("Didn't create all dummy fields"); + } + + /// + /// Re-uses all Method rows which aren't owned by any type due to the methods + /// having been deleted by the user. The reason we must do this is that the + /// MethodPtr and Method tables must be the same size. + /// + void ReUseDeletedMethodRows() { + if (tablesHeap.MethodPtrTable.IsEmpty) + return; + if (methodDefInfos.TableSize == tablesHeap.MethodPtrTable.Rows) + return; + + var hasOwner = new bool[methodDefInfos.TableSize]; + for (int i = 0; i < methodDefInfos.Count; i++) + hasOwner[(int)methodDefInfos.Get(i).Rid - 1] = true; + + CreateDummyPtrTableType(); + + uint methodSig = GetSignature(MethodSig.CreateInstance(module.CorLibTypes.Void)); + for (int i = 0; i < hasOwner.Length; i++) { + if (hasOwner[i]) + continue; + uint mrid = (uint)i + 1; + + var mrow = tablesHeap.MethodTable[mrid]; + mrow.RVA = 0; + mrow.ImplFlags = (ushort)(MethodImplAttributes.IL | MethodImplAttributes.Managed); + mrow.Flags = (ushort)(MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.Abstract); + mrow.Name = stringsHeap.Add(string.Format("m{0:X6}", mrid)); + mrow.Signature = methodSig; + mrow.ParamList = (uint)paramDefInfos.Count; + tablesHeap.MethodPtrTable.Create(new RawMethodPtrRow(mrid)); + } + + if (methodDefInfos.TableSize != tablesHeap.MethodPtrTable.Rows) + throw new ModuleWriterException("Didn't create all dummy methods"); + } + + /// + /// Re-uses all Param rows which aren't owned by any type due to the params + /// having been deleted by the user. The reason we must do this is that the + /// ParamPtr and Param tables must be the same size. + /// This method must be called after since + /// this method will create more methods at the end of the Method table. + /// + void ReUseDeletedParamRows() { + if (tablesHeap.ParamPtrTable.IsEmpty) + return; + if (paramDefInfos.TableSize == tablesHeap.ParamPtrTable.Rows) + return; + + var hasOwner = new bool[paramDefInfos.TableSize]; + for (int i = 0; i < paramDefInfos.Count; i++) + hasOwner[(int)paramDefInfos.Get(i).Rid - 1] = true; + + CreateDummyPtrTableType(); + + // For each param, attach it to a new method. Another alternative would be to create + // one (or a few) methods with tons of parameters. + uint methodSig = GetSignature(MethodSig.CreateInstance(module.CorLibTypes.Void)); + for (int i = 0; i < hasOwner.Length; i++) { + if (hasOwner[i]) + continue; + uint prid = (uint)i + 1; + + var prow = tablesHeap.ParamTable[prid]; + prow.Flags = 0; + prow.Sequence = 0; // Return type parameter + prow.Name = stringsHeap.Add(string.Format("p{0:X6}", prid)); + uint ptrRid = tablesHeap.ParamPtrTable.Create(new RawParamPtrRow(prid)); + + var mrow = new RawMethodRow(0, + (ushort)(MethodImplAttributes.IL | MethodImplAttributes.Managed), + (ushort)(MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.Abstract), + stringsHeap.Add(string.Format("mp{0:X6}", prid)), + methodSig, + ptrRid); + uint mrid = tablesHeap.MethodTable.Create(mrow); + if (tablesHeap.MethodPtrTable.Rows > 0) + tablesHeap.MethodPtrTable.Create(new RawMethodPtrRow(mrid)); + } + + if (paramDefInfos.TableSize != tablesHeap.ParamPtrTable.Rows) + throw new ModuleWriterException("Didn't create all dummy params"); + } + + /// + /// Re-uses all Event rows which aren't owned by any type due to the events + /// having been deleted by the user. The reason we must do this is that the + /// EventPtr and Event tables must be the same size. + /// + void ReUseDeletedEventRows() { + if (tablesHeap.EventPtrTable.IsEmpty) + return; + if (eventDefInfos.TableSize == tablesHeap.EventPtrTable.Rows) + return; + + var hasOwner = new bool[eventDefInfos.TableSize]; + for (int i = 0; i < eventDefInfos.Count; i++) + hasOwner[(int)eventDefInfos.Get(i).Rid - 1] = true; + + uint typeRid = CreateDummyPtrTableType(); + tablesHeap.EventMapTable.Create(new RawEventMapRow(typeRid, (uint)tablesHeap.EventPtrTable.Rows + 1)); + + uint eventType = AddTypeDefOrRef(module.CorLibTypes.Object.TypeDefOrRef); + for (int i = 0; i < hasOwner.Length; i++) { + if (hasOwner[i]) + continue; + uint erid = (uint)i + 1; + + var frow = tablesHeap.EventTable[erid]; + frow.EventFlags = 0; + frow.Name = stringsHeap.Add(string.Format("E{0:X6}", erid)); + frow.EventType = eventType; + tablesHeap.EventPtrTable.Create(new RawEventPtrRow(erid)); + } + + if (eventDefInfos.TableSize != tablesHeap.EventPtrTable.Rows) + throw new ModuleWriterException("Didn't create all dummy events"); + } + + /// + /// Re-uses all Property rows which aren't owned by any type due to the properties + /// having been deleted by the user. The reason we must do this is that the + /// PropertyPtr and Property tables must be the same size. + /// + void ReUseDeletedPropertyRows() { + if (tablesHeap.PropertyPtrTable.IsEmpty) + return; + if (propertyDefInfos.TableSize == tablesHeap.PropertyPtrTable.Rows) + return; + + var hasOwner = new bool[propertyDefInfos.TableSize]; + for (int i = 0; i < propertyDefInfos.Count; i++) + hasOwner[(int)propertyDefInfos.Get(i).Rid - 1] = true; + + uint typeRid = CreateDummyPtrTableType(); + tablesHeap.PropertyMapTable.Create(new RawPropertyMapRow(typeRid, (uint)tablesHeap.PropertyPtrTable.Rows + 1)); + + uint propertySig = GetSignature(PropertySig.CreateStatic(module.CorLibTypes.Object)); + for (int i = 0; i < hasOwner.Length; i++) { + if (hasOwner[i]) + continue; + uint prid = (uint)i + 1; + + var frow = tablesHeap.PropertyTable[prid]; + frow.PropFlags = 0; + frow.Name = stringsHeap.Add(string.Format("P{0:X6}", prid)); + frow.Type = propertySig; + tablesHeap.PropertyPtrTable.Create(new RawPropertyPtrRow(prid)); + } + + if (propertyDefInfos.TableSize != tablesHeap.PropertyPtrTable.Rows) + throw new ModuleWriterException("Didn't create all dummy properties"); + } + + /// + /// Creates a dummy TypeDef at the end of the TypeDef table that will own + /// dummy methods and fields. These dummy methods and fields are only created if the size + /// of the ptr table is less than the size of the non-ptr table (eg. size MethodPtr table + /// is less than size Method table). The only reason the ptr table would be smaller than + /// the non-ptr table is when some field/method has been deleted and we must preserve + /// all method/field rids. + /// + uint CreateDummyPtrTableType() { + if (dummyPtrTableTypeRid != 0) + return dummyPtrTableTypeRid; + + var flags = TypeAttributes.NotPublic | TypeAttributes.AutoLayout | + TypeAttributes.Class | TypeAttributes.Abstract | TypeAttributes.AnsiClass; + int numFields = fieldDefInfos.NeedPtrTable ? fieldDefInfos.Count : fieldDefInfos.TableSize; + int numMethods = methodDefInfos.NeedPtrTable ? methodDefInfos.Count : methodDefInfos.TableSize; + var row = new RawTypeDefRow((uint)flags, + stringsHeap.Add(Guid.NewGuid().ToString("B")), + stringsHeap.Add("dummy_ptr"), + AddTypeDefOrRef(module.CorLibTypes.Object.TypeDefOrRef), + (uint)numFields + 1, + (uint)numMethods + 1); + dummyPtrTableTypeRid = tablesHeap.TypeDefTable.Create(row); + if (dummyPtrTableTypeRid == 1) + throw new ModuleWriterException("Dummy ptr type is the first type"); + return dummyPtrTableTypeRid; + } + uint dummyPtrTableTypeRid; + + void FindMemberDefs() { + int pos; + foreach (var type in allTypeDefs) { + if (type == null) + continue; + + pos = 0; + foreach (var field in type.Fields) { + if (field == null) + continue; + fieldDefInfos.Add(field, pos++); + } + + pos = 0; + foreach (var method in type.Methods) { + if (method == null) + continue; + methodDefInfos.Add(method, pos++); + } + + pos = 0; + foreach (var evt in type.Events) { + if (evt == null) + continue; + eventDefInfos.Add(evt, pos++); + } + + pos = 0; + foreach (var prop in type.Properties) { + if (prop == null) + continue; + propertyDefInfos.Add(prop, pos++); + } + } + + fieldDefInfos.SortDefs(); + methodDefInfos.SortDefs(); + eventDefInfos.SortDefs(); + propertyDefInfos.SortDefs(); + + for (int i = 0; i < methodDefInfos.Count; i++) { + var method = methodDefInfos.Get(i).Def; + pos = 0; + foreach (var param in Sort(method.ParamDefs)) { + if (param == null) + continue; + paramDefInfos.Add(param, pos++); + } + } + paramDefInfos.SortDefs(); + } + + void SortFields() { + fieldDefInfos.Sort((a, b) => { + var dta = a.Def.DeclaringType == null ? 0 : typeToRid[a.Def.DeclaringType]; + var dtb = b.Def.DeclaringType == null ? 0 : typeToRid[b.Def.DeclaringType]; + if (dta == 0 || dtb == 0) + return a.Rid.CompareTo(b.Rid); + if (dta != dtb) + return dta.CompareTo(dtb); + return fieldDefInfos.GetCollectionPosition(a.Def).CompareTo(fieldDefInfos.GetCollectionPosition(b.Def)); + }); + } + + void SortMethods() { + methodDefInfos.Sort((a, b) => { + var dta = a.Def.DeclaringType == null ? 0 : typeToRid[a.Def.DeclaringType]; + var dtb = b.Def.DeclaringType == null ? 0 : typeToRid[b.Def.DeclaringType]; + if (dta == 0 || dtb == 0) + return a.Rid.CompareTo(b.Rid); + if (dta != dtb) + return dta.CompareTo(dtb); + return methodDefInfos.GetCollectionPosition(a.Def).CompareTo(methodDefInfos.GetCollectionPosition(b.Def)); + }); + } + + void SortParameters() { + paramDefInfos.Sort((a, b) => { + var dma = a.Def.DeclaringMethod == null ? 0 : methodDefInfos.Rid(a.Def.DeclaringMethod); + var dmb = b.Def.DeclaringMethod == null ? 0 : methodDefInfos.Rid(b.Def.DeclaringMethod); + if (dma == 0 || dmb == 0) + return a.Rid.CompareTo(b.Rid); + if (dma != dmb) + return dma.CompareTo(dmb); + return paramDefInfos.GetCollectionPosition(a.Def).CompareTo(paramDefInfos.GetCollectionPosition(b.Def)); + }); + } + + void SortEvents() { + eventDefInfos.Sort((a, b) => { + var dta = a.Def.DeclaringType == null ? 0 : typeToRid[a.Def.DeclaringType]; + var dtb = b.Def.DeclaringType == null ? 0 : typeToRid[b.Def.DeclaringType]; + if (dta == 0 || dtb == 0) + return a.Rid.CompareTo(b.Rid); + if (dta != dtb) + return dta.CompareTo(dtb); + return eventDefInfos.GetCollectionPosition(a.Def).CompareTo(eventDefInfos.GetCollectionPosition(b.Def)); + }); + } + + void SortProperties() { + propertyDefInfos.Sort((a, b) => { + var dta = a.Def.DeclaringType == null ? 0 : typeToRid[a.Def.DeclaringType]; + var dtb = b.Def.DeclaringType == null ? 0 : typeToRid[b.Def.DeclaringType]; + if (dta == 0 || dtb == 0) + return a.Rid.CompareTo(b.Rid); + if (dta != dtb) + return dta.CompareTo(dtb); + return propertyDefInfos.GetCollectionPosition(a.Def).CompareTo(propertyDefInfos.GetCollectionPosition(b.Def)); + }); + } + + void InitializeMethodAndFieldList() { + uint fieldList = 1, methodList = 1; + foreach (var type in allTypeDefs) { + var typeRow = tablesHeap.TypeDefTable[typeToRid[type]]; + typeRow.FieldList = fieldList; + typeRow.MethodList = methodList; + fieldList += (uint)type.Fields.Count; + methodList += (uint)type.Methods.Count; + } + } + + void InitializeParamList() { + uint ridList = 1; + for (uint methodRid = 1; methodRid <= methodDefInfos.TableSize; methodRid++) { + var methodInfo = methodDefInfos.GetByRid(methodRid); + var row = tablesHeap.MethodTable[methodRid]; + row.ParamList = ridList; + if (methodInfo != null) + ridList += (uint)methodInfo.Def.ParamDefs.Count; + } + } + + void InitializeEventMap() { + if (!tablesHeap.EventMapTable.IsEmpty) + throw new ModuleWriterException("EventMap table isn't empty"); + TypeDef type = null; + for (int i = 0; i < eventDefInfos.Count; i++) { + var info = eventDefInfos.GetSorted(i); + if (type == info.Def.DeclaringType) + continue; + type = info.Def.DeclaringType; + var row = new RawEventMapRow(typeToRid[type], info.NewRid); + uint eventMapRid = tablesHeap.EventMapTable.Create(row); + eventMapInfos.Add(type, eventMapRid); + } + } + + void InitializePropertyMap() { + if (!tablesHeap.PropertyMapTable.IsEmpty) + throw new ModuleWriterException("PropertyMap table isn't empty"); + TypeDef type = null; + for (int i = 0; i < propertyDefInfos.Count; i++) { + var info = propertyDefInfos.GetSorted(i); + if (type == info.Def.DeclaringType) + continue; + type = info.Def.DeclaringType; + var row = new RawPropertyMapRow(typeToRid[type], info.NewRid); + uint propertyMapRid = tablesHeap.PropertyMapTable.Create(row); + propertyMapInfos.Add(type, propertyMapRid); + } + } + + /// + protected override uint AddTypeRef(TypeRef tr) { + if (tr == null) { + Error("TypeRef is null"); + return 0; + } + uint rid; + if (typeRefInfos.TryGetRid(tr, out rid)) { + if (rid == 0) + Error("TypeRef {0:X8} has an infinite ResolutionScope loop", tr.MDToken.Raw); + return rid; + } + typeRefInfos.Add(tr, 0); // Prevent inf recursion + + bool isOld = PreserveTypeRefRids && mod.ResolveTypeRef(tr.Rid) == tr; + var row = isOld ? tablesHeap.TypeRefTable[tr.Rid] : new RawTypeRefRow(); + row.ResolutionScope = AddResolutionScope(tr.ResolutionScope); + row.Name = stringsHeap.Add(tr.Name); + row.Namespace = stringsHeap.Add(tr.Namespace); + + rid = isOld ? tr.Rid : tablesHeap.TypeRefTable.Add(row); + typeRefInfos.SetRid(tr, rid); + AddCustomAttributes(Table.TypeRef, rid, tr); + return rid; + } + + /// + protected override uint AddTypeSpec(TypeSpec ts) { + return AddTypeSpec(ts, false); + } + + uint AddTypeSpec(TypeSpec ts, bool forceIsOld) { + if (ts == null) { + Error("TypeSpec is null"); + return 0; + } + uint rid; + if (typeSpecInfos.TryGetRid(ts, out rid)) { + if (rid == 0) + Error("TypeSpec {0:X8} has an infinite TypeSig loop", ts.MDToken.Raw); + return rid; + } + typeSpecInfos.Add(ts, 0); // Prevent inf recursion + + bool isOld = forceIsOld || (PreserveTypeSpecRids && mod.ResolveTypeSpec(ts.Rid) == ts); + var row = isOld ? tablesHeap.TypeSpecTable[ts.Rid] : new RawTypeSpecRow(); + row.Signature = GetSignature(ts.TypeSig, ts.ExtraData); + + rid = isOld ? ts.Rid : tablesHeap.TypeSpecTable.Add(row); + typeSpecInfos.SetRid(ts, rid); + AddCustomAttributes(Table.TypeSpec, rid, ts); + return rid; + } + + /// + protected override uint AddMemberRef(MemberRef mr) { + return AddMemberRef(mr, false); + } + + uint AddMemberRef(MemberRef mr, bool forceIsOld) { + if (mr == null) { + Error("MemberRef is null"); + return 0; + } + uint rid; + if (memberRefInfos.TryGetRid(mr, out rid)) + return rid; + + bool isOld = forceIsOld || (PreserveMemberRefRids && mod.ResolveMemberRef(mr.Rid) == mr); + var row = isOld ? tablesHeap.MemberRefTable[mr.Rid] : new RawMemberRefRow(); + row.Class = AddMemberRefParent(mr.Class); + row.Name = stringsHeap.Add(mr.Name); + row.Signature = GetSignature(mr.Signature); + + rid = isOld ? mr.Rid : tablesHeap.MemberRefTable.Add(row); + memberRefInfos.Add(mr, rid); + AddCustomAttributes(Table.MemberRef, rid, mr); + return rid; + } + + /// + protected override uint AddStandAloneSig(StandAloneSig sas) { + return AddStandAloneSig(sas, false); + } + + uint AddStandAloneSig(StandAloneSig sas, bool forceIsOld) { + if (sas == null) { + Error("StandAloneSig is null"); + return 0; + } + uint rid; + if (standAloneSigInfos.TryGetRid(sas, out rid)) + return rid; + + bool isOld = forceIsOld || (PreserveStandAloneSigRids && mod.ResolveStandAloneSig(sas.Rid) == sas); + var row = isOld ? tablesHeap.StandAloneSigTable[sas.Rid] : new RawStandAloneSigRow(); + row.Signature = GetSignature(sas.Signature); + + rid = isOld ? sas.Rid : tablesHeap.StandAloneSigTable.Add(row); + standAloneSigInfos.Add(sas, rid); + AddCustomAttributes(Table.StandAloneSig, rid, sas); + return rid; + } + + /// + public override MDToken GetToken(IList locals, uint origToken) { + if (!PreserveStandAloneSigRids || !IsValidStandAloneSigToken(origToken)) + return base.GetToken(locals, origToken); + + uint rid = AddStandAloneSig(new LocalSig(locals, false), origToken); + if (rid == 0) + return base.GetToken(locals, origToken); + return new MDToken(Table.StandAloneSig, rid); + } + + /// + protected override uint AddStandAloneSig(MethodSig methodSig, uint origToken) { + if (!PreserveStandAloneSigRids || !IsValidStandAloneSigToken(origToken)) + return base.AddStandAloneSig(methodSig, origToken); + + uint rid = AddStandAloneSig(methodSig, origToken); + if (rid == 0) + return base.AddStandAloneSig(methodSig, origToken); + return rid; + } + + uint AddStandAloneSig(CallingConventionSig callConvSig, uint origToken) { + uint sig = GetSignature(callConvSig); + uint otherSig; + if (callConvTokenToSignature.TryGetValue(origToken, out otherSig)) { + if (sig == otherSig) + return MDToken.ToRID(origToken); + Warning("Could not preserve StandAloneSig token {0:X8}", origToken); + return 0; + } + + uint rid = MDToken.ToRID(origToken); + var sas = mod.ResolveStandAloneSig(rid); + if (standAloneSigInfos.Exists(sas)) { + Warning("StandAloneSig {0:X8} already exists", origToken); + return 0; + } + + // Make sure it uses the updated sig + var oldSig = sas.Signature; + try { + sas.Signature = callConvSig; + AddStandAloneSig(sas, true); + } + finally { + sas.Signature = oldSig; + } + + callConvTokenToSignature.Add(origToken, sig); + return MDToken.ToRID(origToken); + } + + bool IsValidStandAloneSigToken(uint token) { + if (MDToken.ToTable(token) != Table.StandAloneSig) + return false; + uint rid = MDToken.ToRID(token); + return mod.TablesStream.StandAloneSigTable.IsValidRID(rid); + } + + /// + protected override uint AddMethodSpec(MethodSpec ms) { + return AddMethodSpec(ms, false); + } + + uint AddMethodSpec(MethodSpec ms, bool forceIsOld) { + if (ms == null) { + Error("MethodSpec is null"); + return 0; + } + uint rid; + if (methodSpecInfos.TryGetRid(ms, out rid)) + return rid; + + bool isOld = forceIsOld || (PreserveMethodSpecRids && mod.ResolveMethodSpec(ms.Rid) == ms); + var row = isOld ? tablesHeap.MethodSpecTable[ms.Rid] : new RawMethodSpecRow(); + row.Method = AddMethodDefOrRef(ms.Method); + row.Instantiation = GetSignature(ms.Instantiation); + + rid = isOld ? ms.Rid : tablesHeap.MethodSpecTable.Add(row); + methodSpecInfos.Add(ms, rid); + AddCustomAttributes(Table.MethodSpec, rid, ms); + return rid; + } + + /// + protected override void BeforeSortingCustomAttributes() { + InitializeUninitializedTableRows(); + } + } +} diff --git a/dnlib/DotNet/Writer/RelocDirectory.cs b/dnlib/DotNet/Writer/RelocDirectory.cs new file mode 100644 index 0000000..ae93a0a --- /dev/null +++ b/dnlib/DotNet/Writer/RelocDirectory.cs @@ -0,0 +1,55 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Relocations directory + /// + public sealed class RelocDirectory : IChunk { + FileOffset offset; + RVA rva; + + /// + /// Gets/sets the + /// + public StartupStub StartupStub { get; set; } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return 12; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + uint rva = (uint)StartupStub.RelocRVA; + writer.Write(rva & ~0xFFFU); + writer.Write(12); + writer.Write((ushort)(0x3000 | (rva & 0xFFF))); + writer.Write((ushort)0); + } + } +} diff --git a/dnlib/DotNet/Writer/SectionSizes.cs b/dnlib/DotNet/Writer/SectionSizes.cs new file mode 100644 index 0000000..ba994cf --- /dev/null +++ b/dnlib/DotNet/Writer/SectionSizes.cs @@ -0,0 +1,69 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; +using dnlib.Utils; + +namespace dnlib.DotNet.Writer { + struct SectionSizeInfo { + /// + /// Length of section + /// + public readonly uint length; + + /// + /// Section characteristics + /// + public readonly uint characteristics; + + /// + /// Constructor + /// + /// Length of section + /// Section characteristics + public SectionSizeInfo(uint length, uint characteristics) { + this.length = length; + this.characteristics = characteristics; + } + } + + /// + /// Calculates the optional header section sizes + /// + struct SectionSizes { + public readonly uint SizeOfHeaders; + public readonly uint SizeOfImage; + public readonly uint BaseOfData, BaseOfCode; + public readonly uint SizeOfCode, SizeOfInitdData, SizeOfUninitdData; + + public SectionSizes(uint fileAlignment, uint sectionAlignment, uint headerLen, MFunc> getSectionSizeInfos) { + SizeOfHeaders = Utils.AlignUp(headerLen, fileAlignment); + SizeOfImage = Utils.AlignUp(SizeOfHeaders, sectionAlignment); + BaseOfData = 0; + BaseOfCode = 0; + SizeOfCode = 0; + SizeOfInitdData = 0; + SizeOfUninitdData = 0; + foreach (var section in getSectionSizeInfos()) { + uint sectAlignedVs = Utils.AlignUp(section.length, sectionAlignment); + uint fileAlignedVs = Utils.AlignUp(section.length, fileAlignment); + + bool isCode = (section.characteristics & 0x20) != 0; + bool isInitdData = (section.characteristics & 0x40) != 0; + bool isUnInitdData = (section.characteristics & 0x80) != 0; + + if (BaseOfCode == 0 && isCode) + BaseOfCode = SizeOfImage; + if (BaseOfData == 0 && (isInitdData || isUnInitdData)) + BaseOfData = SizeOfImage; + if (isCode) + SizeOfCode += fileAlignedVs; + if (isInitdData) + SizeOfInitdData += fileAlignedVs; + if (isUnInitdData) + SizeOfUninitdData += fileAlignedVs; + + SizeOfImage += sectAlignedVs; + } + } + } +} diff --git a/dnlib/DotNet/Writer/SignatureWriter.cs b/dnlib/DotNet/Writer/SignatureWriter.cs new file mode 100644 index 0000000..c7dd161 --- /dev/null +++ b/dnlib/DotNet/Writer/SignatureWriter.cs @@ -0,0 +1,327 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; + +namespace dnlib.DotNet.Writer { + /// + /// Helps map s to tokens + /// + public interface ISignatureWriterHelper : IWriterError { + /// + /// Returns a TypeDefOrRef encoded token + /// + /// A TypeDefOrRef type + uint ToEncodedToken(ITypeDefOrRef typeDefOrRef); + } + + /// + /// Writes signatures + /// + public struct SignatureWriter : IDisposable { + readonly ISignatureWriterHelper helper; + RecursionCounter recursionCounter; + readonly MemoryStream outStream; + readonly BinaryWriter writer; + + /// + /// Write a signature + /// + /// Helper + /// The type + /// The signature as a byte array + public static byte[] Write(ISignatureWriterHelper helper, TypeSig typeSig) { + using (var writer = new SignatureWriter(helper)) { + writer.Write(typeSig); + return writer.GetResult(); + } + } + + /// + /// Write a signature + /// + /// Helper + /// The signature + /// The signature as a byte array + public static byte[] Write(ISignatureWriterHelper helper, CallingConventionSig sig) { + using (var writer = new SignatureWriter(helper)) { + writer.Write(sig); + return writer.GetResult(); + } + } + + SignatureWriter(ISignatureWriterHelper helper) { + this.helper = helper; + this.recursionCounter = new RecursionCounter(); + this.outStream = new MemoryStream(); + this.writer = new BinaryWriter(outStream); + } + + byte[] GetResult() { + return outStream.ToArray(); + } + + uint WriteCompressedUInt32(uint value) { + return writer.WriteCompressedUInt32(helper, value); + } + + int WriteCompressedInt32(int value) { + return writer.WriteCompressedInt32(helper, value); + } + + void Write(TypeSig typeSig) { + const ElementType DEFAULT_ELEMENT_TYPE = ElementType.Boolean; + if (typeSig == null) { + helper.Error("TypeSig is null"); + writer.Write((byte)DEFAULT_ELEMENT_TYPE); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + writer.Write((byte)DEFAULT_ELEMENT_TYPE); + return; + } + + uint count; + switch (typeSig.ElementType) { + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.Object: + case ElementType.Sentinel: + writer.Write((byte)typeSig.ElementType); + break; + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.SZArray: + case ElementType.Pinned: + writer.Write((byte)typeSig.ElementType); + Write(typeSig.Next); + break; + + case ElementType.ValueType: + case ElementType.Class: + writer.Write((byte)typeSig.ElementType); + Write(((TypeDefOrRefSig)typeSig).TypeDefOrRef); + break; + + case ElementType.Var: + case ElementType.MVar: + writer.Write((byte)typeSig.ElementType); + WriteCompressedUInt32(((GenericSig)typeSig).Number); + break; + + case ElementType.Array: + writer.Write((byte)typeSig.ElementType); + var ary = (ArraySig)typeSig; + Write(ary.Next); + WriteCompressedUInt32(ary.Rank); + if (ary.Rank == 0) + break; + count = WriteCompressedUInt32((uint)ary.Sizes.Count); + for (uint i = 0; i < count; i++) + WriteCompressedUInt32(ary.Sizes[(int)i]); + count = WriteCompressedUInt32((uint)ary.LowerBounds.Count); + for (uint i = 0; i < count; i++) + WriteCompressedInt32(ary.LowerBounds[(int)i]); + break; + + case ElementType.GenericInst: + writer.Write((byte)typeSig.ElementType); + var gis = (GenericInstSig)typeSig; + Write(gis.GenericType); + count = WriteCompressedUInt32((uint)gis.GenericArguments.Count); + for (uint i = 0; i < count; i++) + Write(gis.GenericArguments[(int)i]); + break; + + case ElementType.ValueArray: + writer.Write((byte)typeSig.ElementType); + Write(typeSig.Next); + WriteCompressedUInt32((typeSig as ValueArraySig).Size); + break; + + case ElementType.FnPtr: + writer.Write((byte)typeSig.ElementType); + Write((typeSig as FnPtrSig).Signature); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + writer.Write((byte)typeSig.ElementType); + Write((typeSig as ModifierSig).Modifier); + Write(typeSig.Next); + break; + + case ElementType.Module: + writer.Write((byte)typeSig.ElementType); + WriteCompressedUInt32((typeSig as ModuleSig).Index); + Write(typeSig.Next); + break; + + case ElementType.End: + case ElementType.R: + case ElementType.Internal: + default: + helper.Error("Unknown or unsupported element type"); + writer.Write((byte)DEFAULT_ELEMENT_TYPE); + break; + } + + recursionCounter.Decrement(); + } + + void Write(ITypeDefOrRef tdr) { + if (tdr == null) { + helper.Error("TypeDefOrRef is null"); + WriteCompressedUInt32(0); + return; + } + + uint encodedToken = helper.ToEncodedToken(tdr); + if (encodedToken > 0x1FFFFFFF) { + helper.Error("Encoded token doesn't fit in 29 bits"); + encodedToken = 0; + } + WriteCompressedUInt32(encodedToken); + } + + void Write(CallingConventionSig sig) { + if (sig == null) { + helper.Error("sig is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + MethodBaseSig mbs; + FieldSig fs; + LocalSig ls; + GenericInstMethodSig gim; + + if ((mbs = sig as MethodBaseSig) != null) + Write(mbs); + else if ((fs = sig as FieldSig) != null) + Write(fs); + else if ((ls = sig as LocalSig) != null) + Write(ls); + else if ((gim = sig as GenericInstMethodSig) != null) + Write(gim); + else { + helper.Error("Unknown calling convention sig"); + writer.Write((byte)sig.GetCallingConvention()); + } + + recursionCounter.Decrement(); + } + + void Write(MethodBaseSig sig) { + if (sig == null) { + helper.Error("sig is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + writer.Write((byte)sig.GetCallingConvention()); + if (sig.Generic) + WriteCompressedUInt32(sig.GenParamCount); + + uint numParams = (uint)sig.Params.Count; + if (sig.ParamsAfterSentinel != null) + numParams += (uint)sig.ParamsAfterSentinel.Count; + + uint count = WriteCompressedUInt32(numParams); + Write(sig.RetType); + for (uint i = 0; i < count && i < (uint)sig.Params.Count; i++) + Write(sig.Params[(int)i]); + + if (sig.ParamsAfterSentinel != null && sig.ParamsAfterSentinel.Count > 0) { + writer.Write((byte)ElementType.Sentinel); + for (uint i = 0, j = (uint)sig.Params.Count; i < (uint)sig.ParamsAfterSentinel.Count && j < count; i++, j++) + Write(sig.ParamsAfterSentinel[(int)i]); + } + + recursionCounter.Decrement(); + } + + void Write(FieldSig sig) { + if (sig == null) { + helper.Error("sig is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + writer.Write((byte)sig.GetCallingConvention()); + Write(sig.Type); + + recursionCounter.Decrement(); + } + + void Write(LocalSig sig) { + if (sig == null) { + helper.Error("sig is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + writer.Write((byte)sig.GetCallingConvention()); + uint count = WriteCompressedUInt32((uint)sig.Locals.Count); + for (uint i = 0; i < count; i++) + Write(sig.Locals[(int)i]); + + recursionCounter.Decrement(); + } + + void Write(GenericInstMethodSig sig) { + if (sig == null) { + helper.Error("sig is null"); + return; + } + if (!recursionCounter.Increment()) { + helper.Error("Infinite recursion"); + return; + } + + writer.Write((byte)sig.GetCallingConvention()); + uint count = WriteCompressedUInt32((uint)sig.GenericArguments.Count); + for (uint i = 0; i < count; i++) + Write(sig.GenericArguments[(int)i]); + + recursionCounter.Decrement(); + } + + /// + public void Dispose() { + if (outStream != null) + outStream.Dispose(); + if (writer != null) + ((IDisposable)writer).Dispose(); + } + } +} diff --git a/dnlib/DotNet/Writer/StartupStub.cs b/dnlib/DotNet/Writer/StartupStub.cs new file mode 100644 index 0000000..30db0d4 --- /dev/null +++ b/dnlib/DotNet/Writer/StartupStub.cs @@ -0,0 +1,78 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Stores the instruction that jumps to _CorExeMain/_CorDllMain + /// + public sealed class StartupStub : IChunk { + FileOffset offset; + RVA rva; + uint length; + uint padding; + + /// + /// Gets/sets the + /// + public ImportDirectory ImportDirectory { get; set; } + + /// + /// Gets/sets the + /// + public PEHeaders PEHeaders { get; set; } + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Gets the address of the JMP instruction + /// + public RVA EntryPointRVA { + get { return rva + padding; } + } + + /// + /// Gets the address of the operand of the JMP instruction + /// + public RVA RelocRVA { + get { return EntryPointRVA + 2; } + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + + padding = rva.AlignUp(4) - rva + 2; + length = padding + 6; + } + + /// + public uint GetFileLength() { + return length; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.WriteZeros((int)padding); + writer.Write((byte)0xFF); + writer.Write((byte)0x25); + writer.Write((uint)PEHeaders.ImageBase + (uint)ImportDirectory.IatCorXxxMainRVA); + } + } +} diff --git a/dnlib/DotNet/Writer/StringsHeap.cs b/dnlib/DotNet/Writer/StringsHeap.cs new file mode 100644 index 0000000..0637711 --- /dev/null +++ b/dnlib/DotNet/Writer/StringsHeap.cs @@ -0,0 +1,160 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// #Strings heap + /// + public sealed class StringsHeap : HeapBase, IOffsetHeap { + readonly Dictionary cachedDict = new Dictionary(UTF8StringEqualityComparer.Instance); + readonly List cached = new List(); + uint nextOffset = 1; + byte[] originalData; + Dictionary userRawData; + + /// + public override string Name { + get { return "#Strings"; } + } + + /// + /// Populates strings from an existing (eg. to preserve + /// string offsets) + /// + /// The #Strings stream with the original content + public void Populate(StringsStream stringsStream) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #Strings when it's read-only"); + if (originalData != null) + throw new InvalidOperationException("Can't call method twice"); + if (nextOffset != 1) + throw new InvalidOperationException("Add() has already been called"); + if (stringsStream == null || stringsStream.ImageStreamLength == 0) + return; + + using (var reader = stringsStream.GetClonedImageStream()) { + originalData = reader.ReadAllBytes(); + nextOffset = (uint)originalData.Length; + Populate(reader); + } + } + + void Populate(IImageStream reader) { + reader.Position = 1; + while (reader.Position < reader.Length) { + uint offset = (uint)reader.Position; + var bytes = reader.ReadBytesUntilByte(0); + if (bytes == null) + break; + + reader.ReadByte(); // terminating zero + if (bytes.Length == 0) + continue; + + var s = new UTF8String(bytes); + if (!cachedDict.ContainsKey(s)) + cachedDict[s] = offset; + } + } + + /// + /// Adds a string to the #Strings heap + /// + /// The string + /// The offset of the string in the #Strings heap + public uint Add(UTF8String s) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #Strings when it's read-only"); + if (UTF8String.IsNullOrEmpty(s)) + return 0; + + uint offset; + if (cachedDict.TryGetValue(s, out offset)) + return offset; + + return AddToCache(s); + } + + /// + /// Adds a string to the #Strings heap, but does not re-use an existing position + /// + /// The string + /// The offset of the string in the #Strings heap + public uint Create(UTF8String s) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #Strings when it's read-only"); + if (UTF8String.IsNullOrEmpty(s)) + s = UTF8String.Empty; + return AddToCache(s); + } + + uint AddToCache(UTF8String s) { + if (Array.IndexOf(s.Data, 0) >= 0) + throw new ArgumentException("Strings in the #Strings heap can't contain 00h bytes"); + + uint offset; + cached.Add(s); + cachedDict[s] = offset = nextOffset; + nextOffset += (uint)s.Data.Length + 1; + return offset; + } + + /// + public override uint GetRawLength() { + return nextOffset; + } + + /// + protected override void WriteToImpl(BinaryWriter writer) { + if (originalData != null) + writer.Write(originalData); + else + writer.Write((byte)0); + + uint offset = originalData != null ? (uint)originalData.Length : 1; + foreach (var s in cached) { + byte[] rawData; + if (userRawData != null && userRawData.TryGetValue(offset, out rawData)) { + if (rawData.Length != s.Data.Length + 1) + throw new InvalidOperationException("Invalid length of raw data"); + writer.Write(rawData); + } + else { + writer.Write(s.Data); + writer.Write((byte)0); + } + offset += (uint)s.Data.Length + 1; + } + } + + /// + public int GetRawDataSize(UTF8String data) { + return data.Data.Length + 1; + } + + /// + public void SetRawData(uint offset, byte[] rawData) { + if (rawData == null) + throw new ArgumentNullException("rawData"); + if (userRawData == null) + userRawData = new Dictionary(); + userRawData[offset] = rawData; + } + + /// + public IEnumerable> GetAllRawData() { + uint offset = originalData != null ? (uint)originalData.Length : 1; + foreach (var s in cached) { + var rawData = new byte[s.Data.Length + 1]; + Array.Copy(s.Data, rawData, s.Data.Length); + yield return new KeyValuePair(offset, rawData); + offset += (uint)rawData.Length; + } + } + } +} diff --git a/dnlib/DotNet/Writer/StrongNameSignature.cs b/dnlib/DotNet/Writer/StrongNameSignature.cs new file mode 100644 index 0000000..0489980 --- /dev/null +++ b/dnlib/DotNet/Writer/StrongNameSignature.cs @@ -0,0 +1,55 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Strong name signature chunk + /// + public sealed class StrongNameSignature : IChunk { + FileOffset offset; + RVA rva; + int size; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Constructor + /// + /// Size of strong name signature + public StrongNameSignature(int size) { + this.size = size; + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + return (uint)this.size; + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.WriteZeros(size); + } + } +} diff --git a/dnlib/DotNet/Writer/TablesHeap.cs b/dnlib/DotNet/Writer/TablesHeap.cs new file mode 100644 index 0000000..22334fa --- /dev/null +++ b/dnlib/DotNet/Writer/TablesHeap.cs @@ -0,0 +1,435 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; +using dnlib.IO; +using dnlib.PE; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// options + /// + public sealed class TablesHeapOptions { + /// + /// Should be 0 + /// + public uint? Reserved1; + + /// + /// Major version number. Default is 2. Valid versions are v1.0 (no generics), + /// v1.1 (generics are supported), or v2.0 (recommended). + /// + public byte? MajorVersion; + + /// + /// Minor version number. Default is 0. + /// + public byte? MinorVersion; + + /// + /// Force #- or #~ stream. Default value is null and recommended because the correct + /// tables stream will be used. true will force #- (Edit N' Continue) + /// stream, and false will force #~ (normal compressed) stream. + /// + public bool? UseENC; + + /// + /// Extra data to write + /// + public uint? ExtraData; + + /// + /// true if there are deleted s, s, + /// s, s, s and/or + /// s. + /// + public bool? HasDeletedRows; + } + + /// + /// Contains all .NET tables + /// + public sealed class TablesHeap : IHeap { + uint length; + byte majorVersion; + byte minorVersion; + bool bigStrings; + bool bigGuid; + bool bigBlob; + bool hasDeletedRows; + readonly TablesHeapOptions options; + FileOffset offset; + RVA rva; + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + +#pragma warning disable 1591 // XML doc comment + public readonly MDTable ModuleTable = new MDTable(Table.Module, RawRowEqualityComparer.Instance); + public readonly MDTable TypeRefTable = new MDTable(Table.TypeRef, RawRowEqualityComparer.Instance); + public readonly MDTable TypeDefTable = new MDTable(Table.TypeDef, RawRowEqualityComparer.Instance); + public readonly MDTable FieldPtrTable = new MDTable(Table.FieldPtr, RawRowEqualityComparer.Instance); + public readonly MDTable FieldTable = new MDTable(Table.Field, RawRowEqualityComparer.Instance); + public readonly MDTable MethodPtrTable = new MDTable(Table.MethodPtr, RawRowEqualityComparer.Instance); + public readonly MDTable MethodTable = new MDTable(Table.Method, RawRowEqualityComparer.Instance); + public readonly MDTable ParamPtrTable = new MDTable(Table.ParamPtr, RawRowEqualityComparer.Instance); + public readonly MDTable ParamTable = new MDTable(Table.Param, RawRowEqualityComparer.Instance); + public readonly MDTable InterfaceImplTable = new MDTable(Table.InterfaceImpl, RawRowEqualityComparer.Instance); + public readonly MDTable MemberRefTable = new MDTable(Table.MemberRef, RawRowEqualityComparer.Instance); + public readonly MDTable ConstantTable = new MDTable(Table.Constant, RawRowEqualityComparer.Instance); + public readonly MDTable CustomAttributeTable = new MDTable(Table.CustomAttribute, RawRowEqualityComparer.Instance); + public readonly MDTable FieldMarshalTable = new MDTable(Table.FieldMarshal, RawRowEqualityComparer.Instance); + public readonly MDTable DeclSecurityTable = new MDTable(Table.DeclSecurity, RawRowEqualityComparer.Instance); + public readonly MDTable ClassLayoutTable = new MDTable(Table.ClassLayout, RawRowEqualityComparer.Instance); + public readonly MDTable FieldLayoutTable = new MDTable(Table.FieldLayout, RawRowEqualityComparer.Instance); + public readonly MDTable StandAloneSigTable = new MDTable(Table.StandAloneSig, RawRowEqualityComparer.Instance); + public readonly MDTable EventMapTable = new MDTable(Table.EventMap, RawRowEqualityComparer.Instance); + public readonly MDTable EventPtrTable = new MDTable(Table.EventPtr, RawRowEqualityComparer.Instance); + public readonly MDTable EventTable = new MDTable(Table.Event, RawRowEqualityComparer.Instance); + public readonly MDTable PropertyMapTable = new MDTable(Table.PropertyMap, RawRowEqualityComparer.Instance); + public readonly MDTable PropertyPtrTable = new MDTable(Table.PropertyPtr, RawRowEqualityComparer.Instance); + public readonly MDTable PropertyTable = new MDTable(Table.Property, RawRowEqualityComparer.Instance); + public readonly MDTable MethodSemanticsTable = new MDTable(Table.MethodSemantics, RawRowEqualityComparer.Instance); + public readonly MDTable MethodImplTable = new MDTable(Table.MethodImpl, RawRowEqualityComparer.Instance); + public readonly MDTable ModuleRefTable = new MDTable(Table.ModuleRef, RawRowEqualityComparer.Instance); + public readonly MDTable TypeSpecTable = new MDTable(Table.TypeSpec, RawRowEqualityComparer.Instance); + public readonly MDTable ImplMapTable = new MDTable(Table.ImplMap, RawRowEqualityComparer.Instance); + public readonly MDTable FieldRVATable = new MDTable(Table.FieldRVA, RawRowEqualityComparer.Instance); + public readonly MDTable ENCLogTable = new MDTable(Table.ENCLog, RawRowEqualityComparer.Instance); + public readonly MDTable ENCMapTable = new MDTable(Table.ENCMap, RawRowEqualityComparer.Instance); + public readonly MDTable AssemblyTable = new MDTable(Table.Assembly, RawRowEqualityComparer.Instance); + public readonly MDTable AssemblyProcessorTable = new MDTable(Table.AssemblyProcessor, RawRowEqualityComparer.Instance); + public readonly MDTable AssemblyOSTable = new MDTable(Table.AssemblyOS, RawRowEqualityComparer.Instance); + public readonly MDTable AssemblyRefTable = new MDTable(Table.AssemblyRef, RawRowEqualityComparer.Instance); + public readonly MDTable AssemblyRefProcessorTable = new MDTable(Table.AssemblyRefProcessor, RawRowEqualityComparer.Instance); + public readonly MDTable AssemblyRefOSTable = new MDTable(Table.AssemblyRefOS, RawRowEqualityComparer.Instance); + public readonly MDTable FileTable = new MDTable(Table.File, RawRowEqualityComparer.Instance); + public readonly MDTable ExportedTypeTable = new MDTable(Table.ExportedType, RawRowEqualityComparer.Instance); + public readonly MDTable ManifestResourceTable = new MDTable(Table.ManifestResource, RawRowEqualityComparer.Instance); + public readonly MDTable NestedClassTable = new MDTable(Table.NestedClass, RawRowEqualityComparer.Instance); + public readonly MDTable GenericParamTable = new MDTable(Table.GenericParam, RawRowEqualityComparer.Instance); + public readonly MDTable MethodSpecTable = new MDTable(Table.MethodSpec, RawRowEqualityComparer.Instance); + public readonly MDTable GenericParamConstraintTable = new MDTable(Table.GenericParamConstraint, RawRowEqualityComparer.Instance); +#pragma warning restore + + /// + /// All tables + /// + public readonly IMDTable[] Tables; + + /// + public string Name { + get { return IsENC ? "#-" : "#~"; } + } + + /// + public bool IsEmpty { + get { return false; } + } + + /// + /// true if the Edit 'N Continue name will be used (#-) + /// + public bool IsENC { + get { + if (options.UseENC.HasValue) + return options.UseENC.Value; + return hasDeletedRows || + !FieldPtrTable.IsEmpty || + !MethodPtrTable.IsEmpty || + !ParamPtrTable.IsEmpty || + !EventPtrTable.IsEmpty || + !PropertyPtrTable.IsEmpty || + !(InterfaceImplTable.IsEmpty || InterfaceImplTable.IsSorted) || + !(ConstantTable.IsEmpty || ConstantTable.IsSorted) || + !(CustomAttributeTable.IsEmpty || CustomAttributeTable.IsSorted) || + !(FieldMarshalTable.IsEmpty || FieldMarshalTable.IsSorted) || + !(DeclSecurityTable.IsEmpty || DeclSecurityTable.IsSorted) || + !(ClassLayoutTable.IsEmpty || ClassLayoutTable.IsSorted) || + !(FieldLayoutTable.IsEmpty || FieldLayoutTable.IsSorted) || + !(EventMapTable.IsEmpty || EventMapTable.IsSorted) || + !(PropertyMapTable.IsEmpty || PropertyMapTable.IsSorted) || + !(MethodSemanticsTable.IsEmpty || MethodSemanticsTable.IsSorted) || + !(MethodImplTable.IsEmpty || MethodImplTable.IsSorted) || + !(ImplMapTable.IsEmpty || ImplMapTable.IsSorted) || + !(FieldRVATable.IsEmpty || FieldRVATable.IsSorted) || + !(NestedClassTable.IsEmpty || NestedClassTable.IsSorted) || + !(GenericParamTable.IsEmpty || GenericParamTable.IsSorted) || + !(GenericParamConstraintTable.IsEmpty || GenericParamConstraintTable.IsSorted); + } + } + + /// + /// true if any rows have been deleted (eg. a deleted TypeDef, Method, Field, etc. + /// Its name has been renamed to _Deleted). + /// + public bool HasDeletedRows { + get { return hasDeletedRows; } + set { hasDeletedRows = value; } + } + + /// + /// true if #Strings heap size > 0xFFFF + /// + public bool BigStrings { + get { return bigStrings; } + set { bigStrings = value; } + } + + /// + /// true if #GUID heap size > 0xFFFF + /// + public bool BigGuid { + get { return bigGuid; } + set { bigGuid = value; } + } + + /// + /// true if #Blob heap size > 0xFFFF + /// + public bool BigBlob { + get { return bigBlob; } + set { bigBlob = value; } + } + + /// + /// Default constructor + /// + public TablesHeap() + : this(null) { + } + + /// + /// Constructor + /// + /// Options + public TablesHeap(TablesHeapOptions options) { + this.options = options ?? new TablesHeapOptions(); + this.hasDeletedRows = this.options.HasDeletedRows ?? false; + this.Tables = new IMDTable[] { + ModuleTable, + TypeRefTable, + TypeDefTable, + FieldPtrTable, + FieldTable, + MethodPtrTable, + MethodTable, + ParamPtrTable, + ParamTable, + InterfaceImplTable, + MemberRefTable, + ConstantTable, + CustomAttributeTable, + FieldMarshalTable, + DeclSecurityTable, + ClassLayoutTable, + FieldLayoutTable, + StandAloneSigTable, + EventMapTable, + EventPtrTable, + EventTable, + PropertyMapTable, + PropertyPtrTable, + PropertyTable, + MethodSemanticsTable, + MethodImplTable, + ModuleRefTable, + TypeSpecTable, + ImplMapTable, + FieldRVATable, + ENCLogTable, + ENCMapTable, + AssemblyTable, + AssemblyProcessorTable, + AssemblyOSTable, + AssemblyRefTable, + AssemblyRefProcessorTable, + AssemblyRefOSTable, + FileTable, + ExportedTypeTable, + ManifestResourceTable, + NestedClassTable, + GenericParamTable, + MethodSpecTable, + GenericParamConstraintTable, + }; + } + + /// + public void SetReadOnly() { + foreach (var mdt in Tables) + mdt.SetReadOnly(); + } + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + } + + /// + public uint GetFileLength() { + if (length == 0) + CalculateLength(); + return Utils.AlignUp(length, HeapBase.ALIGNMENT); + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + /// Calculates the length. This will set all MD tables to read-only. + /// + public void CalculateLength() { + if (length != 0) + return; + SetReadOnly(); + + majorVersion = options.MajorVersion ?? 2; + minorVersion = options.MinorVersion ?? 0; + + if (((majorVersion << 8) | minorVersion) <= 0x100) { + if (!GenericParamTable.IsEmpty || !MethodSpecTable.IsEmpty || !GenericParamConstraintTable.IsEmpty) + throw new ModuleWriterException("Tables heap version <= v1.0 but generic tables are not empty"); + } + + var dnTableSizes = new DotNetTableSizes(); + var tableInfos = dnTableSizes.CreateTables(majorVersion, minorVersion); + dnTableSizes.InitializeSizes(bigStrings, bigGuid, bigBlob, GetRowCounts()); + for (int i = 0; i < Tables.Length; i++) + Tables[i].TableInfo = tableInfos[i]; + + length = 24; + foreach (var mdt in Tables) { + if (mdt.IsEmpty) + continue; + length += (uint)(4 + mdt.TableInfo.RowSize * mdt.Rows); + } + if (options.ExtraData.HasValue) + length += 4; + } + + uint[] GetRowCounts() { + var sizes = new uint[Tables.Length]; + for (int i = 0; i < sizes.Length; i++) + sizes[i] = (uint)Tables[i].Rows; + return sizes; + } + + /// + public void WriteTo(BinaryWriter writer) { + writer.Write(options.Reserved1 ?? 0); + writer.Write(majorVersion); + writer.Write(minorVersion); + writer.Write((byte)GetMDStreamFlags()); + writer.Write(GetLog2Rid()); + writer.Write(GetValidMask()); + writer.Write(GetSortedMask()); + foreach (var mdt in Tables) { + if (!mdt.IsEmpty) + writer.Write(mdt.Rows); + } + if (options.ExtraData.HasValue) + writer.Write(options.ExtraData.Value); + + writer.Write(ModuleTable); + writer.Write(TypeRefTable); + writer.Write(TypeDefTable); + writer.Write(FieldPtrTable); + writer.Write(FieldTable); + writer.Write(MethodPtrTable); + writer.Write(MethodTable); + writer.Write(ParamPtrTable); + writer.Write(ParamTable); + writer.Write(InterfaceImplTable); + writer.Write(MemberRefTable); + writer.Write(ConstantTable); + writer.Write(CustomAttributeTable); + writer.Write(FieldMarshalTable); + writer.Write(DeclSecurityTable); + writer.Write(ClassLayoutTable); + writer.Write(FieldLayoutTable); + writer.Write(StandAloneSigTable); + writer.Write(EventMapTable); + writer.Write(EventPtrTable); + writer.Write(EventTable); + writer.Write(PropertyMapTable); + writer.Write(PropertyPtrTable); + writer.Write(PropertyTable); + writer.Write(MethodSemanticsTable); + writer.Write(MethodImplTable); + writer.Write(ModuleRefTable); + writer.Write(TypeSpecTable); + writer.Write(ImplMapTable); + writer.Write(FieldRVATable); + writer.Write(ENCLogTable); + writer.Write(ENCMapTable); + writer.Write(AssemblyTable); + writer.Write(AssemblyProcessorTable); + writer.Write(AssemblyOSTable); + writer.Write(AssemblyRefTable); + writer.Write(AssemblyRefProcessorTable); + writer.Write(AssemblyRefOSTable); + writer.Write(FileTable); + writer.Write(ExportedTypeTable); + writer.Write(ManifestResourceTable); + writer.Write(NestedClassTable); + writer.Write(GenericParamTable); + writer.Write(MethodSpecTable); + writer.Write(GenericParamConstraintTable); + writer.WriteZeros((int)(Utils.AlignUp(length, HeapBase.ALIGNMENT) - length)); + } + + MDStreamFlags GetMDStreamFlags() { + MDStreamFlags flags = 0; + if (bigStrings) + flags |= MDStreamFlags.BigStrings; + if (bigGuid) + flags |= MDStreamFlags.BigGUID; + if (bigBlob) + flags |= MDStreamFlags.BigBlob; + if (options.ExtraData.HasValue) + flags |= MDStreamFlags.ExtraData; + if (hasDeletedRows) + flags |= MDStreamFlags.HasDelete; + return flags; + } + + byte GetLog2Rid() { + //TODO: Sometimes this is 16. Probably when at least one of the table indexes requires 4 bytes. + return 1; + } + + ulong GetValidMask() { + ulong mask = 0; + foreach (var mdt in Tables) { + if (!mdt.IsEmpty) + mask |= 1UL << (int)mdt.Table; + } + return mask; + } + + ulong GetSortedMask() { + ulong mask = 0; + foreach (var mdt in Tables) { + if (mdt.IsSorted) + mask |= 1UL << (int)mdt.Table; + } + return mask; + } + + /// + public override string ToString() { + return Name; + } + } +} diff --git a/dnlib/DotNet/Writer/USHeap.cs b/dnlib/DotNet/Writer/USHeap.cs new file mode 100644 index 0000000..b4fe333 --- /dev/null +++ b/dnlib/DotNet/Writer/USHeap.cs @@ -0,0 +1,176 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using dnlib.IO; +using dnlib.DotNet.MD; + +namespace dnlib.DotNet.Writer { + /// + /// #US heap + /// + public sealed class USHeap : HeapBase, IOffsetHeap { + readonly Dictionary cachedDict = new Dictionary(StringComparer.Ordinal); + readonly List cached = new List(); + uint nextOffset = 1; + byte[] originalData; + Dictionary userRawData; + + /// + public override string Name { + get { return "#US"; } + } + + /// + /// Populates strings from an existing (eg. to preserve + /// string tokens) + /// + /// The #US stream with the original content + public void Populate(USStream usStream) { + if (originalData != null) + throw new InvalidOperationException("Can't call method twice"); + if (nextOffset != 1) + throw new InvalidOperationException("Add() has already been called"); + if (usStream == null || usStream.ImageStreamLength == 0) + return; + + using (var reader = usStream.GetClonedImageStream()) { + originalData = reader.ReadAllBytes(); + nextOffset = (uint)originalData.Length; + Populate(reader); + } + } + + void Populate(IImageStream reader) { + var chars = new char[0x200]; + reader.Position = 1; + while (reader.Position < reader.Length) { + uint offset = (uint)reader.Position; + uint len; + if (!reader.ReadCompressedUInt32(out len)) { + if (offset == reader.Position) + reader.Position++; + continue; + } + if (len == 0 || reader.Position + len > reader.Length) + continue; + + int stringLen = (int)len / 2; + if (stringLen > chars.Length) + Array.Resize(ref chars, stringLen); + for (int i = 0; i < stringLen; i++) + chars[i] = (char)reader.ReadUInt16(); + if ((len & 1) != 0) + reader.ReadByte(); + var s = new string(chars, 0, stringLen); + + if (!cachedDict.ContainsKey(s)) + cachedDict[s] = offset; + } + } + + /// + /// Adds a string to the #US heap + /// + /// The string + /// The offset of the string in the #US heap + public uint Add(string s) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #US when it's read-only"); + if (s == null) + s = string.Empty; + + uint offset; + if (cachedDict.TryGetValue(s, out offset)) + return offset; + return AddToCache(s); + } + + /// + /// Adds a string to the #US heap + /// + /// The string + /// The offset of the string in the #US heap + public uint Create(string s) { + if (isReadOnly) + throw new ModuleWriterException("Trying to modify #US when it's read-only"); + return AddToCache(s ?? string.Empty); + } + + uint AddToCache(string s) { + uint offset; + cached.Add(s); + cachedDict[s] = offset = nextOffset; + nextOffset += (uint)GetRawDataSize(s); + return offset; + } + + /// + public override uint GetRawLength() { + return nextOffset; + } + + /// + protected override void WriteToImpl(BinaryWriter writer) { + if (originalData != null) + writer.Write(originalData); + else + writer.Write((byte)0); + + uint offset = originalData != null ? (uint)originalData.Length : 1; + foreach (var s in cached) { + int rawLen = GetRawDataSize(s); + byte[] rawData; + if (userRawData != null && userRawData.TryGetValue(offset, out rawData)) { + if (rawData.Length != rawLen) + throw new InvalidOperationException("Invalid length of raw data"); + writer.Write(rawData); + } + else + WriteString(writer, s); + offset += (uint)rawLen; + } + } + + void WriteString(BinaryWriter writer, string s) { + writer.WriteCompressedUInt32((uint)s.Length * 2 + 1); + byte last = 0; + for (int i = 0; i < s.Length; i++) { + ushort c = (ushort)s[i]; + writer.Write(c); + if (c > 0xFF || (1 <= c && c <= 8) || (0x0E <= c && c <= 0x1F) || c == 0x27 || c == 0x2D || c == 0x7F) + last = 1; + } + writer.Write(last); + } + + /// + public int GetRawDataSize(string data) { + return Utils.GetCompressedUInt32Length((uint)data.Length * 2 + 1) + data.Length * 2 + 1; + } + + /// + public void SetRawData(uint offset, byte[] rawData) { + if (rawData == null) + throw new ArgumentNullException("rawData"); + if (userRawData == null) + userRawData = new Dictionary(); + userRawData[offset] = rawData; + } + + /// + public IEnumerable> GetAllRawData() { + var memStream = new MemoryStream(); + var writer = new BinaryWriter(memStream); + uint offset = originalData != null ? (uint)originalData.Length : 1; + foreach (var s in cached) { + memStream.Position = 0; + memStream.SetLength(0); + WriteString(writer, s); + yield return new KeyValuePair(offset, memStream.ToArray()); + offset += (uint)memStream.Length; + } + } + } +} diff --git a/dnlib/DotNet/Writer/UniqueChunkList.cs b/dnlib/DotNet/Writer/UniqueChunkList.cs new file mode 100644 index 0000000..cb6f32c --- /dev/null +++ b/dnlib/DotNet/Writer/UniqueChunkList.cs @@ -0,0 +1,58 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.IO; +using dnlib.PE; + +namespace dnlib.DotNet.Writer { + /// + /// Re-uses existing chunks to save space + /// + /// Chunk type + public sealed class UniqueChunkList : ChunkListBase where T : class, IChunk { + Dictionary dict; + + /// + /// Default constructor + /// + public UniqueChunkList() + : this(EqualityComparer.Default) { + } + + /// + /// Constructor + /// + /// Compares the chunk type + public UniqueChunkList(IEqualityComparer chunkComparer) { + this.chunks = new List(); + this.dict = new Dictionary(new ElemEqualityComparer(chunkComparer)); + } + + /// + public override void SetOffset(FileOffset offset, RVA rva) { + dict = null; + base.SetOffset(offset, rva); + } + + /// + /// Adds a if not already present + /// + /// The chunk to add or null if none + /// Chunk alignment + /// The original input if it wasn't present, or the cached one + public T Add(T chunk, uint alignment) { + if (setOffsetCalled) + throw new InvalidOperationException("SetOffset() has already been called"); + if (chunk == null) + return null; + var elem = new Elem(chunk, alignment); + Elem other; + if (dict.TryGetValue(elem, out other)) + return other.chunk; + dict[elem] = elem; + chunks.Add(elem); + return elem.chunk; + } + } +} diff --git a/dnlib/DotNet/Writer/Win32ResourcesChunk.cs b/dnlib/DotNet/Writer/Win32ResourcesChunk.cs new file mode 100644 index 0000000..514c92e --- /dev/null +++ b/dnlib/DotNet/Writer/Win32ResourcesChunk.cs @@ -0,0 +1,516 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using dnlib.IO; +using dnlib.PE; +using dnlib.W32Resources; + +namespace dnlib.DotNet.Writer { + /// + /// Writes Win32 resources + /// + public sealed class Win32ResourcesChunk : IChunk { + readonly Win32Resources win32Resources; + FileOffset offset; + RVA rva; + uint length; + readonly Dictionary dirDict = new Dictionary(); + readonly List dirList = new List(); + readonly Dictionary dataHeaderDict = new Dictionary(); + readonly List dataHeaderList = new List(); + readonly Dictionary stringsDict = new Dictionary(StringComparer.Ordinal); + readonly List stringsList = new List(); + readonly Dictionary dataDict = new Dictionary(); + readonly List dataList = new List(); + + /// + public FileOffset FileOffset { + get { return offset; } + } + + /// + public RVA RVA { + get { return rva; } + } + + /// + /// Constructor + /// + /// Win32 resources + public Win32ResourcesChunk(Win32Resources win32Resources) { + this.win32Resources = win32Resources; + } + + /// + /// Returns the and of a + /// . must have been called. + /// + /// A + /// Updated with the file offset + /// Updated with the RVA + /// true if is valid and + /// and have been updated. false + /// if is not part of the Win32 resources. + public bool GetFileOffsetAndRvaOf(ResourceDirectoryEntry dirEntry, out FileOffset fileOffset, out RVA rva) { + var dir = dirEntry as ResourceDirectory; + if (dir != null) + return GetFileOffsetAndRvaOf(dir, out fileOffset, out rva); + + var dataHeader = dirEntry as ResourceData; + if (dataHeader != null) + return GetFileOffsetAndRvaOf(dataHeader, out fileOffset, out rva); + + fileOffset = 0; + rva = 0; + return false; + } + + /// + /// Returns the of a . + /// must have been called. + /// + /// A + /// The file offset or 0 if is invalid + public FileOffset GetFileOffset(ResourceDirectoryEntry dirEntry) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(dirEntry, out fileOffset, out rva); + return fileOffset; + } + + /// + /// Returns the of a . + /// must have been called. + /// + /// A + /// The RVA or 0 if is invalid + public RVA GetRVA(ResourceDirectoryEntry dirEntry) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(dirEntry, out fileOffset, out rva); + return rva; + } + + /// + /// Returns the and of a + /// . must have been called. + /// + /// A + /// Updated with the file offset + /// Updated with the RVA + /// true if is valid and + /// and have been updated. false + /// if is not part of the Win32 resources. + public bool GetFileOffsetAndRvaOf(ResourceDirectory dir, out FileOffset fileOffset, out RVA rva) { + uint offs; + if (dir == null || !dirDict.TryGetValue(dir, out offs)) { + fileOffset = 0; + rva = 0; + return false; + } + + fileOffset = offset + offs; + rva = this.rva + offs; + return true; + } + + /// + /// Returns the of a . + /// must have been called. + /// + /// A + /// The file offset or 0 if is invalid + public FileOffset GetFileOffset(ResourceDirectory dir) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(dir, out fileOffset, out rva); + return fileOffset; + } + + /// + /// Returns the of a . + /// must have been called. + /// + /// A + /// The RVA or 0 if is invalid + public RVA GetRVA(ResourceDirectory dir) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(dir, out fileOffset, out rva); + return rva; + } + + /// + /// Returns the and of a + /// . must have been called. + /// + /// A + /// Updated with the file offset + /// Updated with the RVA + /// true if is valid and + /// and have been updated. false + /// if is not part of the Win32 resources. + public bool GetFileOffsetAndRvaOf(ResourceData dataHeader, out FileOffset fileOffset, out RVA rva) { + uint offs; + if (dataHeader == null || !dataHeaderDict.TryGetValue(dataHeader, out offs)) { + fileOffset = 0; + rva = 0; + return false; + } + + fileOffset = offset + offs; + rva = this.rva + offs; + return true; + } + + /// + /// Returns the of a . + /// must have been called. + /// + /// A + /// The file offset or 0 if is invalid + public FileOffset GetFileOffset(ResourceData dataHeader) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(dataHeader, out fileOffset, out rva); + return fileOffset; + } + + /// + /// Returns the of a . + /// must have been called. + /// + /// A + /// The RVA or 0 if is invalid + public RVA GetRVA(ResourceData dataHeader) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(dataHeader, out fileOffset, out rva); + return rva; + } + + /// + /// Returns the and of the raw data + /// owned by a . must have been called. + /// + /// A 's + /// Updated with the file offset + /// Updated with the RVA + /// true if is valid and + /// and have been updated. false + /// if is not part of the Win32 resources. + public bool GetFileOffsetAndRvaOf(IBinaryReader data, out FileOffset fileOffset, out RVA rva) { + uint offs; + if (data == null || !dataDict.TryGetValue(data, out offs)) { + fileOffset = 0; + rva = 0; + return false; + } + + fileOffset = offset + offs; + rva = this.rva + offs; + return true; + } + + /// + /// Returns the of the raw data owned by a + /// . must have been called. + /// + /// A 's + /// The file offset or 0 if is invalid + public FileOffset GetFileOffset(IBinaryReader data) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(data, out fileOffset, out rva); + return fileOffset; + } + + /// + /// Returns the of the raw data owned by a . + /// must have been called. + /// + /// A 's + /// The RVA or 0 if is invalid + public RVA GetRVA(IBinaryReader data) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(data, out fileOffset, out rva); + return rva; + } + + /// + /// Returns the and of a + /// 's name. must have been + /// called. + /// + /// The name of a + /// Updated with the file offset + /// Updated with the RVA + /// true if is valid and + /// and have been updated. false + /// if is not part of the Win32 resources. + public bool GetFileOffsetAndRvaOf(string name, out FileOffset fileOffset, out RVA rva) { + uint offs; + if (name == null || !stringsDict.TryGetValue(name, out offs)) { + fileOffset = 0; + rva = 0; + return false; + } + + fileOffset = offset + offs; + rva = this.rva + offs; + return true; + } + + /// + /// Returns the of a 's name. + /// must have been called. + /// + /// The name of a + /// The file offset or 0 if is invalid + public FileOffset GetFileOffset(string name) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(name, out fileOffset, out rva); + return fileOffset; + } + + /// + /// Returns the of a 's name. + /// must have been called. + /// + /// The name of a + /// The RVA or 0 if is invalid + public RVA GetRVA(string name) { + FileOffset fileOffset; + RVA rva; + GetFileOffsetAndRvaOf(name, out fileOffset, out rva); + return rva; + } + + const uint RESOURCE_DIR_ALIGNMENT = 4; + const uint RESOURCE_DATA_HEADER_ALIGNMENT = 4; + const uint RESOURCE_STRING_ALIGNMENT = 2; + const uint RESOURCE_DATA_ALIGNMENT = 4; + + /// + public void SetOffset(FileOffset offset, RVA rva) { + this.offset = offset; + this.rva = rva; + if (win32Resources == null) + return; + + FindDirectoryEntries(); + + // Place everything in the following order: + // 1. All resource directories. The root is always first. + // 2. All resource data headers. + // 3. All the strings. + // 4. All resource data. + + uint rsrcOffset = 0; + + uint maxAlignment = 1; + maxAlignment = Math.Max(maxAlignment, RESOURCE_DIR_ALIGNMENT); + maxAlignment = Math.Max(maxAlignment, RESOURCE_DATA_HEADER_ALIGNMENT); + maxAlignment = Math.Max(maxAlignment, RESOURCE_STRING_ALIGNMENT); + maxAlignment = Math.Max(maxAlignment, RESOURCE_DATA_ALIGNMENT); + if (((uint)offset & (maxAlignment - 1)) != 0) + throw new ModuleWriterException(string.Format("Win32 resources section isn't {0}-byte aligned", maxAlignment)); + if (maxAlignment > ModuleWriterBase.DEFAULT_WIN32_RESOURCES_ALIGNMENT) + throw new ModuleWriterException("maxAlignment > DEFAULT_WIN32_RESOURCES_ALIGNMENT"); + + foreach (var dir in dirList) { + rsrcOffset = Utils.AlignUp(rsrcOffset, RESOURCE_DIR_ALIGNMENT); + dirDict[dir] = rsrcOffset; + if (dir != dirList[0]) + AddString(dir.Name); + rsrcOffset += 16 + (uint)(dir.Directories.Count + dir.Data.Count) * 8; + } + + foreach (var data in dataHeaderList) { + rsrcOffset = Utils.AlignUp(rsrcOffset, RESOURCE_DATA_HEADER_ALIGNMENT); + dataHeaderDict[data] = rsrcOffset; + AddString(data.Name); + AddData(data.Data); + rsrcOffset += 16; + } + + foreach (var s in stringsList) { + rsrcOffset = Utils.AlignUp(rsrcOffset, RESOURCE_STRING_ALIGNMENT); + stringsDict[s] = rsrcOffset; + rsrcOffset += 2 + (uint)(s.Length * 2); + } + + foreach (var data in dataList) { + rsrcOffset = Utils.AlignUp(rsrcOffset, RESOURCE_DATA_ALIGNMENT); + dataDict[data] = rsrcOffset; + rsrcOffset += (uint)data.Length; + } + + length = rsrcOffset; + } + + void AddData(IBinaryReader data) { + if (dataDict.ContainsKey(data)) + return; + dataList.Add(data); + dataDict.Add(data, 0); + } + + void AddString(ResourceName name) { + if (!name.HasName || stringsDict.ContainsKey(name.Name)) + return; + stringsList.Add(name.Name); + stringsDict.Add(name.Name, 0); + } + + void FindDirectoryEntries() { + FindDirectoryEntries(win32Resources.Root); + } + + void FindDirectoryEntries(ResourceDirectory dir) { + if (dirDict.ContainsKey(dir)) + return; + dirList.Add(dir); + dirDict[dir] = 0; + foreach (var dir2 in dir.Directories) + FindDirectoryEntries(dir2); + foreach (var data in dir.Data) { + if (dataHeaderDict.ContainsKey(data)) + continue; + dataHeaderList.Add(data); + dataHeaderDict[data] = 0; + } + } + + /// + public uint GetFileLength() { + return Utils.AlignUp(length, ModuleWriterBase.DEFAULT_WIN32_RESOURCES_ALIGNMENT); + } + + /// + public uint GetVirtualSize() { + return GetFileLength(); + } + + /// + public void WriteTo(BinaryWriter writer) { + uint offset = 0; + + // The order here must be the same as in SetOffset() + + foreach (var dir in dirList) { + uint padding = Utils.AlignUp(offset, RESOURCE_DIR_ALIGNMENT) - offset; + writer.WriteZeros((int)padding); + offset += padding; + if (dirDict[dir] != offset) + throw new ModuleWriterException("Invalid Win32 resource directory offset"); + offset += WriteTo(writer, dir); + } + + foreach (var dataHeader in dataHeaderList) { + uint padding = Utils.AlignUp(offset, RESOURCE_DATA_HEADER_ALIGNMENT) - offset; + writer.WriteZeros((int)padding); + offset += padding; + if (dataHeaderDict[dataHeader] != offset) + throw new ModuleWriterException("Invalid Win32 resource data header offset"); + offset += WriteTo(writer, dataHeader); + } + + foreach (var s in stringsList) { + uint padding = Utils.AlignUp(offset, RESOURCE_STRING_ALIGNMENT) - offset; + writer.WriteZeros((int)padding); + offset += padding; + if (stringsDict[s] != offset) + throw new ModuleWriterException("Invalid Win32 resource string offset"); + + var bytes = Encoding.Unicode.GetBytes(s); + if (bytes.Length / 2 > ushort.MaxValue) + throw new ModuleWriterException("Win32 resource entry name is too long"); + writer.Write((ushort)(bytes.Length / 2)); + writer.Write(bytes); + offset += 2 + (uint)bytes.Length; + } + + byte[] dataBuffer = new byte[0x2000]; + foreach (var data in dataList) { + uint padding = Utils.AlignUp(offset, RESOURCE_DATA_ALIGNMENT) - offset; + writer.WriteZeros((int)padding); + offset += padding; + if (dataDict[data] != offset) + throw new ModuleWriterException("Invalid Win32 resource data offset"); + + data.Position = 0; + offset += data.WriteTo(writer, dataBuffer); + } + + writer.WriteZeros((int)(Utils.AlignUp(length, ModuleWriterBase.DEFAULT_WIN32_RESOURCES_ALIGNMENT) - length)); + } + + uint WriteTo(BinaryWriter writer, ResourceDirectory dir) { + writer.Write(dir.Characteristics); + writer.Write(dir.TimeDateStamp); + writer.Write(dir.MajorVersion); + writer.Write(dir.MinorVersion); + + List named; + List ids; + GetNamedAndIds(dir, out named, out ids); + if (named.Count > ushort.MaxValue || ids.Count > ushort.MaxValue) + throw new ModuleWriterException("Too many named/id Win32 resource entries"); + writer.Write((ushort)named.Count); + writer.Write((ushort)ids.Count); + + // These must be sorted in ascending order. Names are case insensitive. + named.Sort((a, b) => a.Name.Name.ToUpperInvariant().CompareTo(b.Name.Name.ToUpperInvariant())); + ids.Sort((a, b) => a.Name.Id.CompareTo(b.Name.Id)); + + foreach (var d in named) { + writer.Write(0x80000000 | stringsDict[d.Name.Name]); + writer.Write(GetDirectoryEntryOffset(d)); + } + + foreach (var d in ids) { + writer.Write(d.Name.Id); + writer.Write(GetDirectoryEntryOffset(d)); + } + + return 16 + (uint)(named.Count + ids.Count) * 8; + } + + uint GetDirectoryEntryOffset(ResourceDirectoryEntry e) { + if (e is ResourceData) + return dataHeaderDict[(ResourceData)e]; + return 0x80000000 | dirDict[(ResourceDirectory)e]; + } + + static void GetNamedAndIds(ResourceDirectory dir, out List named, out List ids) { + named = new List(); + ids = new List(); + foreach (var d in dir.Directories) { + if (d.Name.HasId) + ids.Add(d); + else + named.Add(d); + } + foreach (var d in dir.Data) { + if (d.Name.HasId) + ids.Add(d); + else + named.Add(d); + } + } + + uint WriteTo(BinaryWriter writer, ResourceData dataHeader) { + writer.Write((uint)rva + dataDict[dataHeader.Data]); + writer.Write((uint)dataHeader.Data.Length); + writer.Write(dataHeader.CodePage); + writer.Write(dataHeader.Reserved); + return 16; + } + } +} diff --git a/dnlib/DotNet/Writer/WriterUtils.cs b/dnlib/DotNet/Writer/WriterUtils.cs new file mode 100644 index 0000000..eebdf73 --- /dev/null +++ b/dnlib/DotNet/Writer/WriterUtils.cs @@ -0,0 +1,39 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; + +namespace dnlib.DotNet.Writer { + static class WriterUtils { + public static uint WriteCompressedUInt32(this BinaryWriter writer, IWriterError helper, uint value) { + if (value > 0x1FFFFFFF) { + helper.Error("UInt32 value is too big and can't be compressed"); + value = 0x1FFFFFFF; + } + writer.WriteCompressedUInt32(value); + return value; + } + + public static int WriteCompressedInt32(this BinaryWriter writer, IWriterError helper, int value) { + if (value < -0x10000000) { + helper.Error("Int32 value is too small and can't be compressed."); + value = -0x10000000; + } + else if (value > 0x0FFFFFFF) { + helper.Error("Int32 value is too big and can't be compressed."); + value = 0x0FFFFFFF; + } + writer.WriteCompressedInt32(value); + return value; + } + + public static void Write(this BinaryWriter writer, IWriterError helper, UTF8String s) { + if (UTF8String.IsNull(s)) { + helper.Error("UTF8String is null"); + s = UTF8String.Empty; + } + + writer.WriteCompressedUInt32(helper, (uint)s.DataLength); + writer.Write(s.Data); + } + } +} diff --git a/dnlib/ExtensionAttribute.cs b/dnlib/ExtensionAttribute.cs new file mode 100644 index 0000000..4f87073 --- /dev/null +++ b/dnlib/ExtensionAttribute.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +#pragma warning disable 1591 // XML doc warning + +namespace System.Runtime.CompilerServices { + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public sealed class ExtensionAttribute : Attribute { + } +} diff --git a/dnlib/HandleProcessCorruptedStateExceptionsAttribute.cs b/dnlib/HandleProcessCorruptedStateExceptionsAttribute.cs new file mode 100644 index 0000000..e110998 --- /dev/null +++ b/dnlib/HandleProcessCorruptedStateExceptionsAttribute.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +#pragma warning disable 1591 // XML doc warning + +namespace System.Runtime.ExceptionServices { + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] + sealed class HandleProcessCorruptedStateExceptionsAttribute : Attribute { + } +} diff --git a/dnlib/IO/BinaryReaderStream.cs b/dnlib/IO/BinaryReaderStream.cs new file mode 100644 index 0000000..0f6c55c --- /dev/null +++ b/dnlib/IO/BinaryReaderStream.cs @@ -0,0 +1,109 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; + +namespace dnlib.IO { + /// + /// A class that can be used when you have a + /// but must use a + /// + sealed class BinaryReaderStream : Stream { + IBinaryReader reader; + readonly bool ownsReader; + + /// + /// Constructor + /// + /// Reader. This instance does NOT own this reader. + public BinaryReaderStream(IBinaryReader reader) + : this(reader, false) { + } + + /// + /// Constructor + /// + /// Reader + /// true if this instance owns + public BinaryReaderStream(IBinaryReader reader, bool ownsReader) { + this.reader = reader; + this.ownsReader = ownsReader; + } + + /// + public override bool CanRead { + get { return true; } + } + + /// + public override bool CanSeek { + get { return true; } + } + + /// + public override bool CanWrite { + get { return false; } + } + + /// + public override void Flush() { + } + + /// + public override long Length { + get { return reader.Length; } + } + + /// + public override long Position { + get { return reader.Position; } + set { reader.Position = value; } + } + + /// + public override int Read(byte[] buffer, int offset, int count) { + return reader.Read(buffer, offset, count); + } + + /// + public override int ReadByte() { + try { + return reader.ReadByte(); + } + catch (IOException) { + return -1; + } + } + + /// + public override long Seek(long offset, SeekOrigin origin) { + switch (origin) { + case SeekOrigin.Begin: Position = offset; break; + case SeekOrigin.Current:Position += offset; break; + case SeekOrigin.End: Position = Length + offset; break; + } + return Position; + } + + /// + public override void SetLength(long value) { + throw new NotImplementedException(); + } + + /// + public override void Write(byte[] buffer, int offset, int count) { + throw new NotImplementedException(); + } + + /// + protected override void Dispose(bool disposing) { + if (disposing) { + var r = reader; + if (ownsReader && r != null) + r.Dispose(); + reader = null; + } + base.Dispose(disposing); + } + } +} diff --git a/dnlib/IO/FileOffset.cs b/dnlib/IO/FileOffset.cs new file mode 100644 index 0000000..25931cc --- /dev/null +++ b/dnlib/IO/FileOffset.cs @@ -0,0 +1,29 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.IO { + /// + /// Represents a file offset + /// + public enum FileOffset : long { + } + + partial class IOExtensions { + /// + /// Align up + /// + /// this + /// Alignment + public static FileOffset AlignUp(this FileOffset offset, uint alignment) { + return (FileOffset)(((uint)offset + alignment - 1) & ~(alignment - 1)); + } + + /// + /// Align up + /// + /// this + /// Alignment + public static FileOffset AlignUp(this FileOffset offset, int alignment) { + return (FileOffset)(((uint)offset + alignment - 1) & ~(alignment - 1)); + } + } +} diff --git a/dnlib/IO/FileSection.cs b/dnlib/IO/FileSection.cs new file mode 100644 index 0000000..1237f05 --- /dev/null +++ b/dnlib/IO/FileSection.cs @@ -0,0 +1,48 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics; + +namespace dnlib.IO { + /// + /// Base class for classes needing to implement IFileSection + /// + [DebuggerDisplay("O:{startOffset} L:{size} {GetType().Name}")] + public class FileSection : IFileSection { + /// + /// The start file offset of this section + /// + protected FileOffset startOffset; + + /// + /// Size of the section + /// + protected uint size; + + /// + public FileOffset StartOffset { + get { return startOffset; } + } + + /// + public FileOffset EndOffset { + get { return startOffset + size; } + } + + /// + /// Set to 's current position + /// + /// The reader + protected void SetStartOffset(IImageStream reader) { + startOffset = (FileOffset)reader.Position; + } + + /// + /// Set according to 's current position + /// + /// The reader + protected void SetEndoffset(IImageStream reader) { + size = (uint)(reader.Position - startOffset); + startOffset = reader.FileOffset + (long)startOffset; + } + } +} diff --git a/dnlib/IO/IBinaryReader.cs b/dnlib/IO/IBinaryReader.cs new file mode 100644 index 0000000..14b2b21 --- /dev/null +++ b/dnlib/IO/IBinaryReader.cs @@ -0,0 +1,658 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Text; + +namespace dnlib.IO { + /// + /// Reads binary data + /// + public interface IBinaryReader : IDisposable { + /// + /// Returns the length of the stream + /// + long Length { get; } + + /// + /// Gets/sets the position + /// + long Position { get; set; } + + /// + /// Reads bytes from the current + /// and increments by bytes + /// + /// Number of bytes to read + /// All available bytes. This can be less than bytes + /// if there's not enough bytes left. + /// An I/O error occurs + byte[] ReadBytes(int size); + + /// + /// Reads bytes to and increments + /// by the number of bytes read. + /// + /// Buffer + /// Offset in buffer where to place all read bytes + /// Number of bytes to read + /// Number of bytes read, and can be less than if + /// there's no more bytes to read. + int Read(byte[] buffer, int offset, int length); + + /// + /// Reads bytes until byte is found. is + /// incremented by the number of bytes read (size of return value). + /// + /// The terminating byte + /// All the bytes (not including ) or null if + /// wasn't found. + byte[] ReadBytesUntilByte(byte b); + + /// + /// Reads a from the current position and increments by 1 + /// + /// The 8-bit signed byte + /// An I/O error occurs + sbyte ReadSByte(); + + /// + /// Reads a from the current position and increments by 1 + /// + /// The 8-bit unsigned byte + /// An I/O error occurs + byte ReadByte(); + + /// + /// Reads a from the current position and increments by 2 + /// + /// The 16-bit signed integer + /// An I/O error occurs + short ReadInt16(); + + /// + /// Reads a from the current position and increments by 2 + /// + /// The 16-bit unsigned integer + /// An I/O error occurs + ushort ReadUInt16(); + + /// + /// Reads a from the current position and increments by 4 + /// + /// The 32-bit signed integer + /// An I/O error occurs + int ReadInt32(); + + /// + /// Reads a from the current position and increments by 4 + /// + /// The 32-bit unsigned integer + /// An I/O error occurs + uint ReadUInt32(); + + /// + /// Reads a from the current position and increments by 8 + /// + /// The 64-bit signed integer + /// An I/O error occurs + long ReadInt64(); + + /// + /// Reads a from the current position and increments by 8 + /// + /// The 64-bit unsigned integer + /// An I/O error occurs + ulong ReadUInt64(); + + /// + /// Reads a from the current position and increments by 4 + /// + /// The 32-bit single + /// An I/O error occurs + float ReadSingle(); + + /// + /// Reads a from the current position and increments by 8 + /// + /// The 64-bit double + /// An I/O error occurs + double ReadDouble(); + + /// + /// Reads a from the current position and increments + /// by the number of bytes read. + /// + /// Number of characters to read + /// The string + /// An I/O error occurs + string ReadString(int chars); + } + + public static partial class IOExtensions { + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static bool ReadBooleanAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadBoolean(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static byte ReadByteAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadByte(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static sbyte ReadSByteAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadSByte(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static short ReadInt16At(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadInt16(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static ushort ReadUInt16At(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadUInt16(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static int ReadInt32At(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadInt32(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static uint ReadUInt32At(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadUInt32(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static long ReadInt64At(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadInt64(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static ulong ReadUInt64At(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadUInt64(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static float ReadSingleAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadSingle(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static double ReadDoubleAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadDouble(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static string ReadStringAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadString(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// Encoding + /// The + public static string ReadStringAt(this IBinaryReader reader, long offset, Encoding encoding) { + reader.Position = offset; + return reader.ReadString(encoding); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static char ReadCharAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadChar(); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// Encoding + /// The + public static char ReadCharAt(this IBinaryReader reader, long offset, Encoding encoding) { + reader.Position = offset; + return reader.ReadChar(encoding); + } + + /// + /// Reads a at offset + /// + /// this + /// Offset + /// The + public static decimal ReadDecimalAt(this IBinaryReader reader, long offset) { + reader.Position = offset; + return reader.ReadDecimal(); + } + + /// + /// Reads all remaining bytes + /// + /// this + /// All remaining bytes + public static byte[] ReadRemainingBytes(this IBinaryReader reader) { + if (reader.Position >= reader.Length) + return new byte[0]; + return reader.ReadBytes((int)(reader.Length - reader.Position)); + } + + /// + /// Reads all bytes + /// + /// this + /// All bytes + public static byte[] ReadAllBytes(this IBinaryReader reader) { + reader.Position = 0; + return reader.ReadBytes((int)reader.Length); + } + + /// + /// Reads a from the current position and increments by 1 + /// + /// this + /// The boolean + /// An I/O error occurs + public static bool ReadBoolean(this IBinaryReader self) { + return self.ReadByte() != 0; + } + + /// + /// Reads a from the current position and increments by 2 + /// + /// this + /// The char + /// An I/O error occurs + public static char ReadChar(this IBinaryReader self) { + return self.ReadChar(Encoding.UTF8); + } + + /// + /// Reads a from the current position and increments by 2 + /// + /// this + /// Encoding + /// The char + /// An I/O error occurs + public static char ReadChar(this IBinaryReader self, Encoding encoding) { + // This is slow but this method should rarely be called... + var decoder = encoding.GetDecoder(); + bool twoBytes = encoding is UnicodeEncoding; + byte[] bytes = new byte[2]; + char[] chars = new char[1]; + while (true) { + bytes[0] = self.ReadByte(); + if (twoBytes) + bytes[1] = self.ReadByte(); + int x = decoder.GetChars(bytes, 0, twoBytes ? 2 : 1, chars, 0); + if (x != 0) + break; + } + return chars[0]; + } + + /// + /// Reads a UTF-8 from the current position and increments + /// by the length of the string. + /// + /// this + /// The string + public static string ReadString(this IBinaryReader reader) { + return reader.ReadString(Encoding.UTF8); + } + + /// + /// Reads a from the current position and increments + /// by the length of the string. + /// + /// this + /// Encoding + /// The string + public static string ReadString(this IBinaryReader reader, Encoding encoding) { + int len = reader.Read7BitEncodedInt32(); + return encoding.GetString(reader.ReadBytes(len)); + } + + /// + /// Reads a from the current position and increments + /// by 16 + /// + /// this + /// The decmial + /// An I/O error occurs + public static decimal ReadDecimal(this IBinaryReader reader) { + var bits = new int[4] { + reader.ReadInt32(), // lo + reader.ReadInt32(), // mid + reader.ReadInt32(), // hi + reader.ReadInt32(), // flags + }; + return new decimal(bits); + } + + /// + /// Reads chars + /// + /// this + /// Number of s to read + /// All the chars + public static char[] ReadChars(this IBinaryReader reader, int length) { + var chars = new char[length]; + for (int i = 0; i < length; i++) + chars[i] = reader.ReadChar(); + return chars; + } + + /// + /// Reads a compressed from the current position in + /// + /// Max value it can return is 0x1FFFFFFF + /// The reader + /// Decompressed value + /// true if successful, false on failure + public static bool ReadCompressedUInt32(this IBinaryReader reader, out uint val) { + var pos = reader.Position; + var len = reader.Length; + if (pos >= len) { + val = 0; + return false; + } + + byte b = reader.ReadByte(); + if ((b & 0x80) == 0) { + val = b; + return true; + } + + if ((b & 0xC0) == 0x80) { + if (pos + 1 < pos || pos + 1 >= len) { + val = 0; + return false; + } + val = (uint)(((b & 0x3F) << 8) | reader.ReadByte()); + return true; + } + + // The encoding 111x isn't allowed but the CLR sometimes doesn't verify this + // and just assumes it's 110x. Don't fail if it's 111x, just assume it's 110x. + + if (pos + 3 < pos || pos + 3 >= len) { + val = 0; + return false; + } + val = (uint)(((b & 0x1F) << 24) | (reader.ReadByte() << 16) | + (reader.ReadByte() << 8) | reader.ReadByte()); + return true; + } + + /// + /// Reads a compressed from the current position in + /// + /// The reader + /// Decompressed value + /// true if successful, false on failure + public static bool ReadCompressedInt32(this IBinaryReader reader, out int val) { + var pos = reader.Position; + var len = reader.Length; + if (pos >= len) { + val = 0; + return false; + } + + byte b = reader.ReadByte(); + if ((b & 0x80) == 0) { + if ((b & 1) != 0) + val = -0x40 | (b >> 1); + else + val = (b >> 1); + return true; + } + + if ((b & 0xC0) == 0x80) { + if (pos + 1 < pos || pos + 1 >= len) { + val = 0; + return false; + } + uint tmp = (uint)(((b & 0x3F) << 8) | reader.ReadByte()); + if ((tmp & 1) != 0) + val = -0x2000 | (int)(tmp >> 1); + else + val = (int)(tmp >> 1); + return true; + } + + if ((b & 0xE0) == 0xC0) { + if (pos + 3 < pos || pos + 3 >= len) { + val = 0; + return false; + } + uint tmp = (uint)(((b & 0x1F) << 24) | (reader.ReadByte() << 16) | + (reader.ReadByte() << 8) | reader.ReadByte()); + if ((tmp & 1) != 0) + val = -0x10000000 | (int)(tmp >> 1); + else + val = (int)(tmp >> 1); + return true; + } + + val = 0; + return false; + } + + /// + /// Reads a compressed from the current position in + /// + /// The reader + /// The value + public static uint ReadCompressedUInt32(this IBinaryReader reader) { + uint val; + if (!reader.ReadCompressedUInt32(out val)) + throw new IOException("Could not read a compressed UInt32"); + return val; + } + + /// + /// Reads a compressed from the current position in + /// + /// The reader + /// The value + public static int ReadCompressedInt32(this IBinaryReader reader) { + int val; + if (!reader.ReadCompressedInt32(out val)) + throw new IOException("Could not read a compressed Int32"); + return val; + } + + /// + /// Reads a 7-bit encoded integer + /// + /// this + /// The decoded integer + public static uint Read7BitEncodedUInt32(this IBinaryReader reader) { + uint val = 0; + int bits = 0; + for (int i = 0; i < 5; i++) { + byte b = reader.ReadByte(); + val |= (uint)(b & 0x7F) << bits; + if ((b & 0x80) == 0) + return val; + bits += 7; + } + throw new IOException("Invalid encoded UInt32"); + } + + /// + /// Reads a 7-bit encoded integer + /// + /// this + /// The decoded integer + public static int Read7BitEncodedInt32(this IBinaryReader reader) { + return (int)reader.Read7BitEncodedUInt32(); + } + + /// + /// Creates a using . The created + /// doesn't own , so it's not + /// 'd. + /// + /// this + /// A new instance + public static Stream CreateStream(this IBinaryReader reader) { + return new BinaryReaderStream(reader); + } + + /// + /// Creates a using + /// + /// this + /// true if the created owns + /// + /// A new instance + public static Stream CreateStream(this IBinaryReader reader, bool ownsReader) { + return new BinaryReaderStream(reader, ownsReader); + } + + /// + /// Checks whether we can read bytes + /// + /// Reader + /// Size in bytes + public static bool CanRead(this IBinaryReader reader, int size) { + return (reader.Position + size <= reader.Length && reader.Position + size >= reader.Position) || size == 0; + } + + /// + /// Checks whether we can read bytes + /// + /// Reader + /// Size in bytes + public static bool CanRead(this IBinaryReader reader, uint size) { + return (reader.Position + size <= reader.Length && reader.Position + size >= reader.Position) || size == 0; + } + + /// + /// Writes , starting at 's current + /// position, to starting at 's + /// current position. Returns the number of bytes written. + /// + /// Reader + /// Writer + /// Number of bytes written + /// Could not write all bytes or data is too big + public static uint WriteTo(this IBinaryReader reader, BinaryWriter writer) { + if (reader.Position >= reader.Length) + return 0; + return reader.WriteTo(writer, new byte[0x2000]); + } + + /// + /// Writes , starting at 's current + /// position, to starting at 's + /// current position. Returns the number of bytes written. + /// + /// Reader + /// Writer + /// Temp buffer during writing + /// Number of bytes written + /// Could not write all bytes or data is too big + public static uint WriteTo(this IBinaryReader reader, BinaryWriter writer, byte[] dataBuffer) { + if (reader.Position >= reader.Length) + return 0; + long longLenLeft = reader.Length - reader.Position; + if (longLenLeft > uint.MaxValue) + throw new IOException("Data is too big"); + uint lenLeft = (uint)longLenLeft; + uint writtenBytes = lenLeft; + while (lenLeft > 0) { + int num = (int)Math.Min((uint)dataBuffer.Length, lenLeft); + lenLeft -= (uint)num; + if (num != reader.Read(dataBuffer, 0, num)) + throw new IOException("Could not read all reader bytes"); + writer.Write(dataBuffer, 0, num); + } + return writtenBytes; + } + } +} diff --git a/dnlib/IO/IFileSection.cs b/dnlib/IO/IFileSection.cs new file mode 100644 index 0000000..7be48cd --- /dev/null +++ b/dnlib/IO/IFileSection.cs @@ -0,0 +1,19 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.IO { + /// + /// Represents a section in a file + /// + public interface IFileSection { + /// + /// Start offset of the section in the file + /// + FileOffset StartOffset { get; } + + /// + /// End offset of the section in the file. This is one byte after the last + /// valid offset in the section. + /// + FileOffset EndOffset { get; } + } +} diff --git a/dnlib/IO/IImageStream.cs b/dnlib/IO/IImageStream.cs new file mode 100644 index 0000000..8cd43d7 --- /dev/null +++ b/dnlib/IO/IImageStream.cs @@ -0,0 +1,42 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.IO { + /// + /// Interface to access part of some data + /// + public interface IImageStream : IBinaryReader { + /// + /// Returns the file offset of the stream + /// + FileOffset FileOffset { get; } + + /// + /// Creates a sub stream that can access parts of this stream + /// + /// File offset relative to the start of this stream + /// Length + /// A new stream + IImageStream Create(FileOffset offset, long length); + } + + static partial class IOExtensions { + /// + /// Creates a stream that can access all data starting from + /// + /// this + /// Offset relative to the beginning of the stream + /// A new stream + public static IImageStream Create(this IImageStream self, FileOffset offset) { + return self.Create(offset, long.MaxValue); + } + + /// + /// Clones this + /// + /// this + /// A new instance + public static IImageStream Clone(this IImageStream self) { + return self.Create(0, long.MaxValue); + } + } +} diff --git a/dnlib/IO/IImageStreamCreator.cs b/dnlib/IO/IImageStreamCreator.cs new file mode 100644 index 0000000..6e344ac --- /dev/null +++ b/dnlib/IO/IImageStreamCreator.cs @@ -0,0 +1,46 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.IO { + /// + /// Creates a new stream that accesses part of some data + /// + public interface IImageStreamCreator : IDisposable { + /// + /// The file name or null if data is not from a file + /// + string FileName { get; } + + /// + /// Returns the total length of the original data + /// + long Length { get; } + + /// + /// Creates a stream that can access only part of the data + /// + /// Offset within the original data + /// Length of section within the original data + /// A new stream + IImageStream Create(FileOffset offset, long length); + + /// + /// Creates a stream that can access all data + /// + /// A new stream + IImageStream CreateFull(); + } + + static partial class IOExtensions { + /// + /// Creates a stream that can access all data starting from + /// + /// this + /// Offset within the original data + /// A new stream + public static IImageStream Create(this IImageStreamCreator self, FileOffset offset) { + return self.Create(offset, long.MaxValue); + } + } +} diff --git a/dnlib/IO/IOExtensions.cs b/dnlib/IO/IOExtensions.cs new file mode 100644 index 0000000..f4d9bbd --- /dev/null +++ b/dnlib/IO/IOExtensions.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.IO { + /// + /// Extension methods + /// + public static partial class IOExtensions { + } +} diff --git a/dnlib/IO/ImageStreamCreator.cs b/dnlib/IO/ImageStreamCreator.cs new file mode 100644 index 0000000..8824255 --- /dev/null +++ b/dnlib/IO/ImageStreamCreator.cs @@ -0,0 +1,85 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; + +namespace dnlib.IO { + /// + /// Creates a instance + /// + public static class ImageStreamCreator { + static readonly bool isUnix; + + static ImageStreamCreator() { + // See http://mono-project.com/FAQ:_Technical#Mono_Platforms for platform detection. + int p = (int)Environment.OSVersion.Platform; + if (p == 4 || p == 6 || p == 128) + isUnix = true; + } + + /// + /// Creates a . It will be a + /// if the operating system supports the memory + /// mapped file methods we use, else . + /// + /// Filename + /// A new instance + public static IImageStreamCreator Create(string fileName) { + return Create(fileName, false); + } + + /// + /// Creates a . It will be a + /// if the operating system supports the memory + /// mapped file methods we use, else . + /// + /// Filename + /// true if we should map it as an executable. Not supported + /// on Linux/Mac + /// A new instance + public static IImageStreamCreator Create(string fileName, bool mapAsImage) { + var creator = CreateMemoryMappedFileStreamCreator(fileName, mapAsImage); + if (creator != null) + return creator; + + return new MemoryStreamCreator(File.ReadAllBytes(fileName)) { FileName = fileName }; + } + + static MemoryMappedFileStreamCreator CreateMemoryMappedFileStreamCreator(string fileName, bool mapAsImage) { + if (!isUnix) + return MemoryMappedFileStreamCreator.CreateWindows(fileName, mapAsImage); + else + return MemoryMappedFileStreamCreator.CreateUnix(fileName, mapAsImage); + } + + /// + /// Creates a + /// + /// Filename + /// A new instance + public static IImageStream CreateImageStream(string fileName) { + return CreateImageStream(fileName, false); + } + + /// + /// Creates a + /// + /// Filename + /// true if we should map it as an executable. Not supported + /// on Linux/Mac + /// A new instance + public static IImageStream CreateImageStream(string fileName, bool mapAsImage) { + var creator = CreateMemoryMappedFileStreamCreator(fileName, mapAsImage); + try { + if (creator != null) + return new UnmanagedMemoryImageStream(creator); + return MemoryImageStream.Create(File.ReadAllBytes(fileName)); + } + catch { + if (creator != null) + creator.Dispose(); + throw; + } + } + } +} diff --git a/dnlib/IO/MemoryImageStream.cs b/dnlib/IO/MemoryImageStream.cs new file mode 100644 index 0000000..b32a9cf --- /dev/null +++ b/dnlib/IO/MemoryImageStream.cs @@ -0,0 +1,260 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.IO; + +namespace dnlib.IO { + /// + /// IImageStream for byte[] + /// + [DebuggerDisplay("FO:{fileOffset} S:{Length}")] + public sealed class MemoryImageStream : IImageStream { + FileOffset fileOffset; + byte[] data; + int dataOffset; + int dataEnd; + int position; + + /// + /// Creates a new instance + /// + /// Data + /// A new instance + public static MemoryImageStream Create(byte[] data) { + return new MemoryImageStream(0, data, 0, data.Length); + } + + /// + /// Creates a new instance + /// + /// Data + /// Start offset in + /// Length of data + /// A new instance + public static MemoryImageStream Create(byte[] data, int offset, int len) { + return new MemoryImageStream(0, data, offset, len); + } + + /// + /// Constructor + /// + /// File offset of data + /// The data + /// Start offset in + /// Length of data + public MemoryImageStream(FileOffset fileOffset, byte[] data, int dataOffset, int dataLength) { + this.fileOffset = fileOffset; + this.data = data; + this.dataOffset = dataOffset; + this.dataEnd = dataOffset + dataLength; + this.position = dataOffset; + } + + /// + /// Gets the data + /// + internal byte[] DataArray { + get { return data; } + } + + /// + /// Gets the start of the data in used by this stream + /// + internal int DataOffset { + get { return dataOffset; } + } + + /// + public FileOffset FileOffset { + get { return fileOffset; } + } + + /// + public long Length { + get { return dataEnd - dataOffset; } + } + + /// + public long Position { + get { return position - dataOffset; } + set { + long newPos = dataOffset + value; + if (newPos < dataOffset || newPos > int.MaxValue) + newPos = int.MaxValue; + position = (int)newPos; + } + } + + /// + /// Creates an empty instance + /// + public static MemoryImageStream CreateEmpty() { + return new MemoryImageStream(0, new byte[0], 0, 0); + } + + /// + public IImageStream Create(FileOffset offset, long length) { + if ((long)offset < 0 || length < 0) + return MemoryImageStream.CreateEmpty(); + + int offs = (int)Math.Min((long)Length, (long)offset); + int len = (int)Math.Min((long)Length - offs, length); + return new MemoryImageStream((FileOffset)((long)fileOffset + (long)offset), data, dataOffset + offs, len); + } + + /// + public byte[] ReadBytes(int size) { + if (size < 0) + throw new IOException("Invalid size"); + size = Math.Min(size, (int)Length - Math.Min((int)Length, (int)Position)); + var newData = new byte[size]; + Array.Copy(data, position, newData, 0, size); + position += size; + return newData; + } + + /// + public int Read(byte[] buffer, int offset, int length) { + if (length < 0) + throw new IOException("Invalid size"); + length = Math.Min(length, (int)Length - Math.Min((int)Length, (int)Position)); + Array.Copy(data, position, buffer, offset, length); + position += length; + return length; + } + + /// + public byte[] ReadBytesUntilByte(byte b) { + int pos = GetPositionOf(b); + if (pos < 0) + return null; + return ReadBytes(pos - position); + } + + int GetPositionOf(byte b) { + int pos = position; + while (pos < dataEnd) { + if (data[pos] == b) + return pos; + pos++; + } + return -1; + } + + /// + public sbyte ReadSByte() { + if (position >= dataEnd) + throw new IOException("Can't read one SByte"); + return (sbyte)data[position++]; + } + + /// + public byte ReadByte() { + if (position >= dataEnd) + throw new IOException("Can't read one Byte"); + return data[position++]; + } + + /// + public short ReadInt16() { + if (position + 1 >= dataEnd) + throw new IOException("Can't read one Int16"); + return (short)(data[position++] | (data[position++] << 8)); + } + + /// + public ushort ReadUInt16() { + if (position + 1 >= dataEnd) + throw new IOException("Can't read one UInt16"); + return (ushort)(data[position++] | (data[position++] << 8)); + } + + /// + public int ReadInt32() { + if (position + 3 >= dataEnd) + throw new IOException("Can't read one Int32"); + return data[position++] | + (data[position++] << 8) | + (data[position++] << 16) | + (data[position++] << 24); + } + + /// + public uint ReadUInt32() { + if (position + 3 >= dataEnd) + throw new IOException("Can't read one UInt32"); + return (uint)(data[position++] | + (data[position++] << 8) | + (data[position++] << 16) | + (data[position++] << 24)); + } + + /// + public long ReadInt64() { + if (position + 7 >= dataEnd) + throw new IOException("Can't read one Int64"); + return (long)data[position++] | + ((long)data[position++] << 8) | + ((long)data[position++] << 16) | + ((long)data[position++] << 24) | + ((long)data[position++] << 32) | + ((long)data[position++] << 40) | + ((long)data[position++] << 48) | + ((long)data[position++] << 56); + } + + /// + public ulong ReadUInt64() { + if (position + 7 >= dataEnd) + throw new IOException("Can't read one UInt64"); + return (ulong)data[position++] | + ((ulong)data[position++] << 8) | + ((ulong)data[position++] << 16) | + ((ulong)data[position++] << 24) | + ((ulong)data[position++] << 32) | + ((ulong)data[position++] << 40) | + ((ulong)data[position++] << 48) | + ((ulong)data[position++] << 56); + } + + /// + public float ReadSingle() { + if (position + 3 >= dataEnd) + throw new IOException("Can't read one Single"); + var val = BitConverter.ToSingle(data, position); + position += 4; + return val; + } + + /// + public double ReadDouble() { + if (position + 7 >= dataEnd) + throw new IOException("Can't read one Double"); + var val = BitConverter.ToDouble(data, position); + position += 8; + return val; + } + + /// + public string ReadString(int chars) { + if ((uint)chars > (uint)int.MaxValue) + throw new IOException("Not enough space to read the string"); + if (position + chars * 2 < position || (chars != 0 && position + chars * 2 - 1 >= dataEnd)) + throw new IOException("Not enough space to read the string"); + var array = new char[chars]; + for (int i = 0; i < chars; i++) + array[i] = (char)(data[position++] | (data[position++] << 8)); + return new string(array); + } + + /// + public void Dispose() { + fileOffset = 0; + data = null; + dataOffset = 0; + dataEnd = 0; + position = 0; + } + } +} diff --git a/dnlib/IO/MemoryMappedFileStreamCreator.cs b/dnlib/IO/MemoryMappedFileStreamCreator.cs new file mode 100644 index 0000000..efb7d1e --- /dev/null +++ b/dnlib/IO/MemoryMappedFileStreamCreator.cs @@ -0,0 +1,311 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading; +using Microsoft.Win32.SafeHandles; + +namespace dnlib.IO { + /// + /// Maps a file into memory using MapViewOfFile() and creates streams + /// that can access part of it in memory. + /// + /// Since this class maps a file into memory, the user should call + /// to free any resources + /// used by the class when it's no longer needed. + [DebuggerDisplay("mmap: A:{data} L:{dataLength} {theFileName}")] + sealed class MemoryMappedFileStreamCreator : UnmanagedMemoryStreamCreator { + + OSType osType = OSType.Unknown; + long origDataLength; + + enum OSType : byte { + Unknown, + Windows, + Unix, + } + + [Serializable] + sealed class MemoryMappedIONotSupportedException : IOException { + public MemoryMappedIONotSupportedException(string s) + : base(s) { + } + } + + static class Windows { + const uint GENERIC_READ = 0x80000000; + const uint FILE_SHARE_READ = 0x00000001; + const uint OPEN_EXISTING = 3; + const uint FILE_ATTRIBUTE_NORMAL = 0x00000080; + const uint PAGE_READONLY = 0x02; + const uint SEC_IMAGE = 0x1000000; + const uint SECTION_MAP_READ = 0x0004; + const uint FILE_MAP_READ = SECTION_MAP_READ; + + [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Auto)] + static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); + + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + static extern SafeFileHandle CreateFileMapping(SafeFileHandle hFile, IntPtr lpAttributes, uint flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, string lpName); + + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + static extern IntPtr MapViewOfFile(SafeFileHandle hFileMappingObject, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, UIntPtr dwNumberOfBytesToMap); + + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool UnmapViewOfFile(IntPtr lpBaseAddress); + + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + static extern uint GetFileSize(SafeFileHandle hFile, out uint lpFileSizeHigh); + const uint INVALID_FILE_SIZE = 0xFFFFFFFF; + const int NO_ERROR = 0; + + public static void Mmap(MemoryMappedFileStreamCreator creator, bool mapAsImage) { + using (var fileHandle = CreateFile(creator.theFileName, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)) { + if (fileHandle.IsInvalid) + throw new IOException(string.Format("Could not open file {0} for reading. Error: {1:X8}", creator.theFileName, Marshal.GetLastWin32Error())); + + uint sizeHi; + uint sizeLo = GetFileSize(fileHandle, out sizeHi); + int hr; + if (sizeLo == INVALID_FILE_SIZE && (hr = Marshal.GetLastWin32Error()) != NO_ERROR) + throw new IOException(string.Format("Could not get file size. File: {0}, error: {1:X8}", creator.theFileName, hr)); + var fileSize = ((long)sizeHi << 32) | sizeLo; + + using (var fileMapping = CreateFileMapping(fileHandle, IntPtr.Zero, PAGE_READONLY | (mapAsImage ? SEC_IMAGE : 0), 0, 0, null)) { + if (fileMapping.IsInvalid) + throw new MemoryMappedIONotSupportedException(string.Format("Could not create a file mapping object. File: {0}, error: {1:X8}", creator.theFileName, Marshal.GetLastWin32Error())); + creator.data = MapViewOfFile(fileMapping, FILE_MAP_READ, 0, 0, UIntPtr.Zero); + if (creator.data == IntPtr.Zero) + throw new MemoryMappedIONotSupportedException(string.Format("Could not map file {0}. Error: {1:X8}", creator.theFileName, Marshal.GetLastWin32Error())); + creator.dataLength = fileSize; + creator.osType = OSType.Windows; + } + } + } + + public static void Dispose(IntPtr addr) { + if (addr != IntPtr.Zero) + UnmapViewOfFile(addr); + } + } + + static class Unix { + // Can't use SafeFileHandle. Seems like a bug in mono. You'll get + // "_wapi_handle_unref_full: Attempting to unref unused handle 0xYYY" when Dispose() is called. + [DllImport("libc")] + static extern int open(string pathname, int flags); + const int O_RDONLY = 0; + + [DllImport("libc")] + static extern int close(int fd); + + [DllImport("libc", EntryPoint = "lseek", SetLastError = true)] + static extern int lseek32(int fd, int offset, int whence); + [DllImport("libc", EntryPoint = "lseek", SetLastError = true)] + static extern long lseek64(int fd, long offset, int whence); + const int SEEK_END = 2; + + [DllImport("libc", EntryPoint = "mmap", SetLastError = true)] + static extern IntPtr mmap32(IntPtr addr, IntPtr length, int prot, int flags, int fd, int offset); + [DllImport("libc", EntryPoint = "mmap", SetLastError = true)] + static extern IntPtr mmap64(IntPtr addr, IntPtr length, int prot, int flags, int fd, long offset); + const int PROT_READ = 1; + const int MAP_PRIVATE = 0x02; + + [DllImport("libc")] + static extern int munmap(IntPtr addr, IntPtr length); + + public static void Mmap(MemoryMappedFileStreamCreator creator, bool mapAsImage) { + int fd = open(creator.theFileName, O_RDONLY); + try { + if (fd < 0) + throw new IOException(string.Format("Could not open file {0} for reading. Error: {1}", creator.theFileName, fd)); + + long size; + IntPtr data; + + if (IntPtr.Size == 4) { + size = lseek32(fd, 0, SEEK_END); + if (size == -1) + throw new MemoryMappedIONotSupportedException(string.Format("Could not get length of {0} (lseek failed): {1}", creator.theFileName, Marshal.GetLastWin32Error())); + + data = mmap32(IntPtr.Zero, (IntPtr)size, PROT_READ, MAP_PRIVATE, fd, 0); + if (data == new IntPtr(-1) || data == IntPtr.Zero) + throw new MemoryMappedIONotSupportedException(string.Format("Could not map file {0}. Error: {1}", creator.theFileName, Marshal.GetLastWin32Error())); + } + else { + size = lseek64(fd, 0, SEEK_END); + if (size == -1) + throw new MemoryMappedIONotSupportedException(string.Format("Could not get length of {0} (lseek failed): {1}", creator.theFileName, Marshal.GetLastWin32Error())); + + data = mmap64(IntPtr.Zero, (IntPtr)size, PROT_READ, MAP_PRIVATE, fd, 0); + if (data == new IntPtr(-1) || data == IntPtr.Zero) + throw new MemoryMappedIONotSupportedException(string.Format("Could not map file {0}. Error: {1}", creator.theFileName, Marshal.GetLastWin32Error())); + } + + creator.data = data; + creator.dataLength = size; + creator.origDataLength = creator.dataLength; + creator.osType = OSType.Unix; + } + finally { + if (fd >= 0) + close(fd); + } + } + + public static void Dispose(IntPtr addr, long size) { + if (addr != IntPtr.Zero) + munmap(addr, new IntPtr(size)); + } + } + + static bool canTryWindows = true; + static bool canTryUnix = true; + + /// + /// Creates a new if supported or returns + /// null if the OS functions aren't supported. + /// + /// If is true, then the created + /// that is used internally by the class, + /// can only access bytes up to the file size, not to the end of the mapped image. You must + /// set to the correct image length to access the full image. + /// Name of the file + /// true if we should map it as an executable + /// If we can't open/map the file + internal static MemoryMappedFileStreamCreator CreateWindows(string fileName, bool mapAsImage) { + if (!canTryWindows) + return null; + + var creator = new MemoryMappedFileStreamCreator(); + creator.theFileName = GetFullPath(fileName); + try { + Windows.Mmap(creator, mapAsImage); + return creator; + } + catch (EntryPointNotFoundException) { + } + catch (DllNotFoundException) { + } + canTryWindows = false; + return null; + } + + /// + /// Creates a new if supported or returns + /// null if the OS functions aren't supported. + /// + /// If is true, then the created + /// that is used internally by the class, + /// can only access bytes up to the file size, not to the end of the mapped image. You must + /// set to the correct image length to access the full image. + /// Name of the file + /// NOT SUPPORTED. true if we should map it as an executable + /// If we can't open/map the file + internal static MemoryMappedFileStreamCreator CreateUnix(string fileName, bool mapAsImage) { + if (!canTryUnix) + return null; + + var creator = new MemoryMappedFileStreamCreator(); + creator.theFileName = GetFullPath(fileName); + try { + Unix.Mmap(creator, mapAsImage); + if (mapAsImage) { // Only check this if we know that mmap() works, i.e., if above call succeeds + creator.Dispose(); + throw new ArgumentException("mapAsImage == true is not supported on this OS"); + } + return creator; + } + catch (MemoryMappedIONotSupportedException ex) { + Debug.WriteLine(string.Format("mmap'd IO didn't work: {0}", ex.Message)); + } + catch (EntryPointNotFoundException) { + } + catch (DllNotFoundException) { + } + canTryUnix = false; + return null; + } + + static string GetFullPath(string fileName) { + try { + return Path.GetFullPath(fileName); + } + catch { + return fileName; + } + } + + /// + ~MemoryMappedFileStreamCreator() { + Dispose(false); + } + + /// + protected override void Dispose(bool disposing) { + FreeMemoryMappedIoData(); + base.Dispose(disposing); + } + + /// + /// true if memory mapped I/O is enabled + /// + public bool IsMemoryMappedIO { + get { return dataAry == null; } + } + + /// + /// Call this to disable memory mapped I/O. This must only be called if no other code is + /// trying to access the memory since that could lead to an exception. + /// + public void UnsafeDisableMemoryMappedIO() { + if (dataAry != null) + return; + if (unsafeUseAddress) + throw new InvalidOperationException("Can't convert to non-memory mapped I/O because the PDB reader uses the address. Use the managed PDB reader instead."); + var newAry = new byte[Length]; + Marshal.Copy(data, newAry, 0, newAry.Length); + FreeMemoryMappedIoData(); + dataLength = newAry.Length; + dataAry = newAry; + gcHandle = GCHandle.Alloc(dataAry, GCHandleType.Pinned); + this.data = gcHandle.AddrOfPinnedObject(); + } + GCHandle gcHandle; + byte[] dataAry; + + void FreeMemoryMappedIoData() { + if (dataAry == null) { + var origData = Interlocked.Exchange(ref data, IntPtr.Zero); + if (origData != IntPtr.Zero) { + dataLength = 0; + switch (osType) { + case OSType.Windows: + Windows.Dispose(origData); + break; + + case OSType.Unix: + Unix.Dispose(origData, origDataLength); + break; + + default: + throw new InvalidOperationException("Shouldn't be here"); + } + } + } + + if (gcHandle.IsAllocated) { + try { + gcHandle.Free(); + } + catch (InvalidOperationException) { + } + } + dataAry = null; + } + } +} diff --git a/dnlib/IO/MemoryStreamCreator.cs b/dnlib/IO/MemoryStreamCreator.cs new file mode 100644 index 0000000..0fd2750 --- /dev/null +++ b/dnlib/IO/MemoryStreamCreator.cs @@ -0,0 +1,82 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.IO; + +namespace dnlib.IO { + /// + /// Creates s to partially access a byte[] + /// + /// + [DebuggerDisplay("byte[]: O:{dataOffset} L:{dataLength} {theFileName}")] + sealed class MemoryStreamCreator : IImageStreamCreator { + byte[] data; + int dataOffset; + int dataLength; + string theFileName; + + /// + /// The file name + /// + public string FileName { + get { return theFileName; } + set { theFileName = value; } + } + + /// + public long Length { + get { return dataLength; } + } + + /// + /// Constructor + /// + /// The data + public MemoryStreamCreator(byte[] data) + : this(data, 0, data.Length) { + } + + /// + /// Constructor + /// + /// The data + /// Start offset in + /// Length of data starting from + /// If one of the args is invalid + public MemoryStreamCreator(byte[] data, int offset, int length) { + if (offset < 0) + throw new ArgumentOutOfRangeException("offset"); + if (length < 0 || offset + length < offset) + throw new ArgumentOutOfRangeException("length"); + if (offset + length > data.Length) + throw new ArgumentOutOfRangeException("length"); + this.data = data; + this.dataOffset = offset; + this.dataLength = length; + } + + /// + public IImageStream Create(FileOffset offset, long length) { + if (offset < 0 || length < 0) + return MemoryImageStream.CreateEmpty(); + + int offs = (int)Math.Min((long)dataLength, (long)offset); + int len = (int)Math.Min((long)dataLength - offs, length); + return new MemoryImageStream(offset, data, dataOffset + offs, len); + } + + /// + public IImageStream CreateFull() { + return new MemoryImageStream(0, data, dataOffset, dataLength); + } + + /// + public void Dispose() { + data = null; + dataOffset = 0; + dataLength = 0; + theFileName = null; + } + } +} diff --git a/dnlib/IO/UnmanagedMemoryImageStream.cs b/dnlib/IO/UnmanagedMemoryImageStream.cs new file mode 100644 index 0000000..4b62cd9 --- /dev/null +++ b/dnlib/IO/UnmanagedMemoryImageStream.cs @@ -0,0 +1,234 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; + +namespace dnlib.IO { + /// + /// IImageStream for unmanaged memory + /// + [DebuggerDisplay("FO:{fileOffset} S:{Length} A:{startAddr}")] + sealed unsafe class UnmanagedMemoryImageStream : IImageStream { + FileOffset fileOffset; + long startAddr; + long endAddr; + long currentAddr; + UnmanagedMemoryStreamCreator owner; + bool ownOwner; + + /// + /// Constructor + /// + /// Owner of memory + /// File offset of data + /// Address of data + /// Length of data + public unsafe UnmanagedMemoryImageStream(UnmanagedMemoryStreamCreator owner, FileOffset fileOffset, long baseAddr, long length) { + this.fileOffset = fileOffset; + this.startAddr = baseAddr; + this.endAddr = baseAddr + length; + this.currentAddr = this.startAddr; + this.owner = owner; + } + + /// + /// Saves in this instance so it doesn't get garbage collected. + /// + /// A instance + internal UnmanagedMemoryImageStream(UnmanagedMemoryStreamCreator creator) + : this(creator, 0, 0, creator.Length) { + this.ownOwner = true; + } + + /// + public FileOffset FileOffset { + get { return fileOffset; } + } + + /// + /// Gets the start address of the memory this instance uses + /// + internal unsafe IntPtr StartAddress { + get { return new IntPtr((byte*)owner.UnsafeUseAddress + startAddr); } + } + + /// + public unsafe long Length { + get { return endAddr - startAddr; } + } + + /// + public unsafe long Position { + get { return currentAddr - startAddr; } + set { + if (IntPtr.Size == 4 && (ulong)value > int.MaxValue) + value = int.MaxValue; + long newAddr = startAddr + value; + if (newAddr < startAddr) + newAddr = endAddr; + currentAddr = newAddr; + } + } + + /// + public unsafe IImageStream Create(FileOffset offset, long length) { + if ((long)offset < 0 || length < 0) + return MemoryImageStream.CreateEmpty(); + + long offs = Math.Min(Length, (long)offset); + long len = Math.Min(Length - offs, length); + return new UnmanagedMemoryImageStream(owner, (FileOffset)((long)fileOffset + (long)offset), startAddr + (long)offs, len); + } + + /// + public unsafe byte[] ReadBytes(int size) { + if (size < 0) + throw new IOException("Invalid size"); + size = (int)Math.Min(size, Length - Math.Min(Length, Position)); + var newData = new byte[size]; + Marshal.Copy(new IntPtr((byte*)owner.Address + currentAddr), newData, 0, size); + currentAddr += size; + return newData; + } + + /// + public int Read(byte[] buffer, int offset, int length) { + if (length < 0) + throw new IOException("Invalid size"); + length = (int)Math.Min(length, Length - Math.Min(Length, Position)); + Marshal.Copy(new IntPtr((byte*)owner.Address + currentAddr), buffer, offset, length); + currentAddr += length; + return length; + } + + /// + public byte[] ReadBytesUntilByte(byte b) { + long pos = GetPositionOf(b); + if (pos == -1) + return null; + return ReadBytes((int)(pos - currentAddr)); + } + + unsafe long GetPositionOf(byte b) { + byte* pos = (byte*)owner.Address + currentAddr; + byte* posStart = pos; + var endPos = (byte*)owner.Address + endAddr; + while (pos < endPos) { + if (*pos == b) + return currentAddr + (pos - posStart); + pos++; + } + return -1; + } + + /// + public unsafe sbyte ReadSByte() { + if (currentAddr >= endAddr) + throw new IOException("Can't read one SByte"); + return (sbyte)*((byte*)owner.Address + currentAddr++); + } + + /// + public unsafe byte ReadByte() { + if (currentAddr >= endAddr) + throw new IOException("Can't read one Byte"); + return *((byte*)owner.Address + currentAddr++); + } + + /// + public unsafe short ReadInt16() { + if (currentAddr + 1 >= endAddr) + throw new IOException("Can't read one Int16"); + short val = *(short*)((byte*)owner.Address + currentAddr); + currentAddr += 2; + return val; + } + + /// + public unsafe ushort ReadUInt16() { + if (currentAddr + 1 >= endAddr) + throw new IOException("Can't read one UInt16"); + ushort val = *(ushort*)((byte*)owner.Address + currentAddr); + currentAddr += 2; + return val; + } + + /// + public unsafe int ReadInt32() { + if (currentAddr + 3 >= endAddr) + throw new IOException("Can't read one Int32"); + int val = *(int*)((byte*)owner.Address + currentAddr); + currentAddr += 4; + return val; + } + + /// + public unsafe uint ReadUInt32() { + if (currentAddr + 3 >= endAddr) + throw new IOException("Can't read one UInt32"); + uint val = *(uint*)((byte*)owner.Address + currentAddr); + currentAddr += 4; + return val; + } + + /// + public unsafe long ReadInt64() { + if (currentAddr + 7 >= endAddr) + throw new IOException("Can't read one Int64"); + long val = *(long*)((byte*)owner.Address + currentAddr); + currentAddr += 8; + return val; + } + + /// + public unsafe ulong ReadUInt64() { + if (currentAddr + 7 >= endAddr) + throw new IOException("Can't read one UInt64"); + ulong val = *(ulong*)((byte*)owner.Address + currentAddr); + currentAddr += 8; + return val; + } + + /// + public unsafe float ReadSingle() { + if (currentAddr + 3 >= endAddr) + throw new IOException("Can't read one Single"); + var val = *(float*)((byte*)owner.Address + currentAddr); + currentAddr += 4; + return val; + } + + /// + public unsafe double ReadDouble() { + if (currentAddr + 7 >= endAddr) + throw new IOException("Can't read one Double"); + var val = *(double*)((byte*)owner.Address + currentAddr); + currentAddr += 8; + return val; + } + + /// + public unsafe string ReadString(int chars) { + if (IntPtr.Size == 4 && (uint)chars > (uint)int.MaxValue) + throw new IOException("Not enough space to read the string"); + if (currentAddr + chars * 2 < currentAddr || (chars != 0 && currentAddr + chars * 2 - 1 >= endAddr)) + throw new IOException("Not enough space to read the string"); + var s = new string((char*)((byte*)owner.Address + currentAddr), 0, chars); + currentAddr += chars * 2; + return s; + } + + /// + public void Dispose() { + fileOffset = 0; + startAddr = 0; + endAddr = 0; + currentAddr = 0; + if (ownOwner && owner != null) + owner.Dispose(); + owner = null; + } + } +} diff --git a/dnlib/IO/UnmanagedMemoryStreamCreator.cs b/dnlib/IO/UnmanagedMemoryStreamCreator.cs new file mode 100644 index 0000000..e0edee2 --- /dev/null +++ b/dnlib/IO/UnmanagedMemoryStreamCreator.cs @@ -0,0 +1,121 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.IO; + +namespace dnlib.IO { + /// + /// Creates s to partially access an + /// unmanaged memory range + /// + /// + [DebuggerDisplay("mem: D:{data} L:{dataLength} {theFileName}")] + class UnmanagedMemoryStreamCreator : IImageStreamCreator { + /// + /// Address of data + /// + protected IntPtr data; + + /// + /// Length of data + /// + protected long dataLength; + + /// + /// Name of file + /// + protected string theFileName; + + /// + /// The file name + /// + public string FileName { + get { return theFileName; } + set { theFileName = value; } + } + + /// + /// Size of the data + /// + public long Length { + get { return dataLength; } + set { dataLength = value; } + } + + /// + /// Returns the base address of the data + /// + public IntPtr Address { + get { return data; } + } + + public IntPtr UnsafeUseAddress { + get { + unsafeUseAddress = true; + return data; + } + } + protected bool unsafeUseAddress; + + /// + /// Default constructor + /// + protected UnmanagedMemoryStreamCreator() { + } + + /// + /// Constructor for 0 bytes of data + /// + /// Pointer to the data + public UnmanagedMemoryStreamCreator(IntPtr data) + : this(data, 0) { + } + + /// + /// Constructor + /// + /// Pointer to the data + /// Length of data + /// If one of the args is invalid + public UnmanagedMemoryStreamCreator(IntPtr data, long dataLength) { + if (dataLength < 0) + throw new ArgumentOutOfRangeException("dataLength"); + this.data = data; + this.dataLength = dataLength; + } + + /// + public unsafe IImageStream Create(FileOffset offset, long length) { + if (offset < 0 || length < 0) + return MemoryImageStream.CreateEmpty(); + + long offs = Math.Min((long)dataLength, (long)offset); + long len = Math.Min((long)dataLength - offs, length); + return new UnmanagedMemoryImageStream(this, offset, offs, len); + } + + /// + public IImageStream CreateFull() { + return new UnmanagedMemoryImageStream(this, 0, 0, dataLength); + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (disposing) { + data = IntPtr.Zero; + dataLength = 0; + theFileName = null; + } + } + } +} diff --git a/dnlib/PE/Characteristics.cs b/dnlib/PE/Characteristics.cs new file mode 100644 index 0000000..1345064 --- /dev/null +++ b/dnlib/PE/Characteristics.cs @@ -0,0 +1,44 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.PE { + /// + /// IMAGE_FILE_HEADER.Characteristics flags + /// + [Flags] + public enum Characteristics : ushort { + /// Relocation info stripped from file. + RelocsStripped = 0x0001, + /// File is executable (i.e. no unresolved externel references). + ExecutableImage = 0x0002, + /// Line nunbers stripped from file. + LineNumsStripped = 0x0004, + /// Local symbols stripped from file. + LocalSymsStripped = 0x0008, + /// Agressively trim working set + AggressiveWsTrim = 0x0010, + /// App can handle >2gb addresses + LargeAddressAware = 0x0020, + /// + Reserved1 = 0x0040, + /// Bytes of machine word are reversed. + BytesReversedLo = 0x0080, + /// 32 bit word machine. + _32BitMachine = 0x0100, + /// Debugging info stripped from file in .DBG file + DebugStripped = 0x0200, + /// If Image is on removable media, copy and run from the swap file. + RemovableRunFromSwap= 0x0400, + /// If Image is on Net, copy and run from the swap file. + NetRunFromSwap = 0x0800, + /// System File. + System = 0x1000, + /// File is a DLL. + Dll = 0x2000, + /// File should only be run on a UP machine + UpSystemOnly = 0x4000, + /// Bytes of machine word are reversed. + BytesReversedHi = 0x8000, + } +} diff --git a/dnlib/PE/DllCharacteristics.cs b/dnlib/PE/DllCharacteristics.cs new file mode 100644 index 0000000..a8bcfc6 --- /dev/null +++ b/dnlib/PE/DllCharacteristics.cs @@ -0,0 +1,44 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.PE { + /// + /// IMAGE_OPTIONAL_HEADER.DllCharacteristics + /// + [Flags] + public enum DllCharacteristics : ushort { + /// + Reserved1 = 0x0001, + /// + Reserved2 = 0x0002, + /// + Reserved3 = 0x0004, + /// + Reserved4 = 0x0008, + /// + Reserved5 = 0x0010, + /// Image can handle a high entropy 64-bit virtual address space. + HighEntropyVA = 0x0020, + /// DLL can move. + DynamicBase = 0x0040, + /// Code Integrity Image + ForceIntegrity = 0x0080, + /// Image is NX compatible + NxCompat = 0x0100, + /// Image understands isolation and doesn't want it + NoIsolation = 0x0200, + /// Image does not use SEH. No SE handler may reside in this image + NoSeh = 0x0400, + /// Do not bind this image. + NoBind = 0x0800, + /// Image should execute in an AppContainer + AppContainer = 0x1000, + /// Driver uses WDM model + WdmDriver = 0x2000, + /// Image supports Control Flow Guard. + GuardCf = 0x4000, + /// + TerminalServerAware = 0x8000, + } +} diff --git a/dnlib/PE/IImageOptionalHeader.cs b/dnlib/PE/IImageOptionalHeader.cs new file mode 100644 index 0000000..21ea4b4 --- /dev/null +++ b/dnlib/PE/IImageOptionalHeader.cs @@ -0,0 +1,165 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Interface for PE optional header classes + /// + public interface IImageOptionalHeader : IFileSection { + /// + /// Returns the Magic field + /// + ushort Magic { get; } + + /// + /// Returns the MajorLinkerVersion field + /// + byte MajorLinkerVersion { get; } + + /// + /// Returns the MinorLinkerVersion field + /// + byte MinorLinkerVersion { get; } + + /// + /// Returns the SizeOfCode field + /// + uint SizeOfCode { get; } + + /// + /// Returns the SizeOfInitializedData field + /// + uint SizeOfInitializedData { get; } + + /// + /// Returns the SizeOfUninitializedData field + /// + uint SizeOfUninitializedData { get; } + + /// + /// Returns the AddressOfEntryPoint field + /// + RVA AddressOfEntryPoint { get; } + + /// + /// Returns the BaseOfCode field + /// + RVA BaseOfCode { get; } + + /// + /// Returns the BaseOfData field + /// + RVA BaseOfData { get; } + + /// + /// Returns the ImageBase field + /// + ulong ImageBase { get; } + + /// + /// Returns the SectionAlignment field + /// + uint SectionAlignment { get; } + + /// + /// Returns the FileAlignment field + /// + uint FileAlignment { get; } + + /// + /// Returns the MajorOperatingSystemVersion field + /// + ushort MajorOperatingSystemVersion { get; } + + /// + /// Returns the MinorOperatingSystemVersion field + /// + ushort MinorOperatingSystemVersion { get; } + + /// + /// Returns the MajorImageVersion field + /// + ushort MajorImageVersion { get; } + + /// + /// Returns the MinorImageVersion field + /// + ushort MinorImageVersion { get; } + + /// + /// Returns the MajorSubsystemVersion field + /// + ushort MajorSubsystemVersion { get; } + + /// + /// Returns the MinorSubsystemVersion field + /// + ushort MinorSubsystemVersion { get; } + + /// + /// Returns the Win32VersionValue field + /// + uint Win32VersionValue { get; } + + /// + /// Returns the SizeOfImage field + /// + uint SizeOfImage { get; } + + /// + /// Returns the SizeOfHeaders field + /// + uint SizeOfHeaders { get; } + + /// + /// Returns the CheckSum field + /// + uint CheckSum { get; } + + /// + /// Returns the Subsystem field + /// + Subsystem Subsystem { get; } + + /// + /// Returns the DllCharacteristics field + /// + DllCharacteristics DllCharacteristics { get; } + + /// + /// Returns the SizeOfStackReserve field + /// + ulong SizeOfStackReserve { get; } + + /// + /// Returns the SizeOfStackCommit field + /// + ulong SizeOfStackCommit { get; } + + /// + /// Returns the SizeOfHeapReserve field + /// + ulong SizeOfHeapReserve { get; } + + /// + /// Returns the SizeOfHeapCommit field + /// + ulong SizeOfHeapCommit { get; } + + /// + /// Returns the LoaderFlags field + /// + uint LoaderFlags { get; } + + /// + /// Returns the NumberOfRvaAndSizes field + /// + uint NumberOfRvaAndSizes { get; } + + /// + /// Returns the DataDirectories field + /// + ImageDataDirectory[] DataDirectories { get; } + } +} diff --git a/dnlib/PE/IPEImage.cs b/dnlib/PE/IPEImage.cs new file mode 100644 index 0000000..873ed71 --- /dev/null +++ b/dnlib/PE/IPEImage.cs @@ -0,0 +1,157 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.IO; +using dnlib.W32Resources; + +namespace dnlib.PE { + /// + /// Converts s to/from s + /// + public interface IRvaFileOffsetConverter { + /// + /// Converts a to an + /// + /// The file offset to convert + /// The RVA + RVA ToRVA(FileOffset offset); + + /// + /// Converts an to a + /// + /// The RVA to convert + /// The file offset + FileOffset ToFileOffset(RVA rva); + } + + /// + /// Interface to access a PE image + /// + public interface IPEImage : IRvaFileOffsetConverter, IDisposable { + /// + /// true if image layout is the same as the raw PE image layout, false + /// if it's the same layout as a PE image loaded by the OS PE loader. + /// + bool IsFileImageLayout { get; } + + /// + /// true if some of the memory where the image is located could be unavailable. + /// This could happen if it's been loaded by the OS loader. + /// + bool MayHaveInvalidAddresses { get; } + + /// + /// The file name or null if data is not from a file + /// + string FileName { get; } + + /// + /// Returns the DOS header + /// + ImageDosHeader ImageDosHeader { get; } + + /// + /// Returns the NT headers + /// + ImageNTHeaders ImageNTHeaders { get; } + + /// + /// Returns the section headers + /// + IList ImageSectionHeaders { get; } + + /// + /// Gets/sets the Win32 resources. This is null if there are no Win32 resources. + /// + Win32Resources Win32Resources { get; set; } + + /// + /// Creates a stream to access part of the PE image from + /// to the end of the image + /// + /// File offset + /// A new stream + /// If the arg is invalid + IImageStream CreateStream(FileOffset offset); + + /// + /// Creates a stream to access part of the PE image from + /// with length + /// + /// File offset + /// Length of data + /// A new stream + /// If any arg is invalid + IImageStream CreateStream(FileOffset offset, long length); + + /// + /// Creates a stream to access the full PE image + /// + /// A new stream + IImageStream CreateFullStream(); + + /// + /// Call this to disable memory mapped I/O if it was used to open the file. This must only + /// be called if no other code is trying to access the memory since that could lead to an + /// exception. + /// + void UnsafeDisableMemoryMappedIO(); + + /// + /// true if memory mapped I/O is enabled + /// + bool IsMemoryMappedIO { get; } + } + + public static partial class PEExtensions { + /// + /// Creates a stream to access part of the PE image from + /// to the end of the image + /// + /// this + /// RVA + /// A new stream + /// If the arg is invalid + public static IImageStream CreateStream(this IPEImage self, RVA rva) { + return self.CreateStream(self.ToFileOffset(rva)); + } + + /// + /// Creates a stream to access part of the PE image from + /// with length + /// + /// this + /// RVA + /// Length of data + /// A new stream + /// If any arg is invalid + public static IImageStream CreateStream(this IPEImage self, RVA rva, long length) { + return self.CreateStream(self.ToFileOffset(rva), length); + } + + /// + /// Reads all bytes from the PE image. This may fail if the PE image has been loaded + /// by the OS loader since there may be memory holes. + /// + /// this + /// All bytes of the PE image + public static byte[] GetImageAsByteArray(this IPEImage self) { + using (var reader = self.CreateFullStream()) + return reader.ReadAllBytes(); + } + + /// + /// Finds a + /// + /// this + /// Type + /// Name + /// Language ID + /// The or null if none found + public static ResourceData FindWin32ResourceData(this IPEImage self, ResourceName type, ResourceName name, ResourceName langId) { + var w32Resources = self.Win32Resources; + return w32Resources == null ? null : w32Resources.Find(type, name, langId); + } + } +} diff --git a/dnlib/PE/IPEType.cs b/dnlib/PE/IPEType.cs new file mode 100644 index 0000000..c40f520 --- /dev/null +++ b/dnlib/PE/IPEType.cs @@ -0,0 +1,26 @@ +// dnlib: See LICENSE.txt for more info + +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Converts a to/from an + /// + interface IPEType { + /// + /// Converts a to an + /// + /// The PEInfo context + /// The file offset to convert + /// The RVA + RVA ToRVA(PEInfo peInfo, FileOffset offset); + + /// + /// Converts an to a + /// + /// The PEInfo context + /// The RVA to convert + /// The file offset + FileOffset ToFileOffset(PEInfo peInfo, RVA rva); + } +} diff --git a/dnlib/PE/ImageDataDirectory.cs b/dnlib/PE/ImageDataDirectory.cs new file mode 100644 index 0000000..27c0f6f --- /dev/null +++ b/dnlib/PE/ImageDataDirectory.cs @@ -0,0 +1,49 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_DATA_DIRECTORY PE section + /// + [DebuggerDisplay("{virtualAddress} {dataSize}")] + public sealed class ImageDataDirectory : FileSection { + readonly RVA virtualAddress; + readonly uint dataSize; + + /// + /// Returns the IMAGE_DATA_DIRECTORY.VirtualAddress field + /// + public RVA VirtualAddress { + get { return virtualAddress; } + } + + /// + /// Returns the IMAGE_DATA_DIRECTORY.Size field + /// + public uint Size { + get { return dataSize; } + } + + /// + /// Default constructor + /// + public ImageDataDirectory() { + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public ImageDataDirectory(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.virtualAddress = (RVA)reader.ReadUInt32(); + this.dataSize = reader.ReadUInt32(); + SetEndoffset(reader); + } + } +} diff --git a/dnlib/PE/ImageDosHeader.cs b/dnlib/PE/ImageDosHeader.cs new file mode 100644 index 0000000..467275f --- /dev/null +++ b/dnlib/PE/ImageDosHeader.cs @@ -0,0 +1,36 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_DOS_HEADER PE section + /// + public sealed class ImageDosHeader : FileSection { + readonly uint ntHeadersOffset; + + /// + /// File offset of the NT headers + /// + public uint NTHeadersOffset { + get { return ntHeadersOffset; } + } + + /// + /// Constructor + /// + /// PE file reader + /// Verify section + /// Thrown if verification fails + public ImageDosHeader(IImageStream reader, bool verify) { + SetStartOffset(reader); + ushort sig = reader.ReadUInt16(); + if (verify && sig != 0x5A4D) + throw new BadImageFormatException("Invalid DOS signature"); + reader.Position = (long)startOffset + 0x3C; + this.ntHeadersOffset = reader.ReadUInt32(); + SetEndoffset(reader); + } + } +} diff --git a/dnlib/PE/ImageFileHeader.cs b/dnlib/PE/ImageFileHeader.cs new file mode 100644 index 0000000..e3cc14e --- /dev/null +++ b/dnlib/PE/ImageFileHeader.cs @@ -0,0 +1,88 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_FILE_HEADER PE section + /// + public sealed class ImageFileHeader : FileSection { + readonly Machine machine; + readonly ushort numberOfSections; + readonly uint timeDateStamp; + readonly uint pointerToSymbolTable; + readonly uint numberOfSymbols; + readonly ushort sizeOfOptionalHeader; + readonly Characteristics characteristics; + + /// + /// Returns the IMAGE_FILE_HEADER.Machine field + /// + public Machine Machine { + get { return machine; } + } + + /// + /// Returns the IMAGE_FILE_HEADER.NumberOfSections field + /// + public int NumberOfSections { + get { return numberOfSections; } + } + + /// + /// Returns the IMAGE_FILE_HEADER.TimeDateStamp field + /// + public uint TimeDateStamp { + get { return timeDateStamp; } + } + + /// + /// Returns the IMAGE_FILE_HEADER.PointerToSymbolTable field + /// + public uint PointerToSymbolTable { + get { return pointerToSymbolTable; } + } + + /// + /// Returns the IMAGE_FILE_HEADER.NumberOfSymbols field + /// + public uint NumberOfSymbols { + get { return numberOfSymbols; } + } + + /// + /// Returns the IMAGE_FILE_HEADER.SizeOfOptionalHeader field + /// + public uint SizeOfOptionalHeader { + get { return sizeOfOptionalHeader; } + } + + /// + /// Returns the IMAGE_FILE_HEADER.Characteristics field + /// + public Characteristics Characteristics { + get { return characteristics; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public ImageFileHeader(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.machine = (Machine)reader.ReadUInt16(); + this.numberOfSections = reader.ReadUInt16(); + this.timeDateStamp = reader.ReadUInt32(); + this.pointerToSymbolTable = reader.ReadUInt32(); + this.numberOfSymbols = reader.ReadUInt32(); + this.sizeOfOptionalHeader = reader.ReadUInt16(); + this.characteristics = (Characteristics)reader.ReadUInt16(); + SetEndoffset(reader); + if (verify && this.sizeOfOptionalHeader == 0) + throw new BadImageFormatException("Invalid SizeOfOptionalHeader"); + } + } +} diff --git a/dnlib/PE/ImageNTHeaders.cs b/dnlib/PE/ImageNTHeaders.cs new file mode 100644 index 0000000..9e1b941 --- /dev/null +++ b/dnlib/PE/ImageNTHeaders.cs @@ -0,0 +1,69 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_NT_HEADERS PE section + /// + public sealed class ImageNTHeaders : FileSection { + readonly uint signature; + readonly ImageFileHeader imageFileHeader; + readonly IImageOptionalHeader imageOptionalHeader; + + /// + /// Returns the IMAGE_NT_HEADERS.Signature field + /// + public uint Signature { + get { return signature; } + } + + /// + /// Returns the IMAGE_NT_HEADERS.FileHeader field + /// + public ImageFileHeader FileHeader { + get { return imageFileHeader; } + } + + /// + /// Returns the IMAGE_NT_HEADERS.OptionalHeader field + /// + public IImageOptionalHeader OptionalHeader { + get { return imageOptionalHeader; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public ImageNTHeaders(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.signature = reader.ReadUInt32(); + if (verify && this.signature != 0x4550) + throw new BadImageFormatException("Invalid NT headers signature"); + this.imageFileHeader = new ImageFileHeader(reader, verify); + this.imageOptionalHeader = CreateImageOptionalHeader(reader, verify); + SetEndoffset(reader); + } + + /// + /// Creates an IImageOptionalHeader + /// + /// PE file reader pointing to the start of the optional header + /// Verify section + /// The created IImageOptionalHeader + /// Thrown if verification fails + IImageOptionalHeader CreateImageOptionalHeader(IImageStream reader, bool verify) { + ushort magic = reader.ReadUInt16(); + reader.Position -= 2; + switch (magic) { + case 0x010B: return new ImageOptionalHeader32(reader, imageFileHeader.SizeOfOptionalHeader, verify); + case 0x020B: return new ImageOptionalHeader64(reader, imageFileHeader.SizeOfOptionalHeader, verify); + default: throw new BadImageFormatException("Invalid optional header magic"); + } + } + } +} diff --git a/dnlib/PE/ImageOptionalHeader32.cs b/dnlib/PE/ImageOptionalHeader32.cs new file mode 100644 index 0000000..6ea7ecb --- /dev/null +++ b/dnlib/PE/ImageOptionalHeader32.cs @@ -0,0 +1,314 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_OPTIONAL_HEADER (32-bit) PE section + /// + public sealed class ImageOptionalHeader32 : FileSection, IImageOptionalHeader { + readonly ushort magic; + readonly byte majorLinkerVersion; + readonly byte minorLinkerVersion; + readonly uint sizeOfCode; + readonly uint sizeOfInitializedData; + readonly uint sizeOfUninitializedData; + readonly RVA addressOfEntryPoint; + readonly RVA baseOfCode; + readonly RVA baseOfData; + readonly uint imageBase; + readonly uint sectionAlignment; + readonly uint fileAlignment; + readonly ushort majorOperatingSystemVersion; + readonly ushort minorOperatingSystemVersion; + readonly ushort majorImageVersion; + readonly ushort minorImageVersion; + readonly ushort majorSubsystemVersion; + readonly ushort minorSubsystemVersion; + readonly uint win32VersionValue; + readonly uint sizeOfImage; + readonly uint sizeOfHeaders; + readonly uint checkSum; + readonly Subsystem subsystem; + readonly DllCharacteristics dllCharacteristics; + readonly uint sizeOfStackReserve; + readonly uint sizeOfStackCommit; + readonly uint sizeOfHeapReserve; + readonly uint sizeOfHeapCommit; + readonly uint loaderFlags; + readonly uint numberOfRvaAndSizes; + readonly ImageDataDirectory[] dataDirectories = new ImageDataDirectory[16]; + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.Magic field + /// + public ushort Magic { + get { return magic; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MajorLinkerVersion field + /// + public byte MajorLinkerVersion { + get { return majorLinkerVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MinorLinkerVersion field + /// + public byte MinorLinkerVersion { + get { return minorLinkerVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfCode field + /// + public uint SizeOfCode { + get { return sizeOfCode; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfInitializedData field + /// + public uint SizeOfInitializedData { + get { return sizeOfInitializedData; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfUninitializedData field + /// + public uint SizeOfUninitializedData { + get { return sizeOfUninitializedData; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint field + /// + public RVA AddressOfEntryPoint { + get { return addressOfEntryPoint; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.BaseOfCode field + /// + public RVA BaseOfCode { + get { return baseOfCode; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.BaseOfData field + /// + public RVA BaseOfData { + get { return baseOfData; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.ImageBase field + /// + public ulong ImageBase { + get { return imageBase; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SectionAlignment field + /// + public uint SectionAlignment { + get { return sectionAlignment; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.FileAlignment field + /// + public uint FileAlignment { + get { return fileAlignment; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MajorOperatingSystemVersion field + /// + public ushort MajorOperatingSystemVersion { + get { return majorOperatingSystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MinorOperatingSystemVersion field + /// + public ushort MinorOperatingSystemVersion { + get { return minorOperatingSystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MajorImageVersion field + /// + public ushort MajorImageVersion { + get { return majorImageVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MinorImageVersion field + /// + public ushort MinorImageVersion { + get { return minorImageVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MajorSubsystemVersion field + /// + public ushort MajorSubsystemVersion { + get { return majorSubsystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.MinorSubsystemVersion field + /// + public ushort MinorSubsystemVersion { + get { return minorSubsystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.Win32VersionValue field + /// + public uint Win32VersionValue { + get { return win32VersionValue; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfImage field + /// + public uint SizeOfImage { + get { return sizeOfImage; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfHeaders field + /// + public uint SizeOfHeaders { + get { return sizeOfHeaders; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.CheckSum field + /// + public uint CheckSum { + get { return checkSum; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.Subsystem field + /// + public Subsystem Subsystem { + get { return subsystem; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.DllCharacteristics field + /// + public DllCharacteristics DllCharacteristics { + get { return dllCharacteristics; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfStackReserve field + /// + public ulong SizeOfStackReserve { + get { return sizeOfStackReserve; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfStackCommit field + /// + public ulong SizeOfStackCommit { + get { return sizeOfStackCommit; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfHeapReserve field + /// + public ulong SizeOfHeapReserve { + get { return sizeOfHeapReserve; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.SizeOfHeapCommit field + /// + public ulong SizeOfHeapCommit { + get { return sizeOfHeapCommit; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.LoaderFlags field + /// + public uint LoaderFlags { + get { return loaderFlags; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes field + /// + public uint NumberOfRvaAndSizes { + get { return numberOfRvaAndSizes; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER.DataDirectories field + /// + public ImageDataDirectory[] DataDirectories { + get { return dataDirectories; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Total size of this optional header (from the file header) + /// Verify section + /// Thrown if verification fails + public ImageOptionalHeader32(IImageStream reader, uint totalSize, bool verify) { + if (totalSize < 0x60) + throw new BadImageFormatException("Invalid optional header size"); + if (verify && reader.Position + totalSize > reader.Length) + throw new BadImageFormatException("Invalid optional header size"); + SetStartOffset(reader); + this.magic = reader.ReadUInt16(); + this.majorLinkerVersion = reader.ReadByte(); + this.minorLinkerVersion = reader.ReadByte(); + this.sizeOfCode = reader.ReadUInt32(); + this.sizeOfInitializedData = reader.ReadUInt32(); + this.sizeOfUninitializedData = reader.ReadUInt32(); + this.addressOfEntryPoint = (RVA)reader.ReadUInt32(); + this.baseOfCode = (RVA)reader.ReadUInt32(); + this.baseOfData = (RVA)reader.ReadUInt32(); + this.imageBase = reader.ReadUInt32(); + this.sectionAlignment = reader.ReadUInt32(); + this.fileAlignment = reader.ReadUInt32(); + this.majorOperatingSystemVersion = reader.ReadUInt16(); + this.minorOperatingSystemVersion = reader.ReadUInt16(); + this.majorImageVersion = reader.ReadUInt16(); + this.minorImageVersion = reader.ReadUInt16(); + this.majorSubsystemVersion = reader.ReadUInt16(); + this.minorSubsystemVersion = reader.ReadUInt16(); + this.win32VersionValue = reader.ReadUInt32(); + this.sizeOfImage = reader.ReadUInt32(); + this.sizeOfHeaders = reader.ReadUInt32(); + this.checkSum = reader.ReadUInt32(); + this.subsystem = (Subsystem)reader.ReadUInt16(); + this.dllCharacteristics = (DllCharacteristics)reader.ReadUInt16(); + this.sizeOfStackReserve = reader.ReadUInt32(); + this.sizeOfStackCommit = reader.ReadUInt32(); + this.sizeOfHeapReserve = reader.ReadUInt32(); + this.sizeOfHeapCommit = reader.ReadUInt32(); + this.loaderFlags = reader.ReadUInt32(); + this.numberOfRvaAndSizes = reader.ReadUInt32(); + for (int i = 0; i < dataDirectories.Length; i++) { + uint len = (uint)(reader.Position - startOffset); + if (len + 8 <= totalSize) + dataDirectories[i] = new ImageDataDirectory(reader, verify); + else + dataDirectories[i] = new ImageDataDirectory(); + } + reader.Position = (long)startOffset + totalSize; + SetEndoffset(reader); + } + } +} diff --git a/dnlib/PE/ImageOptionalHeader64.cs b/dnlib/PE/ImageOptionalHeader64.cs new file mode 100644 index 0000000..b49c32d --- /dev/null +++ b/dnlib/PE/ImageOptionalHeader64.cs @@ -0,0 +1,312 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_OPTIONAL_HEADER64 PE section + /// + public sealed class ImageOptionalHeader64 : FileSection, IImageOptionalHeader { + readonly ushort magic; + readonly byte majorLinkerVersion; + readonly byte minorLinkerVersion; + readonly uint sizeOfCode; + readonly uint sizeOfInitializedData; + readonly uint sizeOfUninitializedData; + readonly RVA addressOfEntryPoint; + readonly RVA baseOfCode; + readonly ulong imageBase; + readonly uint sectionAlignment; + readonly uint fileAlignment; + readonly ushort majorOperatingSystemVersion; + readonly ushort minorOperatingSystemVersion; + readonly ushort majorImageVersion; + readonly ushort minorImageVersion; + readonly ushort majorSubsystemVersion; + readonly ushort minorSubsystemVersion; + readonly uint win32VersionValue; + readonly uint sizeOfImage; + readonly uint sizeOfHeaders; + readonly uint checkSum; + readonly Subsystem subsystem; + readonly DllCharacteristics dllCharacteristics; + readonly ulong sizeOfStackReserve; + readonly ulong sizeOfStackCommit; + readonly ulong sizeOfHeapReserve; + readonly ulong sizeOfHeapCommit; + readonly uint loaderFlags; + readonly uint numberOfRvaAndSizes; + readonly ImageDataDirectory[] dataDirectories = new ImageDataDirectory[16]; + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.Magic field + /// + public ushort Magic { + get { return magic; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MajorLinkerVersion field + /// + public byte MajorLinkerVersion { + get { return majorLinkerVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MinorLinkerVersion field + /// + public byte MinorLinkerVersion { + get { return minorLinkerVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfCode field + /// + public uint SizeOfCode { + get { return sizeOfCode; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfInitializedData field + /// + public uint SizeOfInitializedData { + get { return sizeOfInitializedData; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfUninitializedData field + /// + public uint SizeOfUninitializedData { + get { return sizeOfUninitializedData; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.AddressOfEntryPoint field + /// + public RVA AddressOfEntryPoint { + get { return addressOfEntryPoint; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.BaseOfCode field + /// + public RVA BaseOfCode { + get { return baseOfCode; } + } + + /// + /// Returns 0 since BaseOfData is not present in IMAGE_OPTIONAL_HEADER64 + /// + public RVA BaseOfData { + get { return 0; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.ImageBase field + /// + public ulong ImageBase { + get { return imageBase; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SectionAlignment field + /// + public uint SectionAlignment { + get { return sectionAlignment; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.FileAlignment field + /// + public uint FileAlignment { + get { return fileAlignment; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MajorOperatingSystemVersion field + /// + public ushort MajorOperatingSystemVersion { + get { return majorOperatingSystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MinorOperatingSystemVersion field + /// + public ushort MinorOperatingSystemVersion { + get { return minorOperatingSystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MajorImageVersion field + /// + public ushort MajorImageVersion { + get { return majorImageVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MinorImageVersion field + /// + public ushort MinorImageVersion { + get { return minorImageVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MajorSubsystemVersion field + /// + public ushort MajorSubsystemVersion { + get { return majorSubsystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.MinorSubsystemVersion field + /// + public ushort MinorSubsystemVersion { + get { return minorSubsystemVersion; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.Win32VersionValue field + /// + public uint Win32VersionValue { + get { return win32VersionValue; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfImage field + /// + public uint SizeOfImage { + get { return sizeOfImage; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfHeaders field + /// + public uint SizeOfHeaders { + get { return sizeOfHeaders; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.CheckSum field + /// + public uint CheckSum { + get { return checkSum; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.Subsystem field + /// + public Subsystem Subsystem { + get { return subsystem; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.DllCharacteristics field + /// + public DllCharacteristics DllCharacteristics { + get { return dllCharacteristics; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfStackReserve field + /// + public ulong SizeOfStackReserve { + get { return sizeOfStackReserve; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfStackCommit field + /// + public ulong SizeOfStackCommit { + get { return sizeOfStackCommit; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfHeapReserve field + /// + public ulong SizeOfHeapReserve { + get { return sizeOfHeapReserve; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.SizeOfHeapCommit field + /// + public ulong SizeOfHeapCommit { + get { return sizeOfHeapCommit; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.LoaderFlags field + /// + public uint LoaderFlags { + get { return loaderFlags; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.NumberOfRvaAndSizes field + /// + public uint NumberOfRvaAndSizes { + get { return numberOfRvaAndSizes; } + } + + /// + /// Returns the IMAGE_OPTIONAL_HEADER64.DataDirectories field + /// + public ImageDataDirectory[] DataDirectories { + get { return dataDirectories; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Total size of this optional header (from the file header) + /// Verify section + /// Thrown if verification fails + public ImageOptionalHeader64(IImageStream reader, uint totalSize, bool verify) { + if (totalSize < 0x70) + throw new BadImageFormatException("Invalid optional header size"); + if (verify && reader.Position + totalSize > reader.Length) + throw new BadImageFormatException("Invalid optional header size"); + SetStartOffset(reader); + this.magic = reader.ReadUInt16(); + this.majorLinkerVersion = reader.ReadByte(); + this.minorLinkerVersion = reader.ReadByte(); + this.sizeOfCode = reader.ReadUInt32(); + this.sizeOfInitializedData = reader.ReadUInt32(); + this.sizeOfUninitializedData = reader.ReadUInt32(); + this.addressOfEntryPoint = (RVA)reader.ReadUInt32(); + this.baseOfCode = (RVA)reader.ReadUInt32(); + this.imageBase = reader.ReadUInt64(); + this.sectionAlignment = reader.ReadUInt32(); + this.fileAlignment = reader.ReadUInt32(); + this.majorOperatingSystemVersion = reader.ReadUInt16(); + this.minorOperatingSystemVersion = reader.ReadUInt16(); + this.majorImageVersion = reader.ReadUInt16(); + this.minorImageVersion = reader.ReadUInt16(); + this.majorSubsystemVersion = reader.ReadUInt16(); + this.minorSubsystemVersion = reader.ReadUInt16(); + this.win32VersionValue = reader.ReadUInt32(); + this.sizeOfImage = reader.ReadUInt32(); + this.sizeOfHeaders = reader.ReadUInt32(); + this.checkSum = reader.ReadUInt32(); + this.subsystem = (Subsystem)reader.ReadUInt16(); + this.dllCharacteristics = (DllCharacteristics)reader.ReadUInt16(); + this.sizeOfStackReserve = reader.ReadUInt64(); + this.sizeOfStackCommit = reader.ReadUInt64(); + this.sizeOfHeapReserve = reader.ReadUInt64(); + this.sizeOfHeapCommit = reader.ReadUInt64(); + this.loaderFlags = reader.ReadUInt32(); + this.numberOfRvaAndSizes = reader.ReadUInt32(); + for (int i = 0; i < dataDirectories.Length; i++) { + uint len = (uint)(reader.Position - startOffset); + if (len + 8 <= totalSize) + dataDirectories[i] = new ImageDataDirectory(reader, verify); + else + dataDirectories[i] = new ImageDataDirectory(); + } + reader.Position = (long)startOffset + totalSize; + SetEndoffset(reader); + } + } +} diff --git a/dnlib/PE/ImageSectionHeader.cs b/dnlib/PE/ImageSectionHeader.cs new file mode 100644 index 0000000..f8da27e --- /dev/null +++ b/dnlib/PE/ImageSectionHeader.cs @@ -0,0 +1,136 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Diagnostics; +using System.Text; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Represents the IMAGE_SECTION_HEADER PE section + /// + [DebuggerDisplay("RVA:{virtualAddress} VS:{virtualSize} FO:{pointerToRawData} FS:{sizeOfRawData} {displayName}")] + public sealed class ImageSectionHeader : FileSection { + readonly string displayName; + readonly byte[] name; + readonly uint virtualSize; + readonly RVA virtualAddress; + readonly uint sizeOfRawData; + readonly uint pointerToRawData; + readonly uint pointerToRelocations; + readonly uint pointerToLinenumbers; + readonly ushort numberOfRelocations; + readonly ushort numberOfLinenumbers; + readonly uint characteristics; + + /// + /// Returns the human readable section name, ignoring everything after + /// the first nul byte + /// + public string DisplayName { + get { return displayName; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.Name field + /// + public byte[] Name { + get { return name; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.VirtualSize field + /// + public uint VirtualSize { + get { return virtualSize; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.VirtualAddress field + /// + public RVA VirtualAddress { + get { return virtualAddress; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.SizeOfRawData field + /// + public uint SizeOfRawData { + get { return sizeOfRawData; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.PointerToRawData field + /// + public uint PointerToRawData { + get { return pointerToRawData; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.PointerToRelocations field + /// + public uint PointerToRelocations { + get { return pointerToRelocations; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.PointerToLinenumbers field + /// + public uint PointerToLinenumbers { + get { return pointerToLinenumbers; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.NumberOfRelocations field + /// + public ushort NumberOfRelocations { + get { return numberOfRelocations; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.NumberOfLinenumbers field + /// + public ushort NumberOfLinenumbers { + get { return numberOfLinenumbers; } + } + + /// + /// Returns the IMAGE_SECTION_HEADER.Characteristics field + /// + public uint Characteristics { + get { return characteristics; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify section + /// Thrown if verification fails + public ImageSectionHeader(IImageStream reader, bool verify) { + SetStartOffset(reader); + this.name = reader.ReadBytes(8); + this.virtualSize = reader.ReadUInt32(); + this.virtualAddress = (RVA)reader.ReadUInt32(); + this.sizeOfRawData = reader.ReadUInt32(); + this.pointerToRawData = reader.ReadUInt32(); + this.pointerToRelocations = reader.ReadUInt32(); + this.pointerToLinenumbers = reader.ReadUInt32(); + this.numberOfRelocations = reader.ReadUInt16(); + this.numberOfLinenumbers = reader.ReadUInt16(); + this.characteristics = reader.ReadUInt32(); + SetEndoffset(reader); + displayName = ToString(name); + } + + static string ToString(byte[] name) { + var sb = new StringBuilder(name.Length); + foreach (var b in name) { + if (b == 0) + break; + sb.Append((char)b); + } + return sb.ToString(); + } + } +} diff --git a/dnlib/PE/Machine.cs b/dnlib/PE/Machine.cs new file mode 100644 index 0000000..439e821 --- /dev/null +++ b/dnlib/PE/Machine.cs @@ -0,0 +1,69 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.PE { + /// + /// IMAGE_FILE_HEADER.Machine enum + /// + public enum Machine : ushort { + /// Unknown machine + Unknown = 0, + /// x86 + I386 = 0x014C, + /// MIPS little-endian, 0x160 big-endian + R3000 = 0x0162, + /// MIPS little-endian + R4000 = 0x0166, + /// MIPS little-endian + R10000 = 0x0168, + /// MIPS little-endian WCE v2 + WCEMIPSV2 = 0x0169, + /// Alpha_AXP + ALPHA = 0x0184, + /// SH3 little-endian + SH3 = 0x01A2, + /// + SH3DSP = 0x01A3, + /// SH3E little-endian + SH3E = 0x01A4, + /// SH4 little-endian + SH4 = 0x01A6, + /// SH5 + SH5 = 0x01A8, + /// ARM Little-Endian + ARM = 0x01C0, + /// ARM Thumb/Thumb-2 Little-Endian + THUMB = 0x01C2, + /// ARM Thumb-2 Little-Endian + ARMNT = 0x01C4, + /// + AM33 = 0x01D3, + /// IBM PowerPC Little-Endian + POWERPC = 0x01F0, + /// + POWERPCFP = 0x01F1, + /// IA-64 + IA64 = 0x0200, + /// + MIPS16 = 0x0266, + /// + ALPHA64 = 0x0284, + /// + MIPSFPU = 0x0366, + /// + MIPSFPU16 = 0x0466, + /// Infineon + TRICORE = 0x0520, + /// + CEF = 0x0CEF, + /// EFI Byte Code + EBC = 0x0EBC, + /// x64 + AMD64 = 0x8664, + /// M32R little-endian + M32R = 0x9041, + /// + ARM64 = 0xAA64, + /// + CEE = 0xC0EE, + } +} diff --git a/dnlib/PE/PEExtensions.cs b/dnlib/PE/PEExtensions.cs new file mode 100644 index 0000000..10cb179 --- /dev/null +++ b/dnlib/PE/PEExtensions.cs @@ -0,0 +1,32 @@ +// dnlib: See LICENSE.txt for more info + +using System.IO; + +namespace dnlib.PE { + /// + /// Extension methods + /// + public static partial class PEExtensions { + /// + /// Calculates a PE checksum + /// + /// Reader + /// Length of image + /// Offset of checksum + /// PE checksum + internal static uint CalculatePECheckSum(this BinaryReader reader, long length, long checkSumOffset) { + uint checkSum = 0; + for (long i = 0; i < length; i += 2) { + if (i == checkSumOffset) { + reader.ReadUInt32(); + i += 2; + continue; + } + checkSum += reader.ReadUInt16(); + checkSum = (ushort)(checkSum + (checkSum >> 16)); + } + ulong cks = (ulong)checkSum + (ulong)length; + return (uint)cks + (uint)(cks >> 32); + } + } +} diff --git a/dnlib/PE/PEImage.cs b/dnlib/PE/PEImage.cs new file mode 100644 index 0000000..10a4ab1 --- /dev/null +++ b/dnlib/PE/PEImage.cs @@ -0,0 +1,354 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.Utils; +using dnlib.W32Resources; +using dnlib.IO; +using dnlib.Threading; + +namespace dnlib.PE { + /// + /// Image layout + /// + public enum ImageLayout { + /// + /// Use this if the PE file has a normal structure (eg. it's been read from a file on disk) + /// + File, + + /// + /// Use this if the PE file has been loaded into memory by the OS PE file loader + /// + Memory, + } + + /// + /// Accesses a PE file + /// + public sealed class PEImage : IPEImage { + // Default to false because an OS loaded PE image may contain memory holes. If there + // are memory holes, other code (eg. .NET resource creator) must verify that all memory + // is available, which will be slower. + const bool USE_MEMORY_LAYOUT_WITH_MAPPED_FILES = false; + + static readonly IPEType MemoryLayout = new MemoryPEType(); + static readonly IPEType FileLayout = new FilePEType(); + + IImageStream imageStream; + IImageStreamCreator imageStreamCreator; + IPEType peType; + PEInfo peInfo; + UserValue win32Resources; +#if THREAD_SAFE + readonly Lock theLock = Lock.Create(); +#endif + + sealed class FilePEType : IPEType { + /// + public RVA ToRVA(PEInfo peInfo, FileOffset offset) { + return peInfo.ToRVA(offset); + } + + /// + public FileOffset ToFileOffset(PEInfo peInfo, RVA rva) { + return peInfo.ToFileOffset(rva); + } + } + + sealed class MemoryPEType : IPEType { + /// + public RVA ToRVA(PEInfo peInfo, FileOffset offset) { + return (RVA)offset; + } + + /// + public FileOffset ToFileOffset(PEInfo peInfo, RVA rva) { + return (FileOffset)rva; + } + } + + /// + public bool IsFileImageLayout { + get { return peType is FilePEType; } + } + + /// + public bool MayHaveInvalidAddresses { + get { return !IsFileImageLayout; } + } + + /// + public string FileName { + get { return imageStreamCreator.FileName; } + } + + /// + public ImageDosHeader ImageDosHeader { + get { return peInfo.ImageDosHeader; } + } + + /// + public ImageNTHeaders ImageNTHeaders { + get { return peInfo.ImageNTHeaders; } + } + + /// + public IList ImageSectionHeaders { + get { return peInfo.ImageSectionHeaders; } + } + + /// + public Win32Resources Win32Resources { + get { return win32Resources.Value; } + set { + IDisposable origValue = null; + if (win32Resources.IsValueInitialized) { + origValue = win32Resources.Value; + if (origValue == value) + return; + } + win32Resources.Value = value; + + if (origValue != null) + origValue.Dispose(); + } + } + + /// + /// Constructor + /// + /// The PE stream creator + /// Image layout + /// Verify PE file data + public PEImage(IImageStreamCreator imageStreamCreator, ImageLayout imageLayout, bool verify) { + try { + this.imageStreamCreator = imageStreamCreator; + this.peType = ConvertImageLayout(imageLayout); + ResetReader(); + this.peInfo = new PEInfo(imageStream, verify); + Initialize(); + } + catch { + Dispose(); + throw; + } + } + + void Initialize() { + win32Resources.ReadOriginalValue = () => { + var dataDir = peInfo.ImageNTHeaders.OptionalHeader.DataDirectories[2]; + if (dataDir.VirtualAddress == 0 || dataDir.Size == 0) + return null; + return new Win32ResourcesPE(this); + }; +#if THREAD_SAFE + win32Resources.Lock = theLock; +#endif + } + + static IPEType ConvertImageLayout(ImageLayout imageLayout) { + switch (imageLayout) { + case ImageLayout.File: return FileLayout; + case ImageLayout.Memory: return MemoryLayout; + default: throw new ArgumentException("imageLayout"); + } + } + + /// + /// Constructor + /// + /// Name of the file + /// true if we should map it as an executable + /// Verify PE file data + public PEImage(string fileName, bool mapAsImage, bool verify) + : this(ImageStreamCreator.Create(fileName, mapAsImage), mapAsImage ? ImageLayout.Memory : ImageLayout.File, verify) { + try { + if (mapAsImage && imageStreamCreator is MemoryMappedFileStreamCreator) { + ((MemoryMappedFileStreamCreator)imageStreamCreator).Length = peInfo.GetImageSize(); + ResetReader(); + } + } + catch { + Dispose(); + throw; + } + } + + /// + /// Constructor + /// + /// Name of the file + /// Verify PE file data + public PEImage(string fileName, bool verify) + : this(fileName, USE_MEMORY_LAYOUT_WITH_MAPPED_FILES, verify) { + } + + /// + /// Constructor + /// + /// Name of the file + public PEImage(string fileName) + : this(fileName, true) { + } + + /// + /// Constructor + /// + /// The PE file data + /// Image layout + /// Verify PE file data + public PEImage(byte[] data, ImageLayout imageLayout, bool verify) + : this(new MemoryStreamCreator(data), imageLayout, verify) { + } + + /// + /// Constructor + /// + /// The PE file data + /// Verify PE file data + public PEImage(byte[] data, bool verify) + : this(data, ImageLayout.File, verify) { + } + + /// + /// Constructor + /// + /// The PE file data + public PEImage(byte[] data) + : this(data, true) { + } + + /// + /// Constructor + /// + /// Address of PE image + /// Length of PE image + /// Image layout + /// Verify PE file data + public PEImage(IntPtr baseAddr, long length, ImageLayout imageLayout, bool verify) + : this(new UnmanagedMemoryStreamCreator(baseAddr, length), imageLayout, verify) { + } + + /// + /// Constructor + /// + /// Address of PE image + /// Length of PE image + /// Verify PE file data + public PEImage(IntPtr baseAddr, long length, bool verify) + : this(baseAddr, length, ImageLayout.Memory, verify) { + } + + /// + /// Constructor + /// + /// Address of PE image + /// Length of PE image + public PEImage(IntPtr baseAddr, long length) + : this(baseAddr, length, true) { + } + + /// + /// Constructor + /// + /// Address of PE image + /// Image layout + /// Verify PE file data + public PEImage(IntPtr baseAddr, ImageLayout imageLayout, bool verify) + : this(new UnmanagedMemoryStreamCreator(baseAddr, 0x10000), imageLayout, verify) { + try { + ((UnmanagedMemoryStreamCreator)imageStreamCreator).Length = peInfo.GetImageSize(); + ResetReader(); + } + catch { + Dispose(); + throw; + } + } + + /// + /// Constructor + /// + /// Address of PE image + /// Verify PE file data + public PEImage(IntPtr baseAddr, bool verify) + : this(baseAddr, ImageLayout.Memory, verify) { + } + + /// + /// Constructor + /// + /// Address of PE image + public PEImage(IntPtr baseAddr) + : this(baseAddr, true) { + } + + void ResetReader() { + if (imageStream != null) { + imageStream.Dispose(); + imageStream = null; + } + imageStream = imageStreamCreator.CreateFull(); + } + + /// + public RVA ToRVA(FileOffset offset) { + return peType.ToRVA(peInfo, offset); + } + + /// + public FileOffset ToFileOffset(RVA rva) { + return peType.ToFileOffset(peInfo, rva); + } + + /// + public void Dispose() { + IDisposable id; + if (win32Resources.IsValueInitialized && (id = win32Resources.Value) != null) + id.Dispose(); + if ((id = imageStream) != null) + id.Dispose(); + if ((id = imageStreamCreator) != null) + id.Dispose(); + win32Resources.Value = null; + imageStream = null; + imageStreamCreator = null; + peType = null; + peInfo = null; + } + + /// + public IImageStream CreateStream(FileOffset offset) { + if ((long)offset > imageStreamCreator.Length) + throw new ArgumentOutOfRangeException("offset"); + long length = imageStreamCreator.Length - (long)offset; + return CreateStream(offset, length); + } + + /// + public IImageStream CreateStream(FileOffset offset, long length) { + return imageStreamCreator.Create(offset, length); + } + + /// + public IImageStream CreateFullStream() { + return imageStreamCreator.CreateFull(); + } + + /// + public void UnsafeDisableMemoryMappedIO() { + var creator = imageStreamCreator as MemoryMappedFileStreamCreator; + if (creator != null) + creator.UnsafeDisableMemoryMappedIO(); + } + + /// + public bool IsMemoryMappedIO { + get { + var creator = imageStreamCreator as MemoryMappedFileStreamCreator; + return creator == null ? false : creator.IsMemoryMappedIO; + } + } + } +} diff --git a/dnlib/PE/PEInfo.cs b/dnlib/PE/PEInfo.cs new file mode 100644 index 0000000..9271f79 --- /dev/null +++ b/dnlib/PE/PEInfo.cs @@ -0,0 +1,130 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using dnlib.IO; + +namespace dnlib.PE { + /// + /// Reads all PE sections from a PE stream + /// + sealed class PEInfo { + readonly ImageDosHeader imageDosHeader; + readonly ImageNTHeaders imageNTHeaders; + readonly ImageSectionHeader[] imageSectionHeaders; + + /// + /// Returns the DOS header + /// + public ImageDosHeader ImageDosHeader { + get { return imageDosHeader; } + } + + /// + /// Returns the NT headers + /// + public ImageNTHeaders ImageNTHeaders { + get { return imageNTHeaders; } + } + + /// + /// Returns the section headers + /// + public ImageSectionHeader[] ImageSectionHeaders { + get { return imageSectionHeaders; } + } + + /// + /// Constructor + /// + /// PE file reader pointing to the start of this section + /// Verify sections + /// Thrown if verification fails + public PEInfo(IImageStream reader, bool verify) { + reader.Position = 0; + this.imageDosHeader = new ImageDosHeader(reader, verify); + + if (verify && this.imageDosHeader.NTHeadersOffset == 0) + throw new BadImageFormatException("Invalid NT headers offset"); + reader.Position = this.imageDosHeader.NTHeadersOffset; + this.imageNTHeaders = new ImageNTHeaders(reader, verify); + + reader.Position = (long)this.imageNTHeaders.OptionalHeader.StartOffset + this.imageNTHeaders.FileHeader.SizeOfOptionalHeader; + this.imageSectionHeaders = new ImageSectionHeader[this.imageNTHeaders.FileHeader.NumberOfSections]; + for (int i = 0; i < this.imageSectionHeaders.Length; i++) + this.imageSectionHeaders[i] = new ImageSectionHeader(reader, verify); + } + + /// + /// Returns the first that has data at file offset + /// + /// + /// The file offset + /// + public ImageSectionHeader ToImageSectionHeader(FileOffset offset) { + foreach (var section in imageSectionHeaders) { + if ((long)offset >= section.PointerToRawData && (long)offset < section.PointerToRawData + section.SizeOfRawData) + return section; + } + return null; + } + + /// + /// Returns the first that has data at RVA + /// + /// + /// The RVA + /// + public ImageSectionHeader ToImageSectionHeader(RVA rva) { + foreach (var section in imageSectionHeaders) { + if (rva >= section.VirtualAddress && rva < section.VirtualAddress + Math.Max(section.VirtualSize, section.SizeOfRawData)) + return section; + } + return null; + } + + /// + /// Converts a to an + /// + /// The file offset to convert + /// The RVA + public RVA ToRVA(FileOffset offset) { + var section = ToImageSectionHeader(offset); + if (section != null) + return (uint)(offset - section.PointerToRawData) + section.VirtualAddress; + return (RVA)offset; + } + + /// + /// Converts an to a + /// + /// The RVA to convert + /// The file offset + public FileOffset ToFileOffset(RVA rva) { + var section = ToImageSectionHeader(rva); + if (section != null) + return (FileOffset)((long)(rva - section.VirtualAddress) + section.PointerToRawData); + return (FileOffset)rva; + } + + static ulong alignUp(ulong val, uint alignment) { + return (val + alignment - 1) & ~(ulong)(alignment - 1); + } + + /// + /// Returns size of image rounded up to + /// + /// It calculates the size itself, and does not return + /// Size of image in bytes + public long GetImageSize() { + var optHdr = ImageNTHeaders.OptionalHeader; + uint alignment = optHdr.SectionAlignment; + ulong len = alignUp(optHdr.SizeOfHeaders, alignment); + foreach (var section in imageSectionHeaders) { + ulong len2 = alignUp((ulong)section.VirtualAddress + Math.Max(section.VirtualSize, section.SizeOfRawData), alignment); + if (len2 > len) + len = len2; + } + return (long)len; + } + } +} diff --git a/dnlib/PE/RVA.cs b/dnlib/PE/RVA.cs new file mode 100644 index 0000000..74179ef --- /dev/null +++ b/dnlib/PE/RVA.cs @@ -0,0 +1,29 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.PE { + /// + /// Represents an RVA (relative virtual address) + /// + public enum RVA : uint { + } + + partial class PEExtensions { + /// + /// Align up + /// + /// this + /// Alignment + public static RVA AlignUp(this RVA rva, uint alignment) { + return (RVA)(((uint)rva + alignment - 1) & ~(alignment - 1)); + } + + /// + /// Align up + /// + /// this + /// Alignment + public static RVA AlignUp(this RVA rva, int alignment) { + return (RVA)(((uint)rva + alignment - 1) & ~(alignment - 1)); + } + } +} diff --git a/dnlib/PE/Subsystem.cs b/dnlib/PE/Subsystem.cs new file mode 100644 index 0000000..c898182 --- /dev/null +++ b/dnlib/PE/Subsystem.cs @@ -0,0 +1,37 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.PE { + /// + /// IMAGE_OPTIONAL_HEADER.Subsystem + /// + public enum Subsystem : ushort { + /// Unknown subsystem. + Unknown = 0, + /// Image doesn't require a subsystem. + Native = 1, + /// Image runs in the Windows GUI subsystem. + WindowsGui = 2, + /// Image runs in the Windows character subsystem. + WindowsCui = 3, + /// image runs in the OS/2 character subsystem. + Os2Cui = 5, + /// image runs in the Posix character subsystem. + PosixCui = 7, + /// image is a native Win9x driver. + NativeWindows = 8, + /// Image runs in the Windows CE subsystem. + WindowsCeGui = 9, + /// + EfiApplication = 10, + /// + EfiBootServiceDriver = 11, + /// + EfiRuntimeDriver = 12, + /// + EfiRom = 13, + /// + Xbox = 14, + /// + WindowsBootApplication = 16, + } +} diff --git a/dnlib/Properties/AssemblyInfo.cs b/dnlib/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..011f476 --- /dev/null +++ b/dnlib/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +// dnlib: See LICENSE.txt for more info + +using System.Reflection; +using System.Runtime.InteropServices; + +#if THREAD_SAFE +[assembly: AssemblyTitle("dnlib (thread safe)")] +#else +[assembly: AssemblyTitle("dnlib")] +#endif +[assembly: AssemblyDescription(".NET assembly reader/writer")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("dnlib")] +[assembly: AssemblyCopyright("Copyright (C) 2012-2015 de4dot@gmail.com")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] +[assembly: AssemblyVersion("1.5.0.1500")] +[assembly: AssemblyFileVersion("1.5.0.1500")] diff --git a/dnlib/Settings.cs b/dnlib/Settings.cs new file mode 100644 index 0000000..277b254 --- /dev/null +++ b/dnlib/Settings.cs @@ -0,0 +1,21 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib { + /// + /// dnlib settings + /// + public static class Settings { + /// + /// true if dnlib is thread safe. (THREAD_SAFE was defined during compilation) + /// + public static bool IsThreadSafe { + get { +#if THREAD_SAFE + return true; +#else + return false; +#endif + } + } + } +} diff --git a/dnlib/Threading/Extensions.cs b/dnlib/Threading/Extensions.cs new file mode 100644 index 0000000..4bb3c88 --- /dev/null +++ b/dnlib/Threading/Extensions.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.Threading { + /// + /// Extension methods + /// + public static partial class Extensions { + } +} diff --git a/dnlib/Threading/ICancellationToken.cs b/dnlib/Threading/ICancellationToken.cs new file mode 100644 index 0000000..e7f74c0 --- /dev/null +++ b/dnlib/Threading/ICancellationToken.cs @@ -0,0 +1,15 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.Threading { + /// + /// Cancellation token interface + /// + public interface ICancellationToken { + /// + /// Throws a if the operation should be canceled + /// + void ThrowIfCancellationRequested(); + } +} diff --git a/dnlib/Threading/IThreadSafeList.cs b/dnlib/Threading/IThreadSafeList.cs new file mode 100644 index 0000000..205d59d --- /dev/null +++ b/dnlib/Threading/IThreadSafeList.cs @@ -0,0 +1,828 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.Threading.Collections { +#if THREAD_SAFE + /// + /// Thread-safe interface + /// + /// List type + public interface IList : System.Collections.Generic.IList { + /// + /// Must only be called when the list lock is held. Gets the index of + /// + /// Item + /// Index of or -1 if it's not present in the list + /// + int IndexOf_NoLock(T item); + + /// + /// Must only be called when the list lock is held. Inserts at index + /// + /// + /// Index + /// Item to insert + /// + void Insert_NoLock(int index, T item); + + /// + /// Must only be called when the list lock is held. Removes the item at index + /// + /// + /// + /// + void RemoveAt_NoLock(int index); + + /// + /// Must only be called when the list lock is held. Returns the value at a specified index. + /// + /// Index + /// Value + /// + T Get_NoLock(int index); + + /// + /// Must only be called when the list lock is held. Writes to the list at a specified index. + /// + /// Index + /// Value + /// + void Set_NoLock(int index, T value); + + /// + /// Must only be called when the list lock is held. Adds a new element to the end of the + /// list. + /// + /// Item + /// + void Add_NoLock(T item); + + /// + /// Must only be called when the list lock is held. Clears the list. + /// + /// + void Clear_NoLock(); + + /// + /// Must only be called when the list lock is held. Checks whether + /// exists in the list. + /// + /// Item + /// true if exists in the list, else false + /// + bool Contains_NoLock(T item); + + /// + /// Must only be called when the list lock is held. Copies the list to an array. + /// + /// Destination array + /// Destination array index + /// + void CopyTo_NoLock(T[] array, int arrayIndex); + + /// + /// Must only be called when the list lock is held. Returns the size of the list. + /// + /// + int Count_NoLock { get; } + + /// + /// Must only be called when the list lock is held. Returns true if the list is + /// read-only, false if it's writable. + /// + /// + bool IsReadOnly_NoLock { get; } + + /// + /// Must only be called when the list lock is held. Removes from the + /// list. + /// + /// Item + /// true if was removed, false if + /// was never inserted in the list. + /// + bool Remove_NoLock(T item); + + /// + /// Must only be called when the list lock is held. Gets the enumerator. + /// + /// A new enumerator instance + /// + IEnumerator GetEnumerator_NoLock(); + + /// + /// Locks the list and then calls . + /// must only call *_NoLock() methods. The list is unlocked once this method returns. + /// + /// Argument type + /// Return type + /// Passed to + /// Handler that should execute when the lock is held + /// The value returns + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + TRetType ExecuteLocked(TArgType arg, ExecuteLockedDelegate handler); + } +#endif +} + +namespace dnlib.Threading { + /// + /// Passed to ExecuteLocked() + /// + /// Type to store in list + /// Argument type + /// Return type + /// A thread-safe list + /// The argument + /// Any value the user wants to return + public delegate TRetType ExecuteLockedDelegate(ThreadSafe.IList tsList, TArgType arg); + +#if THREAD_SAFE + /// + /// Called by + /// + /// Type to store in list + /// A thread-safe list + /// Index of + /// Value at in the list + /// false to break out of the iterator loop and return + public delegate bool IterateDelegate(ThreadSafe.IList tsList, int index, T value); + + /// + /// Called by + /// and + /// + /// Type to store in list + /// A thread-safe list + /// Index of + /// Value at in the list + public delegate void IterateAllDelegate(ThreadSafe.IList tsList, int index, T value); +#endif + + /// + /// Called by + /// + /// Type to store in list + /// A list + /// Index of + /// Value at in the list + /// false to break out of the iterator loop and return + public delegate bool ListIterateDelegate(IList list, int index, T value); + + /// + /// Called by + /// and + /// + /// Type to store in list + /// A list + /// Index of + /// Value at in the list + /// false to break out of the iterator loop and return + public delegate void ListIterateAllDelegate(IList list, int index, T value); + + /// + /// Called by + /// + /// Type stored in enumerable + /// Index of + /// Value at in the collection + /// false to break out of the iterator loop and return + public delegate bool EnumerableIterateDelegate(int index, T value); + + /// + /// Called by + /// + /// Type stored in enumerable + /// Index of + /// Value at in the collection + /// false to break out of the iterator loop and return + public delegate void EnumerableIterateAllDelegate(int index, T value); + + public static partial class Extensions { + /// + /// Locks the list and then calls . + /// must only call *_NoLock() methods. The list is unlocked once this method returns. + /// + /// List type + /// Argument type + /// Return type + /// A list + /// Passed to + /// Handler that should execute when the lock is held + /// The value returns + public static TRetType ExecuteLocked(this ThreadSafe.IList tsList, TArgType arg, ExecuteLockedDelegate handler) { +#if THREAD_SAFE + return tsList.ExecuteLocked(arg, handler); +#else + return handler(tsList, arg); +#endif + } + +#if THREAD_SAFE + /// + /// Iterates over elements in and calls + /// + /// Type to store in list + /// A thread-safe list + /// Called for each element + /// Start index + /// End index. -1 means + /// true if we should iterate in the reverse order + public static void Iterate(this ThreadSafe.IList tsList, int startIndex, int endIndex, bool reverseOrder, IterateDelegate handler) { + tsList.ExecuteLocked(null, (tsList2, arg) => { + if (reverseOrder) { + int i = (endIndex < 0 ? tsList2.Count_NoLock : endIndex) - 1; + for (; i >= startIndex; i--) { + if (!handler(tsList2, i, tsList2.Get_NoLock(i))) + break; + } + } + else { + // Count property can change so check it each time in the loop + for (int i = startIndex; i < (endIndex < 0 ? tsList2.Count_NoLock : endIndex); i++) { + if (!handler(tsList2, i, tsList2.Get_NoLock(i))) + break; + } + } + return null; + }); + } + + /// + /// Iterates over all elements in and calls + /// + /// Type to store in list + /// A thread-safe list + /// Called for each element + public static void Iterate(this ThreadSafe.IList tsList, IterateDelegate handler) { + tsList.Iterate(0, -1, false, handler); + } + + /// + /// Iterates over all elements in and calls + /// + /// Type to store in list + /// A thread-safe list + /// Called for each element + public static void IterateAll(this ThreadSafe.IList tsList, IterateAllDelegate handler) { + tsList.Iterate(0, -1, false, (tsList2, index, value) => { + handler(tsList2, index, value); + return true; + }); + } + + /// + /// Iterates over all elements in in the reverse order and calls + /// + /// + /// Type to store in list + /// A thread-safe list + /// Called for each element + public static void IterateReverse(this ThreadSafe.IList tsList, IterateDelegate handler) { + tsList.Iterate(0, -1, true, handler); + } + + /// + /// Iterates over all elements in in the reverse order and calls + /// + /// + /// Type to store in list + /// A thread-safe list + /// Called for each element + public static void IterateAllReverse(this ThreadSafe.IList tsList, IterateAllDelegate handler) { + tsList.Iterate(0, -1, true, (tsList2, index, value) => { + handler(tsList2, index, value); + return true; + }); + } +#endif + + /// + /// Iterates over elements in and calls . + /// If implements , only thread safe + /// methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + /// Start index + /// End index. -1 means Count_NoLock + /// true if we should iterate in the reverse order + public static void Iterate(this IList list, int startIndex, int endIndex, bool reverseOrder, ListIterateDelegate handler) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.Iterate(startIndex, endIndex, reverseOrder, (tsList2, index, value) => handler(tsList2, index, value)); + else { +#endif + if (reverseOrder) { + int i = (endIndex < 0 ? list.Count : endIndex) - 1; + for (; i >= startIndex; i--) { + if (!handler(list, i, list[i])) + break; + } + } + else { + // Count property can change so check it each time in the loop + for (int i = startIndex; i < (endIndex < 0 ? list.Count : endIndex); i++) { + if (!handler(list, i, list[i])) + break; + } + } +#if THREAD_SAFE + } +#endif + } + + /// + /// Iterates over all elements in and calls + /// . If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + public static void Iterate(this IList list, ListIterateDelegate handler) { + list.Iterate(0, -1, false, handler); + } + + /// + /// Iterates over all elements in and calls + /// . If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + public static void IterateAll(this IList list, ListIterateAllDelegate handler) { + list.Iterate(0, -1, false, (list2, index, value) => { + handler(list2, index, value); + return true; + }); + } + + /// + /// Iterates over all elements in in the reverse order and calls + /// . If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + public static void IterateReverse(this IList list, ListIterateDelegate handler) { + list.Iterate(0, -1, true, handler); + } + + /// + /// Iterates over all elements in in the reverse order and calls + /// . If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + public static void IterateAllReverse(this IList list, ListIterateAllDelegate handler) { + list.Iterate(0, -1, true, (list2, index, value) => { + handler(list2, index, value); + return true; + }); + } + + /// + /// Iterates over all elements in and calls + /// . If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + public static void Iterate(this IEnumerable list, EnumerableIterateDelegate handler) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.Iterate((tsList2, index, value) => handler(index, value)); + else { +#endif + int i = 0; + foreach (var value in list) { + if (!handler(i, value)) + break; + i++; + } +#if THREAD_SAFE + } +#endif + } + + /// + /// Iterates over all elements in and calls + /// . If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Called for each element + public static void IterateAll(this IEnumerable list, EnumerableIterateAllDelegate handler) { + list.Iterate((index, value) => { + handler(index, value); + return true; + }); + } + + /// + /// Reads an element from the list. If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Index + /// Updated with value + /// true if was updated with the element in the + /// list or false if was invalid. + public static bool Get(this IList list, int index, out T value) { +#if THREAD_SAFE + try { +#endif + if ((uint)index < (uint)list.Count) { + value = list[index]; + return true; + } +#if THREAD_SAFE + } + catch (IndexOutOfRangeException) { + } + catch (ArgumentOutOfRangeException) { + } +#endif + value = default(T); + return false; + } + + /// + /// Reads an element from the list. If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Index + /// Default value if is invalid + /// The value in the list or if + /// was invalid + public static T Get(this IList list, int index, T defaultValue) { + T value; + return list.Get(index, out value) ? value : defaultValue; + } + + /// + /// Writes an element to the list. If implements + /// , only thread safe methods are called. + /// + /// Type to store in list + /// A list + /// Index + /// Value + /// true if was written to the list or false + /// if was invalid. + public static bool Set(this IList list, int index, T value) { +#if THREAD_SAFE + try { +#endif + if ((uint)index < (uint)list.Count) { + list[index] = value; + return true; + } +#if THREAD_SAFE + } + catch (IndexOutOfRangeException) { + } + catch (ArgumentOutOfRangeException) { + } +#endif + return false; + } + +#if THREAD_SAFE + /// + /// Calls + /// + /// Type to store in list + /// A thread-safe list + /// Number of elements in the list + public static int Count_NoLock(this ThreadSafe.IList tsList) { + return tsList.Count_NoLock; + } + + /// + /// Calls + /// + /// Type to store in list + /// A thread-safe list + public static bool IsReadOnly_NoLock(this ThreadSafe.IList tsList) { + return tsList.IsReadOnly_NoLock; + } +#endif + + /// + /// Calls the thread-safe IndexOf_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Item + /// Index of + public static int IndexOf_NoLock(this IList list, T item) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.IndexOf_NoLock(item); + else +#endif + return list.IndexOf(item); + } + + /// + /// Calls the thread-safe Insert_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Index + /// Item + public static void Insert_NoLock(this IList list, int index, T item) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.Insert_NoLock(index, item); + else +#endif + list.Insert(index, item); + } + + /// + /// Calls the thread-safe RemoveAt_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Index + public static void RemoveAt_NoLock(this IList list, int index) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.RemoveAt_NoLock(index); + else +#endif + list.RemoveAt(index); + } + + /// + /// Calls the thread-safe Get_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Index + /// Value at index + public static T Get_NoLock(this IList list, int index) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.Get_NoLock(index); + else +#endif + return list[index]; + } + + /// + /// Calls the thread-safe Set_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Index + /// Value + public static void Set_NoLock(this IList list, int index, T value) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.Set_NoLock(index, value); + else +#endif + list[index] = value; + } + + /// + /// Calls the thread-safe Add_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Item + public static void Add_NoLock(this ICollection list, T item) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.Add_NoLock(item); + else +#endif + list.Add(item); + } + + /// + /// Calls the thread-safe Clear_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + public static void Clear_NoLock(this ICollection list) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.Clear_NoLock(); + else +#endif + list.Clear(); + } + + /// + /// Calls the thread-safe Contains_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Item + /// true if is in the list, else false + public static bool Contains_NoLock(this ICollection list, T item) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.Contains_NoLock(item); + else +#endif + return list.Contains(item); + } + + /// + /// Calls the thread-safe CopyTo_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Destination array + /// Destination index + public static void CopyTo_NoLock(this ICollection list, T[] array, int arrayIndex) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + tsList.CopyTo_NoLock(array, arrayIndex); + else +#endif + list.CopyTo(array, arrayIndex); + } + + /// + /// Calls the thread-safe Count_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Number of elements in the list + public static int Count_NoLock(this ICollection list) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.Count_NoLock; + else +#endif + return list.Count; + } + + /// + /// Calls the thread-safe IsReadOnly_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + public static bool IsReadOnly_NoLock(this ICollection list) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.IsReadOnly_NoLock; + else +#endif + return list.IsReadOnly; + } + + /// + /// Calls the thread-safe Remove_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// Item + /// true if was removed, else false + public static bool Remove_NoLock(this ICollection list, T item) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.Remove_NoLock(item); + else +#endif + return list.Remove(item); + } + + /// + /// Calls the thread-safe GetEnumerator_NoLock() method if implements + /// a thread-safe list interface, else calls setter + /// + /// Type to store in list + /// An + /// A new instance + public static IEnumerator GetEnumerator_NoLock(this IEnumerable list) { +#if THREAD_SAFE + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList.GetEnumerator_NoLock(); + else +#endif + return list.GetEnumerator(); + } + + /// + /// Calls to get an + /// which is used to iterate over the whole list. Each item is + /// then returned to the caller. + /// + /// Type to store in list + /// An + /// All items of the list + public static IEnumerable GetEnumerable_NoLock(this ICollection list) { + using (var enumerator = list.GetEnumerator_NoLock()) { + while (enumerator.MoveNext()) + yield return enumerator.Current; + } + } + + /// + /// Iterates over the whole list but doesn't keep the lock. It doesn't use any enumerator + /// so no exception can be thrown if another thread modifies the list. + /// + /// Type to store in list + /// A list + /// A list enumerable + public static IEnumerable GetSafeEnumerable(this IList list) { + for (int i = 0; i < list.Count; i++) { + T value; +#if THREAD_SAFE + try { +#endif + value = list[i]; +#if THREAD_SAFE + } + catch (IndexOutOfRangeException) { + break; + } + catch (ArgumentOutOfRangeException) { + break; + } +#endif + yield return value; + } + } + + /// + /// Iterates over the whole list but doesn't keep the lock. It doesn't use any enumerator + /// so no exception can be thrown if another thread modifies the list. + /// + /// Type to store in list + /// A collection + /// A list enumerable + public static IEnumerable GetSafeEnumerable(this IEnumerable coll) { + var list = coll as IList; + if (list != null) + return GetSafeEnumerable(list); + + return coll; + } + } +} diff --git a/dnlib/Threading/Lock.cs b/dnlib/Threading/Lock.cs new file mode 100644 index 0000000..5bbebc1 --- /dev/null +++ b/dnlib/Threading/Lock.cs @@ -0,0 +1,88 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; + +namespace dnlib.Threading { +#if THREAD_SAFE + [Serializable] + class LockException : Exception { + public LockException() { + } + + public LockException(string msg) + : base(msg) { + } + } + + /// + /// Simple class using and + /// and just like ReaderWriterLockSlim it prevents recursive locks. It doesn't support + /// multiple readers. A reader lock is the same as a writer lock. + /// + class Lock { + readonly object lockObj; + int recurseCount; + + /// + /// Creates a new instance of this class + /// + /// + public static Lock Create() { + return new Lock(); + } + + /// + /// Constructor + /// + Lock() { + this.lockObj = new object(); + this.recurseCount = 0; + } + + /// + /// Enter read mode + /// + public void EnterReadLock() { + Monitor.Enter(lockObj); + if (recurseCount != 0) { + Monitor.Exit(lockObj); + throw new LockException("Recursive locks aren't supported"); + } + recurseCount++; + } + + /// + /// Exit read mode + /// + public void ExitReadLock() { + if (recurseCount <= 0) + throw new LockException("Too many exit lock method calls"); + recurseCount--; + Monitor.Exit(lockObj); + } + + /// + /// Enter write mode + /// + public void EnterWriteLock() { + Monitor.Enter(lockObj); + if (recurseCount != 0) { + Monitor.Exit(lockObj); + throw new LockException("Recursive locks aren't supported"); + } + recurseCount--; + } + + /// + /// Exit write mode + /// + public void ExitWriteLock() { + if (recurseCount >= 0) + throw new LockException("Too many exit lock method calls"); + recurseCount++; + Monitor.Exit(lockObj); + } + } +#endif +} diff --git a/dnlib/Threading/ThreadSafeListCreator.cs b/dnlib/Threading/ThreadSafeListCreator.cs new file mode 100644 index 0000000..33d00d3 --- /dev/null +++ b/dnlib/Threading/ThreadSafeListCreator.cs @@ -0,0 +1,142 @@ +// dnlib: See LICENSE.txt for more info + +using System.Collections.Generic; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.Threading { + /// + /// Creates thread-safe lists + /// + public static class ThreadSafeListCreator { + /// + /// Creates a thread safe + /// + /// List type + /// A new thread-safe list instance + public static ThreadSafe.IList Create() { + var list = new List(); +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Creates a thread safe + /// + /// List type + /// Value to add to the list + /// A new thread-safe list instance + public static ThreadSafe.IList Create(T value) { + var list = new List() { value }; +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Creates a thread safe + /// + /// List type + /// Value #1 to add to the list + /// Value #2 to add to the list + /// A new thread-safe list instance + public static ThreadSafe.IList Create(T value1, T value2) { + var list = new List() { value1, value2 }; +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Creates a thread safe + /// + /// List type + /// Value #1 to add to the list + /// Value #2 to add to the list + /// Value #3 to add to the list + /// A new thread-safe list instance + public static ThreadSafe.IList Create(T value1, T value2, T value3) { + var list = new List() { value1, value2, value3 }; +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Creates a thread safe + /// + /// List type + /// Values to add to the list + /// A new thread-safe list instance + public static ThreadSafe.IList Create(params T[] args) { + var list = new List(args); +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Creates a thread safe + /// + /// List type + /// List capacity + /// A new thread-safe list instance + public static ThreadSafe.IList Create(int capacity) { + var list = new List(capacity); +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Creates a thread safe + /// + /// List type + /// Values to copy to the new list + /// A new thread-safe list instance + public static ThreadSafe.IList Create(IEnumerable collection) { + var list = new List(collection); +#if THREAD_SAFE + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + + /// + /// Makes a list thread-safe by using a thread-safe wrapper list + /// + /// List type + /// The list that should be made thread-safe + /// A thread-safe list using as the underlying list + public static ThreadSafe.IList MakeThreadSafe(IList list) { +#if THREAD_SAFE + if (list == null) + return null; + var tsList = list as ThreadSafe.IList; + if (tsList != null) + return tsList; + return new ThreadSafeListWrapper(list); +#else + return list; +#endif + } + } +} diff --git a/dnlib/Threading/ThreadSafeListWrapper.cs b/dnlib/Threading/ThreadSafeListWrapper.cs new file mode 100644 index 0000000..8c6dae1 --- /dev/null +++ b/dnlib/Threading/ThreadSafeListWrapper.cs @@ -0,0 +1,209 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Diagnostics; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.Threading { +#if THREAD_SAFE + /// + /// Protects an from being accessed by multiple threads at the same time + /// + /// List type + [DebuggerDisplay("Count = {Count}")] + sealed class ThreadSafeListWrapper : ThreadSafe.IList { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly Lock theLock = Lock.Create(); + + readonly IList list; + + /// + /// Constructor + /// + /// A list + public ThreadSafeListWrapper(IList list) { + if (list == null) + throw new ArgumentNullException("list"); + this.list = list; + } + + /// + public int IndexOf(T item) { + // We need a write lock since we don't know whether 'list' modifies any internal fields. + theLock.EnterWriteLock(); try { + return list.IndexOf(item); + } finally { theLock.ExitWriteLock(); } + } + + /// + public void Insert(int index, T item) { + theLock.EnterWriteLock(); try { + list.Insert(index, item); + } finally { theLock.ExitWriteLock(); } + } + + /// + public void RemoveAt(int index) { + theLock.EnterWriteLock(); try { + list.RemoveAt(index); + } finally { theLock.ExitWriteLock(); } + } + + /// + public T this[int index] { + get { + theLock.EnterWriteLock(); try { + return list[index]; + } finally { theLock.ExitWriteLock(); } + } + set { + theLock.EnterWriteLock(); try { + list[index] = value; + } finally { theLock.ExitWriteLock(); } + } + } + + /// + public void Add(T item) { + theLock.EnterWriteLock(); try { + list.Add(item); + } finally { theLock.ExitWriteLock(); } + } + + /// + public void Clear() { + theLock.EnterWriteLock(); try { + list.Clear(); + } finally { theLock.ExitWriteLock(); } + } + + /// + public bool Contains(T item) { + theLock.EnterWriteLock(); try { + return list.Contains(item); + } finally { theLock.ExitWriteLock(); } + } + + /// + public void CopyTo(T[] array, int arrayIndex) { + theLock.EnterWriteLock(); try { + list.CopyTo(array, arrayIndex); + } finally { theLock.ExitWriteLock(); } + } + + /// + public int Count { + get { + theLock.EnterWriteLock(); try { + return list.Count; + } finally { theLock.ExitWriteLock(); } + } + } + + /// + public bool IsReadOnly { + get { + theLock.EnterWriteLock(); try { + return list.IsReadOnly; + } finally { theLock.ExitWriteLock(); } + } + } + + /// + public bool Remove(T item) { + theLock.EnterWriteLock(); try { + return list.Remove(item); + } finally { theLock.ExitWriteLock(); } + } + + /// + public IEnumerator GetEnumerator() { + theLock.EnterWriteLock(); try { + return list.GetEnumerator(); + } finally { theLock.ExitWriteLock(); } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + + /// + public int Count_NoLock { + get { return list.Count; } + } + + /// + public bool IsReadOnly_NoLock { + get { return list.IsReadOnly; } + } + + /// + public int IndexOf_NoLock(T item) { + return list.IndexOf(item); + } + + /// + public void Insert_NoLock(int index, T item) { + list.Insert(index, item); + } + + /// + public void RemoveAt_NoLock(int index) { + list.RemoveAt(index); + } + + /// + public T Get_NoLock(int index) { + return list[index]; + } + + /// + public void Set_NoLock(int index, T value) { + list[index] = value; + } + + /// + public void Add_NoLock(T item) { + list.Add(item); + } + + /// + public void Clear_NoLock() { + list.Clear(); + } + + /// + public bool Contains_NoLock(T item) { + return list.Contains(item); + } + + /// + public void CopyTo_NoLock(T[] array, int arrayIndex) { + list.CopyTo(array, arrayIndex); + } + + /// + public bool Remove_NoLock(T item) { + return list.Remove(item); + } + + /// + public IEnumerator GetEnumerator_NoLock() { + return list.GetEnumerator(); + } + + /// + public TRetType ExecuteLocked(TArgType arg, ExecuteLockedDelegate handler) { + theLock.EnterWriteLock(); try { + return handler(this, arg); + } finally { theLock.ExitWriteLock(); } + } + } +#endif +} diff --git a/dnlib/Utils/Extensions.cs b/dnlib/Utils/Extensions.cs new file mode 100644 index 0000000..88fb2f6 --- /dev/null +++ b/dnlib/Utils/Extensions.cs @@ -0,0 +1,9 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.Utils { + /// + /// Extension methods + /// + public static partial class Extensions { + } +} diff --git a/dnlib/Utils/ILazyList.cs b/dnlib/Utils/ILazyList.cs new file mode 100644 index 0000000..bb1224b --- /dev/null +++ b/dnlib/Utils/ILazyList.cs @@ -0,0 +1,60 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.Utils { + /// + /// Interface to access a lazily initialized list + /// + /// Type to store in list + public interface ILazyList : ThreadSafe.IList { + /// + /// Checks whether an element at has been initialized. + /// + /// Index of element + /// true if the element has been initialized, false otherwise + bool IsInitialized(int index); + + /// + /// Checks whether an element at has been initialized. + /// + /// Index of element + /// true if the element has been initialized, false otherwise + bool IsInitialized_NoLock(int index); + + /// + /// Gets all initialized elements + /// + /// true if the list should be cleared before returning, + /// false if the list should not cleared. + List GetInitializedElements(bool clearList); + } + + public static partial class Extensions { + /// + /// Disposes all initialized elements + /// + /// Element type + /// this + public static void DisposeAll(this ILazyList list) where TValue : IDisposable { + list.ExecuteLocked(null, (tsList, arg) => { + for (int i = 0; i < list.Count_NoLock(); i++) { + if (list.IsInitialized_NoLock(i)) { + var elem = list.Get_NoLock(i); + if (elem != null) + elem.Dispose(); + } + } + return null; + }); + } + } +} diff --git a/dnlib/Utils/LazyList.cs b/dnlib/Utils/LazyList.cs new file mode 100644 index 0000000..360f43b --- /dev/null +++ b/dnlib/Utils/LazyList.cs @@ -0,0 +1,552 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using dnlib.Threading; + +namespace dnlib.Utils { + /// + /// Gets notified of list events + /// + /// List value + public interface IListListener { + /// + /// Called before a new value is lazily added to the list. + /// + /// If you must access this list, you can only call _NoLock() methods + /// since a write lock is now held by this thread. + /// Index where the value will be added + /// Value that will be added to the list. It can be modified by + /// the callee. + void OnLazyAdd(int index, ref TListValue value); + + /// + /// Called before a new value is added to the list. + /// + /// If you must access this list, you can only call _NoLock() methods + /// since a write lock is now held by this thread. + /// Index where the value will be added + /// Value that will be added to the list + void OnAdd(int index, TListValue value); + + /// + /// Called before a value is removed from the list. If all elements are removed, + /// is called, and this method is not called. + /// + /// If you must access this list, you can only call _NoLock() methods + /// since a write lock is now held by this thread. + /// Index of value + /// The value that will be removed + void OnRemove(int index, TListValue value); + + /// + /// Called after the list has been resized (eg. an element has been added/removed). It's not + /// called when an element is replaced. + /// + /// If you must access this list, you can only call _NoLock() methods + /// since a write lock is now held by this thread. + /// Index where the change occurred. + void OnResize(int index); + + /// + /// Called before the whole list is cleared. + /// + /// If you must access this list, you can only call _NoLock() methods + /// since a write lock is now held by this thread. + void OnClear(); + } + + /// + /// Implements a that is lazily initialized + /// + /// Type to store in list + [DebuggerDisplay("Count = {Count}")] + public class LazyList : ILazyList where TValue : class { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly object context; + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly MFunc readOriginalValue; + + [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] + readonly List list; + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + int id = 0; + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly IListListener listener; + +#if THREAD_SAFE + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly Lock theLock = Lock.Create(); +#endif + + /// + /// Stores a simple value + /// + class Element { + protected TValue value; + + /// + /// true if it has been initialized, false otherwise + /// + public virtual bool IsInitialized_NoLock { + get { return true; } + } + + /// + /// Default constructor + /// + protected Element() { + } + + /// + /// Constructor that should be used when new elements are inserted into + /// + /// User data + public Element(TValue data) { + this.value = data; + } + + /// + /// Gets the value + /// + /// Index in the list + public virtual TValue GetValue_NoLock(int index) { + return value; + } + + /// + /// Sets the value + /// + /// Index in the list + /// New value + public virtual void SetValue_NoLock(int index, TValue value) { + this.value = value; + } + + /// + public override string ToString() { + return value == null ? string.Empty : value.ToString(); + } + } + + /// + /// Stores data and keeps track of the original index and whether the data has been + /// initialized or not. + /// + sealed class LazyElement : Element { + internal readonly uint origIndex; + LazyList lazyList; + + /// + public override bool IsInitialized_NoLock { + get { return lazyList == null; } + } + + /// + public override TValue GetValue_NoLock(int index) { + if (lazyList != null) { + value = lazyList.ReadOriginalValue_NoLock(index, origIndex); + lazyList = null; + } + return value; + } + + /// + public override void SetValue_NoLock(int index, TValue value) { + this.value = value; + lazyList = null; + } + + /// + /// Constructor that should only be called when is initialized. + /// + /// Original index of this element + /// LazyList instance + public LazyElement(int origIndex, LazyList lazyList) { + this.origIndex = (uint)origIndex; + this.lazyList = lazyList; + } + + /// + public override string ToString() { + if (lazyList != null) { + value = lazyList.ReadOriginalValue_NoLock(this); + lazyList = null; + } + return value == null ? string.Empty : value.ToString(); + } + } + + /// + [DebuggerBrowsableAttribute(DebuggerBrowsableState.Never)] + public int Count { + get { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return Count_NoLock; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + } + + /// + [DebuggerBrowsableAttribute(DebuggerBrowsableState.Never)] + public int Count_NoLock { + get { return list.Count; } + } + + /// + [DebuggerBrowsableAttribute(DebuggerBrowsableState.Never)] + public bool IsReadOnly { + get { return false; } + } + + /// + [DebuggerBrowsableAttribute(DebuggerBrowsableState.Never)] + public bool IsReadOnly_NoLock { + get { return false; } + } + + /// + public TValue this[int index] { + get { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return Get_NoLock(index); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + set { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + Set_NoLock(index, value); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + } + + /// + public TValue Get_NoLock(int index) { + return list[index].GetValue_NoLock(index); + } + + /// + public void Set_NoLock(int index, TValue value) { + if (listener != null) { + listener.OnRemove(index, list[index].GetValue_NoLock(index)); + listener.OnAdd(index, value); + } + list[index].SetValue_NoLock(index, value); + id++; + } + + /// + /// Default constructor + /// + public LazyList() + : this(null) { + } + + /// + /// Constructor + /// + /// List listener + public LazyList(IListListener listener) { + this.listener = listener; + this.list = new List(); + } + + /// + /// Constructor + /// + /// Initial length of the list + /// Context passed to + /// Delegate instance that returns original values + public LazyList(int length, object context, MFunc readOriginalValue) + : this(length, null, context, readOriginalValue) { + } + + /// + /// Constructor + /// + /// Initial length of the list + /// List listener + /// Context passed to + /// Delegate instance that returns original values + public LazyList(int length, IListListener listener, object context, MFunc readOriginalValue) { + this.listener = listener; + this.context = context; + this.readOriginalValue = readOriginalValue; + this.list = new List(length); + for (int i = 0; i < length; i++) + list.Add(new LazyElement(i, this)); + } + + TValue ReadOriginalValue_NoLock(LazyElement elem) { + return ReadOriginalValue_NoLock(list.IndexOf(elem), elem.origIndex); + } + + TValue ReadOriginalValue_NoLock(int index, uint origIndex) { + var newValue = readOriginalValue(context, origIndex); + if (listener != null) + listener.OnLazyAdd(index, ref newValue); + return newValue; + } + + /// + public int IndexOf(TValue item) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return IndexOf_NoLock(item); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public int IndexOf_NoLock(TValue item) { + for (int i = 0; i < list.Count; i++) { + if (list[i].GetValue_NoLock(i) == item) + return i; + } + return -1; + } + + /// + public void Insert(int index, TValue item) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + Insert_NoLock(index, item); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public void Insert_NoLock(int index, TValue item) { + if (listener != null) + listener.OnAdd(index, item); + list.Insert(index, new Element(item)); + if (listener != null) + listener.OnResize(index); + id++; + } + + /// + public void RemoveAt(int index) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + RemoveAt_NoLock(index); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public void RemoveAt_NoLock(int index) { + if (listener != null) + listener.OnRemove(index, list[index].GetValue_NoLock(index)); + list.RemoveAt(index); + if (listener != null) + listener.OnResize(index); + id++; + } + + /// + public void Add(TValue item) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + Add_NoLock(item); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public void Add_NoLock(TValue item) { + int index = list.Count; + if (listener != null) + listener.OnAdd(index, item); + list.Add(new Element(item)); + if (listener != null) + listener.OnResize(index); + id++; + } + + /// + public void Clear() { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + Clear_NoLock(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public void Clear_NoLock() { + if (listener != null) + listener.OnClear(); + list.Clear(); + if (listener != null) + listener.OnResize(0); + id++; + } + + /// + public bool Contains(TValue item) { + return IndexOf(item) >= 0; + } + + /// + public bool Contains_NoLock(TValue item) { + return IndexOf_NoLock(item) >= 0; + } + + /// + public void CopyTo(TValue[] array, int arrayIndex) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + CopyTo_NoLock(array, arrayIndex); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public void CopyTo_NoLock(TValue[] array, int arrayIndex) { + for (int i = 0; i < list.Count; i++) + array[arrayIndex + i] = list[i].GetValue_NoLock(i); + } + + /// + public bool Remove(TValue item) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return Remove_NoLock(item); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + /// + public bool Remove_NoLock(TValue item) { + int index = IndexOf_NoLock(item); + if (index < 0) + return false; + RemoveAt_NoLock(index); + return true; + } + + /// + public bool IsInitialized(int index) { +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + return IsInitialized_NoLock(index); +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + } + + /// + public bool IsInitialized_NoLock(int index) { + if ((uint)index >= (uint)list.Count) + return false; + return list[index].IsInitialized_NoLock; + } + + /// + public IEnumerator GetEnumerator() { + int id2; +#if THREAD_SAFE + theLock.EnterReadLock(); try { +#endif + id2 = id; +#if THREAD_SAFE + } finally { theLock.ExitReadLock(); } +#endif + for (int i = 0; ; i++) { + TValue value; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (id != id2) + throw new InvalidOperationException("List was modified"); + if (i >= list.Count) + break; + value = list[i].GetValue_NoLock(i); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + yield return value; + } + } + + /// + public IEnumerator GetEnumerator_NoLock() { + int id2 = id; + for (int i = 0; i < list.Count; i++) { + if (id != id2) + throw new InvalidOperationException("List was modified"); + yield return list[i].GetValue_NoLock(i); + } + } + + /// + public List GetInitializedElements(bool clearList) { + List newList; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + newList = new List(list.Count); + int id2 = id; + for (int i = 0; i < list.Count; i++) { + if (id != id2) + throw new InvalidOperationException("List was modified"); + var elem = list[i]; + if (!elem.IsInitialized_NoLock) + continue; + newList.Add(elem.GetValue_NoLock(i)); + } + if (clearList) + Clear_NoLock(); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + return newList; + } + + /// + IEnumerator IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + +#if THREAD_SAFE + /// + public TRetType ExecuteLocked(TArgType arg, ExecuteLockedDelegate handler) { + theLock.EnterWriteLock(); try { + return handler(this, arg); + } finally { theLock.ExitWriteLock(); } + } +#endif + } +} diff --git a/dnlib/Utils/MFunc.cs b/dnlib/Utils/MFunc.cs new file mode 100644 index 0000000..3b84b32 --- /dev/null +++ b/dnlib/Utils/MFunc.cs @@ -0,0 +1,17 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.Utils { + delegate T MFunc(); + delegate U MFunc(T t); + + /// + /// Same as Func delegate + /// + /// + /// + /// + /// + /// + /// + public delegate V MFunc(T t, U u); +} diff --git a/dnlib/Utils/SimpleLazyList.cs b/dnlib/Utils/SimpleLazyList.cs new file mode 100644 index 0000000..d40b337 --- /dev/null +++ b/dnlib/Utils/SimpleLazyList.cs @@ -0,0 +1,111 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics; +using System.Threading; +using dnlib.DotNet; + +namespace dnlib.Utils { + /// + /// A readonly list that gets initialized lazily + /// + /// Any class type + [DebuggerDisplay("Count = {Length}")] + sealed class SimpleLazyList where T : class { + [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] + readonly T[] elements; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly MFunc readElementByRID; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly uint length; + + /// + /// Gets the length of this list + /// + public uint Length { + get { return length; } + } + + /// + /// Access the list + /// + /// Index + /// The element or null if is invalid + public T this[uint index] { + get { + if (index >= length) + return null; + if (elements[index] == null) + Interlocked.CompareExchange(ref elements[index], readElementByRID(index + 1), null); + return elements[index]; + } + } + + /// + /// Constructor + /// + /// Length of the list + /// Delegate instance that lazily reads an element. It might + /// be called more than once for each rid in rare cases. It must never return + /// null. + public SimpleLazyList(uint length, MFunc readElementByRID) { + this.length = length; + this.readElementByRID = readElementByRID; + this.elements = new T[length]; + } + } + + /// + /// A readonly list that gets initialized lazily + /// + /// Any class type + [DebuggerDisplay("Count = {Length}")] + sealed class SimpleLazyList2 where T : class, IContainsGenericParameter { + [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] + readonly T[] elements; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly MFunc readElementByRID; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + readonly uint length; + + /// + /// Gets the length of this list + /// + public uint Length { + get { return length; } + } + + /// + /// Access the list + /// + /// Index + /// Generic parameter context + /// The element or null if is invalid + public T this[uint index, GenericParamContext gpContext] { + get { + if (index >= length) + return null; + if (elements[index] == null) { + var elem = readElementByRID(index + 1, gpContext); + // Don't cache it if it contains GPs since each GP could hold a reference + // to the type/method context. These GPs can't be shared. + if (elem.ContainsGenericParameter) + return elem; + Interlocked.CompareExchange(ref elements[index], elem, null); + } + return elements[index]; + } + } + + /// + /// Constructor + /// + /// Length of the list + /// Delegate instance that lazily reads an element. It might + /// be called more than once for each rid. It must never return null. + public SimpleLazyList2(uint length, MFunc readElementByRID) { + this.length = length; + this.readElementByRID = readElementByRID; + this.elements = new T[length]; + } + } +} diff --git a/dnlib/Utils/UserValue.cs b/dnlib/Utils/UserValue.cs new file mode 100644 index 0000000..ea590d8 --- /dev/null +++ b/dnlib/Utils/UserValue.cs @@ -0,0 +1,106 @@ +// dnlib: See LICENSE.txt for more info + +using System.Diagnostics; +using dnlib.Threading; + +namespace dnlib.Utils { + /// + /// Lazily returns the original value if the user hasn't overwritten the value + /// + /// Value type + [DebuggerDisplay("{value}")] + struct UserValue { +#if THREAD_SAFE + Lock theLock; +#endif + MFunc readOriginalValue; + TValue value; + bool isUserValue; + bool isValueInitialized; + +#if THREAD_SAFE + /// + /// Sets the lock that protects the data + /// + public Lock Lock { + set { theLock = value; } + } +#endif + + /// + /// Set a delegate instance that will return the original value + /// + public MFunc ReadOriginalValue { + set { readOriginalValue = value; } + } + + /// + /// Gets/sets the value + /// + /// The getter returns the original value if the value hasn't been initialized. + public TValue Value { + get { +#if THREAD_SAFE + if (theLock != null) theLock.EnterWriteLock(); try { +#endif + if (!isValueInitialized) { + value = readOriginalValue(); + readOriginalValue = null; + isValueInitialized = true; + } + return value; +#if THREAD_SAFE + } finally { if (theLock != null) theLock.ExitWriteLock(); } +#endif + } + set { +#if THREAD_SAFE + if (theLock != null) theLock.EnterWriteLock(); try { +#endif + this.value = value; + readOriginalValue = null; + isUserValue = true; + isValueInitialized = true; +#if THREAD_SAFE + } finally { if (theLock != null) theLock.ExitWriteLock(); } +#endif + } + } + + /// + /// Returns true if the value has been initialized + /// + public bool IsValueInitialized { +#if THREAD_SAFE + get { + if (theLock != null) + theLock.EnterReadLock(); + try { + return isValueInitialized; + } + finally { if (theLock != null) theLock.ExitReadLock(); } + } +#else + get { return isValueInitialized; } +#endif + } + + /// + /// Returns true if the value was set by the user + /// + public bool IsUserValue { +#if THREAD_SAFE + get { + if (theLock != null) + theLock.EnterReadLock(); + try { + return isUserValue; + } + finally { if (theLock != null) theLock.ExitReadLock(); } + } +#else + get { return isUserValue; } +#endif + } + } +} diff --git a/dnlib/W32Resources/ResourceData.cs b/dnlib/W32Resources/ResourceData.cs new file mode 100644 index 0000000..b58a449 --- /dev/null +++ b/dnlib/W32Resources/ResourceData.cs @@ -0,0 +1,91 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.IO; +using System.Threading; +using dnlib.IO; + +namespace dnlib.W32Resources { + /// + /// A resource blob + /// + public sealed class ResourceData : ResourceDirectoryEntry, IDisposable { + IBinaryReader reader; + uint codePage; + uint reserved; + + /// + /// Gets/sets the data reader. This instance owns the reader. + /// + public IBinaryReader Data { + get { return reader; } + set { + var oldValue = Interlocked.Exchange(ref reader, value); + if (oldValue != value && oldValue != null) + oldValue.Dispose(); + } + } + + /// + /// Gets/sets the code page + /// + public uint CodePage { + get { return codePage; } + set { codePage = value; } + } + + /// + /// Gets/sets the reserved field + /// + public uint Reserved { + get { return reserved; } + set { reserved = value; } + } + + /// + /// Constructor + /// + /// Name + public ResourceData(ResourceName name) + : base(name) { + } + + /// + /// Constructor + /// + /// Raw data. This instance owns this reader. + /// Name + public ResourceData(ResourceName name, IBinaryReader reader) + : base(name) { + this.reader = reader; + } + + /// + /// Constructor + /// + /// Raw data. This instance owns this reader. + /// Name + /// Code page + /// Reserved value + public ResourceData(ResourceName name, IBinaryReader reader, uint codePage, uint reserved) + : base(name) { + this.reader = reader; + this.codePage = codePage; + this.reserved = reserved; + } + + /// + /// Gets the data as a . It shares the file position with + /// + public Stream ToDataStream() { + return Data.CreateStream(); + } + + /// + public void Dispose() { + var oldValue = Interlocked.Exchange(ref reader, null); + if (oldValue != null) + oldValue.Dispose(); + } + } +} diff --git a/dnlib/W32Resources/ResourceDirectory.cs b/dnlib/W32Resources/ResourceDirectory.cs new file mode 100644 index 0000000..3160aad --- /dev/null +++ b/dnlib/W32Resources/ResourceDirectory.cs @@ -0,0 +1,327 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Collections.Generic; +using System.Text; +using dnlib.Utils; +using dnlib.IO; +using dnlib.PE; +using dnlib.Threading; + +#if THREAD_SAFE +using ThreadSafe = dnlib.Threading.Collections; +#else +using ThreadSafe = System.Collections.Generic; +#endif + +namespace dnlib.W32Resources { + /// + /// A Win32 resource directory (see IMAGE_RESOURCE_DIRECTORY in the Windows SDK) + /// + public abstract class ResourceDirectory : ResourceDirectoryEntry, IDisposable { + /// See + protected uint characteristics; + /// See + protected uint timeDateStamp; + /// See + protected ushort majorVersion; + /// See + protected ushort minorVersion; + /// See + protected ILazyList directories; + /// See + protected ILazyList data; + + /// + /// Gets/sets the characteristics + /// + public uint Characteristics { + get { return characteristics; } + set { characteristics = value; } + } + + /// + /// Gets/sets the time date stamp + /// + public uint TimeDateStamp { + get { return timeDateStamp; } + set { timeDateStamp = value; } + } + + /// + /// Gets/sets the major version number + /// + public ushort MajorVersion { + get { return majorVersion; } + set { majorVersion = value; } + } + + /// + /// Gets/sets the minor version number + /// + public ushort MinorVersion { + get { return minorVersion; } + set { minorVersion = value; } + } + + /// + /// Gets all directory entries + /// + public ThreadSafe.IList Directories { + get { return directories; } + } + + /// + /// Gets all resource data + /// + public ThreadSafe.IList Data { + get { return data; } + } + + /// + /// Constructor + /// + /// Name + protected ResourceDirectory(ResourceName name) + : base(name) { + } + + /// + /// Finds a by name + /// + /// Name + /// A or null if it wasn't found + public ResourceDirectory FindDirectory(ResourceName name) { + foreach (var dir in directories.GetSafeEnumerable()) { + if (dir.Name == name) + return dir; + } + return null; + } + + /// + /// Finds a by name + /// + /// Name + /// A or null if it wasn't found + public ResourceData FindData(ResourceName name) { + foreach (var d in data.GetSafeEnumerable()) { + if (d.Name == name) + return d; + } + return null; + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (!disposing) + return; + directories.DisposeAll(); + data.DisposeAll(); + directories = null; + data = null; + } + } + + /// + /// A Win32 resource directory created by the user + /// + public class ResourceDirectoryUser : ResourceDirectory { + /// + /// Constructor + /// + /// Name + public ResourceDirectoryUser(ResourceName name) + : base(name) { + this.directories = new LazyList(); + this.data = new LazyList(); + } + } + + /// + /// A Win32 resource directory created from a PE file + /// + public sealed class ResourceDirectoryPE : ResourceDirectory { + /// + /// To make sure we don't get stuck in an infinite loop, don't allow more than this + /// many sub directories. + /// + const uint MAX_DIR_DEPTH = 10; + + /// Owner + readonly Win32ResourcesPE resources; + /// Directory depth. When creating more 's, + /// the instances get this value + 1 + uint depth; + + /// + /// Info about all 's we haven't created yet + /// + List dataInfos; + + /// + /// Info about all 's we haven't created yet + /// + List dirInfos; + + struct EntryInfo { + public readonly ResourceName name; + + /// Offset of resource directory / data + public readonly uint offset; + + public EntryInfo(ResourceName name, uint offset) { + this.name = name; + this.offset = offset; + } + + public override string ToString() { + return string.Format("{0:X8} {1}", offset, name); + } + } + + /// + /// Constructor + /// + /// Starts from 0. If it's big enough, we'll stop reading more data. + /// Name + /// Resources + /// Reader positioned at the start of this resource directory + public ResourceDirectoryPE(uint depth, ResourceName name, Win32ResourcesPE resources, IBinaryReader reader) + : base(name) { + this.resources = resources; + this.depth = depth; + Initialize(reader); + } + + /// + /// Reads the directory header and initializes and + /// . + /// + /// + void Initialize(IBinaryReader reader) { + if (depth > MAX_DIR_DEPTH || !reader.CanRead(16)) { + InitializeDefault(); + return; + } + + characteristics = reader.ReadUInt32(); + timeDateStamp = reader.ReadUInt32(); + majorVersion = reader.ReadUInt16(); + minorVersion = reader.ReadUInt16(); + ushort numNamed = reader.ReadUInt16(); + ushort numIds = reader.ReadUInt16(); + + int total = numNamed + numIds; + if (!reader.CanRead(total * 8)) { + InitializeDefault(); + return; + } + + dataInfos = new List(); + dirInfos = new List(); + long offset = reader.Position; + for (int i = 0; i < total; i++, offset += 8) { + reader.Position = offset; + uint nameOrId = reader.ReadUInt32(); + uint dataOrDirectory = reader.ReadUInt32(); + ResourceName name; + if ((nameOrId & 0x80000000) != 0) + name = new ResourceName(ReadString(reader, nameOrId & 0x7FFFFFFF) ?? string.Empty); + else + name = new ResourceName((int)nameOrId); + + if ((dataOrDirectory & 0x80000000) == 0) + dataInfos.Add(new EntryInfo(name, dataOrDirectory)); + else + dirInfos.Add(new EntryInfo(name, dataOrDirectory & 0x7FFFFFFF)); + } + + directories = new LazyList(dirInfos.Count, null, (ctx, i) => ReadResourceDirectory((int)i)); + data = new LazyList(dataInfos.Count, null, (ctx, i) => ReadResourceData((int)i)); + } + + /// + /// Reads a string + /// + /// Reader + /// Offset of string + /// The string or null if we could not read it + static string ReadString(IBinaryReader reader, uint offset) { + reader.Position = offset; + if (!reader.CanRead(2)) + return null; + int size = reader.ReadUInt16(); + int sizeInBytes = size * 2; + if (!reader.CanRead(sizeInBytes)) + return null; + var stringData = reader.ReadBytes(sizeInBytes); + try { + return Encoding.Unicode.GetString(stringData); + } + catch { + return null; + } + } + + ResourceDirectory ReadResourceDirectory(int i) { +#if THREAD_SAFE + resources.theLock.EnterWriteLock(); try { +#endif + var info = dirInfos[i]; + var reader = resources.ResourceReader; + var oldPos = reader.Position; + reader.Position = info.offset; + + var dir = new ResourceDirectoryPE(depth + 1, info.name, resources, reader); + + reader.Position = oldPos; + return dir; +#if THREAD_SAFE + } finally { resources.theLock.ExitWriteLock(); } +#endif + } + + ResourceData ReadResourceData(int i) { +#if THREAD_SAFE + resources.theLock.EnterWriteLock(); try { +#endif + var info = dataInfos[i]; + var reader = resources.ResourceReader; + var oldPos = reader.Position; + reader.Position = info.offset; + + ResourceData data; + if (reader.CanRead(16)) { + RVA rva = (RVA)reader.ReadUInt32(); + uint size = reader.ReadUInt32(); + uint codePage = reader.ReadUInt32(); + uint reserved = reader.ReadUInt32(); + var dataReader = resources.CreateDataReader_NoLock(rva, size); + data = new ResourceData(info.name, dataReader, codePage, reserved); + } + else + data = new ResourceData(info.name, MemoryImageStream.CreateEmpty()); + + reader.Position = oldPos; + return data; +#if THREAD_SAFE + } finally { resources.theLock.ExitWriteLock(); } +#endif + } + + void InitializeDefault() { + directories = new LazyList(); + data = new LazyList(); + } + } +} diff --git a/dnlib/W32Resources/ResourceDirectoryEntry.cs b/dnlib/W32Resources/ResourceDirectoryEntry.cs new file mode 100644 index 0000000..659bc4d --- /dev/null +++ b/dnlib/W32Resources/ResourceDirectoryEntry.cs @@ -0,0 +1,31 @@ +// dnlib: See LICENSE.txt for more info + +namespace dnlib.W32Resources { + /// + /// Base class of and + /// + public abstract class ResourceDirectoryEntry { + ResourceName name; + + /// + /// Gets/sets the name + /// + public ResourceName Name { + get { return name; } + set { name = value; } + } + + /// + /// Constructor + /// + /// Name + protected ResourceDirectoryEntry(ResourceName name) { + this.name = name; + } + + /// + public override string ToString() { + return name.ToString(); + } + } +} diff --git a/dnlib/W32Resources/ResourceName.cs b/dnlib/W32Resources/ResourceName.cs new file mode 100644 index 0000000..420e0f0 --- /dev/null +++ b/dnlib/W32Resources/ResourceName.cs @@ -0,0 +1,135 @@ +// dnlib: See LICENSE.txt for more info + +using System; + +namespace dnlib.W32Resources { + /// + /// A Win32 resource name. It can be either an integer or a string. + /// + public struct ResourceName : IComparable, IEquatable { + readonly int id; + readonly string name; + + /// + /// true if is valid + /// + public bool HasId { + get { return name == null; } + } + + /// + /// true if is valid + /// + public bool HasName { + get { return name != null; } + } + + /// + /// The ID. It's only valid if is true + /// + public int Id { + get { return id; } + } + + /// + /// The name. It's only valid if is true + /// + public string Name { + get { return name; } + } + + /// + /// Constructor + /// + /// ID + public ResourceName(int id) { + this.id = id; + this.name = null; + } + + /// + /// Constructor + /// + /// Name + public ResourceName(string name) { + this.id = 0; + this.name = name; + } + + /// Converts input to a + public static implicit operator ResourceName(int id) { + return new ResourceName(id); + } + + /// Converts input to a + public static implicit operator ResourceName(string name) { + return new ResourceName(name); + } + + /// Overloaded operator + public static bool operator <(ResourceName left, ResourceName right) { + return left.CompareTo(right) < 0; + } + + /// Overloaded operator + public static bool operator <=(ResourceName left, ResourceName right) { + return left.CompareTo(right) <= 0; + } + + /// Overloaded operator + public static bool operator >(ResourceName left, ResourceName right) { + return left.CompareTo(right) > 0; + } + + /// Overloaded operator + public static bool operator >=(ResourceName left, ResourceName right) { + return left.CompareTo(right) >= 0; + } + + /// Overloaded operator + public static bool operator ==(ResourceName left, ResourceName right) { + return left.Equals(right); + } + + /// Overloaded operator + public static bool operator !=(ResourceName left, ResourceName right) { + return !left.Equals(right); + } + + /// + public int CompareTo(ResourceName other) { + if (HasId != other.HasId) { + // Sort names before ids + return HasName ? -1 : 1; + } + if (HasId) + return id.CompareTo(other.id); + else + return name.ToUpperInvariant().CompareTo(other.name.ToUpperInvariant()); + } + + /// + public bool Equals(ResourceName other) { + return CompareTo(other) == 0; + } + + /// + public override bool Equals(object obj) { + if (!(obj is ResourceName)) + return false; + return Equals((ResourceName)obj); + } + + /// + public override int GetHashCode() { + if (HasId) + return id; + return name.GetHashCode(); + } + + /// + public override string ToString() { + return HasId ? id.ToString() : name; + } + } +} diff --git a/dnlib/W32Resources/Win32Resources.cs b/dnlib/W32Resources/Win32Resources.cs new file mode 100644 index 0000000..efd679f --- /dev/null +++ b/dnlib/W32Resources/Win32Resources.cs @@ -0,0 +1,252 @@ +// dnlib: See LICENSE.txt for more info + +using System; +using System.Threading; +using dnlib.Utils; +using dnlib.IO; +using dnlib.PE; +using dnlib.Threading; + +namespace dnlib.W32Resources { + /// + /// Win32 resources base class + /// + public abstract class Win32Resources : IDisposable { + /// + /// Gets/sets the root directory + /// + public abstract ResourceDirectory Root { get; set; } + + /// + /// Finds a + /// + /// Type + /// The or null if none found + public ResourceDirectory Find(ResourceName type) { + var dir = Root; + if (dir == null) + return null; + return dir.FindDirectory(type); + } + + /// + /// Finds a + /// + /// Type + /// Name + /// The or null if none found + public ResourceDirectory Find(ResourceName type, ResourceName name) { + var dir = Find(type); + if (dir == null) + return null; + return dir.FindDirectory(name); + } + + /// + /// Finds a + /// + /// Type + /// Name + /// Language ID + /// The or null if none found + public ResourceData Find(ResourceName type, ResourceName name, ResourceName langId) { + var dir = Find(type, name); + if (dir == null) + return null; + return dir.FindData(langId); + } + + /// + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose method + /// + /// true if called by + protected virtual void Dispose(bool disposing) { + if (!disposing) + return; + Root = null; // Property handler will call Dispose() + } + } + + /// + /// Win32 resources class created by the user + /// + public class Win32ResourcesUser : Win32Resources { + ResourceDirectory root = new ResourceDirectoryUser(new ResourceName("root")); + + /// + public override ResourceDirectory Root { + get { return root; } + set { + var oldValue = Interlocked.Exchange(ref root, value); + if (oldValue != value && oldValue != null) + oldValue.Dispose(); + } + } + } + + /// + /// Win32 resources class created from a PE file + /// + public sealed class Win32ResourcesPE : Win32Resources { + /// + /// Converts data RVAs to file offsets in + /// + readonly IRvaFileOffsetConverter rvaConverter; + + /// + /// This reader only reads the raw data. The data RVA is found in the data header and + /// it's first converted to a file offset using . This file + /// offset is where we'll read from using this reader. + /// + IImageStream dataReader; + + /// + /// This reader only reads the directory entries and data headers. The data is read + /// by + /// + IBinaryReader rsrcReader; + + UserValue root; + +#if THREAD_SAFE + internal readonly Lock theLock = Lock.Create(); +#endif + + /// + public override ResourceDirectory Root { + get { return root.Value; } + set { + IDisposable origValue = null; + if (root.IsValueInitialized) { + origValue = root.Value; + if (origValue == value) + return; + } + root.Value = value; + + if (origValue != null) + origValue.Dispose(); + } + } + + /// + /// Gets the resource reader + /// + internal IBinaryReader ResourceReader { + get { return rsrcReader; } + } + + /// + /// Constructor + /// + /// / converter + /// Data reader (it's used after converting an + /// to a ). This instance owns the reader. + /// Reader for the whole Win32 resources section (usually + /// the .rsrc section). It's used to read 's and + /// 's but not the actual data blob. This instance owns the + /// reader. + public Win32ResourcesPE(IRvaFileOffsetConverter rvaConverter, IImageStream dataReader, IBinaryReader rsrcReader) { + if (dataReader == rsrcReader) + rsrcReader = dataReader.Clone(); // Must not be the same readers + this.rvaConverter = rvaConverter; + this.dataReader = dataReader; + this.rsrcReader = rsrcReader; + Initialize(); + } + + /// + /// Constructor + /// + /// The PE image + public Win32ResourcesPE(IPEImage peImage) + : this(peImage, null) { + } + + /// + /// Constructor + /// + /// The PE image + /// Reader for the whole Win32 resources section (usually + /// the .rsrc section) or null if we should create one from the resource data + /// directory in the optional header. This instance owns the reader. + public Win32ResourcesPE(IPEImage peImage, IBinaryReader rsrcReader) { + this.rvaConverter = peImage; + this.dataReader = peImage.CreateFullStream(); + if (rsrcReader != null) + this.rsrcReader = rsrcReader; + else { + var dataDir = peImage.ImageNTHeaders.OptionalHeader.DataDirectories[2]; + if (dataDir.VirtualAddress != 0 && dataDir.Size != 0) + this.rsrcReader = peImage.CreateStream(dataDir.VirtualAddress, dataDir.Size); + else + this.rsrcReader = MemoryImageStream.CreateEmpty(); + } + Initialize(); + } + + void Initialize() { + root.ReadOriginalValue = () => { + if (rsrcReader == null) + return null; // It's disposed + long oldPos = rsrcReader.Position; + rsrcReader.Position = 0; + var dir = new ResourceDirectoryPE(0, new ResourceName("root"), this, rsrcReader); + rsrcReader.Position = oldPos; + return dir; + }; +#if THREAD_SAFE + root.Lock = theLock; +#endif + } + + /// + /// Creates a new data reader + /// + /// RVA of data + /// Size of data + /// A new for this data + public IBinaryReader CreateDataReader(RVA rva, uint size) { +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + return CreateDataReader_NoLock(rva, size); +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + } + + internal IBinaryReader CreateDataReader_NoLock(RVA rva, uint size) { + var reader = dataReader.Create(rvaConverter.ToFileOffset(rva), size); + if (reader.Length == size) + return reader; + reader.Dispose(); + return MemoryImageStream.CreateEmpty(); + } + + /// + protected override void Dispose(bool disposing) { + if (!disposing) + return; +#if THREAD_SAFE + theLock.EnterWriteLock(); try { +#endif + if (dataReader != null) + dataReader.Dispose(); + if (rsrcReader != null) + rsrcReader.Dispose(); + dataReader = null; + rsrcReader = null; +#if THREAD_SAFE + } finally { theLock.ExitWriteLock(); } +#endif + base.Dispose(disposing); + } + } +} diff --git a/dnlib/dnlib.csproj b/dnlib/dnlib.csproj new file mode 100644 index 0000000..9cedfc6 --- /dev/null +++ b/dnlib/dnlib.csproj @@ -0,0 +1,388 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {FDFC1237-143F-4919-8318-4926901F4639} + Library + Properties + dnlib + dnlib + v2.0 + 512 + false + + + true + full + true + ..\Bin\ + TRACE + prompt + 4 + + + true + + + pdbonly + true + ..\Release\bin\ + TRACE + prompt + 4 + ..\Release\bin\dnlib.xml + true + + + true + full + false + ..\Bin\ + TRACE;DEBUG;THREAD_SAFE + prompt + 4 + + + true + + + pdbonly + true + ..\Release\bin\ + TRACE;THREAD_SAFE + prompt + 4 + ..\Release\bin\dnlib.xml + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dnlib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/dnlib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..55bf1326c9ac2a88b0ecee34deda053076fe4bf7 GIT binary patch literal 5709 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
    +47pn_cD>z@5>n$N^_*bU0mO4DCBfv5HupI{vM| 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

    f4^6REyp~5&e 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%0ANAs) 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%0D>+l?~gB(7w zD}p#X9oR9zj&@-4fXTd#EpIij*E;Av4(xab_Nc=19}0H(yTg5ac3v(7Hq{~Ta$wRf z*>qO}lXj`d^z=h*)(3z|-L$b=fQe7o*d4&6Zra#A3ePVBbLHi$3f*^rx$?3Vm@6+& zC_JA5Ccb3rkbaLFdo{4b*^V~d3}E6*Hr4~|I0xN-0h{K)9t1Ysf&EV5x!+ZxFWGsS z4@`W?#)g5t(jo7y5v;^%=!bmiUBJYiHg*fJS95wByH~-!4@}}NY`WhAllgKR+vUA( zd7TP&qJk|1CT*Q9Z!s{jnSAevU6w_7+Sof4>=t06yG?f=Fwxz{9s?%de>V1|$eWV7qd98=I@pou$y7uh4ZXbbS%Js-?pau>JX+ zja?O?JJF*1FJO}1#QRtpk=w49h{-w}$ye}-<8I}&O z0w(p{#-;)jd)inP*xQ+xjolxS_c}}7mw}zZ?`&-Eb*a>ksDZ*`W82>!>Tt42;{Q#_ z|Da%hRBQmih>=XV83L?_Id?tE7%+bTc}`fRInuq z)(dPm_656)27w*vz&;FY9|v|fut(SjZJxu|hWq$zY!k3!9Xx*pOnm9}oQ8f#%rn5G zov^VT!1m+xHr8=nIG<%>vw*$IL3buFS6QJ?vQun2i({)VB)*B4l5OGje@;P!QKb#Oh-O{ z0c?%~JMM$w8MJmjZvy7>rS%bPCiA8r^7*@fiOWL;MoY z|5mVVz+}8+(>((W-If2?*wFRi8m5ii08H#sGvxl?l$VbH6Wwj>4q)P+HuhOy;@39z zfFkd!io98352LW@HLnpAk9P*|E z+uwmTfK72=7Xp)SHCuHLxQbJUaC6a9GK{5W7~o4%e-0^&%XgX-GS9^4E@@sn+xnf2VD;^ zm%K}XNgHYNd^fPU4xU?qWgOUqn?j$kdA5O-9dvI4R&ikW0+ae~^ZY8XRpj7!Y^-!k zINxJq=K!l3vQc!`0dv{x7<7H*aj7fBSg2f79l9*6m^YX=85&CT((? z<QdqF!5^}do8ei96V8o0x%cPJrrybFjqbg zR_KmU=#Eq9a=@g0v2{2Fn6xi8cAi2v0PFyVJ+D;gZdT~-QRu#*(EVJY+W}14I$OV& zfXTSP#&-XtyKMIZcC1798NgifPFJw=fVq643)nP=y!R_~*DKg9z+ArjabPZ=xDVKo zj=cOFn6%fYaT@xedh`ngdqTl}rC?7f*l!f{8ZQn*w`_^JqS=~HdG z>wrmKWUNUd$SyYmtFb&A`zf#$4y?T)m3or{y9b!8@z^|n4@|}dHs*ag?8oLXZ~CEp zP6Q@8*w}%kwCbbnC6zNTQ`RBk-MJx+XI-ZjP_IL4hH6`M;TzQy7GEpGWRscY6}(tbCur( zz@+`O>6QbN?(X908d#mg0WtAWY)v|Vr4 zDcE`i+o;HU7?{iFf1uF)N}>CcLiZnqZuif*%kN-du6!N?EbH*=bAh?~sxDwM_iNjF z2-p$_&mRF>{bnn}Er9!j|_LVEeINHuhCuE*-wDU_SunvdiNN-IEI4 z(+b^lz+C!GxHlXx+4}7VOvXz#mH{SxoQ<6bY=4K%<^kK=fn5O1CGV}kTt4wOV6Jkw z64?F@c{c-d<>eE=TzUB>Fjro-0CVN#QDFN!^70#CuDrYe%$1jY?sMm5KVYuB91P5r zmkcmhUS1E(m6t`pTz0uYkvF8sdzT{bV~V`nfVp)4gd%SfFqdC{4VbImejC^{N7?>W zp?gumI_`JtusbmM4zTOrfePJWz+CNF4w$R_3JO+Iu!@46s9-Y`>|_O-sbF;lYbsb< z!DcDgX$m$Qn5&Mx5tz#ddw{vhZ?!`AE?_Qyxdxbw3v6Fn4{RTYUw;nR;STJFz+5`~ z0+>tpXMwru*k6FT#u}+jZfs8ld$occtzZQOt0~xAU^3>jZM_JX%VrlTbi)eW+ZDQX z3f&FBT;+ZjFjqNjROr5;&^@NmJ*Cj?Q0UTMbmwy~U@rX*Q|P8CbgxtBPE+XKsL(A3 zChI`9zq}uq%a?8eHpx*pKMTyI`(|J=pJmJY8L%z~&yyYqzY%P@1;AW&`n(8s2J@yL z`hMsFCi7r6_9kFbS8Qw;n5a6#3yX*a9}cav$5lV$=ZvJ9S=;#FE)09BCn*#J6WM?DRgrbx`hheB49Euw{>_k zu>IJMHg*Lt=~Hd&gTSPpwy}GG$+*DAzN%pVtzbU|CiT|l`D=ylPrzJ0@z)5pkZnLe zn-o`cqleX2yz5}e}pi4dBrh64I z7u`%?;=8uIc?x!cB5%1O@1wx>ap>?_1=|d4UkBY|z@#48I{Z?>eh*B>Qa0V+fk|I# zW2ZbB`n8SCRj{*wNnNq&-mGBn2X;`(JT~2(3icIX(iYfsTNJuq0dx88?-V-kSK&Og zEpJ~1J6yqXz+AeYu3+83T)MAN=-v&?rTaAs-Ce*Yrp#mOe!qf!OX2yXg8c)SOF!?| zZkrtp%%$HE3f&A~F8yXJ*dhh%Q?RwbT;={D1^W!J-5urdMFo3U!M+b{wu9%vPbu~U z=F(vXFsD5gY>|TXDcD+IuDpCm!9D}b;OmEo&xN62R01s5C?W0F!>I!+k)MH6Yk}AdI9L zcAbLV3~Z`Hzb^wj`jrN>%jh>d-1)3O?=JUm0XxDW@AnF}=byuUHg;al0OlH>ov+Z{ z2J9$DUcLoPz5{G|Pbk>mf%Q3fF8xa?^ zUE`pe^Vjg+4_n^Dz+AR|6xbvO&+Wim-w3b%n|tg%O~Fo9u=xtM1lT9iCZo1~yYF;k z8~@?P&i|Ji+vWe`>ptLhtouKJ-)Gn(duAN6mF&G`L>U>8kr0uc>`0<0LKHFm;_sY4x&M-{K%r8nkmE%*K=LWmx*KOtuxUB*#{XGS`bTx58}9xW2u@4huU8 z^ZNHA%ox)8v?WEFKiQp z%@AcSfqC=(2F&&|u5XpFH-)VcwocdvVebgrBy5YYZNlCawo}-9!rq5vcaG^VV0PWg z^YACko&mBYC;96oC(O$g5>`rBMVQ@Bb6e`b>|Twn70lZsyTI(+!MVP$49=Jh5xMaq zHwEUkJJErk_y`mht`?O7j+GWWr%Ib|j$C&cXh#p8Jw z%=T+L*9FA{?YswOW6d@IW@E-S8df@N3)_;o`nrZc6TJL8F0h8-_t<`fHE^sfhyH>jcZ^lsOn?_eY$Y4YM)p7UqMOpzn)eHVAtFYlge2ElKGUQs3`qD+IIk!gd49#*?kG zutvh##?{x8+Ic5zaQHp8_hC0V_Iq4?oJ-CSU0<^mhuPfTLv5)DvvFao0kh+Xt%0!S z!rF-XI*D8lk-Jyq2Epu_f%`B4RxBJ3wk0q-r?Rbt**?#<0cPhvws&E+&e#r!`o0l% zM%ZOx$r+>T5N^wLFuM+6D+2S@(v2{$e|3bl6lHdX**?f^xgX}u?Rc2&t(==J>@}Fz zzjZKgZnuftM=-As$6;POe;1Z9lbCFbP)Fu@_;shx7`6CU{A}f0n_n z55LFuURC3AGo)hGO!;3dcv7gj=8DVW{k-AiRwh7}9H$JRmQ zdWzg5A~#dy-h|n)$!&QTR>o=P8JNux=YECRKF@XqmcuDCQ;9PE)mn#MH+SvwX z=YB4;AFP1WmPs(%lQ}mXc29WG$M$o!gjf})%#`d2sefCGb3hM=4F`eS!`)?Cd6hs^*s&y*|CRnMdt@D^9k5eCs!qRbPnKLW0*Hb ztzh1|?kaM9V6}n+A75PG3waV^v;U+2vx<2WQa_8zxsEWq?qpjBtK*dUE6kgtR{8wC zcYrN&`fxFSLTrRnU%vtgvHFg^27AJ>$^{c*A3Amo=B=g7*ZXBY3-k8Kjj#e~{;QD3 z^H553oyB$n<{b~YizUR?JAL>NX6G?3Gr725W)0ZKPMPU$@N>0cqnz9tVdY9Br2g$i zZs&tAZw-D1d)le*zLNf$SPJuUbxQer)-2flPJMsFUUF=4>1ZwW4Syzh36}awn4OQ< z*1_z2#I^;N7?#DhO_aG?l(`>f*I-=cw=lbQW4i>i>s_`qW&HkSj!6jGc)qlkHcStqHa(u<$Z6 z#&%VdnN-d%GZW1E$7SXaxdI}WB64L!?q-pz0kgT~cHRcFJ(BHin5`wY!7#gjXPXGi z5Y8Lh<1jlO*yajbBJ2&A&4ZomY`v_7WenTGwiTAiu{|*RtP$saj;n8An78_VgV|or zR<(R|jmh>D%=U7&r7*h>A4K)-g5?Uo$Myxxjxn}#FgwQBuEK0?*|OXijSE{vm{(sj zShn!w&$&(&5>h{p$ut;h1qBBxW2P6TQBxJB`7Ai9=r&%^}_a-$R$?xa~WY?ec44WzsMC8xzaEj zYwkm3VfBQy5Y`@M^T73uf!VWBwkNN3Xj=ok;_{S;sH4G3cCt%)sStfEvU|#*GBXrw?^t-u&GU%kShKh1s<%uZhc|%u)>!Vw0URm&3fa zd<9$MkIpip%T; z^X8}z%p2?bg$);Fju19d*l1y6g^d?BLD<8>9ufAau&FS+FXnleCG0tv-E(p7HJG>N zSBcyvk=qIL=6x?Lr?bw!5q2Jy$H}E_?w6S#X6JD3dpVJ-2eW%Z&ba~oXv$J)C*;*P$_4R^T zTiE);?6_qc2D3ex?EzsA3L7PCjIeRS9uhVY=JkCl%8b>t{1tj zBKMxieFU>(h3EDpELXUO*e;1&rdEEg2+XUm3e5I$uCJNMb%ohA3g-sE?E0GRF_^cm zr@_26F&pOf;We1omh~{NEuX?toU#55=C$*Zus>j4JG0#8k9AR)m#Zpr&0${OI|;j2 z*a(<+JdA^tcgAd~$gL8#9_G#aR+zUwKY@93^r^7VgncgTh_J7OeIx9cuoJ?*752Tb z)53lf_7kjtGw*3`_vbGQ%*&M$xe73EUDt!zH8k%p%|))0$n}KTvtKTA2F$MA*cQON zwfiE>JC2sYymh@<*vG<7!tDB*+xdscWojK=UvsVyEUz=~RbbaU)&^$J61dFn!tRGv zbIN=XX3x*K%r&rLPVO_2J0)`I+xY7&2h3ZaDKKx|OT)Zt#j3&@32QB^tFZfoJt*uE zm^ZhxVBWF$oX9N`xiup9uE>1|^VZAPFmE1y6uCb|E?rx{zI?E3&iX7Zay4OIJDZAJ zCz0zdaw9};lE}>wxy8cXfMsyTWxc5HeNpBik^5fcE{I%GJAWRs!MrtJ0OsuzWki|P zgf$k{Mp!pt{bAlb3>UeHFz?*>1kBqf7QnnQdl}{(x9ecu@vuYWJ{7s+Ft45GU|u`_ z5M`#h!ynJAFt2|_U|#>q!@PFZf_d$10`umm4a}SO&LY=GV&=I)-iF`nJQYfA$#?Yv=p024RjZUB~G8CtGuvmwOCm&$c*XTc>EOxy%-@(oUH}VXrur=gx%KV#n6Qsyp_xup2r@&wja`b%eDScE7O6FuP`$ z5VkjX3D)2on4JSA2Hy<70$T#JH8IfuuYoOv*)hhp8fL%az_vz|xlxq4L*({|+$S)5 z4#sUc1+#l*wkt3jGq&_y{9Hkpy|=`<8)0_u%hp8XI*R)4gW0*5%Nzmo=4d?3KIhN5 zxuU+Mu#K_*zBqT!UD5M1w%)?-71mE!e_{6v8zgLquwlX;5cZ(3QNqRu8wc}_%}0by zi?fHrc?@2HV|o_M&c$pCV0Ij_t%@si5|z0g)-e1Y+htfQ#~OEy)+gugf~ADHN2tDW zFkAC%lSS?ok$VGXW6fo*h1veewgYD4$@U?vl+%X`arN2fn1UZoz<;j5tbc3?-J*7~ zrH6UBY$BIe%E9cJ0OzU-t1qkt%$wWp zFmH~Airf^K*Y~+FdtaOT@D|M5m)43hcM3Zw>;%l4ho52IvGNvT;F_{w_aAlym{XO^XC0am^bfV!@PO; zR@fPsH%Avl?uy7I^z_@39_H1TP2}>z>~qvS*3DowoxN@%%-aj5342=DBAB-Zw+TBA zyTNH^@;wQ$J00r^yV0@7VYfK8AJ)RLyuG6L?Rh*a!o1_Ck+3_2^%nI#ByuxFZkfn! z6!xL8uVL^qpZ52m@-?|W`xC1BopvzEx+Dy)krbFi?>6LU(~l4X3yt&4Q_yW*U-CR-u27pFz*`rh$!<1VV7avKA*0?zpe|x zygrnNHFd^%7_6dWFTuR$3>#oJE>psM@Di-O4`B8_3EP)2JIAqo2ip~v#kO=nv|iXg zg4y-U)G!~s1Z_D4YY_ZD_+ra-f3%0N6%|$<_S%0%{$H7&!WKI=d|-6m=)-K79S>{^L~e=5EfcxbFxy+XzRkiu5Ozq|abag+Rm1V%wxkS-{$2uG2VsxH zZ0&Mx0j#W3-!52s$M(T&kK{6s2s zpDoH<0K-Qp{{7yOLz!paG&1@rpQ z4(9dY9#Q5{VH1VTgn4aw4d%6FgD7*iu+M~jC+woI#Bu%{WfxWy=JmY>%N<8- zl=-*F)tcz{VFc_>r@oJ1-aH(IdF?FtaP*9f$7}?wwo~6~m{;GsFmJ!!D{^0n+;=eV zdg&6(?zy-Ru}RT$4Yu+yugrQdZ|zQndB@lb!Zrx|SlDS{{|L+bh~Lf%utCn;E`-^0 zMIN)aV56K|*~$Kx4TstD5H9msSXbwm{_W9(*lNdKp6ai`b+8+qcAkVaaIDy439+J% zHGXfdsbnN-{%$vWy!iI=4M+uuK>@iW_ERmZpY>BXCqQ198Zlkar!uAR~ zDC|pNCxxAXd2@SF*j1Q44|zOXr@>3Gg_oNVU4OFGhK1XFjIEBay29!St1qm9u!h1K z32Q8@iLhIQH5JxOSaV@5gxxBvrLb1QZWDI9u-3xb2x}{>ov=HEwHMYwSVv)K?$kT=NoQ?>M=SV4WQ+`Aqa#F)p()%$~usje^;=KHF2Uo1OZ$!|YiX=T5@x zb8Bq>z=k?y4tdtM6ELsLYp^m-nWg6Y)&@4w$sK@sV_jx}Kc3xT?VK`K!VD=n^`?o;kmczV09EbIE`rhy*zb);A^%C{~%eWAFJSiB7`D?eubt;$_HPw&?#7p+&*HE(hS}#Q*jmH9`Z~hwJ>ltLKZBQG-h08U z?`)&u%6x)y6JT~eV%rXD7XCb2x>us>I<_J(>%)^&UrCs)CAQMS$_gtF3&tS$;xca( zxeCH6!ZQ6=i~1&u+!G=`T32HZE)f zVb%w>kudwajBIn_>U)anTL81q&9J==^{-zK7YE z&7wY>g=G%E$My%z=8rASGT(B*(mG}4gL!Q!0=w18-3M#p*c-5W9J}uI=suPEP#reH z$*q9d-ov@Iuz^l4WqI^Bh&VSAHo(c9gxNJa=hCh4$2u3x8|wnXiV7sR|`xa)`Qf%j7 zw)e38A?o`FX6JCuUH^t}HDUI!)y(*O@!GV!uA- zds5_Piu#@r_5#f7!>b~X9j%u#k0b~D#N_7ZUigl^r1J*Ti5r)$~n1b zM18LcTL-g!iN|^y%$uWwFuS(l+)Vr7z4o9_|x1K-fTGgM|$hHeA>UVIzf&7B*JccwrNSJq+`Xm6u?4{las!7G~EI zZ10NPL6JKqa_2?vZORhV6~v*lcq5bN*c#=}}Wwhw0aTwLaNu+m{}Uicck1Y?$YZ8V;2 zIbrr5A6t2ms|>R}gmblpHHO)Ea;`7T_D{CqFk2JPQ2)lja);kzn+dZu!8Tu%xfo{s zfiIT7ad;R%@SSzP8qky|Egov?Rdwij@H--z6gFgwRROKb2an5|E?3ou(tY<~(% zTp!H?=SsqCJlQJ2tS$4Yoi$^T_cCc~`n&xQHmC1}EQn9T#*9GIO~*q)Co^LZ-srMNQLmdBOJ zwl=QJg;eIIxH8#x#+AvoFRsi*ROY8~WwL!0S0>wcab>+^$P1@TLByGScy&1d*z%P1l#1~%50AI>&4;E1TR7Js>5t8Ee^gJeg#$! zW@~A&0bT=ZDss1pTnCZsDssI=Zh*)QhuNCvK8%Cq3j4+O6wLM>w&#T{h1q$Ub6a3` z-emg_7A}_<+di1>$xC9D_3|UJ2_BUV<^J3bQd|s|(8;{ybZIQRZDRyC&jXf0$jjvW*q?1gx{u zmhWM)%r9UkjM6PqrQ~n+LWBL~feMy&!VyL~gIh9T&OZ zMK05Oe*cQXs)l35eeVFX@mxmZ*$Zal$u>H!KDHTg^|9@YtM7HH?~}Ot*iOgQ$96TY zKDLUxqy8ceU{ zWsZcEcI*Y1U7K>5D`9s3&b9+)&!O2qgW36k?ORdb1yNtxy?%Z9VP1WuU|#>K!My(6 zD(dSd>Kh>H8zbtQA?jNq>RTo1+bZfiDC+xO)OQh<&sj^EK8)^Q=I3U^yxh-+{oEy(y@$f}<@nss6@=aUUo-!&oezuL zG?-W4t0K1ww%Dn!^%s6S?}T~n+$wVK!@PEWD{^N=F8vX|o!MbtJ4eFOI(;7x^Twsn zm(kxK;<=p;^K#|B@^kZH2c5PI_&OnWzhj@n>N=L|o9O*9Zf8l@JI?WN>}W!)v17%K z=LYqGw->7PKfPu z$~*zH_u9Cf6VD~Y#yGh@VctDgx?iHt-E)~OVP4T#;eJpZ?&ilDLU|xMoMDBCg z7N;#w{~G%qCO zc24fJ$aVSCpZ9lQ-t}kszx?_hf^~J;@+B;@W2a!=xcmZp%E?W*>gOJVz3t>0{O#Xc zbb@(pxf}MYQ)b(1{=Lk7Ft5yEA~#Ls=D;#KZCMEOo(XJ&HFa`n{=wg{an2nTk`moM z)PQ;8QYP8YRe}w2&N++ICc1mwIhePW{)82E`d1)bqI>Rd4;$#@-i3MR;u7f-Q{UJA zzr6s~z$tS&%-hdeXGl!_y(}(s7tFio`UU3Q!xqixx3ekCTc53A1Drl=6uF(S15R#E zCcnPtVbh#k$;^JP0t_E<{r8K<>_irS%ra+9j4gBOTL<&TWvj^by)H3!n^Wdm*bv8V z$d;J;SzGSIaM(>wZVAl0Zrup;o>}dIdHZ~w?1}Ck(jC^#Y0D;?l7*65YfKW-1ey!kr<>*%zlLM}g71LpPNRaif#%&fWnGV{VdbaE$Q-dd`VCoxvX z$qj&c?K}eW+SxE~qWgSlK5Vj6U!i<{ZUijF$<2dh5ABWcHFyaQ<=0@X!tb$NgxS44 z+jaR9Q=b8{6^Gg9F4$_pZ0)kO5V^ZWZZOO~H_Bx`46E(*Z!^prmycj&oZKZ*U-|-x zsn@35mOEhHcn*fyGgZz#0`tam0n8iEWg@p-*%_CgVcvLNgWc}rS`|!8 zeQ%Ka-WOKZ$<2b5bZi4`zGH2!PfWcR<@&k_>o061Y^zgW)k4uV5!W|Z*fLn5H2)RK zx!uJQQ$MfIb_V9HrE9RPVLMlbufa>O7i2D;nED)rEho&L@3IwyC52_N6&7Wd5M|y7 zv-jq?%tkPKro+|&X2%0tZo-63oK_Sk~}+ zY)gf$k1KO^m=9ipGPl4QhTmhm2D5VD-63K94od)uq=+XhS__Hoa+m-J(=xESWc(R#V}j*oLdRAb;8!8 zWMb-j>}=y<4?Fc;gL(bSR4O_jtqt?RORxq@!ffrbRe;$VWUB_V`v8j;&0atB22l*s)oa!IBAdB_O!#-*spl@htSBG&|F#|qCw zSC}0uY?EMitgy|6*|Ea*66{>KX4z(yiSBRNw!vmNx!cMn#_T-AxvQ}3PA*Hi=>Cs$ zy<;th?`~1wV3;?5lVO#e`ZmD4V`Zx-^HZ3&K2O5DzW)RB`j=4M z??WD#w+73KTz!$dL*)92+&Gb&1@qS6%P?=u)(G1n>=R+fh5aJzny@T2{61U{vuj~K z{z}5~I%}}5D6)#NVcN~p`*}Vmi%VV%&PFr4w z**!Yv*1)`L#cjeq6!y8WZ-xCL>@Q*IYWaQ0DXa+0n};$m?;fF=u*SmL!0bMi=b^jE z4S;#=93gU(gw2FybJoiXBDX^1HjCUIkvk%Cr$p|O$R*YG`Gv^}Pf0#$~t29TvH7Med@=#p?L;mks8%vk)wgv#u+{yuGeI ztb>z#8s_bv3t_i7xs$L=j{Pj`514%}kN1hObrVznCNtYMnAi8uVD`L~bLU|7oOYJ4 zml%7(vA1E~b;$d|4#T{$E?3_lvueT`!n`rt1#9B;A$$6-lf1e)=>+j@_z}7o9 zv$=ntI#1X_nD>0?EtuWs*yrej>VvhgS=er22Vi#o<1%Zvi2CqO*iWmk5zOAFWa|QJ z5dJ*d0%2dm8alaxw=``g zUW3{5a<*Nts!o|#VC5Yv(ZRR2urf|=46LYQ3xsWi*?z`-_!>6QDYHe##MFQDnRBCI z_S|$+m=9ipH8D-tbHY}@Y@KnLYhZS~vt5SSXENC8c8Z>Pu-zuCo3Mex#>2XV#C76lQxJ+t)A~&n;BuIarbK zdu&;{`ne)7dv40PN+Q<;=GE6r&-N|M);!zIJ)-@Zts%_zPqwKr zZ_MVv>=_d07QyV=hHW#fy)!P^?)I%W%#I^2^L|)er_5zAuMg{ly$iErWouY=@Dd!; zhvIT<$6@w95Zig!4PjYqxq3#|rfe-?zdE@(_e9TrIX4Sd)XBXGYZd-d1?T?mlNj3( zo*>w^^-E0sdk}1i_eIx4Y}H{sowhs+v-cmig+CL#1Y`XQ%=T8c6);;9Y-?e5j$>Od z>}_Eig>4qL73Q^bx3K-f4huUf?3A!`FmJ4X7j{)xQh$FQ(g;fj^V*UXX3so$Zi~b0 zJruS|utMSbVrvca)=OKM*OohB-rU|Ta(zW^FwE=UWSH$s+=pjiUf*AZ*|Q+dtrlhO zgn5163$wkI%RDS{-@v@FJ|^shuy2KZFYL6iABFuS>}O%W2>VsoMPa`SyA1Qz=RdGw z&hd~kz|WO|*?ElT{We%Rr_50>Z!JxLWes!N!`I*?I0rllvulm*!8gONz@Ck(Z@U3r z1KSx_-@9acVRn7Z_BE_Q`15Sn-yi)Q3ATwadrrjmEX?}1gWB>c%*KW74VcXz+d5cc zSQgs`Vei0fALQI&m_65E%QP@L-r4fPyml6W+4-GwO|dr;VTnC;~}o>PU*684<1SA?w+_KvWf!afrAxv&$$eiHV(uz!SQ8061G zPGN(VcxnE%6?O5!6vI}uJwm;)?A5iY^xEx!W z!O=YIq1<)C@(U{tvw7e$D+sF%v+?9yBUqcTeQdK~wwBnQhuQD7vb`;GJ78X0_P}h8 z_R^T`gJlT6$M%`9qcH0O=Y9}&0cLIaklONlTzzcUgryr2wS{xpg%yNZTlP^~3dh+; zWGOHkYqrubTT5(JV0LV>HHxcmKh<|jTzzbwHLX&V0InJxq&cy9?3QZRv>I2 z+hUllCAMWEw-Z*-Df1}IuKBpkzeJh2hx+ZT0JHh~n8vyqENl2Zwk9xJF9#^s3}*Ad z);cct3FX?w<=DE!*+I(P1G9Szwt>P%!K@FTQki36HZE+FVAemjX(BgE*t4+0VH>#2 z^{^6-eFd|1#<}lcrJY>nVbQV4xqL7$*8t{?OEY1&!)&Y%(O9>I*>wop9WcAMVCxLC zd0^`)a(#sjgjxSSqjo+3vu87GkHD;dhbcD&W^=?gGcNZz%8S0>xrFdG-P_v7mOlIq(VS0CFaarLnsiK~z82bk?yUr~LR;_74j zJFY&qG{d9y$(9ag^Uju0=j|J30ns9=618Nk70J)@*I6G?3l3A!hR8US=c`?+b6i4 zX&>+{i?Ce63JNPGtPISa!E-z7!ESJlm3u^PB+NdC#AQASEAEuJ8kWYfb)vq#FmEk= z1G9aX+j17>&C$g;`#Nk>@RET4{0XyrF19=)qB6gsTp?K5@Ox~{U=1C63|7mr9WZ+q z%VmBEvt#8bwdEwt`p)(v%&ryLeuI??%Q{A77JM)&ldTxc?sM2~g4z7BHH6vxv9*C& z-`V=Xtbc5SVP0Ft!fbtVZV}Ah^JZHKvo+7Q3ug1cwhw04v}|W!)ts>|Ix?Cg&Xp5Z z4VJ|zv$3!?qRhKQuAi_GqRffHro-&|h5J5V*lWVp!MwHf5v-syWV!|rGykn&v%p0>-qRh^s%zmQG2Su5W2zyGDxd`U z_W4hqqaQ@>vZyc3Xn$^Vz`Qvs3iJA2L6liXlzFQtvop-=dw-D|E$W*J^Y-}#FuP{w zv0fo^+k_ny_Pwa@vdCo|> zY`?_WxBnIW?|%o?T!LBu*sh6Onn`{x3(VFFmziH!37GYPbLC++o^17C`NMv(b%Lch zHcHrhnAe9_U|u^{!0vVG%kfBJY+V@qF8rC`C76fzr$zUaZ0V;b#;SyCg00RI(dU!d zo)Y#Q%--YU+&S2|uzhU(pY(GNz#ejP7hoeC>pLU*w@bLb&tYes+|HTN`v{!-0oKmR z)p{zLzwg7J30{IBZYZp|u+}iU=HoKE!)z~S8!mE_V0Qn>AkFC-y{4H6>-h|n`FXv9fN;tX9v;ABnnDvj#Yyo@IDf3U5jTz_C%}I<^ zaB|gPHh-ME1y;t%4T4!aPlrDfyaa1$gs^eK9)a2YEtmNm%-YHJI?UdeVOt~W+X%BU z<=fmZmwVE zW??&FcC2t)>dlLu9iE|f_7gT6Rz3WA&h3HOJg|KROPBaxknQVdqu&u@t1>^DBete6 zd*;E`4fcf7&L3g-IM#AO^gEMW=1f=}C-)(&xMSyFGaMWDTy%}e^-YDHaB}^g_jAKx zzdE_z3-Nm>Y5zm6@3oh3FB+c1+1`FRI^Nk1!0a;;Y(K+nUt-Jiia$p$!WKL0rO{G< z4UUG{br#n*8&=;Lmrr2c+WiLB(8(2E7Cpb_`fh>QUhq?x4_<;HZUwVzTDJBgcbCZZ z61n~`JKu7BkBZzA!sfuLg#F?&--p@r9=0z;na5!BoH9qe9+i1E{F&e-7|$s%JLj;? zh1vO?Z6nO)oozR)LU=r|{k}Z9KVnN-;ahf?oyRy=SXen&$*|8qhp)j)(7d)Vd(OZ% z1$JZj^K5HiR36L9q*j0470V%)=1RX z8fNzpqj5>Hh*@$ zHajWo$G9>t1cC4?DD$Vd9NPt9SK{oV6^Pe=hvTiNoowlZWfhiN*!9AS3o8q=b3eDU zF)StQ7h7+beWr=6-kQW%4JY>?%#H`nO@dW)a%*7!jw_sVYhlft++Q%S57)1aK0nB1 zHi6kXV{0j_9qb0DEf2zOb!28qZ5%K6nX!yba8*ci9HQY)!C@hP4jMV*3DQ zbHw(su*0y1PMLY%iOxq{W(k;AUwL7bVRt+A&4CSY>>BJP$Chl2?#H;DNt>d3F1GqG zdj`n131;VhwvS-towi(o+5HOVifxYmjv3osu+2`HdACG=vypS1VJS{-49t!d&P|2Y zb8_#&GK6+Hd<|ZLwYwiSH2fZ0{jG_y!;aHB`C8x%=SpO`Xbj<a4v5_6qP}AycS_jLutj0NxGmFnMsv$HTiATqI;YIr zcSU9XL*v;2W^>Ed8)jq1Hbj&;5@vJ6xd|dSMc9*~%(*bH4==;)yuxjH6K2m!*ba;O zj>77OpxwxYYEXF+TgVYctG)qr{9(hO$TD5)nO^eNaw z&cG(yrWJf6{0jc(puLH)$K$^dXP04iP0MBW{4g>0yp#JI*2J-f`x0Zl9D5n&<$i$8 zaB>fR65~+R65r$bBPn-wFFk*acx%gvGw~`;ZRi_5C`L%Ok9iup5Mx6IMxB zO_|vuj1RDWbk7g*^?+9~+)q>gn!sF6f>_f5MeaqB+aPjhVBX&PE6h8lufW!a=Qf^)RX_O0-*#c22s^hRyXKRt` zBWx@zn^WI(Vb2L$4zuTH+|Cw1CB{B+>ML+Ide4S)kHR`R$L7~R<99~F4+?ND?{A5* zznxsJONp_CPFvoDRd?(MSRu#KT*h;aaP#4|%(>?G;mkjYv8hg(L-B-qj?;(a#H7@J z&xY%(3!Cqhc^KBvvAju1Zr^W*edV;JOq!%vAE(S2!Y&HCGp%3d7GcHG`MIgEDo#5$ z!L~a#Hhog+^9dg7?_md=+`0@&vD1z{pD`)*Spt{&5p1TD>zXMk^>4m&?nRhApJ4kG zR?R6hL*}GdbI01k>O1xnY^Y-iS&~wpU2t2r!@T3@8`wCf%+6VpV&fe<4D-(6Ph?9< z{kulombI{_oidwePfGnA70#`Mb#!vcIg(QU4Ft|rgWc)mX270xtYprl)X)8LnfJhM zc5<^}_c`_#%v)#EawWxvJGsAw4auDpd)UeS3R~>htUUhud>>ZR$;I;e$8;5#J!j`J zYYg*_htaUHPJO?@yz9uTFni9x^<~VLl={4fEiWwGT4QYagyk1j09Ml3uN&k~iv8g9 zuXKSV_Zqr_uxhZ8PML4OZgT7^SYF32#MPI^1_(bJ{Ld@GVg;iQJ zPR`u~TOIa+?I_IdN!Y#@b`~}*>@(*cER>Y``4F}jV0InJwhm@(vCl&U%?_&BENrK+ zy}~{b_600sIA+|IlOp#c%vcTJR;zOY|k4p>>IEp=eFcDcU(u-ly62ADV2TZO#` zYv7cbrbtri?>li@3c>6?oUIMa+LDfrqfWxQ3+n^3_kp;~Ww0?}AJ~c)jn0j19bn%( zxmqcH9~ug44qN7w`Dj`V-U)Z8yI{8F*)G9s-(@RP-XH6-!pgzyeFQGE4{Vgvzi(ij9jkU@Qmm0Q^%S{&A~!_j zMvB}7k((lNGhkDl`O96+AG7OW-W=Tk%jc9?N0ixEl-W|`+KF5jk?SdP_levPksAfG z{fv)?CtYCFuUGmn+LONXtouwP2n7|^{tZ>+v!-@ zx=FF4j-{`cl=|6FF0(i64kxz(R@$*+u)>c04YTWOt}lE2q}XvM_baTOV~ramrT+dA zm-!DYr<2RkFuI23+%2%v;pf)a$~TFQO}2)x>`r~{VD{NN&h>!V`=V@vg-w9jag>#g zzbP;~{@7-~Y!6|3Ca%ousLVxiWwO00a&L&-I+(SE%iIbp8jdI1(YX4uQ9HjEc2?L$ zm|e4TnK^EW#*?i8%;teDMObNJ6@*oTl?=y)>+1>|?bv59`wT1RuE6YCn5}Zt=sJt7 z70f>S$~F?Vz-deNX3_Ic&eeu>adLBEuR2z{dGsDMmw5>0weugCz2C^WdM%>oQfzZ! zJ)O2(f(;D!5YF{#<&Wn$STm>0ova; zHig~j^l!Mxy#VXr?*xlj2!gi%oQtTzC%;)cno|SMe zSLbM-uxCO+F+nv2g%uN424?q8TxKI!tFWDHGhp_fH(SOoemk=Z%Lg0m)HfAozdx3P z_Uk#YsbP+-z+KTfm8~4Cqmz3WHZ!~y=3KTOewit-?oOE#gnc8d_T7G&^I>+)!0mip z*d|eC{+@n)BVk^Bj|rO(+v1E%$9s}uFFN)IY?5PRdPSd`;l3Y(4RvyDdPi$MC#|LX zV0I17HUVbm>0FeX0<-HSwizNfSL7Co+{+@jLgdzn+$NFRA#!^~?h}zaB67z??gx?k zMc5@#<~5N^)5o9p%))XCDMX>iB>vON)zx#y^huQg$ z>zf3d9Ud%fxduhg_1QYYiaYHb4YS{|<=i4zLnn6(W_uRr&cp0EEnB9+{xM_4cjIwc1bZ(Wf3{vD zl2U(1lWhg;ZfA}%KZu-DW`~i{{VkXI0L&YggRmY>eHBOf_LQ(+gxx+mDRwNpcH?&5 zI3AxDcKX-*AzV*5wr4_8>`lkUJnZL=P4cbD{Hwn*4|*h9|TR(UMC_vLm@hs|?xDUbWM0cQIVm$`3R^el+&GuUrVeS4<+xr4Cd zPVTKI{M;tk1}8V{$)wc3LB#D`4XfznPQcbWHg`t!JcP^K2D4{mY#+e(IAzY78J+() z_bhCYldJZWZ-;~po8{-S&Gv02%&yDxhR0~owBUcPgW0*5ZHvh5680g?u6wx5FJa-< z6Jz^El=&U3ZaAKtOPLeZmyh~)Gpus>z5Haoo{rW;0kS8BZGhQlvpIJfX4ju=7h(3i zoGtBK-}1vwhl9qs*!<`j1Y0ZE@^H-9F2l-%eP%2ATvF^VCpQ*0!LdJujeb5U_3v?V zeT!kXJ`2)3yau!N$+k-5){ER$k$X?rK3LYU@7$IzVYY{`eG9YagKXIs`hCwQtO%^0 z)0S?q@K>l}*VB0Rf{hJxY)4_89jm@5`aL4f4T6<*a?ir-GmxA+53_k^yA0dxl)2`G zq}1Qn=G<0T1t<42%=RVDU4@l#awQf=?JPv&SzcIWn5`GiHH2AP*xHCPI|=I!vwI*e zb3k0KF!f=Wu+cDkPmyy^!oo|i7~4$PEg`ZUdNCSLwy$7zyt92Pa%V*Dg2-JFxrCSe zcBY4U?aU@DA1qgz{}vkeul&;J{W!K(Fk3Hdcfsr)o$W!G9b;_cVZFk&z;=9Dv}dtp zeLX3LUzh#&i|z7?q}0Df%GUG^f4ww^+57gK8!zlFnAg8|V73nyp*6n^)-OEX*-EWU zO8vc7wm)Fiom_=g(ffa#y8~9u$vqCUK5*_S*fJ+qb9MB5mvf6?wkFu#f!Q9(_5;k; z8QW!;?U8In-;Az%iqcq@hZPU|z}6aO&tKSj!1_43T`(K76sqq-VFzIY!ZJBm_pRvO zf^87Y_Hwpy!luFOv&5X+B61%JJ0i-=yvA>50b!+KUOVp+x%-5T6lK0Ha&HUU4ND03 z9v;v4*G21-?L5qWw}q|B`sn>lwx%#U{@8wj+4+|3D$HA-NgHsz+%sSginAgtfo03xhZAZ=>hS{-MjEj z!mhyVx}0-a-i`Khwg#|9PJNSLUR$Qa+B&(fVYfJzvLm{Vl! z8cyyPnC(3!==i$?v*U>En#iTu>F2V*?01N{%o||#ET|;4hBK*|8LNT%6p?VVb8V92Ec3&VH*wW6Sjrz=)R;_v7iuqvBf@$J|oCh z5?1=Z*#G5jhuP=kI5!&B&B+~xwRf!S{^;2#m)RF)Yp^V>iQ&Q~!0b5U+!UCtGqxEb zH&^5q!fcMX%;j-qmZLtr1+)7Vws&E6{$tw@v)_MUI~7-7d8+ScVZXubdV+HqK2A#g z_n_HIz-+8R;h+J)vYbnw6TMXsO74H3DKA~!+groikNf*zz8TeusmtBFx^CV!H=sb9)ob?R_wtTehJhH%jCtiriF~9V=YlJds-{aw|k` zjmYhQ*&fMlITKfA1sbzoVK!!LS75f+v8DMW>N{I5n0>yLtt8Aoufet$=Cx%hEG1k^ zoZADleTnTb%+9H7r(t$3W;+kF&z`g8Iv8D_v2})Rb=sNt)1=tpaQr#<^P%W>G}%Ue z7OnZ4Y5pF9*_g3SfejAZ!uC7N{(b>ltHaS}kl7Bvo^i_T`#GM;h3(_q!Y`udXKZi7 z>@$#T`(dv+^^G_ZJp<(2a#&v{m*dN5y>PAw%+@?xIhZ|LW2-H!CCuwzPnhjz6=`n! z!EA2XhKSrqk((fLQ$%it$jueGg(CN|$gO}i3g?geehyYBv`RE)nZAmCpNp-Gux7AQ zPML#X_Wm@Nxk%W4SWTzQbYDmFZttfDKN@r=E6nDdEl*so3iZ8ET#l^-%=SpOO0e=_ zJK4Gmn+CHcaBezmrBi0jZ=&}bIoAZ{wPgs*t8XZ5h*RGQQQuiuKPT7zsNc>W!urEf zoHD1w?04#`T4(UH!T%g_3?E7ezxRK39G?dZ%VaBgA}RIX_+uLav-fP+9uziC*d$?( z37aA8X<-Y5Ef)5wuoc4I685&Rt-^K*+bisVu*1T>7IsqD55mp~`%T!N!eS@=^_f;! zW??ym*qp+^R?h)2c*dSpK2pc18qOd8#o)9)$*t5bG z342-C>%vwGTQ6+0upPoa5Vl{~Az@z%J1*>$u(QH02>SzO&kO8XOK@8d+&26JvwJ+Y z%-=&-K(+1zK_~co$hn8z%0jB6K2m?*jm6chxb5i9bk69 z$(D2~x{qVa3iH}h3uaB{Ty2=$Z?Y|i**vhl4YT`Awxak@dM2lT9ci# z*?8K&J0BDi3~f)CjVIe+n7wz+HU(zwWSbXPW-Xe(mtpo^GTRoI%^%x7n0=ms?YJoO z3e1iN&XxEv`dc4t_rq=v$C_;;tbk*OU>U7NGAgt!u=>5hzR9^>Jsjy78aj?RUEr3~DICnx=>7S$b$2iv+R>`SvI?Su@ps@Vs zqUV@gUprU_r@q%<_ROg+joH_~M4ts=A4Qpez-&!$ne{LFHbvM+ zFza7^>fcu|>mS=0VONBu|IIHmFUd`!nsi*Hx*{*9L}wV+56fJXk1Rf z>@!$w`G1f09=575yC!05DC{Lk+2V>g+^TuTt%+BGQI|OUtw6oCVXnk_7Jj^~f!`1|5 z&+gf7g?WAG2J`yRA7<;5%bWwV-*I4D3G3|iFWn!0eYs#Z4-IL}mx0-OVQU;$CR-br z9V={)!EAqNMD;x*>{VgwV0MggneU3+0g?L}mLVKZF7tbl`xRz==Uka9(cep8YYwwx zjI9UE?*G_^z*3xc&Vt$A%DGoy>B3xNnuirIdw-K{t;lT>xt$`nSL6&kxROk6k8FlGw%B;*i6Uj{S*DWCY)Oi``yVcjwPplR*ZA$ z5|U%b!+B#notT_De@$s_&%tc|*e=2B{)jC($uBb#%=SpmWfztgX1{mVjM~{Tu0FPI zFzW+bACbFXYu_E_~$W0Tu*&;VzUf8CI+$@osFLH}TZYiv4c)W94z7b`92Md3F zCC0f^FuPY{y9TrIWJ^x#TSj5ogyj)-J*-#Q_ZBoq6JR!fY*S!1e{3^g_L=Tmsm#SN z8yB{>-&$c~7a_aR9+hN$NPJQDt zVxJHD%(-cql4Bd4T$9YnsrRs)y8~v=>DXpvNsis^l=&-cl4HZOCdYnqtowDzsec2L z>w5%d_wQ^AVQrl<&%x||nsa}`>^NeJW%Dhqu*|}82+Jp|u&^6oc0b*U)_hf%^_{Ju zu-jlah2zP&v9Mx}Eri+eejByrWtcsKV0#0W5|+ufA7=eyI|j4ogKUY}lT)9Ov9*NR zxUhACSs!kvK6Dq>2WD;I++#4i24kBCv$n9k2(#x)Y;VFUhGWKd5@ut@c2U8t#f z&gIRK9Bb&*cPH#jFW~2D3+p0mG;F-nhfA=wjx{S79h+@w9`1nIvBEY$2&_~%)|_h^ zS7tjJ>)T;AW^5f`wokBihuN{oHVtO|V_N~6AGY%jYRfH!l4EPb@3CDeoSgcZ8n)yj z$+02fM$h&@x#)OrPxUmbF51>fZz8Tn%CO2zx@< zdSS<52g7;bw!C$-Z<8xV$2;c|D*3rjg}qWaIX2O0ONlDUsn068zGq>LoZOeN){d2_ znwr6lQxX+n+GoL)fmX>Dvvk9Zr3xU|xM$Y9+_+adLxU zcD>t$`aTwBe_w;`RhZSs_7Tj^e{82yt6HYSs&Pz!R-9bwgG1Er?Pzrvvzi)wj6@}70xZ&$90lp2ON8$ zZd7J>Dsw3;d-y%Jcj_g_PKRZ(Ev_H+y$6-K0+ue!v8@rdQP{h}J`nb?u*1T>5%!(1 zpM+fyc12jML2_)DGoHI(cE5Qy&BJFfTc2zvV0I17b_Hhh#};eomzf#n<#LK#5n<(E zc3$DOR2B8r5!M)H@6~accf;(Q$~F$>jpt)9dv40P1u%P-z_tulGMrnsk6|{RJ!x(a z!>lcACxx98_NS;Xp^@K~^un$amPc42VK)dXC#({zYB<(BW_@8r9h(Zf&9Or;yC&i? ze-f71I63yPQ|2QuTk~AzlQ27Xuq}aAaLPO&a^Hzu&L)1Djf4$_dF^}@W^11Nuw2+D zu)0qFvfkpCSq0|hhKk%XF#G#_+|I9sr8M>H>kcd9^kFLOQO7bj^K(^UUT&kveG9W| zXzt&j=6-$8z`R_s7JjZJEN!@taeZxX^>brjr=4->+0xHVgW12i!1ZNl<*%0tu*u#!l`TSTV=mf!TY5 zT;IFG_6Yj~HaBcLmw9j7=-!a+FPNSGdQsmK+xeD3STk(~NB+}KXQ>^ibHjr9dsi*UWL)ovf{b!?+xH#)gjU@4C6hIMkRP>1By zzsbz?^@G`U7TZXettGaHU|u_y!@PFx6ZL&1>N^SZ`d71~-@nN)uYYr3UjG)ry#Bop z^ZNG#tcWuY={iN{cOK7zFt5JmFt5J*V6~n4UWVDV4cGUns4sS>UtbE$>t6$yUB7UB z?O|U39v1bzC~_Z*+N z2Vh=1e}Q@Pm(;}{mmDx}T=K)bb~c51?d&UZPmA0-kvl1JNq33Jz$xfwc8(N>$6Wn_(OOJ z{^w9w`S4q83tg!AOy$Gukwv+8J ztd(QMdPVOaac(Hg#!)!d+w!>^Z*?xlA zytC!)9rdq2)mIp1{bMT+v;MKwfLZ_88pqW)fa<#yX7k7P5X|O}Z7<9|kHS{4Pt?Er zslH+`>mS?AFzX*%9hmixtyx@s1F62-VK#qk{b4qLY;$3DUSZo2SKlD2Zx77gS7SR0 zv-khlF2n3S2Da<&jmC2@)t3im{bQ>Hv;MJl6ZTkKeM6|enK1i11Z->K%49nVv*Up+ zW8bKML#e*(FzX-NjWFvU+nvH5iK}lI)i(`h^T+lA%;t~nZJ5m;+kv?HhEsi?!>oU7 z7h%>vw!;0Q@npLdX8Y#@R9{<|)yFmvX7#Z>8&@COuDJR}P<_D^^K(Zn!v1oY@K1&Kek~o>mS>+xcWv> zeY0TJKeiWO)<3r8FzX-N`ndW=Q+-=twqDqdz-+y+CHIfkC)>?1Tc2a7zUnX=PqtPt z8&9@AFdI*{@p1KyrTQkrY&_X!!)!d+7Qt*h*_OrCH;(FC4YToN+Xu7pWV;Nr{gbWu zfM`6&Q+;J&Rv%kanAOKN6lV3YEsU%0A*%1?xcb<($JNL7ldwGZNBx^X^%a8I{IQjT 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

    3U1Zu&G2iVO{R#K@-TLuPU89gvx&iE@^w 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 M_}>lu|J}g<0dwVGK>z>% literal 0 HcmV?d00001 diff --git a/dnlib/obj/Debug_ThreadSafe/DesignTimeResolveAssemblyReferencesInput.cache b/dnlib/obj/Debug_ThreadSafe/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..4625f69c84baa7f08b8637b9432d04e206b71a57 GIT binary patch literal 5785 zcmeHLUr!rH5VyfxFoYD-ln`hlr%n4%SttI)F+t@4Y?G2U6xkN3#38c28=DPxyVmX= z#zj2$WAqbL{fO<%;XgnKDV33U@L3+OXLn|2=Vo_)JF$2y7W)Su`laXo5EAb#ca_w# zX6zlVL*|!F=y7T1We`ZQStw@GJD@a|Vs+uAJx`xZIv@HbRIn-_G>Z9|^mbVFx%)G; zD)JD-YIT08maXM#3kzO$o-MHvnsWIQGp&c*_h`ONVL-{oJH;9ePlH@FYeE)yR2n1Rkn;_A6t==&Rr1<;i0u+vpx zRqT6sp>IR_9<2tpuWM+XYaE(+P^kl;`OqGEt_h6fu13g*4#29ZVSwj!es-_gw zxi+fR6G-C143Gw_18we1a9c?iw3ccO zt>*^Ugdx`!0k0Ga!vkoGT-J2vB|Q^rC_xPr2voJ9WPnOPpr!|^!;Rcx4OzpM6^jic z9g4@}7JiY&hW;EWx3qx(!xP`HYbfCC*C0S~*Zu{a^?qS@_nINNBX*b{!ZzdT{bF}$ z*(fgRnRK9CseE4T?XegCd5h(8EbC@pF1%WL0rShR_A=MmaYs$P4L|Jl*R6M4T|7Pr z(c6fk?rypb<##-$`n-V#0eTxTGzidsCCziV}Qg+s~QF056;|T;5j;wxg z3Q!H}`;`L)%qz1RAVVW0tsrbFftLPJ7bEvDlI=400FqzO(k7A2UbMb*6`)mEDeRxR z(4UU@Q^-$5tuLt+Xzp7Nu{B0KJ3F6S%q73V|FN+YIi0@NG!eVWMc`SFu${0y-?wI> z792y0-b*x)E(0t173Uono^0x#pUDuX>u0Aom(xL6k;++=U%r`q8{d&Zb141e|C0VK z@M-=8#n#|N9Gr-K#s2*U6wyxG$2(V`NA@-U9Y*)*P{P{}_WYd~TzEcH{`lnG>^9=Q z-!H$<@Nai-bTs)jo_d`pMVXZfLe>)`_RUVy6lLT{_$f9L8(5`@Q+AG0_W4=jl&(MG zrYL{YlcF3>hFEDNGbi~g%SNZxGwhu@`H2fdg#xM|Y~rpswZ1|A>`CS7nn>%^`WE~9 z0Slg^o{5tZYf|o~n#rm49kO2c0Vu3<;iM?hNACO{8#jFyQ4&YFdy(Tw4L!qu4GxIU O)kg;hM7M6WH~udJNoPa= literal 0 HcmV?d00001 diff --git a/dnlib/obj/Debug_ThreadSafe/dnlib.csproj.CoreCompileInputs.cache b/dnlib/obj/Debug_ThreadSafe/dnlib.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..a0e7397 --- /dev/null +++ b/dnlib/obj/Debug_ThreadSafe/dnlib.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +cda714ea26ae22989ef05bf209da971e32f595e0 diff --git a/dnlib/obj/Debug_ThreadSafe/dnlib.csproj.FileListAbsolute.txt b/dnlib/obj/Debug_ThreadSafe/dnlib.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..7d474ee --- /dev/null +++ b/dnlib/obj/Debug_ThreadSafe/dnlib.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Debug\bin\dnlib.xml +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Debug\bin\dnlib.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Debug\bin\dnlib.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\dnlib.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\dnlib.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\dnlib\obj\Debug_ThreadSafe\dnlib.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\dnlib\obj\Debug_ThreadSafe\dnlib.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\dnlib\obj\Debug_ThreadSafe\dnlib.pdb diff --git a/dnlib/obj/Debug_ThreadSafe/dnlib.dll b/dnlib/obj/Debug_ThreadSafe/dnlib.dll new file mode 100644 index 0000000000000000000000000000000000000000..a34b2a5174026f06014c7adb5bbd51dbe4c32f4d GIT binary patch literal 1175040 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

    cvM(ooJjb5^_1u9_ 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

    _PMn5v}a-_%X}OjlKBJ}%3O|LGM@w`^SfXn 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 z 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 b}Ggh9dOo3AWbPMC+olxt~5bMwgs1jNN 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

    r1NF zr}VsCR=vKWdi~0N%(HcjU4K{n&Z}O(av1p+RIfMhOn>kf*cnx?k5(CX!A$?M)>GuK zv?pbsR{hPS^G8Gb1B1RVni0l@OTwXWqJ8VqtIXS?u76nbZ&~%#>!;T<@*mJL2CIr6 z+e!Hkz>Lt8V4U$AXzyqokt2}jRPP_C-e0pZUoO@Ay&m-HS1{g*>VLi0kq4_j2K_Xz zu!nqnCt$y%`hG+8eXr_71=aUUtIzj3m*!R9U)UY{j_M4pKN5eqDgNz0XFNIWALF_Y z%@1C@-zn@Y4KCAb?``hH>UiAaePsi`k`^0n^_G6tl659VJR99OT|J_tQ zeCc`o^fo4sf%coj^=bEi6aQ5`H*LQ|o@hKljVHPe`403RvmT1Sfa<#|XVdS|x-SSj z!o2D`OZVa5xe4=B)q6g>8TJufZiASZP0%uXYxbxtnpJQKCio;{xYTjCYQ`)M3{u7%Gf52xx*)jhFW z60a~TUSX0%ZzO&pta^S-yi{6sgRc06^v}^R{|BtRL|o&I_%|NLJdE|;t#8V_Mt_W+ zyG?)ZUU0Mn{a!uaVyiy>{&bz&_hEeXH|g(a-2}xmI9{PWES_OnJVRXTFeRR0NjyXN zi{xv1lRW1%&++Zaqpo={-KlS#{!7z^JakCk8GXQm1o*TSDO08YeX7{y~Gw!_ZyOZt6BgC_A9pK}c<^H^(C^$p*G22ly%+td&){cP=Z?x#$bHq

    CF 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 z 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

    +V2yjukE%zEf)T@V|0 zEm4NJdjJG+CvD@q5hza!wnAiif~6j4Y%k&?SwuwH{&^-H_o5_=$xxh(g2+o55UTNv*o|SLLQ$o3v85LD9w@+nzRx^BQ0cG_$<>K5s(~2}W`eHrluIh;5 z63LwX zgJLy?v?$?*G`l4G3m%8O;KhT+Govgco<)?zbA7bUcxK!r`Ga%;(+m`(>od*hka%tc z?zDJr0z5sQn<1YW&*aI7=Mwh!Kzm%r+yVVx6#ZEb-7EpI=Z-63tt$}8(rP$yJ5L&8 z9GAyi^B}ntjPxT*%iG}P`k?W09wcYSKjeq5c$m?YOi|%+Pacaj<(6sdRVPOM;2=s+ z2Q{U_vIlgJF{V#f*YFTAC4qjCc3r=)J@Lzt=oc;{Vw{p&{X%PH_(epCUz(sv`i1>Z z@<;679B7*T%Ydibzd7=m_9st<{bTIT|FS>pp*shIWY}L?{fGTqfRXlRDecd^YyXd3 z`yWK6sPMS<7ir4v+MoKt{*<8hZ%Kv!)&407w7<0L+Mn%t_Q&}a*q_{Le_AWU{vt~3 z-vUk2{_KB}KVtvZKwDj%C6}r3dV31ElUMt2jCBYyf!M1!m6ztA7{GJ~wL)ILp^>@= zjVu}d>B#OL*gx|TM=#0vU_ErV90dO1;ra+n_ES)fkd$`Au{InXZ8Qe!10 zfxZ$gTwk$0?-&Vhqk^xUmBz;9&B>97M1=H-1`0a3Tq`9Rn@N~Dd zM?Q1hkSD`0N3v@N@{8X*;rWI2(6z%rtY5~%FL$Y5q+ut~0fp7Q^RU_;j+B$`s4fKH zC~}q`?If62M>&(ooE=|=!Q>=5Asw3l5i+l}Lk_-TCD&KdlvWpCt#D%0AHJeU^;I`^ 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 @@l_+ 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 hP$L3i5-k$oC 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�g$+80xM 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∋5{-BX|bs1O#wt$_W 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∾wNLN0VqT@QkDU8WU|4rN< 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Ý=MJ^NX*XbRDnsP&+%$~Z~ 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

    ~zl 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 fW6fd|c|DLbu`vEEc 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 z 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𝔚y`Y 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 literal 0 HcmV?d00001 diff --git a/VM.Core/ByteEncryption/ByteEncryption.cs b/VM.Core/ByteEncryption/ByteEncryption.cs new file mode 100644 index 0000000..b2f6925 --- /dev/null +++ b/VM.Core/ByteEncryption/ByteEncryption.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace Core.ByteEncryption +{ + class ByteEncryption + { + [DllImport("NativeEncoderx86.dll")] + public static extern void ModifiedXOR(byte[] data, int dataLen, byte[] key, int keyLen); + + public static byte[] Encrypt(byte[] key, byte[] message) + { + using (var rijndael = new RijndaelManaged()) + { + rijndael.Key = key; + rijndael.IV = key; + return EncryptBytes(rijndael, message); + } + } + private static byte[] EncryptBytes( + SymmetricAlgorithm alg, + byte[] message) + { + if (message == null || message.Length == 0) + return message; + + if (alg == null) + throw new ArgumentNullException("ALG is null"); + + using (var stream = new MemoryStream()) + using (var encryptor = alg.CreateEncryptor()) + using (var encrypt = new CryptoStream(stream, encryptor, CryptoStreamMode.Write)) + { + encrypt.Write(message, 0, message.Length); + encrypt.FlushFinalBlock(); + return stream.ToArray(); + } + } + private static byte[] DecryptBytes( + SymmetricAlgorithm alg, + byte[] message) + { + if (message == null || message.Length == 0) + return message; + + if (alg == null) + throw new ArgumentNullException("alg is null"); + + using (var stream = new MemoryStream()) + using (var decryptor = alg.CreateDecryptor()) + using (var encrypt = new CryptoStream(stream, decryptor, CryptoStreamMode.Write)) + { + encrypt.Write(message, 0, message.Length); + encrypt.FlushFinalBlock(); + return stream.ToArray(); + } + } + public static byte[] Decrypt(byte[] key, byte[] message) + { + using (var rijndael = new RijndaelManaged()) + { + rijndael.Key = key; + rijndael.IV = key; + return DecryptBytes(rijndael, message); + } + } + } +} diff --git a/VM.Core/ByteEncryption/ByteGetter.cs b/VM.Core/ByteEncryption/ByteGetter.cs new file mode 100644 index 0000000..d162f62 --- /dev/null +++ b/VM.Core/ByteEncryption/ByteGetter.cs @@ -0,0 +1,1228 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using dnlib.DotNet; + +namespace Core.ByteEncryption +{ + class MetadataReader + { + public enum Types + { + //Tables + Module = 0 + , TypeRef = 1 + , TypeDef = 2 + , FieldPtr = 3 + , Field = 4 + , MethodPtr = 5 + , Method = 6 + , ParamPtr = 7 + , Param = 8 + , InterfaceImpl = 9 + , MemberRef = 10 + , Constant = 11 + , CustomAttribute = 12 + , FieldMarshal = 13 + , Permission = 14 + , ClassLayout = 15 + , FieldLayout = 16 + , StandAloneSig = 17 + , EventMap = 18 + , EventPtr = 19 + , Event = 20 + , PropertyMap = 21 + , PropertyPtr = 22 + , Property = 23 + , MethodSemantics = 24 + , MethodImpl = 25 + , ModuleRef = 26 + , TypeSpec = 27 + , ImplMap = 28, //lidin book is wrong again here? It has enclog at 28 + FieldRVA = 29 + , ENCLog = 30 + , ENCMap = 31 + , Assembly = 32 + , AssemblyProcessor = 33 + , AssemblyOS = 34 + , AssemblyRef = 35 + , AssemblyRefProcessor = 36 + , AssemblyRefOS = 37 + , File = 38 + , ExportedType = 39 + , ManifestResource = 40 + , NestedClass = 41 + , TypeTyPar = 42 + , MethodTyPar = 43 + , //Coded Token Types + TypeDefOrRef = 64 + , HasConstant = 65 + , CustomAttributeType = 66 + , HasSemantic = 67 + , ResolutionScope = 68 + , HasFieldMarshal = 69 + , HasDeclSecurity = 70 + , MemberRefParent = 71 + , MethodDefOrRef = 72 + , MemberForwarded = 73 + , Implementation = 74 + , HasCustomAttribute = 75 + , //Simple + UInt16 = 97 + , UInt32 = 99 + , String = 101 + , Blob = 102 + , Guid = 103 + , UserString = 112 + } + unsafe public struct IMAGE_DOS_HEADER + { + public short e_magic; + public short e_cblp; + public short e_cp; + public short e_crlc; + public short e_cparhdr; + public short e_minalloc; + public short e_maxalloc; + public short e_ss; + public short e_sp; + public short e_csum; + public short e_ip; + public short e_cs; + public short e_lfarlc; + public short e_ovno; + fixed short e_res1[4]; + public short e_oeminfo; + fixed short e_res2[10]; + public int e_lfanew; + } + unsafe public struct IMAGE_NT_HEADERS + { + public int Signature; + public IMAGE_FILE_HEADER ifh; + public IMAGE_OPTIONAL_HEADER ioh; + } + public struct IMAGE_DATA_DIRECTORY + { + public int RVA; + public int Size; + } + public struct IMAGE_FILE_HEADER + { + public short Machine; + public short NumberOfSections; + public int TimeDateStamp; + public int PointerToSymbolTable; + public int NumberOfSymbols; + public short SizeOfOptionalHeader; + public short Characteristics; + } + unsafe public struct IMAGE_OPTIONAL_HEADER + { + public short Magic; + public byte MajorLinkerVersion; + public byte MinorLinkerVersion; + public int SizeOfCode; + public int SizeOfInitializedData; + public int SizeOfUninitializedData; + public int AddressOfEntryPoint; + public int BaseOfCode; + public int BaseOfData; + public int ImageBase; + public int SectionAlignment; + public int FileAlignment; + public short MajorOperatingSystemVersion; + public short MinorOperatingSystemVersion; + public short MajorImageVersion; + public short MinorImageVersion; + public short MajorSubsystemVersion; + public short MinorSubsystemVersion; + public int Win32VersionValue; + public int SizeOfImage; + public int SizeOfHeaders; + public int CheckSum; + public short Subsystem; + public short DllCharacteristics; + public int SizeOfStackReserve; + public int SizeOfStackCommit; + public int SizeOfHeapReserve; + public int SizeOfHeapCommit; + public int LoaderFlags; + public int NumberOfRvaAndSizes; + public IMAGE_DATA_DIRECTORY ExportDirectory; + public IMAGE_DATA_DIRECTORY ImportDirectory; + public IMAGE_DATA_DIRECTORY ResourceDirectory; + public IMAGE_DATA_DIRECTORY ExceptionDirectory; + public IMAGE_DATA_DIRECTORY SecurityDirectory; + public IMAGE_DATA_DIRECTORY RelocationDirectory; + public IMAGE_DATA_DIRECTORY DebugDirectory; + public IMAGE_DATA_DIRECTORY ArchitectureDirectory; + public IMAGE_DATA_DIRECTORY Reserved; + public IMAGE_DATA_DIRECTORY TLSDirectory; + public IMAGE_DATA_DIRECTORY ConfigurationDirectory; + public IMAGE_DATA_DIRECTORY BoundImportDirectory; + public IMAGE_DATA_DIRECTORY ImportAddressTableDirectory; + public IMAGE_DATA_DIRECTORY DelayImportDirectory; + public IMAGE_DATA_DIRECTORY MetaDataDirectory; + } + public unsafe struct image_section_header + { + public fixed byte name[8]; + public int virtual_size; + public int virtual_address; + public int size_of_raw_data; + public int pointer_to_raw_data; + public int pointer_to_relocations; + public int pointer_to_linenumbers; + public short number_of_relocations; + public short number_of_linenumbers; + public int characteristics; + }; + public struct NETDirectory + { + public int cb; + public short MajorRuntimeVersion; + public short MinorRuntimeVersion; + public int MetaDataRVA; + public int MetaDataSize; + public int Flags; + public int EntryPointToken; + public int ResourceRVA; + public int ResourceSize; + public int StrongNameSignatureRVA; + public int StrongNameSignatureSize; + public int CodeManagerTableRVA; + public int CodeManagerTableSize; + public int VTableFixupsRVA; + public int VTableFixupsSize; + public int ExportAddressTableJumpsRVA; + public int ExportAddressTableJumpsSize; + public int ManagedNativeHeaderRVA; + public int ManagedNativeHeaderSize; + } + unsafe public struct MetaDataHeader + { + public int Signature; + public short MajorVersion; + public short MinorVersion; + public int Reserved; + public int VerionLenght; + public byte[] VersionString; + public short Flags; + public short NumberOfStreams; + } + unsafe public struct TableHeader + { + public int Reserved_1; + public byte MajorVersion; + public byte MinorVersion; + public byte HeapOffsetSizes; + public byte Reserved_2; + public long MaskValid; + public long MaskSorted; + } + public struct MetaDataStream + { + public int Offset; + public int Size; + public string Name; + } + public struct TableInfo + { + public string Name; + public string[] names; + public Types type; + public Types[] ctypes; + } + public struct RefTableInfo + { + public Types type; + public Types[] reftypes; + public int[] refindex; + } + public struct TableSize + { + public int TotalSize; + public int[] Sizes; + } + public struct Table + { + public long[][] members; + } + public IMAGE_DOS_HEADER idh; + public IMAGE_NT_HEADERS inh; + public image_section_header[] sections; + public NETDirectory netdir; + public byte[] StrongName; + public byte[] NETResources; + public MetaDataHeader mh; + public MetaDataStream[] streams; + public MetaDataStream MetadataRoot; + public byte[] Strings; + public byte[] US; + public byte[] GUID; + public byte[] Blob; + public byte[] rsrcsection; + public long TablesOffset; + public TableHeader tableheader; + public int[] TableLengths; + public TableInfo[] tablesinfo; + public RefTableInfo[] reftables; + public TableSize[] tablesize; + public int[] codedTokenBits; + public Table[] tables; + public long BlobOffset; + public long StringOffset; + public void InitTablesInfo() + { + tablesinfo = new TableInfo[0x2D]; + tablesinfo[0].Name = "Module"; + tablesinfo[0].names = new String[] { + "Generation" + , "Name" + , "Mvid" + , "EncId" + , "EncBaseId" + }; + tablesinfo[0].type = Types.Module; + tablesinfo[0].ctypes = new Types[] { + Types.UInt16, Types.String, Types.Guid, Types.Guid, Types.Guid + }; + tablesinfo[1].Name = "TypeRef"; + tablesinfo[1].names = new String[] { + "ResolutionScope" + , "Name" + , "Namespace" + }; + tablesinfo[1].type = Types.TypeRef; + tablesinfo[1].ctypes = new Types[] { + Types.ResolutionScope, Types.String, Types.String + }; + tablesinfo[2].Name = "TypeDef"; + tablesinfo[2].names = new String[] { + "Flags" + , "Name" + , "Namespace" + , "Extends" + , "FieldList" + , "MethodList" + }; + tablesinfo[2].type = Types.TypeDef; + tablesinfo[2].ctypes = new Types[] { + Types.UInt32, Types.String, Types.String, Types.TypeDefOrRef, Types.Field, Types.Method + }; + tablesinfo[3].Name = "FieldPtr"; + tablesinfo[3].names = new String[] { + "Field" + }; + tablesinfo[3].type = Types.FieldPtr; + tablesinfo[3].ctypes = new Types[] { + Types.Field + }; + tablesinfo[4].Name = "Field"; + tablesinfo[4].names = new String[] { + "Flags" + , "Name" + , "Signature" + }; + tablesinfo[4].type = Types.Field; + tablesinfo[4].ctypes = new Types[] { + Types.UInt16, Types.String, Types.Blob + }; + tablesinfo[5].Name = "MethodPtr"; + tablesinfo[5].names = new String[] { + "Method" + }; + tablesinfo[5].type = Types.MethodPtr; + tablesinfo[5].ctypes = new Types[] { + Types.Method + }; + tablesinfo[6].Name = "Method"; + tablesinfo[6].names = new String[] { + "RVA" + , "ImplFlags" + , "Flags" + , "Name" + , "Signature" + , "ParamList" + }; + tablesinfo[6].type = Types.Method; + tablesinfo[6].ctypes = new Types[] { + Types.UInt32, Types.UInt16, Types.UInt16, Types.String, Types.Blob, Types.Param + }; + tablesinfo[7].Name = "ParamPtr"; + tablesinfo[7].names = new String[] { + "Param" + }; + tablesinfo[7].type = Types.ParamPtr; + tablesinfo[7].ctypes = new Types[] { + Types.Param + }; + tablesinfo[8].Name = "Param"; + tablesinfo[8].names = new String[] { + "Flags" + , "Sequence" + , "Name" + }; + tablesinfo[8].type = Types.Param; + tablesinfo[8].ctypes = new Types[] { + Types.UInt16, Types.UInt16, Types.String + }; + tablesinfo[9].Name = "InterfaceImpl"; + tablesinfo[9].names = new String[] { + "Class" + , "Interface" + }; + tablesinfo[9].type = Types.InterfaceImpl; + tablesinfo[9].ctypes = new Types[] { + Types.TypeDef, Types.TypeDefOrRef + }; + tablesinfo[0x0A].Name = "MemberRef"; + tablesinfo[0x0A].names = new String[] { + "Class" + , "Name" + , "Signature" + }; + tablesinfo[0x0A].type = Types.MemberRef; + tablesinfo[0x0A].ctypes = new Types[] { + Types.MemberRefParent, Types.String, Types.Blob + }; + tablesinfo[0x0B].Name = "Constant"; + tablesinfo[0x0B].names = new String[] { + "Type" + , "Parent" + , "Value" + }; + tablesinfo[0x0B].type = Types.Constant; + tablesinfo[0x0B].ctypes = new Types[] { + Types.UInt16, Types.HasConstant, Types.Blob + }; + tablesinfo[0x0C].Name = "CustomAttribute"; + tablesinfo[0x0C].names = new String[] { + "Type" + , "Parent" + , "Value" + }; + tablesinfo[0x0C].type = Types.CustomAttribute; + tablesinfo[0x0C].ctypes = new Types[] { + Types.HasCustomAttribute, Types.CustomAttributeType, Types.Blob + }; + tablesinfo[0x0D].Name = "FieldMarshal"; + tablesinfo[0x0D].names = new String[] { + "Parent" + , "Native" + }; + tablesinfo[0x0D].type = Types.FieldMarshal; + tablesinfo[0x0D].ctypes = new Types[] { + Types.HasFieldMarshal, Types.Blob + }; + tablesinfo[0x0E].Name = "Permission"; + tablesinfo[0x0E].names = new String[] { + "Action" + , "Parent" + , "PermissionSet" + }; + tablesinfo[0x0E].type = Types.Permission; + tablesinfo[0x0E].ctypes = new Types[] { + Types.UInt16, Types.HasDeclSecurity, Types.Blob + }; + tablesinfo[0x0F].Name = "ClassLayout"; + tablesinfo[0x0F].names = new String[] { + "PackingSize" + , "ClassSize" + , "Parent" + }; + tablesinfo[0x0F].type = Types.ClassLayout; + tablesinfo[0x0F].ctypes = new Types[] { + Types.UInt16, Types.UInt32, Types.TypeDef + }; + tablesinfo[0x10].Name = "FieldLayout"; + tablesinfo[0x10].names = new String[] { + "Offset" + , "Field" + }; + tablesinfo[0x10].type = Types.FieldLayout; + tablesinfo[0x10].ctypes = new Types[] { + Types.UInt32, Types.Field + }; + tablesinfo[0x11].Name = "StandAloneSig"; + tablesinfo[0x11].names = new String[] { + "Signature" + }; + tablesinfo[0x11].type = Types.StandAloneSig; + tablesinfo[0x11].ctypes = new Types[] { + Types.Blob + }; + tablesinfo[0x12].Name = "EventMap"; + tablesinfo[0x12].names = new String[] { + "Parent" + , "EventList" + }; + tablesinfo[0x12].type = Types.EventMap; + tablesinfo[0x12].ctypes = new Types[] { + Types.TypeDef, Types.Event + }; + tablesinfo[0x13].Name = "EventPtr"; + tablesinfo[0x13].names = new String[] { + "Event" + }; + tablesinfo[0x13].type = Types.EventPtr; + tablesinfo[0x13].ctypes = new Types[] { + Types.Event + }; + tablesinfo[0x14].Name = "Event"; + tablesinfo[0x14].names = new String[] { + "EventFlags" + , "Name" + , "EventType" + }; + tablesinfo[0x14].type = Types.Event; + tablesinfo[0x14].ctypes = new Types[] { + Types.UInt16, Types.String, Types.TypeDefOrRef + }; + tablesinfo[0x15].Name = "PropertyMap"; + tablesinfo[0x15].names = new String[] { + "Parent" + , "PropertyList" + }; + tablesinfo[0x15].type = Types.PropertyMap; + tablesinfo[0x15].ctypes = new Types[] { + Types.TypeDef, Types.Property + }; + tablesinfo[0x16].Name = "PropertyPtr"; + tablesinfo[0x16].names = new String[] { + "Property" + }; + tablesinfo[0x16].type = Types.PropertyPtr; + tablesinfo[0x16].ctypes = new Types[] { + Types.Property + }; + tablesinfo[0x17].Name = "Property"; + tablesinfo[0x17].names = new String[] { + "PropFlags" + , "Name" + , "Type" + }; + tablesinfo[0x17].type = Types.Property; + tablesinfo[0x17].ctypes = new Types[] { + Types.UInt16, Types.String, Types.Blob + }; + tablesinfo[0x18].Name = "MethodSemantics"; + tablesinfo[0x18].names = new String[] { + "Semantic" + , "Method" + , "Association" + }; + tablesinfo[0x18].type = Types.MethodSemantics; + tablesinfo[0x18].ctypes = new Types[] { + Types.UInt16, Types.Method, Types.HasSemantic + }; + tablesinfo[0x19].Name = "MethodImpl"; + tablesinfo[0x19].names = new String[] { + "Class" + , "MethodBody" + , "MethodDeclaration" + }; + tablesinfo[0x19].type = Types.MethodImpl; + tablesinfo[0x19].ctypes = new Types[] { + Types.TypeDef, Types.MethodDefOrRef, Types.MethodDefOrRef + }; + tablesinfo[0x1A].Name = "ModuleRef"; + tablesinfo[0x1A].names = new String[] { + "Name" + }; + tablesinfo[0x1A].type = Types.ModuleRef; + tablesinfo[0x1A].ctypes = new Types[] { + Types.String + }; + tablesinfo[0x1B].Name = "TypeSpec"; + tablesinfo[0x1B].names = new String[] { + "Signature" + }; + tablesinfo[0x1B].type = Types.TypeSpec; + tablesinfo[0x1B].ctypes = new Types[] { + Types.Blob + }; + tablesinfo[0x1C].Name = "ImplMap"; + tablesinfo[0x1C].names = new String[] { + "MappingFlags" + , "MemberForwarded" + , "ImportName" + , "ImportScope" + }; + tablesinfo[0x1C].type = Types.ImplMap; + tablesinfo[0x1C].ctypes = new Types[] { + Types.UInt16, Types.MemberForwarded, Types.String, Types.ModuleRef + }; + tablesinfo[0x1D].Name = "FieldRVA"; + tablesinfo[0x1D].names = new String[] { + "RVA" + , "Field" + }; + tablesinfo[0x1D].type = Types.FieldRVA; + tablesinfo[0x1D].ctypes = new Types[] { + Types.UInt32, Types.Field + }; + tablesinfo[0x1E].Name = "ENCLog"; + tablesinfo[0x1E].names = new String[] { + "Token" + , "FuncCode" + }; + tablesinfo[0x1E].type = Types.ENCLog; + tablesinfo[0x1E].ctypes = new Types[] { + Types.UInt32, Types.UInt32 + }; + tablesinfo[0x1F].Name = "ENCMap"; + tablesinfo[0x1F].names = new String[] { + "Token" + }; + tablesinfo[0x1F].type = Types.ENCMap; + tablesinfo[0x1F].ctypes = new Types[] { + Types.UInt32 + }; + tablesinfo[0x20].Name = "Assembly"; + tablesinfo[0x20].names = new String[] { + "HashAlgId" + , "MajorVersion" + , "MinorVersion" + , "BuildNumber" + , "RevisionNumber" + , "Flags" + , "PublicKey" + , "Name" + , "Locale" + }; + tablesinfo[0x20].type = Types.Assembly; + tablesinfo[0x20].ctypes = new Types[] { + Types.UInt32, Types.UInt16, Types.UInt16, Types.UInt16, Types.UInt16, Types.UInt32, Types.Blob, Types.String, Types.String + }; + tablesinfo[0x21].Name = "AssemblyProcessor"; + tablesinfo[0x21].names = new String[] { + "Processor" + }; + tablesinfo[0x21].type = Types.AssemblyProcessor; + tablesinfo[0x21].ctypes = new Types[] { + Types.UInt32 + }; + tablesinfo[0x22].Name = "AssemblyOS"; + tablesinfo[0x22].names = new String[] { + "OSPlatformId" + , "OSMajorVersion" + , "OSMinorVersion" + }; + tablesinfo[0x22].type = Types.AssemblyOS; + tablesinfo[0x22].ctypes = new Types[] { + Types.UInt32, Types.UInt32, Types.UInt32 + }; + tablesinfo[0x23].Name = "AssemblyRef"; + tablesinfo[0x23].names = new String[] { + "MajorVersion" + , "MinorVersion" + , "BuildNumber" + , "RevisionNumber" + , "Flags" + , "PublicKeyOrToken" + , "Name" + , "Locale" + , "HashValue" + }; + tablesinfo[0x23].type = Types.AssemblyRef; + tablesinfo[0x23].ctypes = new Types[] { + Types.UInt16, Types.UInt16, Types.UInt16, Types.UInt16, Types.UInt32, Types.Blob, Types.String, Types.String, Types.Blob + }; + tablesinfo[0x24].Name = "AssemblyRefProcessor"; + tablesinfo[0x24].names = new String[] { + "Processor" + , "AssemblyRef" + }; + tablesinfo[0x24].type = Types.AssemblyRefProcessor; + tablesinfo[0x24].ctypes = new Types[] { + Types.UInt32, Types.AssemblyRef + }; + tablesinfo[0x25].Name = "AssemblyRefOS"; + tablesinfo[0x25].names = new String[] { + "OSPlatformId" + , "OSMajorVersion" + , "OSMinorVersion" + , "AssemblyRef" + }; + tablesinfo[0x25].type = Types.AssemblyRefOS; + tablesinfo[0x25].ctypes = new Types[] { + Types.UInt32, Types.UInt32, Types.UInt32, Types.AssemblyRef + }; + tablesinfo[0x26].Name = "File"; + tablesinfo[0x26].names = new String[] { + "Flags" + , "Name" + , "HashValue" + }; + tablesinfo[0x26].type = Types.File; + tablesinfo[0x26].ctypes = new Types[] { + Types.UInt32, Types.String, Types.Blob + }; + tablesinfo[0x27].Name = "ExportedType"; + tablesinfo[0x27].names = new String[] { + "Flags" + , "TypeDefId" + , "TypeName" + , "TypeNamespace" + , "TypeImplementation" + }; + tablesinfo[0x27].type = Types.ExportedType; + tablesinfo[0x27].ctypes = new Types[] { + Types.UInt32, Types.UInt32, Types.String, Types.String, Types.Implementation + }; + tablesinfo[0x28].Name = "ManifestResource"; + tablesinfo[0x28].names = new String[] { + "Offset" + , "Flags" + , "Name" + , "Implementation" + }; + tablesinfo[0x28].type = Types.ManifestResource; + tablesinfo[0x28].ctypes = new Types[] { + Types.UInt32, Types.UInt32, Types.String, Types.Implementation + }; + tablesinfo[0x29].Name = "NestedClass"; + tablesinfo[0x29].names = new String[] { + "NestedClass" + , "EnclosingClass" + }; + tablesinfo[0x29].type = Types.NestedClass; + tablesinfo[0x29].ctypes = new Types[] { + Types.TypeDef, Types.TypeDef + }; + //unused TyPar tables taken from Roeder's reflector... are these documented anywhere? Since they are always empty, does it matter + tablesinfo[0x2A].Name = "TypeTyPar"; + tablesinfo[0x2A].names = new String[] { + "Number" + , "Class" + , "Bound" + , "Name" + }; + tablesinfo[0x2A].type = Types.TypeTyPar; + tablesinfo[0x2A].ctypes = new Types[] { + Types.UInt16, Types.TypeDef, Types.TypeDefOrRef, Types.String + }; + tablesinfo[0x2B].Name = "MethodTyPar"; + tablesinfo[0x2B].names = new String[] { + "Number" + , "Method" + , "Bound" + , "Name" + }; + tablesinfo[0x2B].type = Types.MethodTyPar; + tablesinfo[0x2B].ctypes = new Types[] { + Types.UInt16, Types.Method, Types.TypeDefOrRef, Types.String + }; + tablesinfo[0x2C].Name = "MethodTyPar"; + tablesinfo[0x2C].names = new String[] { + "Number" + , "Method" + , "Bound" + , "Name" + }; + tablesinfo[0x2C].type = Types.MethodTyPar; + tablesinfo[0x2C].ctypes = new Types[] { + Types.UInt16, Types.Method, Types.TypeDefOrRef, Types.String + }; + //number of bits in coded token tag for a coded token that refers to n tables. + //values 5-17 are not used :I + codedTokenBits = new int[] { + 0 + , 1 + , 1 + , 2 + , 2 + , 3 + , 3 + , 3 + , 3 + , 4 + , 4 + , 4 + , 4 + , 4 + , 4 + , 4 + , 4 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + , 5 + }; + reftables = new RefTableInfo[12]; + reftables[0].type = Types.TypeDefOrRef; + reftables[0].reftypes = new Types[] { + Types.TypeDef, Types.TypeRef, Types.TypeSpec + }; + reftables[0].refindex = new int[] { + 1 + , 2 + , 0x1B + }; + reftables[1].type = Types.HasConstant; + reftables[1].reftypes = new Types[] { + Types.Field, Types.Param, Types.Property + }; + reftables[1].refindex = new int[] { + 04 + , 08 + , 0x17 + }; + reftables[2].type = Types.CustomAttributeType; + reftables[2].reftypes = new Types[] { + Types.TypeRef, Types.TypeDef, Types.Method, Types.MemberRef, Types.UserString + }; + reftables[2].refindex = new int[] { + 01 + , 02 + , 06 + , 0x0A + , 01 + }; //???????? + reftables[3].type = Types.HasSemantic; + reftables[3].reftypes = new Types[] { + Types.Event, Types.Property + }; + reftables[3].refindex = new int[] { + 0x14 + , 0x17 + }; + reftables[4].type = Types.ResolutionScope; + reftables[4].reftypes = new Types[] { + Types.Module, Types.ModuleRef, Types.AssemblyRef, Types.TypeRef + }; + reftables[4].refindex = new int[] { + 00 + , 0x1A + , 0x23 + , 0x01 + }; + reftables[5].type = Types.HasFieldMarshal; + reftables[5].reftypes = new Types[] { + Types.Field, Types.Param + }; + reftables[5].refindex = new int[] { + 04 + , 08 + }; + reftables[6].type = Types.HasDeclSecurity; + reftables[6].reftypes = new Types[] { + Types.TypeDef, Types.Method, Types.Assembly + }; + reftables[6].refindex = new int[] { + 02 + , 06 + , 0x20 + }; + reftables[7].type = Types.MemberRefParent; + reftables[7].reftypes = new Types[] { + Types.TypeDef, Types.TypeRef, Types.ModuleRef, Types.Method, Types.TypeSpec + }; + reftables[7].refindex = new int[] { + 02 + , 01 + , 0x1A + , 06 + , 0x1B + }; + reftables[8].type = Types.MethodDefOrRef; + reftables[8].reftypes = new Types[] { + Types.Method, Types.MemberRef + }; + reftables[8].refindex = new int[] { + 06 + , 0x0A + }; + reftables[9].type = Types.MemberForwarded; + reftables[9].reftypes = new Types[] { + Types.Field, Types.Method + }; + reftables[9].refindex = new int[] { + 04 + , 06 + }; + reftables[10].type = Types.Implementation; + reftables[10].reftypes = new Types[] { + Types.File, Types.AssemblyRef, Types.ExportedType + }; + reftables[10].refindex = new int[] { + 0x26 + , 0x23 + , 0x27 + }; + reftables[11].type = Types.HasCustomAttribute; + reftables[11].reftypes = new Types[] { + Types.Method, Types.Field, Types.TypeRef, Types.TypeDef, Types.Param, Types.InterfaceImpl, Types.MemberRef, Types.Module, Types.Permission, Types.Property, Types.Event, Types.StandAloneSig, Types.ModuleRef, Types.TypeSpec, Types.Assembly, Types.AssemblyRef, Types.File, Types.ExportedType, Types.ManifestResource + }; + reftables[11].refindex = new int[] { + 06 + , 04 + , 01 + , 02 + , 08 + , 09 + , 0x0A + , 00 + , 0x0E + , 0x17 + , 0x14 + , 0x11 + , 0x1A + , 0x1B + , 0x20 + , 0x23 + , 0x26 + , 0x27 + , 0x28 + }; + } + public int Rva2Offset(int rva) + { + for (int i = 0; i < sections.Length; i++) + { + if ((sections[i].virtual_address <= rva) && (sections[i].virtual_address + sections[i].size_of_raw_data > rva)) + return (sections[i].pointer_to_raw_data + (rva - sections[i].virtual_address)); + } + return 0; + } + public int Offset2Rva(int uOffset) + { + for (int i = 0; i < sections.Length; i++) + { + if ((sections[i].pointer_to_raw_data <= uOffset) && ((sections[i].pointer_to_raw_data + sections[i].size_of_raw_data) > uOffset)) + return (sections[i].virtual_address + (uOffset - sections[i].pointer_to_raw_data)); + } + return 0; + } + public int GetTypeSize(Types trans) + { + if (trans == Types.UInt16) return 2; + if (trans == Types.UInt32) return 4; + // Heap + if (trans == Types.String) return GetStringIndexSize(); + if (trans == Types.Guid) return GetGuidIndexSize(); + if (trans == Types.Blob) return GetBlobIndexSize(); + // Rid + if ((int)trans < 64) + { + if (TableLengths[(int)trans] > 65535) return 4; + else return 2; + } + // Coded token (may need to be uncompressed from 2-byte form) + else if ((int)trans < 97) + { + int index = (int)trans - 64; + int codedtokenbits = codedTokenBits[reftables[index].refindex.Length]; + int maxsizekeeped = 65535; + maxsizekeeped = maxsizekeeped >> codedtokenbits; + for (int i = 0; i < reftables[index].refindex.Length; i++) + { + if (TableLengths[reftables[index].refindex[i]] > maxsizekeeped) return 4; + } + return 2; + } + return 0; + } + public int GetStringIndexSize() + { + return ((tableheader.HeapOffsetSizes & 0x01) != 0) ? 4 : 2; + } + public int GetGuidIndexSize() + { + return ((tableheader.HeapOffsetSizes & 0x02) != 0) ? 4 : 2; + } + public int GetBlobIndexSize() + { + return ((tableheader.HeapOffsetSizes & 0x04) != 0) ? 4 : 2; + } + public unsafe bool Intialize(BinaryReader reader) + { + reader.BaseStream.Position = 0; + byte[] buffer; + IntPtr pointer; + long NewPos; + try + { + buffer = reader.ReadBytes(sizeof(IMAGE_DOS_HEADER)); + fixed (byte* p = buffer) + { + pointer = (IntPtr)p; + } + idh = (IMAGE_DOS_HEADER)Marshal.PtrToStructure(pointer, typeof(IMAGE_DOS_HEADER)); + if (idh.e_magic != 0x5A4D) return false; + reader.BaseStream.Position = idh.e_lfanew; + buffer = reader.ReadBytes(sizeof(IMAGE_NT_HEADERS)); + fixed (byte* p = buffer) + { + pointer = (IntPtr)p; + } + inh = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(pointer, typeof(IMAGE_NT_HEADERS)); + if (inh.Signature != 0x4550) return false; + reader.BaseStream.Position = idh.e_lfanew + 4 + sizeof(IMAGE_FILE_HEADER) + inh.ifh.SizeOfOptionalHeader; + sections = new image_section_header[inh.ifh.NumberOfSections]; + buffer = reader.ReadBytes(sizeof(image_section_header) * inh.ifh.NumberOfSections); + fixed (byte* p = buffer) + { + pointer = (IntPtr)p; + } + for (int i = 0; i < sections.Length; i++) + { + sections[i] = (image_section_header)Marshal.PtrToStructure(pointer, typeof(image_section_header)); + pointer = (IntPtr)(pointer.ToInt32() + Marshal.SizeOf(typeof(image_section_header))); + } + // Read resources: + if (inh.ioh.ResourceDirectory.RVA != 0) + { + NewPos = (long)Rva2Offset(inh.ioh.ResourceDirectory.RVA); + if (NewPos != 0) + { + reader.BaseStream.Position = NewPos; + rsrcsection = reader.ReadBytes(inh.ioh.ResourceDirectory.Size); + } + } + // NET Directory + if (inh.ioh.MetaDataDirectory.RVA == 0) return false; + NewPos = (long)Rva2Offset(inh.ioh.MetaDataDirectory.RVA); + if (NewPos == 0) return false; + reader.BaseStream.Position = NewPos; + buffer = reader.ReadBytes(sizeof(NETDirectory)); + fixed (byte* p = buffer) + { + pointer = (IntPtr)p; + } + // After .NET Directory comes body of methods! + netdir = (NETDirectory)Marshal.PtrToStructure(pointer, typeof(NETDirectory)); + // Read .NET Strong Name Signature: + if (netdir.StrongNameSignatureRVA != 0) + { + NewPos = (long)Rva2Offset(netdir.StrongNameSignatureRVA); + if (NewPos != 0) + { + reader.BaseStream.Position = NewPos; + StrongName = reader.ReadBytes(netdir.StrongNameSignatureSize); + } + } + // Read .NET Resources: + if (netdir.ResourceRVA != 0) + { + NewPos = (long)Rva2Offset(netdir.ResourceRVA); + if (NewPos != 0) + { + reader.BaseStream.Position = NewPos; + NETResources = reader.ReadBytes(netdir.ResourceSize); + } + } + reader.BaseStream.Position = (long)Rva2Offset(netdir.MetaDataRVA); + mh = new MetadataReader.MetaDataHeader(); + mh.Signature = reader.ReadInt32(); + mh.MajorVersion = reader.ReadInt16(); + mh.MinorVersion = reader.ReadInt16(); + mh.Reserved = reader.ReadInt32(); + mh.VerionLenght = reader.ReadInt32(); + mh.VersionString = reader.ReadBytes(mh.VerionLenght); + mh.Flags = reader.ReadInt16(); + mh.NumberOfStreams = reader.ReadInt16(); + streams = new MetaDataStream[mh.NumberOfStreams]; + for (int i = 0; i < mh.NumberOfStreams; ++i) + { + streams[i].Offset = reader.ReadInt32(); + streams[i].Size = reader.ReadInt32(); + char[] chars = new char[32]; + int index = 0; + byte character = 0; + while ((character = reader.ReadByte()) != 0) + chars[index++] = (char)character; + index++; + int padding = ((index % 4) != 0) ? (4 - (index % 4)) : 0; + reader.ReadBytes(padding); + streams[i].Name = new String(chars) + .Trim(new Char[] { + '\0' + }); + if (streams[i].Name == "#~" || streams[i].Name == "#-") + { + MetadataRoot.Name = streams[i].Name; + MetadataRoot.Offset = streams[i].Offset; + MetadataRoot.Size = streams[i].Size; + } + if (streams[i].Name == "#Strings") + { + long savepoz = reader.BaseStream.Position; + reader.BaseStream.Position = (long)(Rva2Offset(netdir.MetaDataRVA) + streams[i].Offset); + StringOffset = reader.BaseStream.Position; + Strings = reader.ReadBytes(streams[i].Size); + reader.BaseStream.Position = savepoz; + } + if (streams[i].Name == "#US") + { + long savepoz = reader.BaseStream.Position; + reader.BaseStream.Position = (long)(Rva2Offset(netdir.MetaDataRVA) + streams[i].Offset); + US = reader.ReadBytes(streams[i].Size); + reader.BaseStream.Position = savepoz; + } + if (streams[i].Name == "#Blob") + { + long savepoz = reader.BaseStream.Position; + reader.BaseStream.Position = (long)(Rva2Offset(netdir.MetaDataRVA) + streams[i].Offset); + BlobOffset = reader.BaseStream.Position; + Blob = reader.ReadBytes(streams[i].Size); + reader.BaseStream.Position = savepoz; + } + if (streams[i].Name == "#GUID") + { + long savepoz = reader.BaseStream.Position; + reader.BaseStream.Position = (long)(Rva2Offset(netdir.MetaDataRVA) + streams[i].Offset); + GUID = reader.ReadBytes(streams[i].Size); + reader.BaseStream.Position = savepoz; + } + } + reader.BaseStream.Position = (long)(Rva2Offset(netdir.MetaDataRVA) + MetadataRoot.Offset); + buffer = reader.ReadBytes(sizeof(TableHeader)); + fixed (byte* p = buffer) + { + pointer = (IntPtr)p; + } + tableheader = (TableHeader)Marshal.PtrToStructure(pointer, typeof(TableHeader)); + TableLengths = new int[64]; + //read as many uints as there are bits set in maskvalid + for (int i = 0; i < 64; i++) + { + int count = (((tableheader.MaskValid >> i) & 1) == 0) ? 0 : reader.ReadInt32(); + TableLengths[i] = count; + } + TablesOffset = reader.BaseStream.Position; + InitTablesInfo(); + // Get Table sizes and all Tables + tablesize = new TableSize[0x2D]; + tables = new Table[0x2D]; + for (int i = 0; i < tablesize.Length; i++) + { + tablesize[i].Sizes = new int[tablesinfo[i].ctypes.Length]; + tablesize[i].TotalSize = 0; + for (int j = 0; j < tablesinfo[i].ctypes.Length; j++) + { + tablesize[i].Sizes[j] = GetTypeSize(tablesinfo[i].ctypes[j]); + tablesize[i].TotalSize = tablesize[i].TotalSize + tablesize[i].Sizes[j]; + } + } + for (int i = 0; i < tablesize.Length; i++) + { + if (TableLengths[i] > 0) + { + tables[i].members = new long[TableLengths[i]][]; + for (int j = 0; j < TableLengths[i]; j++) + { + tables[i].members[j] = new long[tablesinfo[i].ctypes.Length]; + for (int k = 0; k < tablesinfo[i].ctypes.Length; k++) + { + if (tablesize[i].Sizes[k] == 2) + tables[i].members[j][k] = reader.ReadInt16() & 65535; + if (tablesize[i].Sizes[k] == 4) + tables[i].members[j][k] = reader.ReadInt32() & 4294967295; + } + } + } + } + } + catch + { + return false; + } + return true; + } + } + + class bytesGetter + { + private static byte[][] methodbodies; + public static void CalculateEncKeys(ModuleDefMD module) + { + ModuleDefMD moduleDefMD = module; + MetadataReader metadataReader = new MetadataReader(); + FileStream fileStream = null; + BinaryReader binaryReader = null; + // fileStream = new FileStream(Console.ReadLine(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + byte[] tester = moduleDefMD.MetaData.PEImage.CreateFullStream().ReadBytes((int)moduleDefMD.MetaData.PEImage.CreateFullStream().Length); + MemoryStream mwm = new MemoryStream(tester); + binaryReader = new BinaryReader(mwm); + + Dictionary dict = new Dictionary(); + + if (metadataReader.Intialize(binaryReader)) + { + + // byte[] array = File.ReadAllBytes(Console.ReadLine()); + methodbodies = new byte[metadataReader.TableLengths[6]][]; + int[] array3 = new int[metadataReader.TableLengths[6]]; + List list = new List(); + List list2 = new List(); + + for (int i = 0; i < metadataReader.TableLengths[6]; i++) + { + methodbodies[i] = null; + int num2 = 0; + array3[i] = metadataReader.Rva2Offset((int)metadataReader.tables[6].members[i][0]); + if (array3[i] > 0) + { + binaryReader.BaseStream.Position = (long)array3[i]; + byte b = (byte)(binaryReader.ReadByte() & 0xff); + if ((b & 3) == 2) + { + num2 = b >> 2; + array3[i]++; + } + if ((b & 3) == 3) + { + binaryReader.BaseStream.Position = binaryReader.BaseStream.Position + 3L; + num2 = binaryReader.ReadInt32(); + binaryReader.BaseStream.Position = binaryReader.BaseStream.Position + 4L; + array3[i] += 12; + } + if (num2 > 0) + { + try + { + binaryReader.BaseStream.Position = (long)array3[i]; + methodbodies[i] = binaryReader.ReadBytes(num2); + } + catch + { + } + } + } + } + } + } + public static byte[] tester(int token) + { + int token2 = 0x06000000; + foreach (byte[] byter in methodbodies) + { + token2++; + if (token2 == token) + { + return byter; + } + } + return null; + } + } +} diff --git a/VM.Core/ByteEncryption/Process.cs b/VM.Core/ByteEncryption/Process.cs new file mode 100644 index 0000000..1906053 --- /dev/null +++ b/VM.Core/ByteEncryption/Process.cs @@ -0,0 +1,204 @@ +using Core.Protection; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +//using ConversionBack; +using dnlib.DotNet; +using dnlib.DotNet.Writer; + +namespace Core.ByteEncryption +{ + class Process + { + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern IntPtr LoadLibrary(string dllToLoad); + [DllImport("kernel32.dll", CharSet = CharSet.Ansi, EntryPoint = "GetProcAddress", ExactSpelling = true)] + private static extern IntPtr e(IntPtr intptr, string str); + [DllImport("kernel32.dll", CharSet = CharSet.Auto, EntryPoint = "GetModuleHandle")] + private static extern IntPtr ab(string str); + public delegate void abc(byte[] bytes, int len, byte[] key, int keylen); + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr LoadLibraryEx(string dllToLoad, IntPtr hFile, uint flags); + + public static byte[] tester(MethodDef methodDef, ModuleDefMD updated) + { + dnlib.IO.IImageStream streamFull = updated.MetaData.PEImage.CreateFullStream(); + var upated = (updated.ResolveToken(methodDef.MDToken.ToInt32()) as MethodDef); + var offset = updated.MetaData.PEImage.ToFileOffset(upated.RVA); + streamFull.Position = (long)offset; + byte b = streamFull.ReadByte(); + + ushort flags; + byte headerSize; + ushort maxStack; + uint codeSize = 0; + + switch (b & 7) + { + case 2: + case 6: + flags = 2; + maxStack = 8; + codeSize = (uint)(b >> 2); + headerSize = 1; + break; + + case 3: + flags = (ushort)((streamFull.ReadByte() << 8) | b); + headerSize = (byte)(flags >> 12); + maxStack = streamFull.ReadUInt16(); + codeSize = streamFull.ReadUInt32(); + break; + } + if (codeSize != 0) + { + byte[] il_byte = new byte[codeSize]; + streamFull.Position = (long)offset + upated.Body.HeaderSize; + streamFull.Read(il_byte, 0, il_byte.Length); + return il_byte; + } + return null; + } + [DllImport("NativePRo.dll")] + public static extern void a(byte[] bytes, int len, byte[] key, int keylen); + + public unsafe static void processConvertedMethods(ModuleDefMD moduleDefMD, List allMethodDatas) + { + int pos = 0; + Stream tester = new MemoryStream(); + ModuleWriterOptions modopts = new ModuleWriterOptions(moduleDefMD); + modopts.MetaDataOptions.Flags = MetaDataFlags.PreserveAll; + modopts.Logger = DummyLogger.NoThrowInstance; + moduleDefMD.Write(tester, modopts); + ModuleDefMD updated = ModuleDefMD.Load(tester); + + foreach (MethodData methodData in allMethodDatas) + { + var decryptedBytes = methodData.DecryptedBytes; + var method = methodData.Method; + var md5 = MD5.Create(); + byte[] methodBytes = Process.tester(method, updated); + + var nameHash = md5.ComputeHash(Encoding.ASCII.GetBytes(method.Name)); + var enc = ByteEncryption.Encrypt(nameHash, decryptedBytes); + // ConvertBack.a(enc, enc.Length, methodBytes, methodBytes.Length); + + // Console.WriteLine("got to native"); + + enc = aMethod2(enc, enc.Length, methodBytes, methodBytes.Length); + // conversion(enc, enc.Length, methodBytes, methodBytes.Length); + methodData.EncryptedBytes = enc; + + methodData.Encrypted = true; + methodData.size = methodData.EncryptedBytes.Length; + methodData.position = pos; + pos += methodData.EncryptedBytes.Length; + ////////////////////////////////////////////////////////// + + + + + } + } + /*EXTERN_DLL_EXPORT void __stdcall a(unsigned char * data, int datalen, unsigned char key[], int keylen) { + int N1 = 12, N2 = 14, NS = 258, I = 0; + for (I; I < keylen; I++) NS += NS % (key[I] + 1); + + for (I = 0; I < datalen; I++) + { + NS = key[I % keylen] + NS; + N1 = (NS + 5) * (N1 & 255) + (N1 >> 8); + N2 = (NS + 7) * (N2 & 255) + (N2 >> 8); + NS = ((N1 << 8) + N2) & 255; + + data[I] = ((data[I]) ^ NS); + } + b(data, datalen); + + }*/ + /*EXTERN_DLL_EXPORT void b(unsigned char * toEncrypt, int len) { + char key[3] = { 'H', 'C', 'P' }; //Any chars will work, in an array of any size + unsigned char * output = toEncrypt; + + for (int i = 0; i < len; i++) + output[i] = toEncrypt[i] ^ key[i % (sizeof(key) / sizeof(char))]; + + //return output; + }*/ + [Obfuscation(Feature = "virtualization", Exclude = false)] + private static byte[] b(byte[] toEncrypt, int len) + { + string key = "HCP"; //Any chars will work, in an array of any size + byte[] output = toEncrypt; + + for (int i = 0; i < len; i++) + { + //C++ TO C# CONVERTER WARNING: This 'sizeof' ratio was replaced with a direct reference to the array length: + //ORIGINAL LINE: output[i] = toEncrypt[i] ^ key[i % (sizeof(key) / sizeof(sbyte))]; + output[i] = (byte)(toEncrypt[i] ^ key[i % (key.Length)]); + } + + return output; + } + [Obfuscation(Feature = "virtualization", Exclude = false)] + //C++ TO C# CONVERTER NOTE: __stdcall is not available in C#: + //ORIGINAL LINE: EXTERN_DLL_EXPORT void __stdcall a(byte * data, int datalen, byte key[], int keylen) + private static byte[] aMethod2(byte[] data, int datalen, byte[] key, int keylen) + { + int N1 = 12; + int N2 = 14; + int NS = 258; + int I = 0; + for (I = 0; I < keylen; I++) + { + NS += NS % (key[I] + 1); + } + + for (I = 0; I < datalen; I++) + { + NS = key[I % keylen] + NS; + N1 = (NS + 5) * (N1 & 255) + (N1 >> 8); + N2 = (NS + 7) * (N2 & 255) + (N2 >> 8); + NS = ((N1 << 8) + N2) & 255; + + data[I] = (byte)((data[I]) ^ NS); + } + return b(data, datalen); + + } + + public static byte[] aMethod(byte[] data, int datalen, byte[] key, int keylen) + { + int N1 = 12, N2 = 14, NS = 258, I = 0; + for (I = 0; I < keylen; I++) NS += NS % (key[I] + 1); + for (I = 0; I < datalen; I++) + { + NS = key[I % keylen] + NS; + N1 = (NS + 5) * (N1 & 255) + (N1 >> 8); + N2 = (NS + 7) * (N2 & 255) + (N2 >> 8); + NS = ((N1 << 8) + N2) & 255; + + data[I] = (byte)((byte)(data[I]) ^ NS); + } + return Bmethod(data, data.Length); + } + + public static byte[] Bmethod(byte[] toEncrypt, int len) + { + char[] key = { 'H', 'C', 'P' }; + byte[] output = toEncrypt; + for (int i = 0; i < len; i++) + output[i] = (byte)(toEncrypt[i] ^ key[i % (3 / sizeof(char))]); + return output; + + } + } +} diff --git a/VM.Core/Injection/InjectHelper.cs b/VM.Core/Injection/InjectHelper.cs new file mode 100644 index 0000000..6112423 --- /dev/null +++ b/VM.Core/Injection/InjectHelper.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using dnlib.DotNet; +using dnlib.DotNet.Emit; + +public static class InjectHelper +{ + ///

    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%0Dn+1&nY?yv$u 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 literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/AstroNet/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/AstroNet/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/AstroNet/obj/Debug/AstroNet.csproj.AssemblyReference.cache b/AstroNet/obj/Debug/AstroNet.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..4fd6f038c9422a02fde0362d539a326bc1985e84 GIT binary patch literal 5501 zcmd5=U1%It6rS58HBD+ujZ^~x7b>)-VJ6*ev)!e!q?@hPO}1etrWOY3?Cjm-vNLzm znLFETTB)ysK8Sr05%VA_^dWtzf}o}7gFlpl5@>x=U#bYwg474ac<=1Y?#|ANZuc%Y zf!Ucm!@1u%=R4myli6cAIR(I=APC@8Dyd9AD`z56B?rsUvSB2R7ZHZgLU>Urm?WE? zj~qujw3U=upljaET<+v^>D0WeOxeUTvydoxgq4hm7G}kQt^+`=@A#Vh^xpFAegHt9 z`-Clq4z>s`(o^rt^n(6^Gex>zQj(-pQmTTJT7Z)p!AXtaBp;mQgOeyYsRqv7MF2SK{PC$A$d11s}p3F1lY=sLwIfL?Y2px>}H z)6!AiU0_d|57$4oSd9Sar?NMN9RkcKrj9y^c#;9-%n>A0mD@SJItYNj{60|-E+ ze4Mk)Mfy&aXpwy@hbNw*NV81aEE1(=Qwi*#(9PpwRPpmu zW2W%f@cofDHu^m#^iibSv1u8ofK?Ie%Y*C&7qy1#0=sr!!o`yNz`t>yG&)*!gHu`6 zJhv5}Aayr>_$xX6+AUUK|I8k@q*y8fHHP@tSRJVpK)OaZ7oM!v_a%C{mGPV2=j5pa z0xcn$c47aP{WJNSqq~m8ulB6pJ~#8~#{I;`?$tdn9=rU<@X_mEk-d56=@a&+Up)TA zwY@jbkA3;;XFB=T$ev#Nyp-8I{pa0%7e2{8f9v({J{WxKmm9x7^YKtFzqEP%%I5YP z58YeuUEg*g8cSS`O^@E|d;9J;=l7g?=g0ToE&uk?$eq!lQqQF|w<7&o0vR8FT^yqS zRU8hD!^A`^emFk?F!GXdSLy&Qm@`nT$v)bI$B9*&=&w6tw|>?qD9A23GE6sk!rTu%HoxyXD;sA z7)ZMB(tI~Y`N5GfYe9Kg>SmNFCBzwo&(>9@CYDSm12lecr+5Vi0KXhM!7}2dKIdS9 z3@FNU{84qZ+CBxENyVujhdEI0CI_ZfqKfP!Ly}%05VHZvZovo^bZ(6BW5qUZtL~bE z&Vv#@m<|W2aNC#c!sbQQXiE*~(f zvv6D6#ykKjJyk=dPGEL{75Z%l@oVhkpaZp)yMV literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Debug/AstroNet.csproj.CopyComplete b/AstroNet/obj/Debug/AstroNet.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/AstroNet/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache b/AstroNet/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..f1d7622 --- /dev/null +++ b/AstroNet/obj/Debug/AstroNet.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +e525ecc971016d6a49bde0b16f998c0cab37c14d diff --git a/AstroNet/obj/Debug/AstroNet.csproj.FileListAbsolute.txt b/AstroNet/obj/Debug/AstroNet.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..4059595 --- /dev/null +++ b/AstroNet/obj/Debug/AstroNet.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Astro_Renewed.exe.config +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Bin\Astro_Renewed.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.AssemblyReference.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\AstroNet.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Debug\Astro_Renewed.pdb diff --git a/AstroNet/obj/Debug/Astro_Renewed.csproj.AssemblyReference.cache b/AstroNet/obj/Debug/Astro_Renewed.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..0adea8e383c64c24ed240d5b7265f068cbc9441f GIT binary patch literal 963 zcmeZu3JP{+WMpDsU|jo6uYlY^0w zkrgZh62t%?LB@I@!O{R^0BOdEG@yM}`uh4VR{B_6rH||?ePmbZ!(62gbCo{ORr+vO zfsF^+0J4MyL@+XPhk|qy2;ld!3Qu2Vt z_~)d6gA^o#4zQUN@G`k#+w;nqAhlo%fF^MVR~DC~=IS};7o}3{EH;Q?6q*Be9#@%( zo`IgRfw7?_BO|XKFlD$ECFZ7<=NDzejsFh?j0}tddV1hQ0S*^2C^<$p*?2Kz>lLqanyqK(8=pGim!Io!1hy zG2hC({${yP&(&|1SH-H76P#B6mb5>3szg1h)Xt-L-w6r%{p#ndbxyuJoKtc+*DrFx zk!;Oy)p6D3hvpj&wh8`B^;EL@&Dk4|2${eKdxt4&sk$+Y`NOlMe8H$ j+z*$kmBZ&hTE3+0ORdavE#YkDDGR`<4mquW+{^#~({kjS literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Debug/Astro_Renewed.csproj.CopyComplete b/AstroNet/obj/Debug/Astro_Renewed.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/AstroNet/obj/Debug/Astro_Renewed.csproj.CoreCompileInputs.cache b/AstroNet/obj/Debug/Astro_Renewed.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..c98fc94 --- /dev/null +++ b/AstroNet/obj/Debug/Astro_Renewed.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +88e89c8dbde2ffa7faee25544f4ac8f96b6d3d65 diff --git a/AstroNet/obj/Debug/Astro_Renewed.csproj.FileListAbsolute.txt b/AstroNet/obj/Debug/Astro_Renewed.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..5ceb605 --- /dev/null +++ b/AstroNet/obj/Debug/Astro_Renewed.csproj.FileListAbsolute.txt @@ -0,0 +1,68 @@ +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.exe.config +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.exe +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.pdb +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.AssemblyReference.cache +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CoreCompileInputs.cache +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.exe +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.pdb +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\bin\Debug\dnlib.dll +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\bin\Debug\dnlib.xml +C:\Users\akibu\source\repos\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.exe.config +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\bin\Debug\dnlib.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\bin\Debug\dnlib.xml +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.AssemblyReference.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\ASTRO_RENEWED\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.pdb +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.AssemblyReference.cache +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.exe +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.pdb +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.exe.config +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.exe +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\Astro_Renewed.pdb +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\dnlib.dll +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\KoiVM.Console.dll +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\dnlibOld.dll +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\KoiVM.dll +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\KoiVM.Console.pdb +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\dnlib.xml +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\bin\Debug\KoiVM.pdb +C:\Users\akibu\Desktop\Astro_Renewed\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CopyComplete +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.AssemblyReference.cache +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CoreCompileInputs.cache +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\obj\Debug\Astro_Renewed.exe +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\obj\Debug\Astro_Renewed.pdb +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\Astro_Renewed.exe.config +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\Astro_Renewed.exe +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\Astro_Renewed.pdb +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\dnlib.dll +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\KoiVM.Console.dll +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\dnlibOld.dll +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\KoiVM.dll +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\KoiVM.Console.pdb +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\dnlib.xml +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\bin\Debug\KoiVM.pdb +C:\Users\akibu\Desktop\hahaxdjsd\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\Astro_Renewed.exe.config +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\Astro_Renewed.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\dnlib.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\KoiVM.Console.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\KoiVM.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\KoiVM.Console.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\dnlib.xml +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\KoiVM.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.AssemblyReference.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\obj\Debug\Astro_Renewed.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\obj\Debug\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\obj\Debug\Astro_Renewed.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\Astro_Renewed\bin\Debug\dnlibOld.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\Astro_Renewed.exe.config +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\bin\Astro_Renewed.pdb diff --git a/AstroNet/obj/Debug/Astro_Renewed.exe b/AstroNet/obj/Debug/Astro_Renewed.exe new file mode 100644 index 0000000000000000000000000000000000000000..ab26b37af6fead2c01cc1d741f81b8ea7a38b447 GIT binary patch literal 98816 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 literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/AstroNet/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..71c23f95f6074be30f340ae1c977c92c69a9be4b GIT binary patch literal 152 zcmeZu3JP{+WMpJuU|`I1wu%WT%1cNRGxPI`^-^+jz?L$IOMa7?e3b)aKNnDkfu6B}v7sdc0D-122mk;8 literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/AstroNet/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..9ffd9f4c26dfe0a1fd335b51942a52d20a83a0f1 GIT binary patch literal 7137 zcmeHMSyLNF5SBQ`2#kXW!5Dn36DM&TWg~IpDnDQyF~ML;QgEseg-5$1F=ls1nVIDX z#cTdXenBcfG3j1iTqb$gt>QteQfo9vf787^tFK$Jcq|tC2QK`?>uw(idxKk2C{feq zHdj7%O4_%%FtfsSg}0W=r;KeT6&K#C%%YjbSIWrxj`k&cZFV1$ z0rOr}({r_j+EOi(u@};Gjt(N^@+Xj9``ob+Z_U$8ipG0M8x1DSB9&`i!`JEoEPg;8 zM;tMGRVn6Hos;~rW*+WJjl%4#@M^qX;0~L#sAqGVYSx~Ky=tcBJ5E7TmmLXt&>kw& zDvV8B7%K?J274c4XPL@6)174{zp9wt1SRSjuX{qW9IH`q#hRxy?614Krs5YjPim@b zPQA~sSMlgd|M^vh19mEXX`4ANnWcr~OpP^cO=XEuY3*-Oy|2dVmpVooQq;ghXw|r6 zb*{8L=`KisVVa=}r$NzqXPiTsyfm~SJbu9B)9br)Ts0hef`FG7wgPRYxo}Ggizy}K zD(s$Xun9u0wS?J4-_zV>ttFQ=HNB*!e8q~a#w7DVRY3|Dlzs$F_hh>_a0}@p{e;9~ z{UH0|@i>7u$XMT>gQXLtnG4|w_t(-GaOO|UW0G6uTX5Eg%+AgYQ{Y5wQ^#jpl*IG;NG1Lptuzomq z45JtUF--1)jFC|gxzl2cIlU|akv^i5RXSw1Vs7Tk9S)f~oHv)u*;Jc?w&-U5_>9~G zO@G9*FDtpV(z-EQDY8Q#qRhy9b?z}>9A3R*3k}+gfYVm8!iK)qm#yNvpYz#rsj{lH z6q`(U8>0HLl4DiB4pIRpEdy^VG9{eD4oU8kB-5hSK1+OtwvB;!cyasfT%c(NNy3Z? zoMChwZTxKQl1$>VUC(-x#CX*=4Bks92xex6D z({>y(6|~qfOXBT8j}y!ZO5yp6qSH)n2{H|e%i$?rZ8S_P$WF)%Xr|$5?%uMB?E!~; z2T2q<>mk6r4-clwy~?`a+Z%!MN1&X8a-h+5$flaHXFNY%Ui=Q?wMDdzR&YZCa_$&( z0_5U>s5E1wJJHOR_Nik{yaSjg0AojDRVOu&EI={<=`c#99M#lBQDVBA zBL~<|qqZ`@#t{4xkoKaq5<$KKko_n@;2CPZ(YhIl&j8Je675&l3GUL@QJaN8Z@Kpy zq7C3LU5}sj_*tlxh_KU}fEnyT1;|x{dy4_K1ntTi5mq;G*NlYUGjOWl8C_rgBjwwZuXPnMLNz76(c_V2M(cC+d0oA*aghhc` k)CP{646-1Axf8?!1`1yNfAt=1|Mfpp@6pz&|L>0c3x3!>cmMzZ literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/AstroNet/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/AstroNet/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/AstroNet/obj/Release/AstroNet.csproj.CopyComplete b/AstroNet/obj/Release/AstroNet.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/AstroNet/obj/Release/AstroNet.csproj.CoreCompileInputs.cache b/AstroNet/obj/Release/AstroNet.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..c613612 --- /dev/null +++ b/AstroNet/obj/Release/AstroNet.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +36fa6081a009e888dec145e9d050899a260c82c1 diff --git a/AstroNet/obj/Release/AstroNet.csproj.FileListAbsolute.txt b/AstroNet/obj/Release/AstroNet.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..8a74e8f --- /dev/null +++ b/AstroNet/obj/Release/AstroNet.csproj.FileListAbsolute.txt @@ -0,0 +1,10 @@ +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Release\AstroNet.csproj.CoreCompileInputs.cache +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\bin\Release\Astro_Renewed.exe.config +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\bin\Release\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\bin\Release\Astro_Renewed.pdb +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\bin\Release\AutoMapper.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\bin\Release\dnlib.dll +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\bin\Release\AutoMapper.xml +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Release\AstroNet.csproj.CopyComplete +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Release\Astro_Renewed.exe +D:\Reverse Engineering\dotNET Files\Coding Files\PROJECTS\AstroNet\AstroNet\obj\Release\Astro_Renewed.pdb diff --git a/AstroNet/obj/Release/Astro_Renewed.exe b/AstroNet/obj/Release/Astro_Renewed.exe new file mode 100644 index 0000000000000000000000000000000000000000..e07cf787a0969994133754851d388ca9f689b3b4 GIT binary patch literal 68096 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 literal 0 HcmV?d00001 diff --git a/AstroNet/obj/Release/Astro_Renewed.pdb b/AstroNet/obj/Release/Astro_Renewed.pdb new file mode 100644 index 0000000000000000000000000000000000000000..6bca634289493be659792a58b1fcb16a8da1ba19 GIT binary patch literal 171520 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 literal 0 HcmV?d00001 diff --git a/Bin/AstroNet.exe.config b/Bin/AstroNet.exe.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/Bin/AstroNet.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Bin/AstroNet.pdb b/Bin/AstroNet.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3cf6fac10375fb9da05e828d0dfe925fa6ac14e1 GIT binary patch literal 36352 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 literal 0 HcmV?d00001 diff --git a/Bin/Astro_Renewed.exe b/Bin/Astro_Renewed.exe new file mode 100644 index 0000000000000000000000000000000000000000..ab26b37af6fead2c01cc1d741f81b8ea7a38b447 GIT binary patch literal 98816 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 + + + + + \ No newline at end of file diff --git a/Bin/Astro_Renewed.pdb b/Bin/Astro_Renewed.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c17ca842798d627e120d6ae4ccbcfe06551be492 GIT binary patch literal 302592 zcmeF42Vhl2*2nLCKmesn7cpRv9(qTmgepx4iiko;9uNr$CIP{E69KVfFRLzgU9scp zx~QzOc3sQb^|N7jEr`3iw(s|!JM(fAqktxu)eKDjZ)VQ4Gc#w-lzZ>Q?9BYUg1mW! z$s>D=?AkSX;Ncg%-s2cy5I56;sEx8>&!T(YftIPTm9QbnX0sB2r`pn(u~nAJlVdw{?$xQt(ra_gA{VIH%`L!>{)a21g{oC&xg8v+sP^x6+CL{h z+xhHw=GN@_(6~Knee}`Y-L_n_apM_{AMNnxvr>n(-j1SFll%%C*!7WKzR>|1k-02J z(?v~#H4<*;A4L;b{pWw01J&*SKiz!4xbWq*|0PI(==lG|nN%lGWjRn@`(Ik!{#CZU zD!O15rTyHe%aD(^i zf!klAYRa9-fr@JXX3cVg=DFX#dFSw#2cPljRgVtZr{9!sx<3DHzlr&SPw8;RM?14l z)p>0{2P&%lr@j2_;2|TfPI>!?z8V+9JpfYq8nbh?A^ScU-TS$$HeU~Q8nex zr|cB_H&@3+W&!nopX4j z+WR%UDe2bFXPozs6)*hjy}mar9rDnz$6fg0$De1l+x`+&Q|?R-R8;$~cyaEycHJ-O zIHmuzBOmE5VYeQK98v#~M>}tSiK;1gCI>32{bxS$-LbE~aPq8vEhn~r zIe+*3!xzqbJpH-r|cB_H&@3+CRVDJ~#J%>+ZGbyYKnT(?zKT zZJHKt9e3QbUC(X0=kb%;U!?0~)usw^prYD;%%f*Ne)}=+9e42JzcqM%ujcQ3y6}xQ z+0!0My5a5Hl4c%K_-YlbdUcWDKt;9x2e}#7UNN@o>JQKB`S_Z(BU%r6yXg(jKYYl- zC*B_a>c77q{%kd~t0o63s{Oy{bjaBsFMn(0sX42kI`Gz;ZkgD0{qz4C^u_~w-nIYD zUmmpXoT^#->QYry`wzKh*sZ61bKx!{KIqqd^|ucW+njX8s2h$xcJjXq@9UF#Y5g~< zIbAh5P*Lr_`?YNcJbmk!x`l85`~L2Ee;HGIRML|3UQb<+ebup@dS3Za_5N?wZ2k(H z|2rIY!aE0!nAZ5Zy2&G+`S$je>sC$bHEzIz?wg(SAv~%5q z&RG23rE?b_)o;Z$U!Aq?D}S#uHr@4dTF@(kZUUmQ?}_wkc2`XfR8;#fJnYV6^Iz)s_S%c?9dgfqR$N*8rEbUE zJA2;yuN{2Eox84h`unO``|46vRQvaRbXxPj-*r{by)Q~@@wda;?b`CBHvhc8{`Id< zzUqQ~b4Ii|x|-8flLHmi{_ztgG^qLazr20l#s^Q%>_RTWY z{H|&osHpZoI%!kAkMEc{;`qtW=I^zoaKzU45B}qnpvRg*f9gYjU-WIms#fpn@`N0y zsP<23a?+g-B~AbI0=@vAxW|8V8B)GAv2-+i$vYW(N!@$$P@wtcwOmv#SmWXAk4=k1YGqu2L+ z55Mz~;?L9aTle4myJvJ2Wk5x>|FF%U7dL+;f9{Q^b-OF)ni@xSe{t6ACtAHYbi zm#O0Je{UH+>F(XnX!Y>NjVJYOwBKP__cc8?>&%x9ZFhh3(@wo7x%K~5^SWwsprXeA zyB#(TZ+7VaH6MG%!cEy3u}z1)`ApKkioZU0Y{xGPn|$|Ki>g`s>QYry`@giY?Yn26 z(Cdl3I$zeDSv%*wN00pTS#3Apaq_3BAN=3@Em!=dn$uO20~OW&Uradu+H+5P?3!!N z8g${}jYCh1eYmvyn*~K%=C@w;Nb9*PtM~t^X7g9r{!i|$qpyq)IpgFR9nx3d@%3f% zE*rYw>AV**ZoIPTN8SNlkLy@PtN*(%Rz;2fgC0Az$Bke7?eRf1#=Z3MkoFz2YMnjc zvULw0disC98dvMKH$ME`GrEd0prYFU`T57+yLicdyR`V`{4Wo_@r%N`C*6PSU;gj@ z1KTVd`}p-ww zQSJZIYw7(5{Wa4ZB|6>%S*YJ#)7{V~_f*`u+b^w5wHA`@g$> zO2T~g1 zULJDlx>F9Q+hobf|9AdLje2A@czM)fYZyqpK(bDyscg`Nt(c`2D`M=C16P z^w{9u$K2ay-pKqLyPo*)#M>t}ioH?&{qNs+`=?w|@4M4$jT=9B`qs0rd-U`d&up7M z{o{LU9DPUMl!Ko9WcQD&X!U>h#j2?BKezFP(~n#8b@PnP{$m%N-z)Q>DeLce=a3Dj zHEKBj-`SUbviNt;=qk#9ifaEQC)TQc)%OQ=z5mcQFDGZL{CdNl*KL_~!JQ|KKknbx zwr)73djIb?-u{=aIP>d2PML6f(cEz_?fQ1xp*Podq!7L22@o0 z*E^zj@*ao1P}I=-V&toDWMt>8+y8)$-=waZIecor5y^GtRMG1H?u%7X?SDi6_}a}K z_c(FFm;X6^^fTvnzy0>(AKdilANRQQ%p<4X^4?Pue)o*7q73-%lkYz9Dcgzx{7D-; zYifLHJij2GJSum7c5XbLpPf5@R#sl&q*3X~qqB431+zxxW#MNXQ>IQHKWb$9v{}Oo z3iI8Y%Al|=kMYju`Dv`t7L=KfzhY5L^ z89C{BqqE~VS(RCn9OYA(H_zo$S@ofPmMtGQDZMi5LJKWho}F8$JSw#w6XS&oD!n3$ zY$lajlWB#L-j!Y#B(%+@vT8GufnS)BTR1VEQ&`D0l3Z3+i%PPptXfTtFUngQpOmpE zUa&YLGhUhPly9=ijb>F@wK_06zi>%LPWDk5lGl}4sii;2sj})cJU_c|0Yf%Bb5_aE z%B)&ONrojqm0_jTu#iDKcS&KT_QH&4CY4o_k%jp=qjU0(tjy-gB#(JEkIJgY)VPLg zW!54;kwazGA)J6l%GP1H3x$JgE z?Gln_)S@Lhm9c1us@l+{$|=)H|_PF)Q(FC)GN! zdoe5VYbVut^pae=xxw7BlWIFJktY+(POoQL_R^hR&#W-dozRC%+H>NPoSj}zX3w48 zp3|1h-Rbo#2=m;j?Kz|3_fUUC9V!{0%fdW&YCVmDJ8Ssdou%ZK)Yj;_vogY*e}y`a zjA!Rm@)lFc#5${Ny)#R4|268K_iMFxW|;G@P-nIZeuXg|_Hwomezmd9@zze4*kP?X z^4jV1Qz*}oSy zMPe)R2MStYB>T#${p7+0@%&jMGjejWD|52SGud!KAk3z6Ycs7dBXi;O+529n{FUrVYSo!UCWHhVFs@3q^!t7c4lbjZxyQFdz zMrFmhdviwM&txRbe8pO0QR1yf3#9 zcS>VrC9^QH&5-llVlEUXu8t0c+R}E zcuu@9J~AhxpmO)e$T87{3&=Oi5TY8kb6sEwo8jbg3uiWi82xAH+ffvy2KcE0t$ZM)O2T{K&lgh20M1DHYa{`z-C7Iv}-o z>hOYs_@cQv%ZIx=h85oHR1l+7%u3~XlzEAQ=y91yL6{^=K@yi8O+hM>BUAG8Xw1TF zo>g(R9+x{WucE~VD!A8~Y z5zfseHF;_~o)i3LFVD+M@w|(9tA6vAo_F4^p4S&EGdkJxHe&DV>UjgZ$>+z-+WMZ? zs)6U_?BaP(Vz<}SujP5y)-0cTb5qZo(aiJoOyR-UEWZ48FSb)(&$|>mA?A5EVn68N zc`xx+h@iFS<&)lv*l+kfiE7mv$#F z(wDijgXitFx96SO%JY&)t5Ijq`>3|(9azWnj^p>6@N6P9gFAWNRaluRe3^IyHjVnc zUc>V?Q}AO{_@6Le!s|opk!CN?dkZ_WkLUdjE0eVc>0q5{M4HQF`2z0glx;KkC79F3 z^WMX@h7ZNq$Eb4$(i+>_^Pa*EZs&QoV{fDl_oj}&)Lhw^Ho%rOGpt7{ed=6nbNE$+ z-5zrmeWw=nk+~0k^rAmG^UZG5iGDDwx#umWPh4Kt^J>$_KB65mY4^DuJ?{x@GH(WK z3hip_8v1er+U_F!HqvIjh;uUu&T8v<&taR>E?emn>q)Z{eScVz=UtCIsK4jkh22xn zuv$~(epKU6a$xs2d-`*%><}R=-XSv#>f^8y2M-71PCfGVI?IpSWog0CZyz6uml<0c zYRbp|`|7h7@LOX}{Z8X94mu;5=4d}iKKB{XO4f;1VNqJOzoWgaZ`R48Rlg9e!lJYq ze~z|i(DD({YFvs|VNqK3O-H-@{`n7zR()2q3X9T81~}S}o*p|%w2}>?Ralf(^1;!L z==%AaqLthbt-_+Tk`IpdPgh)cw`e6hM60kUt;Uz5edgU)wu)BcPP7V((rWxT+NVEj z|CneszC^3AD6M3WqwVy`u)9Pn*(6$pMQJ539PPb(zWW!^N{)zDVNqJic1L^GbAL+_ zt>yyJDlAH?dB)L>z2w0rqSd@3T7^YvC08BoTZb;}E?UW4(JCxTD>>(A2e*A@qi7}n zM60kUt>z6!d*_-prf!;7M60kUt>ywpd*R+m?UkCl0D6M3nqrK~Ke|=B1nx93huqdtO zSVx=n+TTtWt>#|QDlAH?dD+qCTs^P0Xfcsyw3_QgtFS2T#^e&(!H51ON3^5y6RpCcw3^3Uy3@C=swrB{Z=zLLlvetlqy7Gn zuFs2B`k!bO7NwP*<7of(#y5qcmHs1Ig+*zlQ#sn#j%xpjXr*h3R$)5Y!Id(Ojw zXr)hzR$)3fd$mYGZbp>(AOidJD!TIs%y_Kz>Dn=e}F#G+MLlvetoqrK|!&o24kP>(K+!MXNQIXcZQvmA>t0 zTNV7n%$w4~MXRtVt=4aj_QrV`M($``Ct8I?X|*nOw5u9?a<$5!^{QwU7Nynt%+Y>z z@CA9I)w)fz3X9Teo$6?>-ThQk2CZL3tFS1oS$E>E{xECc$!SVg>rv4vEJ~|&r%U$_ zevZ*owLTTC!lJZVXE@sZ+SYne>1zEUT7^Yv@v71Wk?QsKx-dGBK@wb;doAks<#ewv zC)ssD$&r!Q+^f-8aTh}?dPlR1m(qCpwB;OWEP^KSJ2fpkV}5R40ngAEcR=GGt0&KJz(om_|y) z3B!7u^i-E6Mou-6*P+EwoQuJY3eM~+~f8~Vr^y z!2`D){M@(=9qPvZdj0x2MDZqiX|x4vDJr4zG{x4!hNgyBGs&x=MU`LN-7h}CFFxE~ z@u0ubi#3eRj0IQ5iu%QhUXB%C5j!C*cEUUUs$Kn6qhc#_V=J|FqP(|&n@BrsD?icB zgYdsojKff`K)j_6K^^epPreHf%^oUKpgIdxE@3mU5y;eK=#oJiD`;m?V?=J$WREEz z5HFRU>cEs6>|-&_;wX@`gV~_yGC}ePvMesNm;)k803q+&@LqMjFqHIvsyjlDnj2(jA z*I3ci7xyr#-&RolQ)_b>{gzQ*tTx-vftrx+Yvq5Tjb=rGaUF~N&)v_;|M~I4*=0^< zM3lNMc}Bm~*pM8_B|XU^H|Na2U*_Zx%wNWJ(qflqNq$BiFN2~HaYXNE+S|E;u@jjq z+&f#$0TQDjoHNR&aW6Xv<>ZKM)dvPe>m#|0-17X{e(-Rtp|(;I@)kMah5YmJ3ys2& zQ^xGVcpc(RF|t{83+v=3_@RCsj?mJwc~|^3=8@Bk3@<>w8kvloF*11!DA~IjlQcaf8NxPvq znPEDGH+>bRbF)u6Sg8M90Ild9O;rDDYsV#dB*tZ4PS(i0oVEW&9=0FI_*5e#820hGGhFMDJ)^oof9^ zos{3cJ0L&AU*w0WgTF^ga9xc5q>*Z6@>(l2u8owLv7gi#rkU#SRGWg-9v9#-1A5WA za93WkD7Ot1?;+x)6Hjtxf=yTPly!OWdgJf(>1cSt;+*Wl!jR|N-G1b)dBO6*Z_00f zdMw!J7d7;Y&NS_}1;2~2VIT8Nf5YiX2CmT$4Dkc;L-MpXNLYaGr?ibeitZY8!!22f z&SYfeV358N3LFtZJAng@sP)S!@1oj0r*YpFA0tbRegX9&Q0Fsx{p@)Ft@4n!fAhSnsAvg@Y z5~M7_)!;}_eQp$Z6F3^Y3mgOf4IB%W@Y38d3Yd() z+KD#v4#1rPP6fMw^q-&?h+GWdjfWsI?R6lCAKI@M`jJw(bIlKI#&B%tFhJQx5ojEf2aRn zY}@#NNL!!BSbUZV+<1*z7SH4*q2hwm|Hl#_dPmbld%Ib=IoWel(|B!sywK2=@k<@G zD4PJKf$rg@5kDFGFPo2aPn_EGLM;nTc;P!OJ`bnj9Rm)7s1tSD5r%XD4ls-cOvSSmh_9@}mFyk_Sl*{f7P= zKRDM9-uH{YUAVw#i55n{luL4`)e;bIV7W@N5Hx24hmNsA~5FIrb0BY}aAgFvsfzpd6Th#hV zdT*$=G)3zeOiF6Qy{x_>eIy+_9@`DO8@3a6BKBJBIBYjVn_~Ag6<_IX1*Ny>Oj1U_ z*OK3z*lM$V9Egtprs_PH&KC6>{W$4CI=^9QIpbfv7QLfst?_TZ1~Hpg*v5~HXQd|2 zbaq5GME4O)yzopZH9fveA|)X^)|3Bd*q3Y>-JSyLzl7}2Wo{SePJY}B{XN*NkvP(M zqH*+w_PnexAL+mApuY^;C@JKH&Y*~1Do!?T$tKCNYq1lt!z{gIOzkrC?1hA{$i-jb z>c7!4z`jJdlQB^|a69EqBhn3Zx>}MoF%6fbMt-BDY5ufWaJ3)28!H;)7dP{ZSI2_? z3uT(*PMbu#`iVZ#75_%Ie@Ko{MI%S#C3&LtlE%N}kK9`2NxmREjC?_MB=#vq*WJ4N zf|N60O{#_qhJgxCv+i+V6Z|Jw{{uks2&RI_(;(maF9+$fW?ic@q6=^%1B2^9$+HJR z$+IL1E_v1wlsqc{CC_x0DS7sHP;%=5Fd2LhRQ``!d<#_hJ^WJ6!)~=A3&W* z1rx5F#U0hRHFcVe&Bac_-ipn`-j96%n__4bXB?~E4qCBe8dKA*Hf_0;|6ca&D0HWn zlE1n$CZqoQB=vs}TW$U~I8c*f_P2YDt8KgGMT&kcqT((#EKE?z`M-vnk#&mSmq5jF zbWz#eAad3}ZnDNg$(?{{Xp=mAvpjWV{_@3z`mE351scCPs{trii41qoAnDsF`m%t+ zove@2@jCE$#-cDx-7*?RNLHMZOV&yrM#Cg)7i9GAho1=#`BIWUadRAjWblsYdYUIf zW6to+{))ewpYI2E`N6;Zq8npHTb1S(h%Uy4eDn=Z6^}U~vCk#B z{U;fXc`31yW7Xz=j|1xGZvFR=Eq?n*HE8{$9!#8O{FkHut$|kbj;1^vuWe+^bNG{E zzvYx_Uh$lri6)Os;6ZL>t8vhKTY3$JQMpU>ni`3<(%3{fr*YE#!TXT zK;tGH2h-{Eqe}I4-9?j8U++slck`X`{2%`#-VC<#f3dBL5x(~KziI!XBW(K*wH;vJ zxwB{YoZV9-J975_IcYgLmqOeyT|XgY)yE{uWF)VKvQzHXczXUpMs1Kq8?3-qn_tcW zwZEJH>zF}q=7vPV&(LNUEiAA7OXmM4p=Lhu99>1N0k$vhF$`d2dFtbd&> zQr=$+Nl3^C!-K98Fa}{|WiGedj-6oqoOZA3g6QqkgSTqZI5=>sXcXy3mF+x5(k8w4m*^!ub{7=Zs$l|v<`&j|K&TeD`J1YAPee|p-HGJiQ(u?jP zY)cRLsXc}td%i$>0Lq7Q8`SUg1=$7q)+C?*rH!-3zh{L^To3ojkPy?C3XsNkGE;NbGc|-#e;-3TDTVz4GZ6iF?q51;x9Dfk4yUn z2sJ}$pH<~nJBcsR`0-_79K{>GJ$xl0=>+QQ?kvuq6g$EXUiFKv^jEfmn@Y>^Qg`HJ z{uF}wOWP*(rVuKVH!&kS7f_kIk!VfmMeD*{-y*;wW8tS`DeH{MK&sH zB5naq=i(~QSp=%H^aRG*GKo*}j>e1fX}j)PmgZBeDe2Mo#`r6*^MfZso;zJ~z2#9i zXq-WiB&lB+9%anqfuC^Azawi%%5T zFE8Ws&&fK~$?bQcp9acDXAK&Y=zoE9N1ZjWwFd5{&m^o9J4YtRf1MUSDfYKqCf+@I<1UrC7gQOiC19k*Y07WO+(+T$}Ap1DM zSzs6NBCsoX6-Zrz8^G@1onR`s5$pjz3(|+o^Dw=@w{SD|%=0gOz|V0b>w<4V&TWES zU_^g#S8xEh2dHwi0|(-64-NuTLFyi8-*^b9=U|3{L&1H(;UIdl)rtF||6byU&zyAP zx6XpKH#rom=TL@VqyBIJ6P}rLHK@C8C4NI0IC`d}BX%EbXY791k=P#Cc37Q1>nyq_ zwzo}VSR{=c{P)6!y1AZVk^Zj!GK;c@GSfHmQ;~G`rE_qZ;nYh%M}YOfkzf-r4TMLA zU+~1-rGzKuE@d1XL->4fJSf@1x}o?ua1y9?J_vucv-o`~crfnMz?q=hdlq;#cqn)a zco?`Iq>lxE2IqixfEnQZ;9T%IFcW+Q%mUv6DNFDUI1l^~q)fJ*`opKr*mQgy|MTFH zcsU)Lj8%Izh=k9Rzb>s7J$|N2y z1d#>0*BtBu!na^oFb~w&Tnsh`j{sYM`5@!hW1IzyFRu`!KkL~)_M$v*DL4{55*!UK z1E+$^LHOz&3&JP84<#UPuLvYfZzTwgw+alv6G5zZI(P<%4bBJGfLDNLg4cm(f#JHa z3w+UiP4PzKA<8TD#j?E0fo6cU;%!fB-EXzk7;F}{r0-H6Gw(~*As39X{4>ALp*-U2 zxuE>d0~>;r-SF`Oa1Y!Ug5n?jF6avW0SxP*vE;_D?yjmX;km*V=oBZE+rByTz)49; z_5_iuq_clw??quU$T)9t4bNMFy%>8l_95&m*sa)lHAx#g6kBadb3iO{bGG)jWe$XA z&d>*w#*DOcX*v5p>uChhJDT$L|IKs2rS$yp{#R7TFK;hTy39ZdqWc;h$zzr+htnrh zBRY`V8&aH$iL;D2+K*criBk*zXq@OBk0%K$B#zFmJEw*9mCi(;D-|ajxALe7-C`_b z-aBkmNH1NsQ5kyP>^7ITHF9dnhZYEv9_g$rtL~OCpLzojD*Pn<1 zqt}u~Q>^RuLaiC7o>#kJU2dDzo>_OM&%?tv#ez3uMeSon@mSHdv7%36#U1_Pqhlwu zh^@%?SJjRc=O?ZHufO`gv6ChdSLN4u-JEE5Khb9n!2bpOWstQ-UNFxE>RLkaM{`s& z>uv>VTuXj805w+%yMUtWVcqB#W}i&*m^6YBHe7O8?)|~WAoHAwH^;h}ugqDeWSi1E z#=46@cpMZhh$AhI(k0?`GF>%%bl>%K@k{F_^M3or$DORxht0Nfi)2RniV zAo4Ic89tbak^TDp*1z>mZ4y+Eat z3W{#9#UUViQlPyl`40otzs7;g)xmUdAJFZqwpXf{=4jmEJlYaIp=Dy&hoJB1J`Ehh zbfM6wPQ|hhYr;a&8!_7hy3;+?GW3V`#P;Cq3-s`>h8`&R@)t<5n@yinGQz3ZAs0- zG9oi=9lM$E?$oatE!~V>*iNepYs4FwJ@Kv2Zn*fj6}RSly(3FTzta&WIT9$<=6{+4 zYQnPn|6vabt5wVQl9m#fGCC2?jFXa7hX)hik&s_ShatSND( z5@%W@POUO=vU9mjhM&szDX6pF?_tDMHjebPx@F>ITKW{|>OucHcw>ZK>(FSqq!TLr zbm-D3&tGvr8=+@TD@C858`7_Uei-z(68>t0UixY@{ljr9ed*~#p+67z+m>GYkdpRM zdhWr^&XKl?zrwY?D>uA%X?@hyLF+fw;YO4nvLx?NmyM?3>Y%;Jn$W8be~!>MEt99K z!!qc#fvGy&W9d~!(k{P@_$!?1mLFcG4o)vGizjcVu8kh5;+enb*|8b?(mm_gK}o?G zKL3js$BH_|ioTB(5A=&~_KUxbo$wcb#oqpkOn)W2sGDOe9*?b<8C#w0uYTS?si}X` z-Tuj~VkaFJJ89Qg@zz-JH6^i8J?nbEy>1;sX@+FH7j))sP0 z=a$Zd9%^*(_BNa`Z`@r#;+QqOaDWX*zcT)5ApIj41xoi;eU<(!>&^hBW2^n-pKIMr zCq~CU-ujfZ3)FHUn`b#%&gZn{H zI`tD^Tkt6x{v5a`?&rZ|@D1z#wsn69!V9ynnF2PXBTL8L3zUwnXI`XRYaa?81q;Eh zpq`UcKKT~){vMT64T08WbbIOE7g+y4f~mOIg3`gS0i}cg$%fwqGUWwY|I$^tEgGhG zk9BVX`{4f^C|z7@*M8tPV1H0&F|=8r=QGfL1IZWZ)T2Ps90oca{)cxX;3h`*-}OxM5AVlE^>#Ro3H9@+oo{+2kPrgir} z+aNb&5{eeTzhMfy;s~ez|M32&=6$8{x{c>(cSH~DqWiz4pBdvLC+^b~sruMhsy)Z2 zr~iPq^z&u*IkD({!2a8szp1zCAicwN^;-OP`&=pf4(sJ7cq3LJ8;yZqoDUq3Sf}Xy z&@x)5d`g0ilvouts;@gs)t;sdvOQtGr~Plrx9y)AKK1I_{4q=G!lV1S+q$z+-hOY? z&pqe2BmGG2wc~fk!~Ixy2lg1t1N5R2!y5QQ#{=Dg8@Fh2UOvayPz>Hy-(n6EUzMJC zDZNm?o8uRjH+=Wzr#9bEVuxA#NpOdG_Kh~nTAI&q1vdKjAjFD%1 z6f{$uO33qta`LP}o)aq}&n?t#88+;nexhG%T;^b9>iglDAiAA7hfM)@!@mP4{djM% z9msQnfi#FtAi9y)8EniPA3mR~y~D279t5W1-^A>ZYb=F*$2V<&)2tCf?E(FPbi`{R zI=ey5=ev_$H)e6wVGcIz2Y#ZhG)1RlW%}DR&`T3KzGV17+#SF{phVJOFx=mCa2?R6)Sk5415{hLr0shC&f1S^{~{A@e61r4SC^vjz_AF z(>alg%u9PEXu~>{Pus}SZY93Tq3`d=D6O%Kms!|C>}u>9hoy!Kjq=hz_f=e<7BRWPlaZQ z%Y%7o^5T(sS@9j4o66?%&vNpaMn1=s$|s(W#vsjs5< znfZw`Br`v0j;YJeayUQf-b8X@e$w0*^1b}D8xdD&vpz6sHvx5)v>T|ouPIoUS*|4Q zJrZea?hE-{{(PoA=e_OPNVFl(%BN+H3p%oI>*hXv6HF!0if90J2ehIDU9Zl~a?$4Fl%S(K0H`RUhwt)Wq zgFU?;iDSOP&B_}3=zT)U`D3zYNA{$2R;W6+i)?|;*QePt!k4{i-)kV@TdA+kOm4A! z(HS+)Qt=AISJhE2o&jO3>;BW8*heFA#QSJoiz0F65a%Q4-v@PJOQ5q} z@i`Fa4jAhuZ-zrq>&rNVOx3dh-FZ&UV7q&tOlwcftZrmOmDU0y0( z8%eTMR`phy^epOMpxre!tb_8@5G)n9Oqq}!rNYaWX$EO-wq*)zx+)X0rBpn3e(%au z7JtqiN=@bL;px7<=MPL;=r2qPZt``3^2=CJXTRv^Skd#b;=z9LHGc8GVkaDy#Ftq3 zzp{hBa!G9EJ4vf@{Z+ZKqI{Lb?KuuqN5CwCU(O6;-1XqN$#|I;Wn>h_N91KKhd{hN zhOzo7R&gAi?w=}t`$+#aJXn(H9;GsEvm?*?X#A_b$ZOBvEjA`rG&^>}l5ii5^XeEk^h8Ol*VA%iF5zY%{Kxo@B$PTK7R9s)>1zxYC#0 zkvkVeCI&}<@?Q#)rg=6=XUXSS{|i95F9CJ7e3$kA8^~Tza382M<7Yvg4gUv(H^FzH z(q&)TxNC#M@MoXa8xFEhYf#S=iLR%0v*&4^v0=~CJYzEzWXuLLz)|4A;BYVtR6M=^ zZ8Yve>(<%*SlmZ}?g z`wr%JPfM>fWWuzj5cbQ`(pkFB@H^NueATb?yYL#AyRs%z{)Ep!%}(gDx+4P!k%M|;Zm{|?;G|0V5d`-m}i4PsolmeqsO6GfPdddT!}lL#Mzdwtd5R*@Vf8Ce6_3`7q_N z1zPPNhx3bXo;6nd8dzkbF-s^9#nLldYZ!0lnX9mT;eMM-Bb+Pz#2gY$<7Ar#{4{Hr zQxkRUpD0HPX@~OP_ntR7hjU&_`gxyGkzkvM|TMz#f>@e&M zYz}q>_F`;h8cp3!|CcO~$+W271DKySwX^ehIr@J~XhrX6ws}5ZMsMHNIdOZd)3k}` zG`Sf(alSYsGd^-jK_TZ6PA_jtIXYlpwdIvgh*NjL8mlfc(YvFYaBIHU1I%k5)=~PY zruk@`#eA5MXLy$5ZS*JQr??Aj-1RoD@}ntB#hsTO&&et%9q&pT@2g0jb<4zyFOBCG zW|`Mrm&&sd6}l4I;d_PURi3++i5tD^dM$a?BM!3PJHy7&IzoCww2m3L%j(C6Z_n8_ z@fu+@ZuA#ju?F*#=eJ0juJ5>9oK)Pcpn}C17pEQDtEna8ouea{?U^BvR2ek+BAlL$Y$c8@yD*x9kz78S> zf;TLFZ2dpA?yo@PL-1b^8E@XLy*tR6w29XeRC*~EJAkxVz?rncKGwgVb?*z(mjljc z%{{~ez&&wG_ffnKCjKA(L3YUQjKi0Zef$i`=5u~dI7l8`D6r?K!y1$qL z-U4<29|F-ggNH%UJqmWh{TSF8d*tgTZ8wxiM%5svbQ+r8mT)?mZ91e;<&UDcBcO|IqzM(M`8_ASm5) zE{N7*=d%&emiJz!7icvJ7M=Z%!0v->gYG=a__w8I(j8ji7WPq1tPx!=GlQv}x?4Iu zThyGr5I2LVueBi_CBn2t=ZU80^c{tXu6Kei)zXbnkky06&@c2o9cdEIZ#aHkv0bom z6BFuGU1;<6*6wfo6i<2gu)3dURd3DHrFEeL&Ahmka7|nKCb^7$ujkKW`cZAF6bEWj znzGOTSW#=rc_j1ybh;oz6(w@#eE$*ooHWDb8QD3|yh~W(`;U&s=?L8;^L$2PqcNSg zzZW2ve!cHMhWz`f_kWdq|1qr7ulN2hv)B-iv6~sMbx=%_u|u)d=C{WIjep5&%{pV5 zjAdr_2~pp6muYIJuB{gJt@CR0+u*>qDExc}kY8T)jvolNpPb1FQCRDA78DUPGtku&!lImJnrAk*exLdLbo}81_E&0HBegU5`*{64EPyOqbJaS1+;gbCL zKDqHFh4~pd-IAv)nVXZHxqp0ldfvi#?mqo`#s~H9GhpD{{_z0=1`X1RU3-6k&W93X zA$)gc*f#2C+B4}5rsRihs5ok~Xq^1`;vBrp*wH@R_#N2yQ5Hg!hA>nT5HSZ+52TXa(_$x)9oGBVL*m`&`~1kVFM0M7?M1TO%?GmkzrWH)@Yr=#!QvHHe@drW#(qYZMTm+@=MinbM} zM;*=04AJk8oor~8))uHzupw`K?SC30nWc7;S!wbelsKEXw0r0;*^+`h8HSyK&B0ci z-zEnn3*7x*?f=Tu3&H$lOeLMn`GpA@nikLG=3{>3`yZO8mBug#6wlG_=s8eD+}|oI z_sf&-CLbr?0KGTls`IX|9f&tID7ljY?3HhC8Rc%Eh# z=I7MY^{cSm{KT$(v|n|hUk&2a-qD8q_7m+;mUcQP{f;)|Q~9*RNp}`cT{_yZe&y4q zK|7dRC$4Y1c_tZVZ=helj{OqbhCZ*egc;by*mJPereZjt@$b(6H`+e>dL(J&Pm=B@ zn4ogb|K|`OdPh@Ha(`R*0;00mJ?roGftZI9`tZnUDMR-iI6Hi&Q9)1ocX)?aGGH0y z?vEf<-J}=m+#?z{dRO36!e&6oxu=&OiBqdgobc?uw~_Cf8)Rp0OP?lVwS)97mBI7O zcUpbvu6z1P4L!eMQh{Hf`|3617xR68Xe_uwVPsF|u+E_CB|T}&>v5|( zlXvwiOnle`-IM6#qIWcohxH>oEPIDkala(aW5hid{J^HKdj)v0W-Z}=q0OtW^1+@C z{bv#WsmM`!_wFgBC7wjXbR9ze;(63ReniRIMf}*VZz)g?=_~5rTDzq1+uto|tUuNd zF7r9MEgL^>AVD3W5|7jck3@9DuHIO<4fZ5Lo z?-Cv$C-F<($=O+N)5f&sMnSml8BhM<^YnY0TT>>O_Ah(yZhB(hWdi*y?9YB;Ec77S zF#Kh7$3m=Z1B#Dqc?RO6Q0qXIUnk{qw*%XP?ZG|40XCfb2F5)MgeI6`{nJ5c%{%<} z0yWs^Tfr)@19%R&H^^Gh9=R8aR_sgrpZ zRZnmj?p`3z#%sNA?tJtC55e6R%mVv?x-Z@zTnbW`;COH#xEf?nAvhD%or?27@!>*H z<%-_@7)ton`0oSW2y#@*9r%!68$iW-z~X}-TlscBYY^?$6uxz(c53(CO*`rx`!c%g z*;u(_!nQw$wjY4)Z`|^429>@M-$}g{vlq4QfL~dw+oF3@;~xuetyaY-tq}L*cliGK zHa1ND?!F;y=!N6E{CATh3#jA7gf63Z1qz#G9Bs(&@@a2_HjNv|jyB{|`LxI{XlEs8!}^s^i;ROdGcjh|+BTVT4rP4I z!7jsIj9rg?0sASosf2d5sSplm{5$<$^QO#w>L}JQhb2vHYR7*$`u}^-ir&!}y*#=L zPC7rfw_|8az4uGBp?~uddDjs3Is{{}Cq?3@e$hCgejett ziLh6o*W7t#B#!jUXdL$(nbCU*dja~-z)d!ebW&8>QgI4#i(WdLp7oWSd)(4X$L7eU z6urvDYo&5V=VZ(;AWY|6sFOdSapB?zQ^^m)d*LTNvOIg(w$>rEzxdS%8%|&0_sYBB zPU33;vFS;{sXqUU8pML931PC+rV?qA&F(jV#;0sF%^d zD1RU?q4Y254VsPRmj1<1575=n5kmb-;pkAtjZR|p->w#&UWRUB{L?_`qoY9T6C404 z{&ee}3DS`g-$KvE-2`{Or90BP1CTNWMIg;r>Uk!)FTuYVxE7Qid=1!wR|L< z>6;(nmcH45z97A_KPbIYcXN}$!@zdne6T&Z091LTr>We<7Eb`BSFQlznbFr2{s$X= zF_?n?C7}5DC+ol7;_Va`bc-F;Q7NWUD;?=0-O#;+9`M=R26#S=!Yc(SAwdqAzw<65B? zDqf08W{vXFyX>9$q252u=xAFZ&=}0G6;kSVH#$yQ^;{7$OEW8vq$0TvS*?$eaNRzxn*>6yb}#7lZ>5(3_k{Y4)$8? zM(hjNPqB4E_K39F{0t7Ljh)=wY~yQeI`b#wOJ{_qFOPA#*@b|U`4{k8v@Sd<+oR{K zY1tX`bMp!cvoj0m0VU_G<0dPu68F@|dF;=h8*1tht!goZDidW=a>Rkm+cDwa|G~ad5XO`rf7N5Ih{(RmlTTywY zAxmVUdEP*txg~jKA`6>p>S zZ*sUmk*rOao1nSR<#S+0&XTyE{rKf===7s6ZJs%a9QigKdA{NDWd04m1wEE7q}zz$ zSV$G~7BDHNr|j&OAv}X{r9QJM#Vx+b7Mrky*oKqEy(l zT;FuxaSCS)h4OA2>NOFCCLH$#X|z{nVLa;>_mhOI(WHXWvwY6nN}lswp6Zks@o6za zO7GqftqXVeKnF(nlpp5?UG7pfyotA#cmeVB&V^MrUBy$D(Rh62Wq5vm#&VaR-gkct z@zh>54heanc2SX|@pvxS9H*&_ddK%NY&tZ%N8;2j6DK=2OP^g%w54m)nLD5(x;E`b zI=qvmuOGZnyZGL^#rOKf_r^}B;h!)icEWA3742dtj4_R^Jfs(C?hj?PZ~7cgBOBb@ zkDM@be?3s;)*QYI$TS;Bo-)-2tZ|KhE3hGMjX%Q7x?J>{`=yJef=$41?hi+4sNcDL zcjmF4<>ih$NnhL{~Cp)LOeP{?gULJW9VCAe5`+ry)H~{aSjQ(vTh( zrqSAqmLrst<)anPe| zdHxBHdX_3vDBt{q+>7$2i%qX9h)!yBw6I<|i8R*ZAIc!V@fU5k}L7MXhW1T{{C zw4-VBrq-Pd_QD?-W&8(&y>X8OML*H{XIPvIvb$iu1Jf4_%hZ(eO(sNRT;B-Z-~4Wd zM%me(56PoG9FDe0D3g4v-G=*AnRn1k0(Zwv%h-0(yI<5h)fW2xaEiea_lLf|z0%pf=SAnX&Aed> zW^~gNG2y#d4mQ7M@Z8*pC8`4G;`mM+?k|15+|H9oi6qfZW+x}&TOQt9bH-Vta7QR z6-vi(b9d z`InNANh#2T#TPz<$uR2HRvvE6Je$w{n^3ZGODPKts z?HizndVW)Xs2`l-2aouCBRTj?3cS*FZL~&$5Hmgm^A|=W^{!>xNN)_zTSU{$&dM$b zpNUgFt|c9v?<$_76;G4^GAhB#xgonu-8U0wEODeu4zcO0?s%7qlb<_3QTKhfr|u+B zk2KV`RB!QtdXI2*O{_~p=6J&hcLrTFNozBe!AsONY^!r9tG*vPj37rd*z2xy)W(fi znG7E>GHul8F=NM#-+#iyNt34>Fm+n`^aBr?aq!Guz5Dd-*MGpkK|TBQ9n>>(K}J4Z z#?)z>&q9%3%`){--BcIuYnr+d9*F;HM>p3#Y3s(EkT6ZD+Xh#+pK*s!{B&!*$4E6C zi@q6`%0%kUM*YBOE)owZtC_1bZ|sH}waJ{hLL0QhO`3`QU7gC&QOrIs?GOyZO`Kr3 zr5j^$3Mf4@9i&ddVW8G+Zr-cU8xX_y3HD`;$SMpI>Xv;Brn0)&L#r3#-##%wnD9dHX(H&&y;SWs)bu&jGi z{-L&P(u3iSHTAhW6J3{t{moDGRW)x(Njt*rAD$E$SZ{$uZX_3vHTLM#whNr{2x5 z<85S4UT!=bYl@cwy=Yx{RObJj``giZ!aZNJBlk%pn^g4S5qZX*kdbA5@lU3_so=1= zVSU;|uXc*koA*6uXHLn;&sao|8M7Kw+mr*bPzQwdR;DLKpNS04Nh<2=7xk4`C?yBx z5KksQ1oQXr@ca~8MlZtiWklBd_C)K#U7bgiQ)kH>of)dm>uq|fGhXZ=mdN}ctMiWR zGpe6RmNVYbu9oh^u&x z)|EG{OnIHI67`QS%jSTDiPWZ-MtXW5uylf1HgCmK@uKl^;{|NXhWp&&gUX_~H6c`= zzr@DXT%S}XuDc5rjW^WB`zjJovNW2fd8Z+MiYL1x_w6@@{lrfpzQ4OaIF_DNl2cpf`Y-snM7v?8EtJ=}HCC`J@ zXsmA(y^fs&O%EGKZCbZX9NKh({e*d3GpNHyotPV2-5}|te*Q`QVkcb|J9#uyRU7}5Ht4$26}=?iFMj&u2VyFV>&x}j zK$spOn7@xe`X-I9e#W|T@$%7nQEE7VRsUIZ1idd%aU7i+zhfe81>X}fmFLfx2Yj_9 z^*4NUx=^|lOU$hyn7@xw=EjFd%8akd+KBqqgkH2RT>iuG*SmAXmsA^1bzoW(&&{~x zr&pc~SKNoNBARRCs;_E1M&p*1;fkjXrzXG!k$6dE;+2)*+oj)>?l)$=8rv-?)6Yx_ zUiO2RlZqzzMH5Q%QO|G6^b5iKeGER{Z_CD=0zFb-_&5XFJF%j5;cgBc7vWcC;WE=! zKclTn&H1jaFSd&?_VyFzamx5*Ic5BY^38%?v@YD0aeO6~ahN(O2KFY*6O?hlLfaoB zd|a#gKrdPs?#j4-C6sXs`MiJ)*8#p+6W}!c{xSW)FuVedb=EUxovAfiGH$KSx`0}P zbqCRR0{CdwVwBb3K{i|`2wJ1f0kuXu(YntB75@(wF9zEYei_&v4A++98B2Y!J@M6g zbP>N>dIRhkRBL9wW?lgl{Y|+3G^R9)tNLAw4Rvlmp{v7UbEXP#|0=9sS5P`Dbunv9 zVMp95UuWyD5}=a@s+YnuZ1_TpIUqFVog%%!u>6PbPzHo{NFSV!zt$4MVW8?f!n$c+Zvp-V)_trE*Vq)@YA~Dd zkQaKsZ;m9|UQj$}t99hFg8&C~&34Gi~_U)-4%wG~o|e_mejKC5tbE)G>I=x<9b^8F(E2 zk`>2;Eh$*Q{~lm5I0Phb^DPD8B-|>O_RZzi_edyHFcYM|ntT87FgOV}JPa-XPXez2 zPXX@)PX%>GtoWNirT3&oofV&s|I-#XTmSd1TW7_Lhv0K?4Ol0}GccgOLjo^?j-b-h zz14GYYwuX@N#J?7XIr=4{eM3071q59yb$;K*8KuA4y+K$veiULpvHf!1%lK`nI|af!RY}Bf+$_a%m4v z@S?<1*g=-oTaHIplyG=pum183YTP5H{k?`OVVp#1cVh~9NBX%w2W@4RCE zvFnABJ5Dr3V&1!lHlWMvT-(Tuzk!k&_a)k9KX`k9=VXxfL_?k4Ppk#lKQ`Zf0K7+S zdXIs03DXCXz{hbn0RI6tw79zsSA6-WfXJ6X(p+wFTYX5}5RL$ulY)^JCtH7UQ~u)O zGvHk7&avT3Eh7KCX9-8{8C+@okt@c{xc8nTobhVhSK9EKE#3k?Pk7j8+u~9`?P2?= zN~JkRb5^f1{j}_y)pHwjR%)p^%kh2=>4)n8Ke2ugZ_}|duTwU)f?SwkFSm29IVW@#8*Dwfy(E5u#EyZKT==uLG_gwh(6`j z088p6y+U>CiXCq9+zL${>~X#LgPDO%Z%p6C2H113>#!TKFJQmKHfqAXF>D%k4t5## z9PB#mM(hjNPqB4&^Sos2KwVY+2Er^~cmAoTp z+xHH_y{m0JvqgPPy{WTMMq^oVw}2_wkQaV}pJK1pSTc<3U??NfjnTOsLw}9e1&pWF zJ84X*?C!ih&9;BtuqftlSK9x8R<`}idH%Z|aYXNEdjGI}O0{L;vkX=6`>$%d9l4iQ z!*D1(15ul^cD8)*4Nnv-nx6WBsZX1W#mM$R?c5Ly&zZyTiMhV8QGpo2TKd7AmDm@e z?QaT4o_pGUpfbEp`zPi8c>C)fo#-8n*}EoQC;UDKTiLkUyHv6hBjTmdJe?8lp-v$z z1%ijcevvpTUo?)}?^Hf32umi;nP85MqkS&T-O)JNxJ7>_*arG};1Q8LG;T}LvyqRN z8O!PuQM+Atd&r|6@n3)~IulLicT!WoY3;j6ehjsS_FU4Q`tbYU# zwc#1oE&i;ApAF1}$`i@oQ`LK=kZ6 zlNKhQ)qGpssK$!HHnYpl}WH)@cO*X~_~8lz9r z0Pj`e7&Qf|q(9N|zYIRh{5u5mm$gAsoBe-${A=D9y`ynwG`-4<^YFPSwOJ?!qT!k5 zZE0bc`gSx-GD4?9iYHkb4Oit77C3zCYP`o&FS#SAdc$IM+YboipPiRZ?> z_!sidPw>4NY1YAChV;$2uMetcGUkK!pyrN!z(ycdl8#~aJyFfgyT#~^<{fTAjZ=*$ z_A5NOZv&fx>p}7|-?3Bpqt^X6NM6CqU<>e7Q1RXaMYq-B7a*#Eox}ELejAIOk39r? zF!ms9Q!m->sW(UK3CD0JVrq=_rra85Ef|Yhv4uu+qVmw#I(_fZPrp^@me^`jaU9UN zap$z!Ba^w!_C5VxPv2g7h#miW{x>@#C;Oc}NrE!zPbH~uG?O1C)A_9vB5x>qzUC-0@NWkIj^lWMlV#l}(j>XwNU>V)Cl0jH}e zzVg()tXbeQ{86`7`6aWXd1hwpfZV4%>hs85WO(@eBs!kojo(OozvzCy=v{=qUwpfN z!n1nfHvA6i4Y3s?{T0U;x$o9n{}jV8OO%i`w=>=bGGCY>I58uC;S_GE(=Muy_O2Hb zNA!+H^-)w*NrU?B+CynX{qy7Vrs`7<;=8hphUMjim&n{a8x6B}q)gvX-J@Z|n;o6M zRi$XS3sbu#l?f}%D|sQU>US;m>q`QfZ<-%g(q8H#(KMYtzna4Ig#He~+gkeen>*w{FqclDi*Bm^mlj100WA`p6`( zE$+!6^$axLlR<`&)==jDx#GL^%o6++ZzQBQ;NFMA%#_Yn-8{?w;b^;w10hb#I%QGL=1t?uv3KLz{$?7a1E8A?- zO-r8#jmlcvv~*WnYu$b9Nq4PBT`Svc`+vUY{LXz}b2H2gWLd5Ue)GN0Iltd|{hinA zT<6kxdBv;uy!E>gn&`stY0-DxKLnkEyWaIYo;?%)ZFk)t=li!P(>H1i(0CwIOCHIp zd$(16`F!k$fy{$r>d~Dom<%q&J_|%Y;&VatBVGZX1Fi*eb7w3TgB!6g0j~#_f;+(T zz}vy|Q>jfq1<|YcUqRK){{=6?{&SG-!`%x+lZyXf{#whfz{f+vBiz%sA_ zJP&LHJHR#IMv%0*cZbnecdy&~LA^74DX4qhl#b6D-Uli@-vC>1e++B`e*m_FdLAtN zIVe6o|CL?Oe=h_76YK=_{I?672+}^{Nuc<8`<628<(e-1ug2f&nx3TuJX*bCB2m zUH0zZ@EslczElBB3!nz*N@xdk5A>H}7zRnbzdv3&AcNj#%%k-6v+8X=QrXb3fMe>l zHlAq=l)Q9MGJ&tRz5jma?)GkQfA5VX{k5k*vvz%Z2Y1@@EiKeo{dxcU`)-fgz5&zg zyN5HEl@^p&^QL3d>ZVnk^(SPF>k6O#)}el{=B`em{3wFG{EE#_#hR3BrVMd%a)WaG z6lRh6sce&S@+-kjWAA|WA>keA`2Dj9%~Qu>=UuyUU2z}(Thu)+y*S;?;G;0Zyz~{* zgA3se=9}oj4M7hUwAD8(K8sJ2`MK0^`0s|qA9$o2ngiSk(O;)-HQ7*B6^U|OMM*0j z&1GRvCH*=&>s{KEzWq64|ESHI)YQ_4M)RZi+v)CM+3)*3gS*$)D5LKxtH&XkeA>3^ zbUgSTZ~~}#-9%7)>Pr>&B3?aS^%#@9vU>cxkVz2^fRbNNF@ zV@(m2zF{C~b$whZsC+Vh#+sjzcK41PX^+)Qi=Q-Wo*Oe4aq|<#SvN0P2BNowcQ9!> z4qHgS?rzt2&GdYnlEoas>9A3pQ5ivri2rrmhC+|4@Gwflp3yvqfZl*cs<7WRZ&?Yb zj|uI5ry3uo%uv5~(2j0rD2-(4<@sMeyy6c$z4iSAxeHYNh1$nh!cu>7uf-Yq3+C0C zemD8tXe%;$C+=Ai_&t*edl*R>x5ebQ2;AE3A>{OK+z*j^(&W_ts62Ye+1~Sz9QT!N z4fKA#56{c->#Ap;rOW#rl;hXb)z~7r3B)BmPsZim0a>@Ii?K{YhZ`T%CX+n=m1i%n zxk%D4AzvbSmFer?Nb<>?Gc{#ic8#ibm6ToUZY=A_^tI}516|(VJ0*m#avKc^Wi+no z*;fVVc0m?K3#0f`QTORl_hnJ{=cDe|qK&6S8=KPcqkLlJy7ZR3ye)Onmb&zod(zje zOkbPt$E4Sg-%em&zoLw8YVEgKkzgnX*O$>x$0WtQ+k6P9KI(9@s}EzX;MSNUK#haK zsm3?M>?$~9-CFZdP&!FjxjlA;cQ$quF za3@F_uKj}H7eR%$2P7@=55aNZ^B_HD{GZ_Q;4t(vAJj8J@lOC1&P21H08YezE;tEX z3~DTD0;hoOpyaLqPr$BcJmfjvV0f+hZ!`OcL5*D>0Z#;XnZKS-((lK2ff~E?-4Dtv z{<8Uh1!O$n*`|;0Q4sx#zX=wAkAsEa_s#zYpvIu*%>F#6vFKkx>LC7iuoV0cP-D=` zpwj&tQ27}|MGFUmvvD5+Qdcn>6RutlH~(>lx;su|*YTkAWV*S}GMo)+Ec0WQ?!zXx znCyMnM^PT61ak}}>(?kcZ%ryOe*Jtrs59PW(0phfq%)645;od_IWAQJRY7M$OC8Bw zJRU3fEm9cNAjXHCPx+nh>=P(?|15KkvyUT`@#Ib@Gr`V*diS{r_nHL%9OtfZl52g% zrM!jjib_Cpi{ov)mOVL6zlrk6427oB5GtT|&0kLmsJ{;1V(GGETes?Lm(hKn$`%pL zjtvU#M9NnmK6HdN}kf_c}1} zXe^Z={gFfcuFo7a^2wY6kD}_Gr?y4!bhi=l{;o5WAI3TVF7G8#{9Rp0PCN?dHIP0z z<;yQ}V7NzOlgF0(GZTN%cvT|P#ec;TkU#+Ne)BN@*em++qPEP$sx5zmsgOB?CO4=A3{cJA&ao`u9yk%%WTlpRo9 z8Y5OfzCO6Wl;1LW&=U8{oyCn+rW#kIql^>odE0PMGf<5otTWu0F^nf0e!i=7Iil=c zvy6r%4bTjH|NJ@;*r%!g^jTK_z3l(# zxup05PjB_Pul>Kb>b;NN<^|dVR5l6|x}kl;aFQwPD<=I{{Ta@o-bQ&9ldgNLOtt5z z{yUkDZMRUv=|EKQP~N?^nM;y-x}WcdDM|?j>)JEj-~yT zyajF01^71oNw)uoEDh=lgZV7&|7(k^{p+5dDsE&#e?osA!zlj1lRW#Gd=_i(Z_S*~ zt!W)??U{GBq<8x>pOkKUlXf~A`mRantxPiQcaru8L)vwA)zZE{^GW4DIiGA+#bf@U zMr-DC@O&c~k3S>p%4jO-TFZn?{DCKoTcwG!4K+<2xXDk&($jBVgZ$JF>lsGUuXSC^*{iukxUs&)#i!>JBZ==`_{uFl$!Q!- z$~CpLw{>)7<77_T!@q5{KELAAqp>$BOZmD3t_oLE%B0`wb*-!X=~v$mO1G7!8qzcy z-j^&*s+*BHvQ5~fA3;Xnb9oB48_xCRCYi%}krDqqcy;FSWB7kH!OvWwNBWwGL~#U? ztm>$N3Rz4AuU?$3Bc3(%kPUUDeDmC(hhJ`a9-HHTd1ZsU2UqpWGm0LvmrIK}eOYTg zku1*+lT(~pqa^)YdKRI$7=_C-jvW82-sJb@XR-==e2#yvUfoC84n@f?f$v5uBh|-* z9Jyp2N@hE4^Z^1? zccZ)lvGz^i$`D z?N!mXRC?o)(Z&_g#$D0IA4i+UrlM<(OM8FPfy=)bo$1;^mRq)ZB@}t zHPKC7(M?~BZu)U_^TE+49*sV^B-;6n=u;D-n@>yMT$glgyqg2 z%l~TZw7vL4;7o8ENF4DkAm!zr9~Xk3!(IeF2-1e)M?lix-rYi9g4HVcC5X=Unh9?21R{Kp?wFUJ1?tsq0vCD9OzO8?es@ z8^N=|)!;ecT5u^yml0nG(pKVCpybwoOt<5;U^CbXqC0Ur*aqqxZaeq^@G|g&pz_yk zxD`}5H-jCxZwFOgA2s}x`QHV0;{G|ae-T`V{T}dg@T=ez;Mc(o;G^IN!0&+{1b+x# z2|f)fzJCI*!u|}1ZpSZy=(fAhDFzQ3luC7jn)hu4j{!G<$Ag=}d{E&{F`NM^+(Pgg z+{?_ad!MewUIA_etIfR@qz%O@&AuAE4*MGLdhiPH256pP z6r?T2A2?_T_8oU$x z8t^Xg3Xnb~-T+GOLx$IY3imqj^SJKT9s{6}yi_)p+8@ELGA zsPGHHXR#N7KL%^Se+JJ0p92?xKLHnm;@5obr`Rt5{{_4hd>(8A{}o&Z{u_7|DE@Bn z|6tz;z5s3oe+FI$z6jm~z69<7{~g>3N^TeUAK32zUk3j_@E73c!B@a9fvAAh5o;7?PR5(8ee~0^vpvvo)hQBud z--B=B{@>v5LI2!Cd#*Z9I|0&p+oK@8r*Nd9-eZ^!m8N9;djzxCA3E9D{TU#g)j0*K zg62YNAf5TqdkeY`Z3%CsKU1`pb40oWVLUX=x%+cPQweqAAMK|& zW|H?Qne-oqt(4dbTwE$o8DFjiq}!LR?r2pR?_Dk`W0h&3-pa`5Pvv@yPR3!5)`;lv z81gmWWR*R zwf5p(PB~@uM|X$H_`01-zK^H;llr4O!d62inX(<2jO3(yI`@_jX^&KQ7#jrHr?-p+sP{vYuNp8a|LliVvlkh33JkCzd*_E_%* z$67kIpMsO>brj%CSI*gQ?H4!UQ=5=cStMmzOeU<~h5Pf~%^(-^5ce#GXxusI^n$#& zJ7Rjy%()x=Q<&ilf#yy!XBz5vA!0A(lz(`WS^3{gK6Fp6WCC9}4|jAT|GD2_2xXMy z3Ex_fUz)g+e#tZK%2(1ae7ivDd5H9EMp*g%&^WI*+W%tOv$u>t>+Z@R$ZFsDgM?9b zoR?KvhUUnw^p7Cua|Vsl`bK-M9mrIgjPgG$N2a&4@ed(efUMHmWwJ`^d-g4xO)Ij^ zCi{nk?1%x%YTsA!E@bE@>29C=(0*it9)_}d*}}-n&xRp|->YtVDQB%46#wrNvWMr$ zHrIECM5%-izM(UyPCyY`&u+H>-@ofK_530a<1x;{D`MbXxW(wj=t zo6bpZTb5ROLf^GZ3Whn?gZo=V{3YXk*`&^O-^J6T52rV~$^UX>#2;>d??AU!hV-3^_z{g`fn`K-UcRqGP9DcR8x&34`UC$#f;GIse-1!bQB zjs#~Ko?`xU%&sljbVPLEIcbL5kBrdmasBmvI`^_Nb@AeOm0Pn;;2D}SYd|w8| z|DfU5L8d+NH$bKPF?0W+;g3MZ$oOAC`WahC>3s=5naaK|p_Z#X&Qj9d+nsIaIsfxh zE0`zFb-zzzhtRK;w7%KH! z4xWJfiy(C#tB+*G<-R3A$+#(CM?tXZo-rG_9*PHte z5FK*&#LNG0&HoYbWbDs@=yv=f$lM|xg2EPqD7!<_ESNHdj?pCJJsp*(C;JYE(?9Td?uv(5QK88fJRf_lssk(8Z?T12Yu&UW`sNI zr8~!UkAm(l=ydMcy9<`NHZ(&y!5l+KT7QOn+()r9K8pB8u>-BPwr@W9RqrDV#W9EY z4@u?InuGCaQ`&vpd#7DzY|evjfC{0}=y`(^A45(?QQMQ$A~2!7?&P;0bEC|7t-gD^ zm@sEjuBfMb4xskB5c^QWLqV0l25Pyh9iIgjnH^nl{%Zec^}UyUJJf z5b~@2pOD6R$oX+Idlv*%E?snHF<~l=OF*T8Red}TJTDVh196SdgeN&a?nR`)8&u9T z!asXZc<)30aPY!RI2D;NCgJYKwBElFN}9>%iJ7yr;f_ja-Sc$nZ$KmIyr)Ao&~m5? z+6wK09)O;JUWDE?|1(NJIvwU~L(@LbzfNTRHs(Q7&agRjALl;<&;G3c|0kdSe8S39 zYmPk1o3U73nlo?l`Og(m{Kcqybkw~rZ{zrA$@@r|fnW~g{O1FjFk&t1Z;Ga3*yWp30H8poKDl?56_5jH2RaPO1qUDA)Zxr+2i?PIhiG8m=5fOfJ3YKFG{mA4s} zsdvbqY7O}8-G7p+e7>AQGP4J2T74QN0o8f;X z5r^7PlArUZZ5>T(knwxgNxz1s%bokMy=9#H!MW~j?X2_sUUV{?ut%?cAeZ`mSA_Jd zT(tfW%BZU8W86AK_q3$X$&0r}@z!+wqo{kDju~#Oh&FyK+W7rw)2MX!&8c*Ee&~aq zAUt31k<$T%N4M#|+pgc_DW=%8FBik=Q2mPf7j+GCKL%9)!=9w;eAcY!MYRk)LexB;X*;%-px zTg-kPsQt1pfMdY#fh?cgw+-mN++ClfIsPx)$AX8DQ62-t1>o`E`@wurdxYb`zX8cx z{14zn@D*?pco+pkUgKhrRdReDsC}Xv!KvWifT&#j9gwn!{{f^d+;{YpADy=nz6>h; z{|QdVu8N%jM&L|P`z9){@EyIQv5Q~luCyUS_{91?7Jev>G}Cn(V?}$f|#uJr6(H-KFC1HJNPjD_-q& zB=;1R$1rw1ic-pG9NR^OKkyD6vj&sDu#c{`AcNj#%(L|WzrNJ^|C#;;x&7Ize+GH= z7vURIcUs8mJA?T#Jnw0?ICRIze0@pXKeXzEDJlPg38`L!`Df%03-X=4%ZK^iSlXRT zGXCd~KPJd4eqNs8!xApuAg6P!GRb&>jP<``Ca0GXw`g1Y5^Ur^ScoKfToO*wEx&gUT_S+Pf$M@_~#P}0Bhc754QU6 zW&W?{J>m~M`!oM{ygk1A=jYp62dp5>yP?0cxWhVtIZS4aom>ZOM`k(vtD%2M$S8kF zndCZP4}QzwzZm*?LS{&gO!9oo8~81OzZ`lG6DFyz=KC5?lJPV-_d%m{K1%N$u}rW1h~Tkfa`AiYNGowLxweTBoahsjVpPMWpjTa64_dPpjf) zUcFbixp5QjUOdUTnRD;uAL3U0x%B@2p6`=R)fIDgwL})}UN0l3qd281py9a7 zP`-aL>yx#l=P=U4RLjlF+d-{QE(4hpxO?d}U;i+6txG-vYF+YCQ0tQ0LB{rtkAk#W z_a4w#@ZYfWT*^If*7{^7I-&K6o-^lz7lGr!7H|UC3M!sXa3Xd+PnP|Y;3VujL9JKx zzK+%_p97iEZ`AuZCu098coL|48>fRK(taIM2hPN<=fqlXtOK>K*aD(A@ikx(crB=M z(E3NH=f#Tu4zL*eXFzl_{<670XsGv6N^t)MNHdEcGk3k0BKaSIrMUkKI19|KX9yK@ zVC$Lexn6(fw%Uc|*EU+0d>qnRrV1*9w8pstdLN|w7iYP(iiD2qaYnf}+2!zW+e=pQ z&SK6t+16cJbM>{x8Ns?Jxz2gs+JfevH7L&V#Mt06^X{K_bP1@>?Q8x=zm)gdsej)2 zA7f|U>mklQ=6`|b?VA7jav9kC&!_dzJO6v!7V;WXyJ*+9LH9zBL&5Y{|Bckej#K}< z_0JkI@1r5kKI%X4yj}J0%Vl8o@6-C{t^XIanSfFKzd)T2WkQe-&4GgHul|{j zr>p<4uX0gH5XhEF-nk*pUh021a|`hY9?g{{&V0k6ey`CrWd2H5<|+PtfTVwY=6=|o z&*uhoXBhDhCl0M;nWOr{Pu$iTu`;W;BiPpq|g`?qfnJ zBYjzdj;x2aL-#=Mns;UisQria|7IyK=2{Q#?*r)g<0!iGs$IXTaa|Wff?uagwhRyP z2cG>||Mzvz-+{ajbV%ZU*!gGc8HDc_7)mnzLfg8o_H|u8{bi)Pg!HT33}4~%sP!>R z1WpBJWjdSI@Cm_n9gXgbH@}+ek9MQ11lJw{Pnd+|fz6_P5q@R;rtvjg(je4B;?u20xJlC!8X;gU9jlE@j z8g)0qE=ax6M@&Y0DB5?)k#S`c_7Vp4?iJ}#-z>eQtke1Y=Khq%D1JJxyCl;8AEvu^ zrZ*m+?WdoC$LnvD(fyHfgJjg_60GZESzEe3R$Zm~R@T67oywZht<&d%>XR!#tR6jos`v#Dt#n*uOpkJrz8*2J?na(t+?`8##@y`d& zA{`gG-~PL5v-mw1I@PW7G!AuWR*o`Kf) zv0`KoKi1Pep6JD_ChMNpkPTChxAEb2M0xF(Q8tw$OFW}2j-=x#Gk~9_yPlQI3 z?~~wCJ>_FRgz`L$x+Aw3eWUsaZW=kl%6tl`JA&to;u(d+7;5!MYE*LLRgz|sYwQLU z7DhU?XDoYx(Cg4xRl?hB)K0_t?Qbb|l%r z|EE0v)!+D_KBM3Fn8>fvO?z~GGvJKeBp=4bH?3T*Gk-xFB3}vRk}VVTVbCZ&W4sR% zf8f!$B01WEL;cRqL48q%d1~)G2R=_#9cIRzeSD+9*IDoL)Pre1;VjvD((Uu~_I;yZ zCmpGb+EWQ_Xc^QF-S8LCo?OEIivCE~gP!j;J>Qc^|Ly3`X$!6W_wxKlV~F?zPw(?T zf3~Xu-rL|k$HEKq4*Ks*n_%8y_h9n zEJsdbgxvUvyT2#1hn#aCH0lX(8BCXfO^J9^Hc5UxZ{n5kLY&?6nISp;nRLJr<}67( zcYyOnt>+ZCjMA=o48w(c4iYVm_y&`{+_*Zem--aG#(2%ceH}!uK5%mVnw|m445bb0 z=P*#^Cp-kySb4bF_2^w~{aBEBPRzLP&So*LIzEk(BXDP2cXOdNAoGQ|9i%O~JIqFb zH)1~w)EG?I?%l)T;4bXK&w+~f3m|!ozX&Ql519L-hTjA=hw@{$#%X2-nCv)xCcl|2 zVf>iA8U8v*-!U$CB=@O|@8dO_!SppwpW=snx9+}^zT~0*0sV>eER6pwi=2^u1oHvZ z?%z)9d;H&@^FSJll4Gmdos7oHU_J=X3n9*&u~p;GNMytxc>dDIR$qPt8(V#z-oCMQ zy&6A8W9w7s{~ORq76H?tcg;Jm1bS=#gA&=?MqAuf`R8r_wC%jlhB*6Z|AFT(z5V<0 z>+Abp{yh!#Z9Y$LU;D4i_m!{qUqhQ;3uzNz=ezCS7tA~CZ-4EdIYHiIbN{^Ue;slD zeTcJ<_8)lu(%Zi;zk#)XpQpF4{olaZTp6|h`)KpeK(9c<{WRP8z5C~#Qvz!LVg0|> zCjM6@viE;!i?^}a<)-O1jjP%c&l)5<6dCac9`{VA$C=KVnQwjczBiEb&gab9mL@u# z%Z>pE67hHp)1|3gKd!?UiL z7_^U3hTmWq^lae?s{_esewLKsWeI&s!^zyHNRb&2Jd==7T_t6Za5b6SpLkz?`x8X0 zaMU;WIpV?En~09W9vu}ekGN&KJ3s2yr8a{PviDXae}}i?3HRJBw+ZI^kqhSM=-KG@ z9(q>Y#(CIA9yh8i^zPkg&H<>6Xpd$zVMfPB@#mxX7Zicpn+a{}3ClD4CmHi1a#x2u*S4;b*6~@C{`aj( z{9wXoFC`V?*6-Xnb@#E%9Uk1@mx%NF5GU#ufJLl038p^xQMBpW}2o=}#Q44yA8N_pS#2&0&S9>?QqHE$OIl z?Off~VQpb3!tOg4@O{qmES)(hM{aF>=h~KrQdeK9`~7*&Xyu>ECrs*oZWP}XacTXg zkbR4CMRC$n}|6U0ZrwKQQQz+oRK-m(s{HxNe?#aYodCUx1}~ zT!EdvK=(Y2rFlFbJHxYk?@`YUmtfc4+6u#Z!&Qb9jq_(8Mrn4>8^?qGxmN}IX!D>+ z>>VzH>TF-F&>2B}zRFFDj|BU;)K$W|;Pk06zQ%9)^a3WX< zst>OM;nfXHF+7eRKX<7NATsf%z-6G%>mthRBuMwF<>RBqtY@6(LrWpuN2MAG?$QH2-&_vKPxt>8LDGk{ z&~Z?uE5Fx~QJK7Rxh=%m$NDeu{H3q|eEAJ*|JUc~?OXpXXE2c&3B5vF9i2}<2+f1uHSfF< zQ2P&a)Hv<)cUK~t<+Q~U7`P+3*|bhSHD8qMRAj^-c>brY|Cob~QhCVqHZM;4=gx~Y z?^Tf}c{K0U+*Wg#qNd=alXAK9;($=5Y#vd12n;md2oe z`@2Sx4r_fjobYnjNPAR}m|HDw{bpX5_iQH4_3R2{&%C|?-wI^JA9%t#l&&+Q3oAEt zxrK__$#e>1IWl`_ME_~wN=8v8Ws>i+u0UoPGFKxrZnAHGVa=12@$a*8DuIQ9;@W}S z667W!*JN_iGtJSGa!uI9|2X`M;C}=AWr=u(-&o(U#xj6-I^WEAr49ZbISXQQgZ}QAHbDqK&^yZ#0M&EA?hBZQ7D~k;0G{5!zd>*x$yUjZbVNe-7M*ekQwqydI%3AUaftfm0 z{VcTeDJlbnm+P-j286mz`n7Oqw~?=DD!vqP?SiPX)R1XDU8*CJ(IdR%J%Ig|A@!JB zhDQ+|XJ5~c;;-dxzBk%@Z+i2a?8~_QnuDTL_ZhA%4~{lAX>O9ePrKR5Fq3h@nM)Zi zw6vxU;682DtKxW#u(aOt<3;4g4xDjI!ZmDP6>0pg+V^un)gN*2H#Ny*`IJ_uk%8(tL$$ACxEO!W7Nd?Pd9rZxE*)t zyYRi{Ut{)#;4Qdo?fYSn`g8JaW~W|wQ^l`wRfnX_*$K;iYYjige;ar!d>;ot3O;P^ zkC^@2;Ky+P83=FuDhO|UGKKXCa1r=PP!QAGrF)x-$*uaknhlDYzHhR%epKz0l}H;ZTqXF6VeYf0fxvoqIn zRC<#4FpY3G=Xm!+*>gA@yT6B8_e`&cYM^BqUDg>y-)~2meqXIlX8>jXhO*GlFN0&i zdqL^sS3v3F--7fJsjq_6xBE`rQ+(5HC--x?wO(U8hVM*1z;uvWg)6^K8Z>=^jNoFebPLYm3z zdG*cfR8aeK=d1F~T4m5k1v=@3F^VP`Z>)r1Him@pdmb{^Gq}1WCE`_i-Hl@jGU5+B zVQxD)F}F>=FDrkAmGrOAyf5q1GoW|h2xK_ngghO^Z|0+COp5PM$M?IXn9EzxgBL7s zN&TBo-bT#M=IsK)*q{AI#jWyFzcmT+y4?FcXYZlE()S7juh-q)?>Q51F+2U@T>*Jr zjGSI#B}Ud^`hgh%ukv&VsP=Iv2x*VajYp%vao7(7hp{Ig&O57*9zky#=6$>2@%k0H zGx1mzrp7C0jzC`Z#u&Gi^f^@dYrIf@OZmrT;L#vD!&vX%Lpv5+i=8nuW^Su}1@}Bb za@S#3c-Mon-wYm)zfa?#=!jCFcf(H3p>pI@pG(8VaD$LsLlio47N z!dE^ff+{!aE!JEUeROloDPWjmo`k#7rS#*r6pB8o6Cy4fuCpE%;6I|29~OoaPY< zM{`oz(iY7lgio2f*1TsTr@80?ki|6fHQpr$C3h?+{;_7C44#8s`+h=w4_kcdV-_QK z28iCrE5M~-i}|;M;=j!79{_2~Tdp#^+T6E+7b5p*a5;ECcoF!h`F{(P+_%mC1F#;u z?)eewo*$*>r{F5&w5QYn9z4i@cl$_C{<`;6{NXz?ldv~oKfy5EgR1*a(W!Voh)%_q zfGuD%sBqdq$+eq(19%zsD-EwQ_pM+ja-Rab!23XSK7Pdf_kfc7mf8OS+<^T_!ylUa zPe9se{GT9WVLWWGUx(_u&`QtIpyZA*dp_8WeWKwcb3Yl}guK27y&1d^+ybrz70#ug zE=3`+V-P`*=+u?aQ#F>qc9>w4PskOM~C4pxG^Hrr| zMq)mjov-?2zMb#Z`ts}R{O@8nk6fS0)7$s_x4_z^)*tKny%V|*dcxdQ&hMIcP6?>} zhr7AkEnCT|{zuy4JxqXTa!gq51>nM^@VX}q;*Ofb6!MX=tM8`?%zMI1XTZF|L09t$*koJ6*6nWyiJVp&S~+g`qqW+ zK^8}-wJ!8$0JH{?OyK)do%2qf!_J=T9yE$|RB9*jzX^WS(i)!6vGR0dgYu&1cS5Cm zH>k7H-v#eY$VknSGRgabrHea|*$F;pGGiEfhUCbw9&mA}OtwSXV;;^jnV*`Ux$~#V zIP}qwrq+5bS>1k!_A8Qf-aww8BC9^zHxvKOan0p)cW&OIXi=IQT;t!QyDx~kUrleE zmyUnw;|g`JXU#I_rakH}`v7@gv~;IV_ZO-)F216vYt>qpKN6XGg$N}R_*AxK*k8u| zbnqUNSA8f<(zsWBX#7^$B>j5351HWh;z`~~ti0!jffH%<&sLLu&7EEBfB3pfx_7$l z={c?cE?d%XWyfMCqdkeFdvinUx@KxmdDnf*FOrZS!}A!Gtb8df^;=1qpd$<5eF5Sb zLh1?QSGtDf@HaPb%HM^>9w_|JLoxOz6LB1zBhyshyFRTPh(3|<;e@C5&wgZ7!f&16 zxHIZbMcp5XHhnPK^f%Gw3DLESqRqEN*K|aif0W+xx%B4mr8jRK@dqB2?RMPf;jXp+k!X=*Lp#U1mtINcZe(hZ(Y``; zLPl*iDU)pH&mmKR%qC>!CuDHyA(OlpT<7NJz;GrqvB`vbPsS7Ky$1d=_+KLvUo(ES z1Jz-Yzk2bcIj5Cfa*6xyPiKMCu`Xmwkkxa@-?IE)gd$M2Z?f2FF=@xoBmx(iHZSOVm&?M|g05*}Kg9_2H&>2XKx-?Ll#94x>FUKjuZ5F>?m)+8dK0 zU9rlNI*H{ZRGDgjg(Nt;_BAPTcWxZFnDE`58B>i<;mKX?Z#2lBqw*6kGXEuJXHSee zOU290{bG=v7I$u(IaR#T+^+#;-)i=4p!R{ao;nu18zc?!edhlFsQusvLE3EmZBYBa z+BeMyzXy&7{~nwGJ`PR-e*jJfp8%CE=8+D62`c};0;k~qYf$+cL_x`YgyA9J3Ai5$ zs@$}{Du3;(3QqtjBio14^X-|0q&UL!?cTmcG~e-@!A@n*=h!Mu?N7eXp})UdcXby# z`#8cJ&n~S{en)5Un7y8F>)Cc+_iu-NmSre}A2ay|vXlc;04=cJCy_U@==Q4RMDCo< zoD5Q~;*BXE_dbJkqzF}HUy!++zi(wW_%QY|@ENci{1@;P@ISy)!T$#5fCm%NTu^)0 zr-AvP%2?03nY*|$uK=}|E%%eaO6+=WR|PHstHBFF`CkIoU|#{&g4(mL1C^oE!ER9D zU2FImP;#FG=iz=INKLtC;AepUhW$+N|A0#0ONOt2lKTy~5cfe8)LEduU4AxL2vW20 zDd0I^HFz#K52W41^TDN{_N>nX&jy!)es5D}B;E@ZKza}2M(A)zcfW~rj;9zBkG^rQ z_fiVcKUxPydZ2G$$@sGpIuoIq3*WxF$mx>&&LI_3lw!;gl+Y2}Pp3QQ6h`vy8ohHd zil-0$U6?803D7w9UJrwm-f@|IJnb+0u`|kyyOdGtZro)qB%c(U+hZRJUgYxak^aS% ztNJFnj|VRXCxDlL)69Rm*$crHxTAv(D?!x@b?)p7zaWGud!Kz4{q}sQ z0y+gcjdn&4iW$#{F;HI{(qMKx864oC*hX|r=0cFJ*4>|6iEDmC*-#kx{ehs=SViH9bpU zFxIgDzeh@gsrTUiPN&Vh4+U~w)orcZ7p^-Bnp)R%wJoeE&5Q-@Fi0-&_BIym&pEw; z^x4V%;BYU8`U@rephUl>cl*`fDGy2ardF~3W40F6dRbE5eADE?j)|5rMGbqsMQ z$A-JRjDDhI|7u;txFPrzJ>Ra;V?Q_nF>AW(6|z8>u~s zJmcI$rlWODCeQnG22whwep>k_zg4+;)c%~zV9Tq1&qQVj9h}mTyPtRud|k+hKk$S+ z(pP5kSl`vvv7poMmnod2AMf84Drh%O5zY!KhW^lfzf`=cb0sG!6Y4z33?&WkgXd~X zr_wMaM@DJD$;Hz^9D|WL2m7@N8I6a@cqF3-G71l!>*1#%JNT(@%$3vlCH)bFbj~48 zjT3_zC_>&2&XJ`&ddRdRQvpv?LT1E1WE9u_>_MA8=-i$3Vbgn~?uqH{WAeIhiuC^< zqm6T;jSuH-x-i;wVS3Z&@-}aZHg8IAX8Gdx=^jVU_e)WxZ#xvX-H^<1#v|pE^u{Vb zjpdBfZY(D|ZY&=UqA2ksP~+JYFgd1IVAmL435xG@!$qL@mw-p$elf_HY~$Y~;yeq| zIjR!EQ*26y*7C&;XEO5{r<04$eS#b3UgP(6$hX%h)7Di-n;{vRrOOj)LtK8$SDwdW zSG&@f&-}oR`HEF()b2#co5uQi*z=wI!K7sh`Sb57=}w5`ykrFHpfESl{LQy9?f_DQ zz?4C1gEA8dPi0LxZao{M-Nw>y#k&|}b>_;d09=8+5UdBq$6kO#*6@zM6{O#d+YGNT z_YG#>2%J;bjV{@(om zVD_P8=rsI?f$s&2K*`SnE3nT7E5TF1YVcIB2Al&b+|xmqe?#r3)#1L>aHY97n7su= zzucKo>d5Voi*SDqq)yzv z8g&wDUk&{=ojo*1Pp3Iun9NSqIJYvA{*FdNPNH
    *JmOD0X5-v5TSmVzh@P{b7uE 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 literal 0 HcmV?d00001 diff --git a/Bin/KoiVM.dll b/Bin/KoiVM.dll new file mode 100644 index 0000000000000000000000000000000000000000..4801d31e26328f6a7d565a42ffca0bd1088a195c GIT binary patch literal 212480 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ºl{hmAe3Ja3gEX1RmliK8zYM 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 NhwI<``~O`F{NI27^Opbs literal 0 HcmV?d00001 diff --git a/Bin/KoiVM.pdb b/Bin/KoiVM.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ce647df2c3f6c92ef474c7e3ca514685d057b2a5 GIT binary patch literal 747008 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

  3. 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%0AFzSbKin(3L-5n8H25vC24CrRWc&!u~ z24*B*hll0dSovZGk08;sR1X#^WR z2SCqO#>y(Qt|*c&YjMF@aA3T_v?Cm)C^;V#Jk*;+6lS#SR8>a)vis2!hi1Rx=~)HN zM>PJral&!Ouxmo>Vcw8^2-c;=01MX=2>rAmyO(9(BUw=#+s7pj>f-Jiw5(W%l?l+d zT@l33myp-@$SYqziH2T(EkEU`@2qxa4MKJ+g^}y#gN6QW0G7@v^#6wMvIT{Hjpn;` zg~WDI8d0&MVBA?=Wbo5W$_z9k^-IKni{HM~b1{u#ysQxG`%PLdHd+qtBAYh;bc;X_ zfBpRJ!rwCf_T^7j3#eSpVnbHlYx#RFf6wRdLjGRP-zEHA!5;<>xfNUZfd@&4cp%5j z)G;e{%uXG1Qb#3qbf%83)X|+f=BAEn>gY)w^HRtB)X|$d7Nm}asbdFojO8x#OrlvB ze|F}pb{e=*X+8Fiflb`L#(PKCpkHz0)7?Ifjyeo?hR%1L9emJ)L>&yK==~fu_!Xbz z+Lk2p#V5NYr#6$E<6!ESKlACNKW}CwU%bYpySR~V5k;_nF36Qj2jzcY^{&BoJ&*J( zK)Hie&nFt`+%zgdMNPYR^n7RO)O+eVqvuJHp_XqmE!}T{H=vps1|?%p!AS>M3n{bB zNc9arZ07wHnug1}`}NHxYONM27lWzxYGJoZ!9*%LN5M^HaP!E?(J7Pq*Fk(u59paR zxz2j1v)V<`ZnL7=OVrz*6CdYzwmE~)dXba$QvHZWcY6!Z<#XwMunx#Ht3*E6BZILI zzoA(?L;oG0c(fUCD94JW` zovXX=<9rzyyGj>mimJyXT+W$DA!rE?ljjqGxk4dfGA0ih4JaeNi~VX$u?^1miqmqtyQ^9%H^Fw@@OI1$hRx8++X<9$ANAH4gqct1W) zi6@LL$xDUeMMAO2b82iWb=to=mpf?uD7NjWlbsx!k%mig?!=&Aba+l%iG^#k?ifxXM(x6F|;-b(tin(Ftp`WO1o(sp5!T4T~KcQO7 z0P8p7*Shxw@PHkpqe;l#P!O-j&+*U|DAwEA5x!JuRg;{;1~gni6URBxd{7wQSt6Ah z0q(u!Rs*0JTkK$4w2$(BA?U_GAtY)RLHs6wDRCz%!hEGv6Y?D(zQSTyXRrhM@mDa+ zp@9gkYbLG? z23t8a!#HI883}ubX7tg+)G(x^*4MW;-6SCP{#M&=g^e$Q4aVLVwI5JqSG^pTpW&KPeQCN*qYT@ zQy}7ND}h$8b^RtEhn+rGN0{1r@)Qx~nmQXCYSTge41QAr)r4L3y38drEZ8l|@wiLw zF&iTtG8-ZE21F2Fttvgj3aqf?5S-1XS?lz}#8qkvwJzs#Bg__!Ftu(2jsK6eb=NGC z3-JW?209E${fKFWs1wRqqDGipLNP~{WaBcrs#7%6s7#4ZV_n3;lSM|dwM_?DW&p=R zVMsm(ZkKVgfh;i=tgvA_A!i%L{6-~!jQ~b|g2I)XMY#jBp}V$TZgeMmG%&d-AbAOC z+6z_WU!Q?yj-EA3+sFDCRs04_R7GtlEXguUZ_eFu##b6M=X%zzFkjWP_UR<>=2^uk ziy(dr@ruc$xZPtRV^LOZTNl$5!nC>>T2G}edKt4{8r1vjq_Y(;j^~r zXDK?WYSG7``29s}ZGpuo(SV$t$hKVH!Wk02k!OP3T>7~F`97}ECx}<_>ueN8wAW}I z(2X8REmK*l!(=d1S*pY2gT^9Pd&a0+4IpRWdc+PHfO>LL%K!}Njv0UgP#k24D>CHh{JE!*Qz5Nw(0@=$~4j(z=zeBAdkWCZ8{cOzj`7B~puD;LEGAfN8J9nj(luSWes(oqu)TB` zDhii9*T&lKBD!xD*UycH!&_-M)6pO(G;mybDh-p<84cS@2MxlN((qEz0N+;wvz=&j z05~uOn8VuEeE9SWqj7)3Fne(@-b>3xvJ${ayK+$|wME7MrNuv>5x;}BN_+uae7Q35 ze`WDkHR9_@aN-N#;>#t157Jj#=jH%#a0)O7fWuONIRG4z0?Yy6&=g<}07s+%a{xFp z1(*X#Rf5F^iC#{skoqSBdl}p`$wCw!m8LZZa`LlDJ8voPAjvU*+YGm@Pt2p!nC1X* zObRdufMZjDIRHF01(*ZCaVfwY0FF-q<^XVF3NQzNlTv^=T%Dbdy5rZXgPsXR^JWD- z@tKeu#82bb-k%MVjdXpp1w%>pV%+g_EQa_KCRYF$e>u#U5UU)A!sJ3hUm@s+GSCfz zzEaS;fI4J7%e!2ndE>8A$fpV6jI?ojeiP&XwK;D5|Dqw)tPmzw3F$u&(Iz+>3Q~K_ z?J)OEPSd43CC<{0>=DF@KTuaJiHeU)+T&FBwz;1|6HpvtZ#m8(%=N9yVtWVJQ{%1S zgB^}ANud{GNmrZmOm9**s9DK!X^r87hX@`zK1?nJVee9ySyFytO4yc0*e9oiUDF7= zZAutQFpu;0DPh+&!ag-63`+x_?v5#8=qx>7?o?RHlA8cyh!#InT{+9!o#AbKA<+26 z{A5E02;u6BI$*AU3gYMC=v^0|J6*J{)@XfGqD@B3T|OIxxX2Cf@e6Tf8W2y6s_K8v zsR&n#ORf1nOYz5CD;TJ2oUsQwUqgM3baWQC&Al37yHXtLY#OrW(@SdnK zdin0f1XXo3vsB$wTe^Hvsb^E|yyXi^^ETC9xO{GD{-)a5%V(8(H`SiGyii)ONt?O; zh}nm$tdoP>V&-JKha$Pe=P{Q&F2$YPM(u~on<*Z3d%W%}`fs5tY^2!}!%n4vE~Tn< zEw6E+?Nd0p^@`sFHHJn=7Cx$vCeAP9drlHsvxgey`#Y64zK7^KH2FK089W>n#8&}W zp6_YjI&*8Zcx$+LYc5p6!l3L?^siRSg`8!FkGOZrh1_j9;}$lbPgg7Hj@R+=qyAh! z>YvT1Kej_5cR^C*-2dRqB(82$Y_9p_)0X^wHiY+b&4(cw{7QiJS}Tla*|V6rtxNOD zERIOFB`o4hSE!YgX8&jS@9F-#)_)~YEBp-ql`ucJSCG8cC{9&)S`}bNv;G<^5xTL_ zfM0pLkMZ}ahu-<~$FD`uEJyw<7x#f|BK_9+oCUm$dI{q<;N8|M8;s0(K;vC!uCyS> zCPQup^Hi>X(AnWH;MyHv_AiJ}k!{|LK~`F?2b=MqO4FJQnLStJu)oqv#_OO4{-8Px zoCfY}@?}|5=0f8yB`%||{>k@xeSC!UCB`-!;r=e5n5m}doDuBt#b z(41$ju&#VkSf`ub5h+!NEM)ab{zi!>wD9E>Wm9A(Zv;Pz28(1%;%L+zq^m8o7^aVE zhcAB=UmQ(V(tWc8F3ot70t%Ce&|&x*82n@Yy%{ z250qpmd?uf<}p^3hXOW2**iC!b;D7&)UFC7yGHT%5P&As2fZfJg*}xpt%!o;e!_jw zw&*5NvR2`N@{h0=tV)wd2p@{Gb+@1;U#q|}6=*S?j*ay+ zW;x>}4(?6ZAYp4M#<$#`)%SH1i_Hy(Fb2N~cSn)YN5{B|NyIPrdH54Ja{|sO3p6?> zv-Wx<`2Pa_d;|YJ6vE+m=7Ju54WxF!XO51B8`7C!sm&b` zD9uT+-eq%In2W*tSMYM%cBaR~J5pvqj&(Nvha%|AbzOm2?tZ$d3o}$YP(J^SjYGkvp@0~*C~HaFz#W1NX)>qr zO&dEy!}NYdh~EkFp@Y1y8eb>xa_{YN-kpQ7SA#x1R-eIq$uAhax0p_3>nxNh≦C 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

    ~zl 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 fW6fd|c|DLbu`vEEc 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 z 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𝔚y`Y zY1-EVZ?@ss$vvkPxnFh{#Ku1CG|F;tfK;tL>cje(rq$=$wkg$u2Kgr{>miH{sKxg# z?cz-HzjrKwu%GFCY>9rXs&l%sX=eg4G5fBORA)n%!;2lX#REiXn*Ll$%?4syp*|#~ zxi%B+*gmPrxLSo6<)Tx_PwOlXfc|I$J_MBV&L&+-H*o94gtgnub*F*|@+ zA!QM_|2(8s5FQVU`1W56Dg&p7#m0U6FNKx0QhpRgX9wgFTtCRM(Hv7Y9-EY)%67&( zmL{sDwwe}tBPbqHG9DR^Xtm8TuuhKRz-e)ZGX_-)I4u_8OkrgKr=kTob4=O5nGzzL z#VDs;2RjAqtf%1MyjQstz;e{py72*G@98k!v~9&}gCYjLNP%CbfG#APe|7qoGVEs8 z4TNiS6_Oig8J8-prfYsmXX zv;Z4aY;5{8S%X>;sSCAsvsxQ({wv{IhnlV#pOuMyjc}!2Q%w5-@^`EMHM(vMII|m< z>C!g7h11J)j?v2MdafE?sS9hi=P=*UF(nQbcFI2Zxr~IyK)e;&I;rxqu4lgTXA7q>*0y;(Wr538uVtG8+Ok(b!hHr; z@bs54S>~4Kx7)VrQUUnQw=QPh1{-pZ#dzy*3borTGPt&NP9}qezrxm-{#;hR`tmRa z#iTePMdCf-@oj%aW8!rh`;5j?I5t*@#>OlqHD(cOf-@^pDAq&_rzUbV zH9<?rf3*(BTqmZ`aN5&2nL?Uy*1}(= zxF$T7QJ1!%V1%{{_@NsM*wk6bix^ERZs&oV{w$WtwNBEBmC}S8#gflzz^Tz1p|;zv|Tq1Iu|tGkWFEz0Ob1%immEHFX-iJN{|twCWE1j;L>{*6RU!*m^}w5>7uP7Xthp67)~m$lQ}E3Xc1*1-eWA@rJxCAKmxNrhti|r zG5fm1DJxv>4bv$_U3j*uDr!zAZ-TaqSpbdj{)z^#6`O7P4aQ-A*ew*fy||7!K6{p* zH-(w;={H7(gGTm-4ugLLdrOc{zhSn1-1o&rHnS6eW_Ah-;+dVcw!%vQ2h8l0vS1WQ znKKinC{rX>JYya#vu9O(gpq=0HRsHrCn+9rgaF&dvsmUw)`2v4A>M;nJ-h&zMPVmIk!o5*9xNqXRIPV?J- zYi#=1Qf+YPRWPE~C8ALcYY9UzYeEroG0JwI)}IEe0TF`MEC4o|(<7<@8uWI!y56{9 z>le=3HFVHU^ZR&waQR9S_RNjZS~zoKQu$|YG>VdC8h4tN6_vx88)clF+2~c}Vv>kj zD|!tgL?u&AkJQeL-1XeO98g-rw*4$<-LlGw+t@)YLao@vOc+d-&PQ&pv+c z|3l*0KE~6m!eP?A^!J z_?cg5EKJR7BAj71Yu0xX^yUVeTz0T)7Lizy!<)(2iVgd}*ATEWv(Hm|qSLp2AAtRRLaQDNP-hHv(w*YU0(g zbFKKNhH3Bms7iCq=jocNf{AM8c(zYp8rw`f5S9^MK-V>%xyPqg@CEZ{_a#xEx!0u? z5xvriY8bqcbw5Gf!-9%a@ABYGH_?7bACu4lW+O$?}^_3qxc`@+M3`D5;r9Exe7}7R|FDHf6%A`1V!-|M5|3d@L z73Z$l*lkh}56BODDRVc#_$XJ@jcIP2c18wJb{KES{0vmBK#|e&&JFnm7Es$D4wZM>V?)Wk%ePB7+eeK!t5~Q99Jn zsHgXJ6Q!qFoU=s>$wnKFVaSVYap$2;B8@&w`2R*99vgiMKJy3)0U%JD~oJb7ul{YvRz+fyRpc2bCK=VBHQgn zwmXY#cm13s4uOqP33&q%hOk4Ur>=9Y9{g%SOO`z6C5$FFO?wWut2yjxZ49OeuNPds zG0bJNejV1_7BB^P!KhekW7hPm;nW3!ms2c^!dkAazYTiwGp=-L``O>(1IZZD=eE+< zv|~%J+K?v`LmFeX+um~9hMM^ig2+4(8v-)gF=XG{dGUJYO(`(fm zxG|Afrn=+C-o#QFi5vS83#+}x{=|aNseu*^QIp8@)&z}|tAP%AND&KKINlHEsuJ`- z+&G(96wkTD589`}cR39wwK5+AyA(-W*OTDN)2+mU##G~WYPk|O?j}-%$8l|B0dDRM zaFyw2BEXWOO(Y4_A0^S$pTv!iQuKTZjiu1F)ayjtc-U$&olY9JX7pUZ6=psbTg(wR zte?!>kY#GGS*G@iWeja?ooTCm?S7A$rVr3G)E)a;;MzUGGbQ_u8UADsXHaXbqu^|O z&!OKiY0@2?@doM@LK;EJNw&RXbFq@rS z!Pf00TlD81xx<_8{wvgTxv(+DY zc8@saqd%n}nAFEvxkjle*Ndv|w~}mob;8$tP@y zS)U-q$0j`k4OWaeS(6AO6W2YnRv$}fH&j#ulG>lSZdYb9gsVr5;qu37Y6Yezu0*I6 zY}{Q5wkyU3-q4pZEeh{Pp^^Np_8m4aO@r^)*Ss^B#Xy$qJ7)Nkoe(`v6c=l{vV2WO zEV;}gDI25R>Vl5~-1Qn=ds}~^8DXGEaM*G41)+w7FTzY|B3Ohmn!gw$TE7Tmlf)v7 z(eXtXc1jv&7h^OZ{1r@f5ylAmB8*Y>MHrjO7GWwP_KPu^(-vXsBF}#X^GI}@`YG1> z14I))2N%#%VJ+Z-i&dO=F>t}fD$u(a*y5s!3@!o}T&zMvY~4)23ocf%3t`SJxL5^; zFskbo7gcm{5xCf;y5Le>aIuQ_E(R{RSOa($0~cJZAwq2D;4T(itU*E;wM~nQ8YZ|1 zTyU`l@-7B0c6qem@(4naqruc>;@3>Cvg_OS)YA~pYHZ?p#?9C^BRhNj*LKjZwjKm+E3)C#h5{EkgJeA@yUtuUe#{2E7LFoS_G|z<5lj@dk-%O7_^G2dqA|9OPjjEB z7ch{~8iV{tX4O)|9WoWzF|BQdof9?=E=^45udSyKP5DTDSSP7 zGX3b9=}p%zDj$}~(?HYx`mCcM94ZoXa@+DUbKBB8?K5`TTs|^XhevhDGTm>M>3*}U z^Okj3h)fmp%|8W7tm?V=v9z`* zEu!ZeDrm;IIheTeIt?XTm89zmw)X=Lo+3ci1zgJ2a}FlBvJIQ~v)xn0$DUMzE5OIw zvpXx>kc8#wLcK_^JeesyNTJJt;H*qAWkq2XUAm&-@l&o0O;)qDx^GPJxFmMp+kAc1 zE_x(g#4{wddP=kuP7T{`6%FmG)m0~33_y&tSKU*4Xq`wc+eB6JdG`e?9|Q*;hb+al zbFi4cMu0*s0fkzUtFIB^s**~*&z6dD!W@S;lOy$JPIq_{1ypz|=RI+@evKy8xOP?v zCFTN7Jf+;G9xvd;YYA69x`3;Uhp^)dxN0@{t7?#ZUksCkXNKhY8=u)=)A~&JvkAy;fouS;K4jFi01CfzzxoICJ8` zrnib&r5*IfjQC0Vv2Wme7%bHvYb0FtBKw+lD7|>ZK)B7+p^Owo;(8oVu?nL4+EpV0 z;1Wd1%cNsA2CXs#B;%&r5^jnF>mD`hpWL)M!%04TP!xu88n)@?n$As6td1{{%lQd(B9P51ObLKfq_8>Q`f^OWF6XEkEgiF6grtg zCSovur4(nw-f;C4*G!=^DRef4&ZW@#6uOW?7gOj`3SCa2D=Bm}g|4O0^%T01LN`*$Hl3d`HFLo4oH9slrt!o2>I_ZrkQiai^g`^`8R{c8xH|RVM}1vd4)%BG2K7Gv(&; zzE*hks{}SKk<7=Xzf=#c_mc=5Z{F%iVk}jV^$rzE-KA6ggWPh=dG0S-kPG!n6_E>^wrpAD}~xYiObp& zz&A{a&{ea=`U6|UHpgk~2Nw8&5|Tx62!(*jr~SlI^p@E@F?X_}9rVNW&ud`7m)4&o z`JYb!zdALyv;gxd?*RpUO4l9;RG~`9QS0M8yXHFEjqVzKXB2w<3N|8$YPR15sa$fPUY+3R zf_dtT2NB3u@Sx3$y7V4>4&Wacth1xGY+_oIjD(EkSBSv$==m0mc&*6QETko#?Muks zBg!tsR(-sv0H3pPwVv|M_IZo%7ecFFlvmLjshC@xVqz^>4w>`hcLG`TMP?(EDQ33; zLilqA+E5j#^$t&Rrehcskn8g-wV#kk|Kiy_YP;DnJp0?u>BOOw z!82aeEoakFnx+%adXWQTb9OxF3A5QkqY;TEn2y~vX@v=+cy?R`-4m9PYPz{9nbE^y z>)0z}pw+KSZs9Ns^h?Gq-C<4&_+bmAe#83F3`#m^IgYK35dC-y+|QUV23`nwAXwV< z9FUri1zSW72xyOx-g}S-ba+EFv8WD7vAmArki63go`R-j=_4iTbCxelbaiX;%y1e> zFkdO8{T7=-4-otr^>3(<6zk~7q+s(|D!mFw&oTNv3L_2^^a8AUQBFgEHM%NMOWxWQ z6g*&yW~+dz5TdUYtm~yH+o}-jq-coes5ee~qvVaf-e`K`tT)cB;F-E!Cl-!y=e=>k z8yBeqZK;qUHR64(4d^s{>6j~e8MgNIvQcW2DU8Oo$-#Q@>>jGc9mC z^-JVfiPSIC5V>yVEM2w~y1x&}7(dhYFaOV{(KC?IB{Q1Jr`m7A9ZQa*E%|Gj~6)d&0$YJus{Y`z4nt zIahMaO0KQsmY3X$lFOD{uH^D1*IsffORl5jR+U_5$*nHALJ74p_+GcBaV5XqsHIeP_@YbnWOf6}e9n zx^v4q+3YQ&SiCYZi)3A583V<=D8IBKr+ClfJEei6>Ral2nrv+|4o8t53mAwH?#T>n zYJ?(Xun2)RUQ4IA*_5@Ky}E$Jrb%`yJ#LI%#QZHLO@&A3nMGgP>LawHHeF%3^F3Ng zqe<;YiFOxeKWzJn6y^Reeg1EK9_jPv`ur<>{}Sc^k?N$wzi(yot?Y-n%i3aO_FfW=DxT~q`+n?RTQqiYVoY^r z&5-(darS}Z`9;nH@c0WazO3LWMqWEc)|hea8MiXyI(W#~>4(x#8!wJJm*s>gl!j}Y zom=T#hjXjYCqmH2<$23o22X8nS(|HXV^W9SyJe^vA)PO{6$O_qxEyzb7Ptx5tt_~X zf?HLPF4F3PD->L@;9{hk1>Syk2=t#RxMvHlyWpNHxaSM*g#t>huD9S`EVz#qTwlR` zyx=}jaGxx=bp`jSg8OvAy;N}h1@|(q`4;KR3^TW^=-P^IdC{#Xx@?inE^bYB?M1h; z=sJpSRT0g7x4Ouc{;pVbanY?Qx~`&ITXfG9-Lpm4U3AYC-Sb8FLJ@si*IRTi7Tw2+ zuCM4mUUZ)*x=$9}x}y73(S5q;UMjl&qI)DH&}G96x}Zt-B8i3FS-py zx3TDki*8fVy;^jei*BUowiMlKMfXcZx3%a#TXer%biYz`+lp>`(d{U@okcfVbi0af zchUW7(d{X^&lTOT72W5HZmj6OP;_4`x-S*oc+vfO(S5n-UN5?dqWenGeYNO*qv-Y) z-PellH;eAKif&)geZA=ZTG9RWqK3Ez|V*(Y>IULGtL1sCzNKhp}~7YubSJhb=P=N#7$ZAsWiAI~9+5P_SEw637zqn59HF+q8h(5h@9?O#ZNvL|&y z8VT5AnS(*1CRHoSa<{UK0Vlw#zih7P>5S!>LO0O?D}x1();5=FQ`O&%snRRc`PJF{ zYWrsuUf?BGdu4-6S^LYfLJ@Xaj0$40n=Lr`#PZf)3cj|lop{rjyM6qfs!tz(fqXyL zw@Oy!Y2ly6s;nyamOb1oyL2U01OZhj1p#EECSw`)&BuC$0)-?f=?Ya$$f(t_4`uOp z7V^*g9Qf!JUHAv|OyA0dh=LR7kM$LP9$MinnJyJvwh*UfQcaWZR3w(m)o^b-#f&GP zX*!E$=%QH}GHM2g}uj*sD%BEQzhSP%~ zW5G!Yrv9uzow)cRI)s|j93LAnq8-SOL<#G>VuUA?1>l}Y0(x_5j~?^L5iK~(9wh?c zaazKVJ8;%5{V+yow+wk*W?3n4U&xT8|3o7b5Tm`jTg}nlPUA~`BIm6+R@Pc9m)9ct zD9*7UFV3-GD9(*~4nfEH5=a_`^cyYci*qp9#W@5d#kqYD|2c>+7qdmid0=5-I~NIW zs<(4eucMNO3_qmF;-MVd^vPw#W*Y15*-gJBnSB`C3qEXtl^iSi(hq4fwM|bx;pY=M zXL(&J=Y;huuM?XOFbC%=3Tn)3noK;qKf#RKdUdW#3+`F1vpVCs9%_#z*_>GCIWJD0 zL--cY4d^p$bv!q~?KSE<11J@!QagL>f&t_d3)56gzbKZU;|bYbTDtu4Tn@p57A*_* zq69uI_8e<|^YJMzHc@~A{g+4=`iB~lXWLXU#BH6dyo$TV^pP83tdo$g9-XHx28=1D zHk!FGKbF_2By}wUn^ZAexvtn{Tgcmyg-mhI5sqi-q77J>EXJ+W4H;!x7y?PoK`?cK zGqgWnQA}QrpF5*2Y`}7DKA>S}%q~0JbOD?*pU8YNvo7AZA+s?voY|ClHM2RhBeOFzn%SNC)y$sE=Q6*R`Fv(9^M%Y8GhfPlS&5#tmMh(i z=N`rlc6sQWjV_nvCh)l%ynjjc*s^i%CRvCZkD(=P81dYbJahgN^2)e;lG9?nDdD7j zDVjusz^b3Cs$&f6xL3tca|~nzUVBBv*|%oFo;7T}oCY~aj`As8)sy@$*Yyt`DCE2Z zjF53dQ?AcW4$6lbpuZ0q8pHUWW8Jn6X`O0XdkJ&4%wQ!%UNq9~Bb!5rssoZ0W0Ob6P*yxOoD>V&O?`71~$u$~iw(z}$!S z{m8QMP~Xx`eH&f&?M^dxUJ*4OQ&xyMTr#F5^-y2J@Fk4C-O0LZ?mU#yl8oo@PPt2W zEQLE3=1%I>0$G!}g& zdOh*3ScZvX1OHG@8%`q~0=Yig66KPVIy~Ux57_l`-e6$>eBe*K9!*9ESUDf$dxCEt zZ*7gSmhQvn5dStr|DRqqMTPNbG}=L!Bzbl7$7z)|t#42>bgQ(^n(7{+r;RQ?O_8al z(XGpZ*jS{3!+Lt|d_v2cqRtJrb?Dwj5rKwh3K$PwxX_SPDF>RK&aKO~#%n~jSjF0% zhx%f0Bd^FT*X)*V3YfbOAU6Y?_XR3}%Ih5BykY}s9(`G3446-|E#%M!BG#nH%^bs- zsc@YU4)8%vX+iB34w0m=ligUC0LguFje!I+lmNpCFp>bt#e0oy31&0__9Vbq0wfp0 zH6{|w-ULW)%4_UTFb5OhZ~`QE=QWNen8^eI?Zpq>ED1UQobXA|ID z0-R5P3kh&B0WKxLS^`{8fEx*LGXZWT!0iOMlK^)U;KKyCmjE9n!2JZ6 zPk;vr@Gt=$siUI0$EuE54Ml~OGr9x>t(=wom7h^-#6EpBY{2+1djbd*1j81;xfDB60&9*-D{8)F`Upk6`7 z`SXZzk3jQTVqdA-dc@wiAsz(8UXR!pH}-ji7$f4?&!0yi=@;T4e;#qrBM!%n!ya+i zBhY9*>Jdjh;&|LR?h(g5Vlr+_dc>qhoQxYMJ>sNCoQ@l(J>s-Sl;TFoBT61orK5U8 z)g$UCID16hBbsre=@CtjI1@L{c*GfxI2$+4dc;|eKzaF`N1XGB^Ks+6M`(hf_!s!| zhzlNZF>YM+h>IR^DQ;Zyh)W)EIc{9`h|3;vC2m~th$|j(HEvw>h^roPEpA-%h-)5k zJ#Jk0i0dA4BW~RAh#MYpGj81Uh?^d9ixW{Eamyoa$Bo+_aoZ#A#Em;1amOR>qM_{( zcRk|6xbdM!eCQGP;>JCXxaSccaV*LsKJtkBapS&6-1mt2xH0b$^B(aaZanaa2OjYd zg?x{A=n;?N#v_k-q(xTN)<9ZU*-uQTP(ow{7$R$nxaBOJWL+Vp#5VJ$El&KIPnK$V zbOk(|Ea0>zBoW1AVE{x09=G+Apgy^ruEc`JH$|7AGbiq-8IGR#CuQf@1>m)!W+AcW zjCXlLWOJrVHTMAOx>eRE;xp!+P)1@2hVdSAsw!|?8iNGd2Y_9Jwe+y~4+<={hdB6<$z{A0#e})u#<y3ShtG(I_)d4NvKBj{- zw`W?_zLf2-H;#JaxHl%fanc*7y;1T;HI2W+BB+B_{NAy2{?qQ!@)XF&-( z`hqtu=23C5nwaFa!g5OuUh*C;d*ccU;_{dJ2}vUBRza?L{;p%ckvc$2;8h#)oOZq?q@-!$%<%&}p;Zr?Bc6*-+#2-s=NzJoLsR#b`Z^ z3@(S8rYGw=Z>O7l7X<+qX}i*M^!;M9&+U!e{}{RdDRO_E3t*qRUy9r-k=q)%UyR)L z$PGvCvys~oxlNJ#<;bm%+|J0o8o6JI+=j@FMs9QDHb$-)xsk~ILgcnYZXj~6MQ$*1 z{gHb)a_>ZLGIE)x&OLR@p1OY=xwfZn`BV4IQ}@pz_l?LMj@*&R{f)@ojoe)1{`1IH zBKL#HO-1g%j9fKxe-OFp$o(jCjmTY%+)U*Di^$a?cP(=D$o-?p%|`Cqk^5%kjz;dI z$oJ zi`?^(dx7gVB3`C*Ya{pZ$bBMmpN!mp61o2{a%Up)zh_BloM3`&{HcAGv=wave`y zF>x&MV5rk}e1E^@yaxep`vCy_f8xxXE` zcO&;!* z2iVhP9ns?r>6HjQ+X0X#WaVbuJZQ`C0ea`uS+8%}EQVO`0e9%!;b17OVixlRZ`y zXvmyYnWZXoQn#^ts4azTquN{(eS+r6j?{Hk3U#hb!V<&k1orEyZ3}Kw9SiWZ4vqNq zVt?I_r9-J&@KFogwg8v!Ex^^&3vhE>3q-2WwhD49XskkxT@SVZH5*x@HBSoEHUMQd zH0^_ep3f}uH`?{IS%|q$7tE-2>{TYU4n<}=^Ls$;5naF_w2KVv)D@LnF^TS9hz*m6 z0?dwHm)8R1#z{S#;CGP8v88ScUX*vxV3e}~cEh20kOTgxF4J&Celwo47`9kk$ue|Y z?*QOrZOp|uDmeM?l=P@M#;5*}zLG(F8xr4^Lc`)Xnq&IbA3jIrEV&9HlqVHqRZr)W zRJWzju!ud8@FgYEJSf#O6yBN##dmNrIHF&-SW$;-@enF~ZHuRXVw7>Wi4Us7b^)!o zxh=XDoYXTCuS&Gs6Fhe(o)=;9{%l0`DpM`7h}(NUf;RjdJV8v9#z%AtP8Q9EFRcWsA+7`j528jeOK$xZ~t(-Jn_4F#yq%?#zh-J<-mm)vj>8x$ul4{FqLsj+kr zxlg&gJ}z(KTnIwz?ruhgRYRif=*L<0v~;S11E4>g4W)x-RrNWoPu;83H2Xk8%fN!; zj~tRS$#OB;yuo0XE$9>)57*qLo1#G4-EyKX+ia+B3+dWWLqn<~0Ml0z%zOa+vu=d+ z555X$3r_y+4lsJ0Ly6EN%le}gqQlLT8D1SJHqYvFPMtEn3a8 z>!RMMO&8#2qF->oF!shj`Al)^<{vEky+8TRSo25!YRiwF`J12IzvCbN#dE*%!~cHr zr8nODYuJnNs!j_urj7bnKPa554)`i6fKmzcPO4#IYmq zzI)`Ix8F^X3%Ko*lP8Y6@!sU2fxct!zWL6HqetEt==2Bn9TKiQMEPUp81Uv2abR7ows+LeDlz8`ItC-;+^lj zo1xv=jo5|vY)0POGtu&cZdQngyz<3e6MYBXefQ9@H;%sFcjC~2gNIK1;&&+P zp%dJuWg!MLQUA_&j=z86$Ttp8_Vw?4xo^YJ`VE78HuoJoG<@)#$!*^_cHqd-SKfT* zSQK@TP$()5Yl(mB)0t=+NjtK+YWvZn?|kPARKbzsM-PF>f9~zWlxy8&px z_>RzuZ1BX3im6YnhGedV9}_K_2l?;SY0-3R=j@6+7%e5wCnE@sf@Imw@V#|Mr|Hc`K8um16#4Ci={=L&sk0 z8~y*6Emg~@?Qd!feb8s!>9eO20+5dIcV9_*W1NXrol=Qjd7aV!_BTjTz4p`>-Z}W* z(L+>ZC~YAVtvvNPb%eJLys7H9fD;GaFi&4TauC!&CVJ^qQU{A7?K}0kV+@#Mhu)sF z@sHBDX!@!py-<#xO!Vw2WutHK zmx=7qcMLu?dgv|E>di#m>Jg)d-gxgD-#B!_$KU_*z}w%#RW#+)S56!Sw4yVVPSBSI z`%dk8TgCc(CfeOkp1_VBdHWE#@RptL9DVQD+aJ7)&whDL9060OQ={*^`JRgXicjF# zOcbj*ta)BbD$8gU^gzWO8QQY*)lD0A4Q}4J<<-IU>qj>XZrQwf{ov5h_Mx3yb_|bh z8sctHPnv!g+TqEFLT=x_X?S>a7}_?nbB9819NaOwVFMwDhIWq(jSO$uG3wLUF}!ov zs~bjM9o(?})g6NyH$xA%Z``qYaQ&`b>qobb4!^p22e;}e&f%faUBg2gHxF*!IkJ9m zV#s_K_W%cX4r_`P?uxx@psnjf0yuQq18kL$3~wY~HnbaKok@qnkEw9Ntc@z0WPX zUme=DYsap^4WnDO4{qGOnb>y|@yO7Qom;l7-}&m$jve0T(CF^nn>UPX8Qe6ydn7IU z$j>SJt0O~0n?{Fr5AGP*MLu^7tsfkrQU|xMU%!3J@cK=|TZTjG+jni*xMBAWB|JJZ zIDGJp1A`+QHf|W)IJAAk#-T0L!)Qo-cx1f1NGIyk&xm_{AivT^73?IHD{ z^}Dz4-nCV59sIkb7>=FP){>*=t>L+OT=Umf;<{cCM!{y^x8XIrUB;yGGa<@^5=WE_!(C$gu<8U=m{rKlVyWaNjli z9-Gz^I{urP=qsZT*q;~R%dee!`@LgdhH+p{)8r`f^trd+dgm2zezw{9T9}9-=c#Ke zjXNP4a_XCh-e=^CM)}N$0;N;Mr!tW!eo`DwI+jtNLQ*VE=ciy|7Gsy8xw>4(bb3}~ zCB#L?G=p@gpf`z^w+oMtd>cO20%UVp&s=levIn|WW!vnqe|Ox?k<~VWbhDCRQ7VIF zWOw4BEAHadsyuXg4>Ir|gQcsyV{{d=tFqY~TC&{9SsXxx7Cair>)0tfysRhB>DmD3 zcrBXh%h95R$&J6p(i}yQj_mRxdNDoiabMj1Om=0kbn&JNB1@@g#9b7mlfC}V&Ym6$ zRvf^dTaj%;K{wZip03kJP_8qZU1r4!W|!)rdpQ-w`)F&6lUTCZHuPW7@6Dn`P`abs z?gyPGAltwsw;Tte%eIjt!dbm-;}TOm%3y&~I=k$}sHbN|yBR8##80lre6T!i&#aN} zF^qQA#oBlrkgOPbkHO>}FB8CIgwPx^@zsQ%Y#Rlmk-5iOp7#21y7l+@EXmu66nraE za?1K#7(B{Qfj>)uiBPrDX_0XjLr?pX29>5G&=OA^bhf^^=Ikmf??8m(X9-1@ggugCsLU9SswKDrMq8AsdNsLTHzvCb;8r$QAS?& zQVB@jWOh(^^)hv56@EPsh7j^{0n-Pn28>Kbg8VB_K8eJ8J$PzjuFfvga*t@!SWiK?%J0d>nxXX zX}+DlWQ*m}HTAF|KbSByc!qLW4vajEOSj2DyYg+MY1nmVIVF4tb)(WXVNv%5P#?)L z+HfEq%hh~mb~$eI+|NGGpq$rW1QG>EphBF@Q?mTZ#NSHSP7&Mb>cy|L+hB$kf@$Ob z3jTNSe-;0ik>BFiH6l=hBaZT)0`zKVIlEY~{HG{|L6x9PTxg$ly*Yf-PQ5t>i~RL2 zTba$HWTc^n;#qce0#k`PA3)RRUEW43=aCT5P?>onNqGh2?v%Vnh4r5wFGnA({1eq~ zx!*|6Fcs5JvKYhdkfyQ_>pX=YqOsdWiRfA&mopsORa8hQbd%+2T>dHQbw5SDPP780 zI`vMv5nm6lFgR;p`T=-l)a9r)zVwe}9gdeUT!*?qcG)Vo3d<@ibPUcq>?$B)LuGSW zW;NYA&F}E4>~fz`Wp*q1f-;i@^2I48sb5o@IW{;BAr)Vn&n|b}wB?8+?(RZ2@*wBB zyF0V(@q6s3(y8P3XbTRCxE0TJWZQG?-B#0d(J0fcMwSF=HD6j~b%tzeu7NyIlSVCntF%1d{dvot|lKdaI^W zo{cccEjBgUUcPAd=v$r?rc^d~pWx~l`<~NxraK)nl@Ue6JKF7jG+~$Lv#AGeeX^;P zlfv@Cq{=JpV63#kKE2#-0+myALV%Mm4qX+xB}q-^AX0= z7tI}$oLQDQ$b>|mXAG4Q6?Xc(zEclYiP$GucdMa_+!4ut;tM|UPe1IWcehD1)sBHz z1~on_>pLL24Gz=N5;R+2U#xBo)8b5%1!qnLS}0vhnS{uNIfs^_(=dw;WS^1lVdXjl z5#1V<(OxkiPXL_cD3w)WUy*B72_0;SaI>mvAF(-Z&t=#2nn!Arw{v;iKq2&lfcJLx zE@Ra2S__jgI&u`Sz_?u=S2oEWgpU&yYqUcr4y=eT@J zJ2w2kqLM3G+0{mRPx5jCTup#$32;3DZY03X1h|y|cN5@V0(_JJ^9i8&nfB`?Q@X)P zIf|$6>O3&niS?$;WzLOJD02nF_~MY68tW*HPD>qiYt#iEs|#=+mT!M1)%IA=N76GM zY95*z zAgTemaMc$s6zm*F=PUsp%z4OUsmPxYx#%ZZ zweMB?UbC(7Zr$4(c#RVt0jxw|Cl3#lkoX0ZlLbAnA8)<}2@IZ|v|Dm!{Zm#6SD?iPFZZP`- z1d{7t_;N!LYCc=^3<)eqXRfnT9}nUI2%^TGaG7J%+B@Ox83xy6=GF5 zZmwyI=V`TNTl#*na>%mr2g*RTC+o*kCnT1ui~J)Moi?wblC*yr2Sx_6km>z8FSegQ z-)%4HW%?ir!eg+>GfBDE3La)@GV&#aI5SdW4 z{o11P?+S>fSRm14f>wL1KAn3un=h72viRDHxlKcUH%}mBqNNH zl&g~D-HhO`tq*HYw&UkUt6`!wprt`~q4?`FoojvB)Na^%It8zT9$*v@x5Q_R#tEx3C-|BoR+vWQ}TzNmPd=P(@iLZ>a^#sgianYiZCOofX zO&2S(#me8#D)4XX4Mn!Qs} zdWcf64b`#@)v^uM@_ob4!^iP%n_hY03hD1!$NfJ27?`e1&te8zlU=PDphw*=`DqSg z9>HKjk->B#BkK(@?${W1GTObd5(B0c;R4gTGF2BXEH_14r_YPHi9pGPN5=S04U1kd z7f*GlS3+$eY)mxx3zHNRaxz_2x;6b*7-cX}!GhknS(HqrTTxcJ3qj0M>Bd3;_`wyF zgmQ^b$A@L0Qut&x-(wSgV0}_!ix?sQ$1vi`zlxsnGAvEqqecd0QS~v*^>AM$m!@jW zj#wQfm0N?5Wtw3LM`WxL`GGB9{#CZUpLOQ5|5@wG8WmPe<+|o7W+rOLh`d$-#R`0X zg{d9Xu+f4__xfznc(Hj#2GXBO7g>TxP;^bW#Bn!Jm}xzprr<^!e4)sN@pfcy`l3zw zCW)a#82uv_I$Ma(lavbUhZO{lryo$G0Pq=vRoB7tY<3lOTKx!Dn`M5j$fp0|QB_RAMfw19Gj^NGK*Na-eB~3wAvyzAK(?@% zTn@rnsK8oP?^+v;25;of3P3cj{S&OT0$#i)eSe|F0v;w>xd}FAKHc}IqEyC=otk=_ zmT2m+N@NdTQV#J1R0Q=IICox))YQy-)>_yAbdoWP*EnM+l{irAfqRX0r>yWj)BDA@ zDI#++3R4kn;gwgPgCRLgAx5C-D*F&b^38!zof&d^D_jYK;RapW=Sbh)EcHllvjveK z7W)XvW3tS>`)nBR!-qzPOng@Mt;=$$i{2$vsHq|1+y`ZeE2qied6H9Sv3{hnquE9I ztQ=Mbx!F`RjJWB%Btr)HujgR%zBEQ-r>@H)RZCJ3Q6*iQZq5wWkzze$TM0go_-1D-cpQK5sUq(%dMpmD!1dQ5zDJm zR+GO7QK{Th&!xXs$3b}?M5>>4Evsy~RBmeyBozO(HVN*P+vcru&kVH)1K_smRkh+P zmPL)wtW1O^hl|kUzBPCc)IVx{~6y@x@qH3jFZX=Sz}|JPmY8798X1gfqH2 zf!s~R8m(rMkbyOvt;CoP=uWnhS9U6wEVgR~8~aze=J~Jd__VBEr=KzudCQ(*^q(PE{XQbL z9^?0l)q@IHg>FMN#;Hp&pPrqXI-{7UI=Zu(*Y!-Ff-l_%b=)U4b2wK3FoJTBK2BoOp-Y!bz#Y3Mmep>a`P*3VeV z|JJ_K%3!(P2h|8PfXRlsB$wRPya38u>HEIE%``tM_*C@iY^+?uev(ymcjGdPaO7L@ zRG-<9JEebkD_0`#A5axPfEeGiEd9V&$`2T`u*${K9}$+X*k(jd zr9VQVWwltIPim0_gY-jbS~ETw$aY!!e<&uEdh>OsHl#YVVnTEP^(U8nEo*<6dmbVD z)N!g*1fYe8;tQsUxM?1JOnl%4O(Ld6hJoVLV%}G9;sK027$KO+y+ZV%l5GIbYjDvy zdpRs7T5Iag3xm%Xy1aco2S{KQ6B&d>Lz8haHLZj}4*6LnFr!f-1MjI$ZJ?L$^=Te| zPUCnX1>e3#v|o%Y#7Bhq$cOkylEdu7~Il2SW&lzxdiYdvg#Eef}7cj-;N7n~ozo)JjtNZxN$(R`mOr0@z@OQ@I@g+Mp z`m6hBKz!OdVrEE7Ve14@o3>edY!KX|ojza*on6*bochRQQ-~da^q;Lk*kd^awCNQ0>Q^@9QQVQr}bAtsqhE=7yk z<{{D4lh#)YHl}*Xz(qi1l2~OVb%nDw4jNZ8ajo99ZXE{4qSVJ@*jAtVc$&IK7%wGx z^wAdd1vr6_uuLU;<~E-W+O0`tG>6g9^|>&UTr}CO3H52(imjd|PLD-{IPqIO$}RdnCNou4 zM>XW>GKnW1bmGrEd6UIyHRp>#_fEXU)hd4hU0pznB5h4QO`VIU&iMq*B*Ce3J`mI< z^=3n}i3-Ez=ATu%I#o+g109bUUf#4Td7Wg*X$FTGDVHy*n^?j`(Rhxf|Cc@Qg zz>`hU!G1>Kc`Xp=Bbsrs@Lx>@HPUomz6UY)00hK4Kzt>vO?U~-4Nx+%uALBq6}Gw~ z0o7|fHL%7r)O3chVos)X*cc7`YMTxJM=6J4Eu-zCqX~ymJ(@aNchr8xg~YLP!4hgt zXmB^v-6YzKiI8ttj{3ILa?~1}uIPj9rFF!-sC%=$Lnv_wC*`PDzqFvUUXKq=td$E1 z%KDN})uSye44F>0PFm4qH`zY9u&}NryZo`W!BuV4^)y04Hj1j+CeSL;a$@Q)p6#hl z3Nxhzgl6yZJ^5q44tA)Zci=DwKzTkF?A87OILz{V(qM$u(1g;nWVM#2X>3}1PP2rH z&eGCKd&4YK`(>G8-y*#^BW)1dN~A%Mt%q&C>8+_FZxtrngTA^ecT|MR9gDVl+p5p= z;4>zwnOPT_W1kgu)cj2!mcQx4K9KDmRw3o&(iY0ID4E!n&dg{h8)O0Gwd_$7?Miz_ z7W#J<5w%1QFobL=!B--6_MLFx2-67&KG}SieshDp9VEZzLnNOV1knnzvCw?T|m!Fv=c(tIC*Tyw}%~%9X5ExFaE{DXq=kdp-NrR z+xC$)Yf3r;3sH%xVeMh=6>w_IzT^6Gg(}~s2_2gzQsjMd;V&D$r)9v=@50F9`Arf@ zb~yJXXlNwpxhHY;c7m#27p;@3hVOONQ3}^7Z4bsVcNNZd0QGVnR}%XhcgXLuGH0p{7Svn+YQLsP0{eW~Shy znJENMQ*|F|svZz!P1(d-7KdU9RXw7j`B#YYnc(A0;^ScOaWEjJwD2U3De);5$ED!o z(n40M-QcLKYWD)Ja?Rr^*FKhALrQh+*P5x8$1Yf)^tuoy(5vTm0jt?4Zf9q{#xR0se$OyB}=;z1e_=Ao;_Lw5_@ z)8e@=@yyw$G`4ju9{Ljx{Vg5_THv7;&%=r5;T8`gEih-Rl6;o$gbZu1o;#uTQY2e( zP|@6{u9o0bTzOp=JWk~_lHyT~ej15p_p3ux9kMGqWEOR5=$tlLwy0VY>W+Sq>}@F5 zv$@FyU(2*mZQO)lQq%ahu3;04bA8#Eg!EUkYqd&u+Nod&OY*Y}LUOb#Vf4h)9iitQ zO3E1^CR8<6wQ1kUqy?{u(Sya98iUC)<{KMvD-<-!ipyGUoGjbsTJ7Mr?8mGFHio&W zf%{bK5|s%miF;AFbbw1pxI=^+KjH?LcyK8PT5uwd3qKnJJ)W-{WBTop^p4&Bqq?Sn z+EPW(ot#@o+2MLQjm&z;_6FkWX^vIK-RS2gKkY@>^81Ey!|=opku)eO)h9Fb)FnSb zR3H?ZJ{C@XY%wNw(oetaFgTi6h^yPD{QU&SpOx9KcoNq;^tm2GNRCwm32!H257Qi zAsZy@HYf-97ORJqubFNpZ_k9-uw_}J+}=Zm;MI=UAnM7YbR?5`Ra}82uwoD3z4<~( zjOrN2Dh{2{^5uo+M*(dQQGz@9rGFqt)Y9m5!t|W>yRJkp52h}FKg(l@yosx3tDeS( zfehFDrv@`w5UZdpBQE3&DJ#J$Qm`|`cg_#1>KU(Whx!_x5XD&bN`DNHN9a)cVW=hQK9`guPSP5r*4O2~$$Mkp4ePTy1rr@GdFR*7x(!$?6c!h$NYFF{v=SDj!eZ3Vs{{vb-_1GF-r zWtZi^D)O2tx4f>CzR47&>NgJ5uSBsBqal;cQ16VxQpAm=h?`3hx0KXWhqkNY>W5yg zU>m^Id%?1n_K{#sVhF1PHhkIN6OsAQzW0bi`S*q~uhl2T>J!lxzs^%HRVAwPs~!ww zJ5%-Q+-I^~WZ}5}5JyQOB|!?^NPiUxDa@Nb&u2Rk@0dUD12^lw&i!(h9&3>+x5_Yr zA*vm5Hnc_S<206^2UyI$jeIElhnQc=K1+);hU>l)S#ZD*jWwIf^6Bg|>KU<7c1iB_ zTkKEXI!vm3*@u>%f&FX+LW1mTd4$p;4NA+Fl$3NVCL7Io*qWt}jqoS5{>Y!tqIGW{ zMTp3TGM!tQvC1FHK2P?PLtinlA?&DrumD%MgEf%)Tv1J6B04| zpBJ6R)AL5Ykq?-H*i}hkRX9)E<%skmY*c}j>K?9AJZFt(bPQ@en2~&y)7=K=49k7Heg!KZK!(dy=1RJ=&^S zSPQ5&wVy4e(BDLTNNLDX0bMWC>S&Lf(89Udpb)Kk{solp3`Nw8Tdb z#h_lL8^fNj{5|&3pb$V~N^68Ba+|qNt0WH)6Vvz-6a7grlsQ}cwi?{xgwCKv$k2mT*6)p z`?NSQ2-p+xzPqv=zJ1g(Ap+*Nm45|EEkQ@``7BTc^5cJ2=l9eK&#C4T!L-JwepbnF z@30DL8=>fmR&QYj>9K+MVJNw;O$#=7n4*^VZQZ5DSw)hsyeB@^$Pp4t2CfkO)T#YapK z@h^DDS6cDhPDlq7TCG){lsbP~vGSw1^dtY3wqfZ7nhwG71(79GBVpJrg9^|Z z=VaJ5b*yTIPrB7=;%FGg zo<&SNSxq-Y4@pzmd}W9EIgDs+_Ti+t(vNV5jLUOwBANuhtG=qOlJY&Xh;@_7rsUyN zjrk3g#3G`t#f~eZS6cs5k9+tpt$z=#6*Ksl6<2ZUky@BN59})Z)DsFt5xB7<35pAU zD=n~xlPsEp(J}C8p7drgT%Zws+9}DCw}U2e<0|z&u>5&OD)nYou!%Q48H~58xUPlR zycJYf7HIE||H0otSptI9%vLp%RM~ zKe1Rb5{t$8LZU<0S|3Jktbam8D@R$StAnUNtF`%Q(W!`;-}}@jR4V5=Mx&*46%z-? z)7!-4P9s3(yT`t)W`RwnGCe_FQbA)X@UOHA{OJ)vEJ;UM@I7@dMW6FM-1;+=Q+r07 zo(ShN#uIN9ZE2-=hC_(8TK!ZOAr))b>4Q|CZ5sqdJ~pdB##81Ya1R0ogN{cyvy zfCJgptGMC5oZF`j=Oe4SV1)-Nth%ueRJdN|sxt>{@Eb(W@R{_}NdQ3VznN zr)^?nN{*+)4uOEM*D`&hJJ6-+)A96a3tf$;>$uZW?1@f?oy=)=GHqR^eoAMh)aboW zpVRs?S;l~8+BTX7r*6yKI`Syq2@*TawZ4-7ARfSE)rNHcds4k;8b$tvaMS0oT!(2O zBK?)VD=kCT9x?8fcCZWiqY4&%jU-FYW8f8F)WwH;-X@~%>&cSJFamF_khrzgOn0uLL)fvG>$K|-%vr$Tme zK(dz@bP5x(Vutfjlx`Uurm-iCEj4+E@v43bXU~DNjbc)gb(H*Aos`PtLwpPW5}n$a z0gbJhfgWbl5}GPEspxeuJZ$yM^n-6#rhTiLnu8`{e`J~IgTSzEGyO?qQ#M=|+^4jC z)f>-jgVb)b(OaBBC(z$DSN>_S@?%xh%r-Ty^ij)n+-5AHD;rPN9KzI95&YBx=&mz5 zWG41+hWC%v-O;U66dD@RxoWYt+HItAq)LO#NC*KejC#0!EXKqQNSwnQp>+}sI(~#51(|HE2aMdt?2ZfRKyNzPM)RcJF zE+Y>N8<7Qx{m*m|K;3v|T>WZhLdQ8#^()Tk$T}g+H0=S}+IT;U7PVaMJ}AP)FNSN& zjYIOSF3hJK(r(3sAUQh?K6B7g(go?*`&bol+}Ro8%PMVCJ~h=5dYVndAJeGL2(4ea#kxo-@avqs^>JJiZ0A zqMxLh?7(gB@*d^`EitUKnm!ICU~xgxYD2mJ2M=kD6^if2W&!v!1Mr2T9rnQ~9QFyG zJoe90tPi2djy+(G?UQ5M7oBNpNboAfOjAP~2m>*BQs8rF-S8sU%w{^Z7MWD8x(< zGTZdwO*)IJ_r=T#mS$924Ct^84AJ2vh$P)yVj`jdjn?%C?bZ;#OYNO~ zChYZV=o-SzJbicO5fQ4QdFX_1qtD318g5OMUc0C{2bdVzOr~ChZ{&gO`a%2{(`fXJ zpcnCMv-n(-ZJq#G2L>_MBx+`0GvPqYgw)S9`#7P}yl5d-%f!3 z1Q=@TfQbaq&a;KumjL?{Ks&+abT|RDootxn z381ZY!<|llmOKP(Dt->ZYIE)1UQ=j=Mvz20$fOdiwSTk0WK%Nl?1q&0M`=W zdIH=?fSU<$D*O~|dmjUz9M)7us|q^6)UY+LF!%5xFHZFH&I z9$t?LX)IURc@J(^mbzVy8&`wd)unFNxM@GQU0dpQovr-fc73Va4c^%ZZa0>? z-9)b;xZPapc8k|Hg4->)fk1owTDWnWmpH_ku!uYjHhnJQ@7)(JMq+Av19SnhsKd5%p`17zF2G1DK!k+ z&91dUF;UFs0^vQ`7vW*l>ZX2dfxOl9ma*Hc&b_@}>_V8}UG8>VThYMdTH(1_+YWXM z=MQt6D;#KTh(EESwcGp^Bn%Ueidvo-1UJ)|RTw;Dx2E<=6*I2g$K!-pf!bF48e>~C zJ-nK!gw)J??Vem`O7=BDR_&yiNYd;ESFCkW?Akg6E&VJlYCSAz==6IMxB%e`Fmmd~ zM1t>zuqF5r2w8wx6*cxJcnHqH5c%}hB;aF4cMGhE)KX7UnHpd?w#1-WR36Hj%ne9_ zR5U*eW17$w$@LIW*|?QN!pOXxz>J~0L5B1=u8pK%bFT-h)bfM}k*m&3gcRyheN)}k zpYZ5Qf}Br)u>`o5c$?r|mlpVuZ^>FAn0CUc#$Iksr#|_@zOf3P&$Yq=eBh618f6;r&jRQX%#*2eb8qV0+$(3k4Jv;jxZouG0=`LWCiv#wk27p7gjIrf zFc4uXS%esdkY)`b4L+QGNjxt>SW;&&)cH zni)XK;XzYWU{w-=Ny$L%S2^veMa%gNee4UH8W2a7;kiOXq9L&`e^FmSRMOM5xi&63S>pa5@K>Xmxtb z+#H-dxDX-s>Vgws>SQC;I|VRxTAG$`S?_mgO)YX;QnEZN7M5cRiR^DhSR1q=Eb2uF z)pskxD!dh8)!d4(8eD`>jVwh}TM<_JRzyX`Xhm3kAhehGC+%a2+$KdZ7*n{#b13FQ z#Tz1cHn_!esDcI0h6tVwZuRV|r^T}niD$troBPk z%#J>0JXc#hhYqsf*$~0A!Q<=-$=TE0K(TC_wm66attIxTQ{u297zlWXJ5S zc{fDJj=>YD08$;&xQCFg7zr;9@rb&n%SB+CCpkS@aC+1_AS}w(EGgbaS@IlD>)Ldk;T0znbtQ4-CgCDD-Gh4wO^EzvwG{hjQPO_mJlVy)kp zJs6DI6*z)XUq64PDUn05smu>Xz?4dX>JP=3a93@upBYaH0`Ui{0^`ZFTA%07Lt}A$ ztTj*KXF~M~4D%|1J*QHCLeU_eApArN&|1d84p|-EPikSFu*i+-GA;FB53B3C*d+_` z(W2^6TuJo^W&_Dj;C6GWw%sZ>Im%?a_3#hcm*gj12A)I{N1-h(f!tDwT-6kX^V$Z) z38efZeU>2amT52ntkYJQkSrMi@ynH*W!70(5G11ovd`>NjFCzz{%%YBAC7`TqB-29 zofXDZx*-pFFbcuOxB{?6D_Nd06;E9Uv6oVz1_X4D%>mC&v2L-~RXta)f}o$^FW;Cd z;qz>`h(o)r4!RPJUZr_#m?Xd4EZa2us zHRPw(Qjm6|?p9RQmlVBJVO8>i-T;*VR$e)%#vjy->PJQB0bD=D4W}}zQeL$?7ZROo zg8N#&Nkw|-dJ5ezsEsm^6Byw(3@kjzhJ?6)h**~nhIBB*VzUP%g#`8Gptf(XjR>-V%fIP$&yuC<}6k1_@u}v8Ll*W{y&z@S~f*xbT$a?vN-E!trLC zKW)Ya8|z`3dFFb;nOojo)()v3d-e@7^=6ydkV{baX%!%kpbC`N5qiA|0wA!p5pqF! zY9kyO50J(RVghrOZ~lKwH@zuZ=3c{xMTm##VTlvB^epz6I4GhVDM&+zySv)_-Y)Hy zRikOt4f#oO(5xoX9mF3k!BmS=r@b;wO(P_(jqzu# zq`ItIEBdb&OUw&1bKkxX%=Nl`QCXxx>S0m>dOk~ziDTwkd_YTL)py-|wEO0nL0BHp zwh{Q4wVBNg3>1t0w&mw^Tsv(-m5<^XyXUgTXzP%N>3;jJqmrpb>t`IeEIkN)uJmAQ z7Tw^{#BENCBipD6R6aOJ|Dbd)iQsaG=yDQE3Lx#b@MZ2Z7oZESyqYmaFWaPOa;)0p9K3U?Gjw`m&Of9kX%x6!wi_O(`F3+ax6>FE1uJORP9KJkI4jrO& zMTn%p0j$&2kt*$n+;Mwe?UH7TeQHHE5nX%C=xphaIwedYbq1B4Q)t>kbd;9^XdRMp zcuHX+4yh~{QS?%dMK`q?0fOJ)wtn?N>3T`(VHPE1?M*K7{xF&L8B|x?Tg1GMDZ!RM zpsijv!CyiYXC{i&QbIk=DMz^^&a(?71faa*F?LUdN&1c^e&z!(-I4ei4}hr|$}{Jy zeef!C5Oqh+rnl0 zgHJ4M(-gYL~JZCV5%|nM%2z76}l3f>nOUYfg-%HbE zrKWh=y;$bBgf2b)DQ`$(0pPErkB27gSFHSHGH=%E>1A#!{cx$(U*ne1+GVQ>n%g(D zpG?Cvy3kRr6VNRgRz{480*0bi$262DLJ&zKq{>?90RvS-!}lLLKd|-HlIarEIJl}S zocXEc&V{bPR7Fd%&5jOY;^2D(KC0Fu0PKnrg{gATx;w6+)MX9M4CPHfj;FTH0=TmQtG)y_&C)f(Pl(~%7LY75@Z zJSF%l{ucrVtRD?T=S!-1t)~l9EoM7+yl;fLg&`sR3Pg zwSXn6#!0Z8so@AlIzodr8KPPu;i@qjKn+qROdH&=RO-g@bVtkyjRij%zSharWQ-L0 zi79H(ae1#qT{GY)+xu|G3qEAybPW697Dm}a^CQ^Et&M7PGUnW%;F>4|8;-fyR|z^J zs3)PKLf^IK2)>g9lsmmALTCm<8kHI@SWrJS-ckdHay_Fp6l=uVCH~Aocq^`r7(bYp zcG(Z(KMOcE;jY1}a}b4&t1AuXV-(0V!t!Wma)H+3GqtAh=p$BveN9@@+zu{21lB|e z8h6X1_0quf>&YC;Nqcuivs1Uuw}feSrW?Dq2m^uUl2e}dU*SMT(ECS2^5e+_-p~3S!z~~`$f%{IVbTjx!|1i!!ch@Wf`xR_ zx|2#Ds;cY(?W>$>6q zeUHAY9$2jRBT(Xt(1*FaoRKnc@$1M-42N#9>a;Via|w$8&xt)!udNSLy}DxCAXaC~ z<9eHJ)1!kgCz_skt$7=fFs(i!etV56 zA0a0ypaGVp4kJpE3ECp7UZArT>pgM3@JrcG@AaA}Y*B(6h)3RMt6F(^n*V@QZxX%J3g zL()1QIHolcl{}pwz4vAoUUbog7pc^R7f=Ps3s*|2AhDn-3onqG1+9>pMWjY*7OBKy zRQmg$d*AceezY4lNPQl^d*8X==bn4+xnJi>*B#H603}DJ2QSj86}oG`jh(AzxN+Id zmy{#vR^pw?fzg~cf=6r*fU)oBkYXFI1xH1M^1!Xk4je|2d5a8sAd76tBGWsJu4jI= zgM=0sX)i)Ky2^L}ZpgeD{~FwDdd)(#?0w7LZmK}#YWdI{Ew?PWIc3Gi$jw7Et1O5M zCA8o56{~qb#&xt*HL3UzKm6juOarM5nt!vLVAJ5!rsy)-zUv6lui!^&PvzLO`oyEu zM|4MLzBp?E(30`n)!{7mU5=~#=;busXsPpwN%t66FBXQRj<6he@ly*>nVF$)5pN5S zqqt+>%9UUuj3;zodQUmJ4GJ<$I@hr<9s{qV5Q6JOIkSD)x{ve~#^cI^rRXqW*X)1^ zGliK6%bPRxJ?6hpOB7mHKnnkHq&{BmY9A3QLbc|$_XhpT)P{Qz(404!WwJ9shE*rk65hqBZi*|# z>^ui2NyQqwIb?3Q(T*Q0zvV|lO}x8*i&Wq>tKI`ykt1h1$vm6+#RFBc^!x7oN)T2tU;Ya8(Cht_R!InW5}mkuI-Ti85Z9tkIT1b_dr^ENTH#lfwfXX@SWaVP;Dnj+VWAjH`|rIvlAjQS%Bc z_Kdpo9yi|Rz!K{`TzDtiNB%Ai$Wtj)e8SUap4t;OaRWyTzex-wa!;eu2h~1=S z2CbekV{0IkcKCf>l+J>?kQAadjcnK-3|;e}cbEq#U2 zf`ejbwb(Uc&pW9KL`M#{f&>*!9<6hvn}+`RLQMc<$jNCqFg&%5^_tY!l+<`^JylzS zPWuF7h>_0C5Oz$XJ;Z6Tj_5Q$VkB4e99+c z29}oPEet$q4ldFq+86_Gp}@zsgsIq;q?IabdJHig%Tc{V%OXiuVpHiNJ_G>tfA}o- zoF%P(M2B)b>G=!CCc#9h)PsBW(_tX%^ftE*vr znO6B5{xX!jF%Sd3~e-W&oqx>P?fD{7P|Fv>;#Nz`WjL7C{U5zLQz2 zQ>HBhW*!YsMxhIw8x)A5Ywm_zrpPzCRcs5UHbd-84_zELhdTO>$9+|UM;la2O8G82 zO)$gxkL-F+RRYw;9+rO}02sHh~Prhn7qsOa{Cg}!pUM0R-70(3&O{ZSWA z2LT1s&0VqNj85R}RQ{#KY*9KMcLJRRJ_&Y|ARgx)0Z&(u6J1u!R!3ckS!8~V9R(WU zGBfPnsqO~)_iY8;SyY62M?}IS&}mxpLK1WtFH7F8?GkYVku=GQ6u!E<%kgb~eCvh> zjn2C9P4ihP$2X9SR8VI^tj-aOhMMt;Mh@``GjOc2FjiXb+*^2vQiGHN@FG@24R%!s zFW$?<32LhP2Otg*Ur}Ym8dNB&V~-X3e8$4~V^`Q7vIqhyLTVU)nql06l;c%ze$o#n zs4&BxRb2cDwP-Ve1VVg(uM#7>b>dZiv}gYT?HCuKy9Gr>>W_oiov#!Im;mAF2WUC5 z#hqS#A_d4RorOMRv$(<-26NSBDt^m)x(!whP~i*A86)q_TwqR~w9OP@ ztVjc*Cb5c^6RMXfI%YRvRQj(!q9%xp(5uY~K#Yfp5z|W*OAne?&57b>nRA4s+>uA- z7kX5Ago>9rJ_k*(rql^JbSud;Zv`|&%qbb2&00GGU}RK05>Vb8BA8dDX-qXD~|~joor_ATc2qt@)L-QX8c{hCBN#CpI3VR2ryR7p6OM zB;koeXo*&BAsME*qC|H)Ji!{-_@k`(S_j5lO;{h)jE(&f6IG$MZU_6E13v?od zPNY!UW;~Wc$9AcM>=PMP+W7(-!IDZ(g}&-tdOj^7h;aC+64Xm-P9hm*;3J7VnRILL zm?~&8X%MTY-4vJdR#03__L*cx6gONThQVniN<$gy`^wE;YLYi0BnL|3$4UGzS)iGs z=!lx*c&}}$l1T*mC5y%u6I7OdOURGFlCjF*i3MkYdmo8>&dTDP3d8tbq!_y4`LH zvK~TBNmnAy2vn&@$`{&N;8!^97b>;PzcEyPOtbQy?=&wbMkVd2Ws@Q`)|A+YqbRWf zQ>7BV;~JVRc!tJeE@NKk8ARCE#Zk()w@>L_1Rn(2T21s4Gsu9ijnoqS*C87n8 zXr`)fS!|AT@`&odVh<@{Rqnrin@r?E3kIVX3_la-{gUG_#_ zR-VOeETq9znno_>9*W$r@c@VJmA<`qtZOu8Yxo=@F(8 z82%_y2@K+CsC84bqA@uCq~WFtOx4nV^K8+U)uT)L&k_=eK;p`t@9vtx3k+!>XpJkB zDo$<5o0T96MP6)QuWCaAjPn1nMQ7CKH5UO$_pH(UeDyBEd_1Yh6sas0dOOgxVrmJ> z4O8naY?`12DNEEgW{N1JnH6i7qzr$R%*|4&$bgOnz1}L7vsuM8g1w~SxM>4Lb@018 z+B_IGwkracCF2L3MM$XaqT1;J?kkj}dd7_-SnScxEhtVi5k_^l?C4=~8&c7sLzX3ND3!Dx z=kS$Z`6Q-(O4KXLP(IY@(C4*qZ=qGD7tY0u0v{Pvv?+$#vhJz^1=K1mjR3&nTA4_B z7vjV^nAT6$0r2!_4s3T0Y&ZwDF9-J20LT~lxk9hY(0v3*0=Es3K0Z!+@rgLBya$vJLFpimT z%KSSyu=yO=r5sq418e5M7II*}&ViwjYeW9%2tD0GFB}+O`?#DFo&(}*9yl1j_VHeh z?<+a5sR`cN4ZP{WDyEtTXu0l^)e;U3y|3M|JKLb2_ zm@wv&_1Ylo2K^lsmY^$6m2qXKRKOt;H;1iX#S|~ERIt!lm;+(<{D)(iN_l?eP41}-*ac3v^4>8#jR3O4d{-SeLiiYVp$HB&6FaT9ls(F;_7jNDH`n)b*$13h!h4>Y;xVt^G*GA0YE^%1+!l4LO`a+JNX z%ZWQO(jK&QjXqR1t z&C`^t%5E%X1oU&?%%-dEHNs#>N|A47#WihSLINoL3>51^Xxaqcos#Q}N~~FUib+X9 zX}TqQyPQo_twm*-`@DHzr(ex6qVniqz)T$=BTMR1{pjE1Y-d;gv8hTB5Um=i^5&e? zz@^Il3@eZ{-6$Lx2Qc*aPOo+onINjn^N2V~sC4Jn49#B{D#@X@ipafH7t*;%4vU0p zgCZdlSh+RmeQ6)A|70r;^~30|F4tdWZ%A0%!yYUo!uP4`_cd))+Z)!N)Q8<^S=-yw zJ3#AvvZq`>0Z`4_HqJ8>Ai~!*rbIhc8el^flvh6k!p!U?uKG*(s=w0a@ue=N&fj#K zQr;|*e*GMIFz+n z9f1Ae_q8F6N+2XFpYF^ERp|HFTS^Q;P_QjR3*58v%YVEoo4%jtf9d45U}8Y9O*v$E#PMw;q9zJ^fX!YRts>csk zU!HosI(csT%*i9ulS3CKPvSl3JGD)QJwvh&_>T?7K<4kYgXd>Prl${|ICCyId-2ry znW?Fv$?0kH|K%fu@7)me8~oW}h3N}|`Spe92!!k59Ju@);(vU8TQG5tzT7i$&ps^2 zgQLM~yq^zV#`a=xB=|AkFY7_KLPUc~)GFpIzQe7WaJ*L5Q8AWyUSIs^QToR}8P&oJe7 zfBS-y!a*<=R0w;J_|Eb-Md(>l34$TY^?Yy)k~qQlMO@AjVmf#m$P8a6f=S*p!S{n- zSgN!36$B3xTN>X5%k$gBbi(5H84mUZ%yDLU93kYz;FQI3VO`lK$;~t+I!VCcfUYqM zbKFw9*oKEE$nkLYACN{j{)I`GvvcHOx-BPbaSu_FY5s!X=fNOhMv40k^DV4gpv1!J z8^LK}3Jg>0VFSUVKnKCg6Xako?>*l3Ltw(vKHldEeSlcb60>S~h!P9udLARy_H!Iwkf5% literal 0 HcmV?d00001 diff --git a/AstroNet/bin/Release/Astro_Renewed.exe b/AstroNet/bin/Release/Astro_Renewed.exe new file mode 100644 index 0000000000000000000000000000000000000000..e07cf787a0969994133754851d388ca9f689b3b4 GIT binary patch literal 68096 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 literal 0 HcmV?d00001 diff --git a/AstroNet/bin/Release/Astro_Renewed.exe.config b/AstroNet/bin/Release/Astro_Renewed.exe.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/AstroNet/bin/Release/Astro_Renewed.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AstroNet/bin/Release/Astro_Renewed.pdb b/AstroNet/bin/Release/Astro_Renewed.pdb new file mode 100644 index 0000000000000000000000000000000000000000..6bca634289493be659792a58b1fcb16a8da1ba19 GIT binary patch literal 171520 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�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%0Dn+1&nY?yv$u z8)_WW7R?=CXeihb@k~=Bihy{!Z*H%-L^$eot@>pjN##!~F;h$G7^ynZA`e-ja5N94 zt2(I$ok^WjU1ar0jG#-{S$UHDcGxWeEp1f7-Pzn8%9+jWizPjn%^jk=+1yUkTJ5C- zFq$Klg)f08adn?a{AWrksa!tHh|V(DibaZpx9Kby*G#(E94GA4&UQ5bE?S<&jICa% za>uJ%y{#sQ8`O|u{%_R-`M=HP>RbTTJ9!-6>h1B==+v!fF*DEt=05v-YXf3Nxuj?|?~+oYtX3`NnYYVoE@#!DhGd=b0<+1yrwh2(8dVZEgbL2{|I$~*qc-vy0G_0 z*`#ixP!R&U8kg5=j+HUN)45A1t|12wnXecf9f0g8^4w*p_YzrShVH&h79cd;cl2iK z(8jmrG=k3LRdoM~bI;pfk-dz^}6h8fJ2^ zqyZop3ouMCLKi+8W__+BkhYvEldMiR?d+GHeSt2)rNUzQZlxH$u$``@h)1yX_8dhz z!xhtP?jk=%&;b6Lh4NQ+%Y`i0ofd9-lg9+ zW+wl+W6$uiG^2u|!DJu;RN#sP4pP+7SlIMrtIuOqsN4P zo9UPtr^_U(M(^yLtZb%y+ig*LRz+lhcDU#8U|d+TwZ4(wkrrv`4xOm6+%wQU#Uf(n`qM>w5=vj(nUD zL^)^WOP6*8dzxpFOBB#rDP5YDbfER=VZH9Bu|ZINR5rTwC<%;@mV~!fH>DkDgMS-P z2~~7kuUgqr$*hVKgn{GU}Av_w?= zSpiussl$w{w2kouOpsxzLg=B+&N6^r-Xw(rCCKAMw{u;#@}xl&@m_^g(TZ2~K5~gC z-2DU2V^Wl}4G78@_>z>+X=8)iIK;W4zG;{Oc$cJupvFR<5N;JoqscxXCdvsex@h{N z089b%s{sH-t4VCq)4OB3c26)=PK*tH(YflKP`rG3^Ps-Uwv`ogOhsGTBUA6~!YO&t zmuIML!n7B^HLB1hQL{%4)L#>}*@>1TQZY}XZ~Dmo-7!#a1>#G0(> zZ%H{U#c4(cIxvh$ss+78-nlczxMV11otuJmDPv%QJN25n@pVtYBRaRT`NP@#Og6u} z$3u2$Dy976D5Vvmb1S?wTYrOv7E8WY`vc66XY=E}X!Gj*-LafJPt*V&0O zW+w%r4_xEPzZIfaCz~hx60_+&Ve||cf-@awT$E|J~Sa@wI zX{%y>dP@nMNM>AoX5lLBG`NAz*dXb2{Drz@!c$B(1|kbT`CZi9u(S_0GQq5LQBxC!ZXpl8tujnuCltr? zagOV%UMji*(emQ=&fXAizG6qScracOu7(i)%yCeQ`DXcH?jp}$wN|j$B-Nj~hb<%8 zmh6;S%M73U=HBH+d{aH*LI10V)F}{&?-37p4CADJE}OqTRoR5ejt-5J&0jz}Wx&n8 z{=`3B+Rs+B0EK$1=a}ux(6USW`y+}3tihM|(-|UF)Q>3F^f3P9fNt^8Vlc?nO=9N| z2?98LPy-#LK0Kl9R*YN;LZHDa`b@AIXIHCgR5+L5=oY)1ze)%xEk#!Im-NyX2pYk| zsPo+*A3?I97xAHNN|G;FIBvJ0WMlO=MLs-=&j8I|9?u%jaJ7(^ioXL-{z6Ib6ps6c zQF%+-P}$Oy-7(z#m)LEb>LjdDOiJ2!%|7=-$|QQw$cMC zzG(^aeU*%x>I_Y`%(tXf{M5%Sd3TgrMVu6XwgGdM-%eh2ilnc@TH*%aTRe3 zl4G<7XpwtsLvbaw$U?(1^A_}>f9UP#Y&|z4C_iqHF_AH7QST%)f026uS@TzT+9GY{ zsQa?U`=sR@C!$_xMer?+*PNQB@m$t;UMK~6ZlpGeD)jl0wAltH(x&8$W2QI8M|0l3 zXh4aYOSF^On#>w6Fpe4@QIN(99Hwags@E|7YL!Hr-yju@DF4x#achFcJ1LE|8?+*J zyqK`JtTzxfM?vz;ShPHzk8mi!qZX&|&~gPT)7LX_Q3$@j!&(~dBMM{CTRSf5^DR=C z`%kfKp2SH||CJW_10@=9L%tbRNhFeV=~TM3?2tXPJf&yQ4Ww@46G)HMA<0K$L)t`o zg66bpo{%@1PK}Qaoyu}TicdLtaRBvgmLKrWQ-);mu+bw&Mv%|F*J+vp<75En11tuvmq;0-1@ z2P@$fybN*0%&Y88uq}5@8cb9e!gV<-bzWP%~m5Q-CEdbk^nmm9wz!ed);hS|j>J<)mOL=D>F@VJS&U`*v_+I>&p+51@7oJw&kb-@hVX#6M(gd^JjPoh}JXLoU zQCzqc5WZ9IDvI`;W#7Y&pK3Cs*Wdd9{%aB%e&)4BMb#zL;8xSf>E8u5h>y=`L{fK) zp@Z;}nu1fKu;+qpH1@?R z2ySi_5{{V~hw*#!CIOcA74Cycd!SXq(gkwP=35eH^bH|R2BLZ@AhA&q8t;L>@$D;` z^dJ4wfuDF{`u2Q%CE1!J<$97VCrPr=Vc`DkOD{f`lu;7!|Gnh&)s_U56^A-TmR?lfA)!g{K#j&c=&t2d*OS- zuUFpq?ecFAp8UWEU-$Xe;Ym1L+&Wf*Ew7P8C~ z$bD!T6&dL3k}^BINqLiuVHulcjL6s`qb4Jj@dyUVxxFR##ghBkk~>^-uasP?% z{%*;gExG@?yi*1dSj z9s2w3kFU7uC*0%}SI4~TI_KTWdtHKAanJvfoA^ujPcVPa{hKlOXTRot67zT5zaDdc z`fKhdFn@=(8Q?}?;wtDc`79Toz)IXO7s2?#MN*zr$+yecC1Xa$Q5kg^YcdkRapp3GN4Kk`S24xJ%*d$|E#%38KGTxRzKYS^%G*Bv+Hk3A&I2%+N zEDe=5vCOTNCQG|Y_0n)@b7`cMmNLF;Hd=bL^jPWf(pc$<(vzj9O5>%8($l54m7Xd6 zaOuU;$IE;WozJ2r>ce`2AS&Iqa9f=o`R4WdBEfpwHm7 zm;WB=#;ITenSAei-%HA4O4ya$F5Yrh+M_ZamGPL2$7MVr<4GA$$rzV0A>(No&&YVY zjCaV`D&w6p-X&v7#E%D69suESs`@G)Z!EFm<;q>NoM>KIt%)yK|! zvHTlfJMp{a-+J-we_a0Qt5^S3`MF>JpW5Z;wqM^{{`J3q?`ru^#yc!1$bb?54Cpzg|bx1sJf)?KCUs&zM5 zcSCizsqTjBZgbs@)ZLc4tJPU>AaA-y>Ta~|9<95_>hAHn8>_n~>h8(9d#din>kgt| z7!B~b!jjv-w~|VZPZw58Zm{HrN^Voh4Kv8}EhjhNT-mt|9Q5J2Kc*t*hMePjPs7e_ zW@FsBEs*(uD-o#d2Fk8n=5W7rH8)Um<(k`2a~o@}QgiHU4b~jn{F`cSxaKz3_)?eK zQggMMOWE?OxkqYlwB{bIxyNem@fzQLeAF@se2@KqbZ`4dn|R2r+k3UJ(0R6Q}nPu)9G zw>5R|Ox?Ru_wLk9rS3hcdp33NP2INCy)Sj|Pu&lsZhPvUOWg-j_rcUnr|$XGeJFJw zPTh{wy^y*eOx<5e-Oki~By~TOx*ty6uGGDlx{s#rW2xJnx{s&sM^g8R)a^;#CsX&M zsryvw_NMOBsryXoek^q}sr&KNeKvJ3rEXv9K9{N=e=UW&2O#Vc#)e%0_ncr5`DMqO_;<$QfUU=wBF}PBhPCm$h{6NAeoh}mH z4)VF=g`^sD8uoxsKVYAew;$O6KJwdNvMj&C7rDPcIS#?HK1QCO#Qp#U-H!Pm4Dx(Z zn@M&jA0?mdb7`NSP#^ zKXgYE_tS|xkhphp9`~X9HXmbr=pKFOjwkNjNCXev5QQNm_{2StxF-|$RN^KQ_h{mt zN!;5L_m0H<-NgM@i940J|2%QaiTf`TcRF$3NZj8{+^dQEFB12wiTlqI_sfYp$t?WP zeL8VJlDIvI`%&bf#C;}lKbE+e#C;-hpG@4R68E1XgFJL8V#q_6C2llvUrpS9lDNN- zxUVJd2GYty_npN3YbLmd?te_&PbKbF;=Yx*mlL;?xUW;xhwf(+cQA49O5DT5{bk}F zBA#aekO5$HF3{UyNB+JiThIG4kd2xuh~#QjR*{!QXOo4A(}w=Z#@OWaQ+?k5xX&?l%+n$V2yqr1ZV|-+6zj-g@a5zkclHFTek#m%nuU zYp)#p#rMy={IxH?^7XI3^7CK$dV%cWUOaZ}Yp;Cq__3F_O@8_7U;6p49eL%8+a`bF z<*zCHN2cGuUH`XDe(d;>W5>Vt@<+b%^6_I|`@)fJlQYM^c;uBYed^_3-1qZ8_wrXh z^2HB-_zTZ}>G=;m_reFKU*5jsg-1*KT`cO+Y{%aK zf4sky)$ei+MhEiHz1g<~u*dkY?hY+}*k@kcJ+Lv|24Y-+&l1u;{W!1UQ`wrA!}1b8VMnxdW_`&?k8K+*+=!AnsAPCq%<^wN5b8Flc2&?B zp!}?ib284$xPZ~P<|FVjS%{fmR(P5+ZKybn?Le(R0-V>UjX`>b^k}iH5Wc@Xa#@4t>rxmRh4KnA&K4k)FGJkIAuJ^#T9{8XD+XoAfZ>@;*QQ3{F+H@*v1wJ&Ssz9k}vjfyBhq`mJ zJ~RSV=k0jk?p(A~HBT$}Ss7u|nHHKrD@$94I5AtBcBeKe1G(cvGN$ExjTC86rl243IN|r1EWD(rQ)qA zj3#_0vwT30!%?y({hl`ODWtY!EToL)eekVe88sPuz%@qQ#*K0ulW_`6>x7JxGU_r~ zGCDH4G9ZDpbpeRaHv?T$E*eh-adm~EJDX&b<@Ml?;?f7?*;)XKYU-b~dms|5o%0H$ zrt^~OQ?GtDD5oas@%-0SiaQt$IorcxUHX!rS*m9Hh>T;Q7;TE4wyi%YR0GOM+g77q?l~D}LT=p)5jYPz zCsf)sa-q8HAy~7p>l4`uC_>B{(W$JfM4H_tL&Gcck3uN~RZ3@fx{aIVw-uvdMYcBb zm&N6=SH^A`v_m#4{yTd^#vP2d)#{8|+xMqk54)yz*Xu!cSv@)$XSre?9rn0EbTss2 zMs(Qq@#xTt5XSJ7nmx&(DkziI^%#b8Bn!Lx9lK+g=Iw}X=rxSOp+`4j7(QGQQp{%} z#8udcyBDF>-WXkFYDI^=&rvw^Fohgq&zyak-P7k-tVTy`CTm}c4*$GR$ZqbO(5kDw zyA<>0NN5bOy?`zjK{?lUzTXkaWp*mi&8$fk&;o~XNXRI_5;ABS&b=ADk?z8!z>|4H z)&_ZdHI{UC4;6|j27s&9#oRHwM^rI`u{hkLMW%CJkCe}W7*`ZNE2F(8=(>!u3|LY+ zTbFT6&NCRT%Q7w%#XeL(hou4U-I!GbQF{BDppGCLBhjaIEzos%W#G z3Nc?de?nwdEZiOn1USN79=SD*&Q&q$-xXy0b;`gl?g%rfJ*{>36QGB&t;Btj80lszt4xgbX21 z$0*AYFp(BMv$P|`TAEfu=Ve^9^273xU8pJ(nTmB6 zV}7TM!*Xgi>D;dGRMnhUdv>%$QIpM=eJzSWx_uO~RBD|E3S=R73975PIMTQ= zo$ts{-V2vilZ9)cWBf@&c~VUj34*KxT1w!8jGKxj+`kT$}vyjviXY|RsPhNoGS1Fxuy#Q&z24P0@bipgF!_j{E?aMX^0Q$Ze1n<`doSsu4!tjSRQ z8^bcjW$cu(7o#~UV>dBu3EotqO~q|ql5rBFr39KcWUR`W#IpG1n$m0SlW{=CAsN&< zYn{XJYb~0#QO4z0R=9FY$R>1LEtR2l6Qg@rUBUpC8YJr;lR;auG{$Hjrj%XZ5_V{W zu>O1peWl~!TDgR78_|IfOG@O|y-bm9j^`zEL2y`3WkzIMrRkdR5FU>e{T8po%JXLG z6YvjrnJ~W&V@rZ{7?b|jVNB{@kI`~rJw_7!dW;1Abr>xZcE1I)YaPZ!`*j$T@7G~$ zO|uSTPsgpp*y?5-#-3w)3+6&-OP(u>t*RwFayCZ$4n}=N?RY2p@@NUtv1n{o)3?z! z&$$GM^DOECPIMV$zQ}aygXiJLoT;}M8Z1kGc1C`il55NY;nK{REloxzS9^&Kv2mAD z$!Lx}Ck;ero5F36;X0=&*V0ZIyJYN^K_${9MoYRhBM!QBLEwI|05J#7r){j2xRT4} zFJ}RG`hug3oG4GX4NaCYv-(}WsxY}Rg2=Cv{s7^41jcmCkL%U4#?o!W#2X~y4!b}> zQnIV)#bpnYHh02hj`7V6gb}KSH8##kmV`qs++5zKH_p;+-1%jbZyPv{xR{BHKpAKL zN=ihruB;ZkXF|EIK@HaFXH1P2L-WTR_X^^SpO! zgSA1OF@)cm)zZdrc64Ae*<|fd|w62-UgQ1D*D+Sb2g4?a;nB;KRl2|2js0~0s)o*N0 z${Ec6oNtwC!V7ox*SUkr*$V+^Sq9ni(Yfs#g9TLGq-MF1)vuALU>^JduHWF610I)X zXPWRXig^yx0C5cZ3ZG3Wu|K?F(qV~WCN^;6?TS-4bER)83|4wL$lc?6T3IpiMG{Wo(8R5sL{tfXNkhVsY(Z1J5Iq@0JbFESJQnPz7@2!YAj? zMK&4%YKZ#?)au36L62u1HmCA*`YhQ1e`WqQ@;6MM>DZslKT(rVNOEzO7gs`wIzkCR z>Cy+qQh7k4IJyF%%L-p5tAE$r_3w&^>`f|SBs|z%4aEyKhqxwnL_HRi68|M5iVhs1 zGu#kgF)LYt-x#c@H}7xR;B8ME&?E#U+Ayf9sQIX(4$w4wUNzxMQ)7a%MCVs?>4KuI zYI0i+GvBF71dELq!%cbI6ppMlDF>E04AnkrC|G6~2Kf#1+#21@YjWpTqMKX%xSQ7) z2xK+Ij|xJv`ILx+Q>P@Q;&0=F8kY;`%8=nWW!${n1Fv}hu_7eUl}#3skps35hWhEX z)>d+(@*_^U=>qhcvS*QWKm}5)*#m@B0ft36yj|AfW3HDx?xNM@;wHXLR2!+$M75DB z(W*5Hu5@&4*3v-*kWW|w2GL|&pmOR48V7(iTmFn$ygR``psaDNhKK%!Igm9Hb0~8~ zXaxEOLu_TkE*GayDI@Phb0-Ce&%+C1!0y`qGD*}8i%)+2z=bMXUZ-8YFT?9YMaZ2StGs&A{04n^+zNX+4m})Y!NMbqG zW4UUfxu*TVs@j|qEw%}Hi?mZ%zK5X*evN~g1PsGF3u+d+uW@&rkqgxb7#~WQ6Ac>Q zlx&RP_;A7@Q;!}eOb9(e7?F9_9EZZy^bw}%<<+>7H7BWw!8}P2Vck9yZ0*4(Znh4F zYWVUi6)uvlapu)hoE~vjVWBB2-%vGgiZ2KTQjA)$$;Sq)FLn%fw2fs z0UvlW0z4?_F}l)f>FkKWt_bV~uy(f)(583804#<+nB@UDfKTI~LKyqo&48kx4)Oz{ ztpqWa0}cn_sZ$*}*?&YmuzH$oD8USppL`eVBV2WNIGaLiMYafU}^P~E*sqrI& zaBQ(y@q?$Nm2eX*dirEGi+>qP>4@=CUd_~IgW3#F7s>~(NjxoF;2x1A-j4t`(u<-* z)1EUh;jvyS0TV21C1{8SIYvxt5CKY51r4wgRn>YaH^gYdp=T3>q4CFjEs)m=gTBwXVSlDxm+v;G8msD-yEMZ z<|Kga@PcD-p{O}k3uB$&-rGt!Lx0$C19_8*4%%>wj+9${s>?-uY>?qWOX4z0mP>tx zJS0jkJc(wc-SY>N#UR$rjccGrIoK`L4o%a%CNy^>XVe&yn*cW(Xg=lvsaj|j7jc?m zalm(gH82LoIR*e!@ag}tYQ@Zsl^=AeX{66wK&5(BdQp0T!jn#}Thir88ch7r%NF)FSK#M_1vok%OQ z9lXpTypNA`+xh29JcCk7!*`f2~&J8W7e>e2W#o&`RE6Z7Z<9Z3{O+kx$pwwPAE> z+NZyHjaUG(j{%Galf`v1s6R7v_{;#;Wft8&GuAok<sF!m!M;4a z!}1W=pGV=gJlY4>3Ja9d{iy>*#IXUHtS z7pfls#)x6aHNWSlZ{H)6bi@?D3T#Lsk8vumyMP43^ncx>+XpQa-C#Ct7VN6U%I}$z zVj^v60OHj9VTvqUEE!T`0W9EX1Xcn-(SnzeqYnc)s)QoP5S;^z0b>9O(y=~p0Ibh_ zn1In*z{0FVzU~T5Z2!o1K!+#S3j{uEGST6S?ZR~SdMj<>mD!|4H zbtg|R2Hvn{YIruhOAgM&#woI))u9ml)Q%2Yq97`u#%>|1!LHz;3}mZSk!%rGEY+;B zlSBw7osCTa(>}{-bL_RWl3cuvDd%w47P$@}s1VM2k)J%LL*El*1+7`zIFh|z(X{`_wi5Ut5 zuo@MXrOa%gl<6t}Q{fRZ(A;GX;aY)C#d6SICslDmm_;r9ya;_;$m=0HOKyF32~vM zUuf2b`7!f5!OF}4N@ac5pj%G~Lwy>{23({F0-6{21xy1Ks0loj#TQBnrIS{R{SvW7 zXw5xFXw5yKd2MzNKS9tC5}VP2L7=rd@o0silaS9O48uVKM3Trf=0FDC9PnNoHsO%) z5`{IBDX!pHjJv)VcU7jg2!gMasHn1_G#j*O^R8^Hs#u8G+V(J@8jFo$7EhH_C0~j9 z9dm$E27H29=`38;MuY4s>Ra|QFsfSJ;^D2TXffptE*`!@o#ZVctgVkx1<-7jk1Mz= z%AK|AW}yy}3q7q_Y;(zV5*3Ws!LVlXD7q=2Sg8~+3nTA+xew*JUVfv8YN=q5+tD5> zU-c1Jd#Fa)Pz^SrV(yLUK6tnH_7)1qB2?gIi$4D1aL;F9tq;D_gBKG^i>FzNL|T4M zYgKzFy&X@noA(P8hxmmGR@S^w_++h73)~v*LowiDO`32)rPWtBDL0}wOBLPCw?#eo z^RQ^xt-vvc-9;p@94y7qIq9AFP4LwmXN!7+Sl&1dD?ui=-YGArlnTd5HU zK+oIIX?D_PCt%1%L+32NfH@nd#AzXz5~l;AdEX;Ac8Q0tP8?G?W1-XUI2#9;d`P`x zgtAP9ML&CFVOoepT<6` z!I;l<%!k>h+ajW}#VM)BY)4VB9^B#Hh`fT8<({uzHC*$m#cy8bUWxQl{-n_xMx6mx zZXDJQvVz12^vTFUep%f(WZ5v@W%$JAE-1}RrExri5eUp{EvjM8(u!t9n)xQZL*T zZ5nt5+9xE^h)tvd!p^B7*-_Qts9ynZvug+drq6i=C*4juV?MjMCkw)-pe*X=LKgLN zy(|P@v6)^$FOyK=P^zJH_19z6xUZ}9fNj4Qm^bd4S8PNWWGzL}=~|wUZC){V$3%8U z6N*hZ*4(|gO@CJrac3MXvFTrAVMAqZ2c@wtgcY}@L@MZ>Wa;p`tm|g!Y`Oe6VkGOn zw}x$-w#l2>zS|LzL+2OS17C)YSrU8P^iQ?yo815r%+fSRO6oE zbvr{z&X}cp8FG2Q=1z~CHmiBTm*zr|!fr#b#)(O;`0yN(B9X>9?|rWDKJW1tymirg zUo5;YdHiLM=auX*)~l_XYCGf5fgN&o#M+a) zIsOnqeoqi#se?{>k%sSsmM7DFT5mM7sG{{vQ3)o*YUCvF|Jiw;k1q+%dO()ttkNJ2~ynZA^8+Ie5W`$P_^gOG=VDo6!8__ zTlkaAq#bWzK5K17MaO}cS2;5?Vi~dQX4cAYgEKeJV~S63>IwM=Lb8P`8!2$c9!g_K zOaNiSgzDCwP$QP5n|u#2a+`Zb*gB*)m@RnlHh3`wHFs(^5HEwxw`hkM!kNSSnIy+% zM)cR$>iYc~`l=VSHbX73YP4ta-sBE*PRU>Q{RZ(WoKvRZfRn2(Er94O5IxZpwzrBcvy4;SJpJ?|@}U#Qq9 zwe(dy+z%Z#euR2Q{IKC&`By#D`j&-43L}sq83NIe&D$b1wqq%k;?aMBQ@}b* zA#1o^%lF}m77aLYO{s7#Mz0-vxL!NfU)7*c8=&hokj4d!v3qTAkJoYt_f^J-EJB9{ z;?#V?%=P9b4B64p`ByDD(PMxZzyUf4L3`h2l(q)JW+KEe4!8>uVv=brTR5Q5+(1&- zQ(;pK7rrN1&*Oh$uj$<#o)OH`Dyf zzL7+XFOSlQfo?qWS5!aH@s?xEcCS5g75erX6kRl1m^VVR<;SzgxleiBHI)PBnKz_k z`fPACr8L{-8^{UPo*(zz&wIg^^CchX7?Af0h}A6Dv&2+aH57jiN?{MBUMXx2uM`d- z9$GD$3q`QjsS(C&vv;;mqv)8}U`I?2Wx<7a2yF-=+liClFDH_(=F|tVC>{c>RjYTf z4$;1O;p2Dgz1x@5yzDH8%4x1p&IpHc;_NGD&lSoU5uu#@&c+O%r%}?qno$mIkVl-a z4al0*?-oqjEs~ZT!TE&Tc1cja1>jf&PDJ1&03E~_byb}`wr9*Gq3guEWXjeB$%Yc- zB*BKm$x`_@_UTSApw*#{x=EdG9HpC^Ka1R>;!XA=Q1Y! zDp4@FlrKx2p{iC}1Q_B-G#TVOhghCjKqaH@@cP2EyGwJ2(xB*eUYec(0r_e&xsHSx zAO;sIAO@}|-a}2(p61M8-Ytp3LsBin#I!wV}0qdn6PFF>B&iY*3-NkL{Hl`Y*`4&k^#{) ztz(s@42XQyhv1T+kK(@oEWvPCr&z6LsSG5o9EcWW9Dfa zKjSrv+3ddAeo{+*jy>h` z3m(?F5-8ZQFu7v4cU|z-NwW}4pTx?UI9(bWe02 zggXG{lFVyKnGL^Fu$y#^B9t#I87F54(9Jj4Uq zW76{ILksj;7e1}hA;=Br2)(XQ*cnEWlOCA;3yIbK4is-^Qr9e>85v9{>kNkhW#dGo zXLi-nN6dP}$W|XHMiKALYQQ0G^l&gHT2$e9QAma_5&h>6MeF#p@#P21C7z0os%2TL zU}>dF1IzMISmhw7*m6d8IE8|LRl5eVDWt4m5AY=-3vInAHuIYx?6M0Q925mQ3r2X| zuEA_=;5XpnK0kX<7OUJS4-%V(kaMU&d zZw|118<=@b!HA%q6(6(vD2U_!#5XbzRid+28K4}j6d=|zf7-XkY5D4Vks=~#C?U|> z6_M#xyBmrPV)G;o0D|Wd`8pYDAdmJ=`kRsS1w~2i0%+L17NMxLKL zvqH{lc4jtmBHKcejRA4iYIh_pS?w;nBU@sn%dWIPM+&7-0z@#JsB?ixM4hfMcRo%D z29%rwHYCJQKFS>CP!1KP5T(us=E_Cx^L_e#XLdbu0>@uRu|M8^`st^;pMLu3?x*|h zw_83yDo`@r$v2YvvQB51TIa^OCnm+}HSL^rV1VHRP|xFNCgw%XOsLT!aa~8EDL0F_ zFHx%!H_ZBn`@GSBxz>PTs_~9kHySWE8!&G+VBTuL@I}b-l&f9?hQsgQK@)DktZl%w zHel8_VA>ln9SxXh17>3brn3RFsR0vjz@!^6xdzPE2F$hwOtAs8y#ceM0mBCi?~v-A z2F#NUn7s{{eGQnw2F#%b%y0u{tN~MLz#MJB9B;r(HDG2MFbfTsGYy!t4VZHcnDY&o zXB#jV8Zgf_U@kUbE;V2nlNhAwNoKFxNTddAKI^u&x&CIGd0um#*W7j>cSN92k+~?n zflR}uyF6_?WjBe=0C79;v4gHVst)U&=eBX|An9?cp!4T|EdE?>-IAo^OW?HfKY7FQ zKY7E<3U~IP@wLOAMSH$(&#&6kb`8wBF85i(oDT|n>P!dQrs-KV>bRuZ=61Bro#l)} z&OE#?$~UIB4$>5atuil}WA6xL)|$_j^a+zqfuoKcXRULz0FEL2oH@2z4c{f_`>Hwi z-i|k`k``&MH^;WCGPG$zLWCF1vE6V`?sP~;Y10$p?QqDnIkuukyrTK$FFMC@Hh<0e z;?8;AIga`HbIzBOnai1eZo}&=D-E_(GJAnZ+$!qaZL~!LtOjw`F}&Jq*?DCWIW^XS zR^hmD`fZu`FwQm6<{px90eeq6=Yn%ycFq;&IKEC^b-tHOXKZ-_(?##0SoCFzk#6w`W-*spHtL5JbA<45k%k@mn%4*21*MOA9J*m?Goyw>0nR zueL_DlhPHIx$UV-7;(mod8~b%IwLlgyiW~kY{u2*jFZI-D^V1W?-wyj5s~(|VyVfP zHSLtET+kXb7wT; znd3N|t4>PuIc+Bg!(Ecx5w8@vR-07K1Ots1BZ*Dd&9>{Q&6EkEIEzkNg=*%QHl2*2 zC31f@aXrGqli4h9xe0>Xqc_)yVG?S^ptC0WqVIcAo0#U`lYi+<49z|1!n)8umEP z$QjRIkldI#F*i+Fq{e_M@S@!#_4$Eu$3rqUMLD6+Y<_4GG4*9r4mcz4- zLF@Wv&DfmV=ujIKKBESP34X;qFF4N&##Kcg4%lq5iO{d`anmc!k-6bJoNQ};(PAKr zRtB=a@-cN`9esc)mM*o{pvb$Ai#|doH1jWg{&iijl^?0hTv1!0V+GQZroB}TJcbgR zbJz8peM!M?oT3q~Q1v&P3eUb+$J*S+40Y;}e7 zH{Ho>gF{Pi(wDPa)wy+?`c&agomqmTlQG;|b=>rIhnv1$$IYyFIJY9IS>f%T z`Wf`|+dBS+al_V)V47~_Kd5h+rfIn5GUrift#7-Pfw`-6*ls#zAbnabV0y3?Fg-|s z6WUeR{IAv!7i?GL+-2r|%cgwQ7tw<-=cw{WRD?EW9pq~+0j7wrNda5AQ~GbcH8MYHugc%&aB&L=R6i) zIFCXzOfSshsfq(AF;LL?Ruz=gRZx7+(wzFcw&|}~uOUrso4YAiaHQ}!w>d}SD?ZE_ zIjfwr+Bsq8NbLz@M3bXtgR|B->&!yB$+<~Bz=^yT9+`dx;XtSnn-kGG=waqDlo=!e z878qMZ1avVQ92xGqB?S~6nKwZ~sP2`Dzuq<~!H8OKftR=v5y@>^@-^rtf zIC;TLn$sR^Xn5r5c(k$7>~K=G^`$9RZjsg0MRxv5F>HL64ouAmImLKoBQrhU?I@7P}+t(?`H&hWKG$@y4!uHPv*{&3iJR&D$-*F1z9cXf}P<1ohsx`nSxFI50 zkf)RLMR^v~nXqA6TcH=(Gq%LT*0v=+DWdPa2_;_1Er=Mvd8<|XSD~Zp)W-DqO zRyf*EZH&acrg33a&!;)huc_sB9WU2neGNLu0S|N^ny;SWL|;EGlT?61IhrXn*R%(# zqVqY;ap&3m!qTAfV+3X9u@E;ip&6k-51J!5RyARXQPZxzBlDZ|UPF4${n4^Qzrk9h zudA}}LGz*^qDk`fH<~wugWt8h!e*3rKX&$B2V*{?DfgUj&`W5xrgyf@zfD1``V5jn zOn*a~(8_ghZ6{xCeXn{Q$;c^2?ma~Gi|k{V&YW2TO>5-Sn*b3hoe?0#)TdNB%uoSu zh3%D*n{qKl;S(0R8*3jN#HSBhn4!4i*%pevLUVj^pxO(XOQK*T8`gYDA4>RqnCegn z*Dh+2IU~4++v>kGWlls55EX_u+@?O0^YqZ-`4^hQrk5|Yx@BvsX_2qRf{E(9Gl&`E zsN&gYIX-{^z~qebbGABX%sEG$b9@!Ygz7YIi#O$*8Rwiq z3Yx>BBMx!iInSANI69J3y6N@covTSfyZywUI*s3zl#CAKiQ6`L*H~RMoj(hk%4Gf=vJdNp zz!Lp)F=+;syJ&^=)(Oun5g<369NM;Ul!LO1Vz<`Ise@|r17U^BoFO*87GKgys(eEZ zr-r2pIoVqx!ZC%nsU8P?n~wK`-tM|D10_VRb_#;6r;+gJaD4i!}U?HpBF>_U-#NF4zj89COY zO*wTwAOnwZ)(G7juno#DAi2G@LuUVKH*73iaY6_?rwON7W6%{#LRvQU>*#mWYUS3p zaM_YVXz>cyM`DN8jf6d6$+K$Dxr2f#b8)}ef6NO{Wj+JHeSm_?>a9g;U z@9r1q<2XUo5%C&4pyzeDB*h+W(X1h5PQoN5TQV~0MGT-7;SSCTI2m&0#L19qUxByX zfsR>hmoN#aL^t5lcAAhRL#c=@d0Po0FXI%3R)Kf92@Z3BV=M2R`654T4a!ZWTiaVT zr=#4hVVAEV>=fQ_2aLGaue&oHsYLib(sS6^}j1UO>s$4 z!agO#is{S^jaOXt8Rg<$xJTI+3?;M_NJ#s2@gzxK!pb86*BTet*VG9SjA;sEN5^uJ zhb*X-q1JX10v2nn?FQWm=)Q4$Li)g>{k&5$gdi8<8p`A1y(7=7E4D( zwB*g_2f5t1r=6Nt;_r#BsU<~0uITOcg!~}T z?~AtH3axm?`g)aIK0i&%PL)G;L^m$)u>9*xqbPJgC%HummxiYnL_e~DR8#^3f!9iL zT1eQ5W_75&y}50XoRA?wfe*?S3?eA?qeNCKd*aD7Qgl_5@u&Qdf*fS*$aIje$ccHo z>dSsM_<=1{i6u=c;y)5y>$4=Tl$SB7ycHa_oB$mbKt#=|BBQty89TPyo7>wK*Sk2h z{>9ezj`fm)w6ylmeF`mzSMuPCD*dd{DC9t&F+WHd*66H2EreL}T-?gyvL4oC)FUzR zqM2ZR!m@8)5*}EW8^WrO4kKhv$VkS#&JG)Zd9Z8tr~wJW)tdHpRoI#}7!^3-c6B(dk&`QppOzMDr)EhkzGMnC^@^Q$ zxp2df>c!bw;j9&kL*%x_Lv*Gtil@}Lc49+^jS`FdmW>k4p0Yyp9hyBZyry{@z#{9u z6~f%AW{XW>w7$uVyT#1x#TBw!7mDQ3(zeJ3E3I!XYRQ6BIFb?LU=gWJy+S0nM_}p( z(}ycCqg6)+M~&S2HkpPXfS7#vGp2AHQ&kAjSWN~Hu|;!-DlaZb;vBTSxS$F%K;L-N z97)(D#2TO(d{Y;>_kvq5?1OHp+pDC0)d}&2C0>0VP1k-wuBzY^>_s?YMF__>tW-JA zfjV-$Gg81sc$HQ*s#onu$E9BiU|EM@NtUws)x8`mH847$mCC%$WfP{o`8#A$5>*~c zui7vU2W^Xd^A(u*i!)Lhy)#i-s^rT?Z4=8yd+)gTT8$Wk2fm&cIR(^*-?T=`9LT^* zjR2ad*2R}wBoc#Y2z>Z%U^|fNdhunQLXJn%PCou+>VE2~=>_xBi-r^s#1q_P@qDcF z`0@M<%`W7ahEG3fbBU@xvZplMEE1GJ!gj~R6T}Xz+sw8>E3RtWSTm*py0Q2Me`p1w z){-}fYy3IHHHWw!Swy`=AsY{h8~i!M4TrcHSybzQLKZL-Z}R65Z#u+Vk;S(h;w^`G zJF@t;L%eMW_Ip%4LvTTq(x{?DD;#2lLxdw$O%voe1Y1zmLO`r_h}KB8)gf9Pf(@zb z9b&yhv`4CR4vNz55FK1a=MWtZ5sg%%4iR;Tjgjg`huG*4osnv%Lv%XCrbu;@Lu_)0 zc%&M42ux{}CC#5hXo?Dg+ud>wk#mTxk*aze7*me}#WwyNVw*!0x#_|oiVm?oQr+$l z+Z|#@q`Jc)b~pr|8Siw6oer^w8#Nqak3&2esXpltPddcjNOiA6>~)BJk?KB&*yj*~ zk?NpB3_8T2NcE6I9CC=^NOjmDh8T!oS z?hsRv>XbuFIm8SX_Bq6iLo7t93l6d15N9IQGY)aaApF^B=h;xzZIfpps5a%P+ z^A2&|A)bv?pLK|59pXZydch$sIK*?2>T?e9oI_lUR4+QjMTfY=Rela}$ssOBs+S#t z3G7PFo8?EZX2UkZ+pw&mOLz_W?AFuThc>R6IkA#KT;5e0B3BrhR&t;-O1i0LNF5xQ z60%OnNhw(zfYtOKbl1(i2*maKS@#CW-bQ?SuU*N(eo$=|)Ub9P#XNPjl{Ihdq2`v` zIfzl%aFbB1@Q=Y3D>REU>UiidTLjBS2;i{wx>q4)>`-^b{YK97ysbyNdyeSNnO{2C zC3w{)FK*a?1Fc#tUL{fDQU-H0#?WvWvlib7fNKH3I)@9o5db#>fOSX9M6| z0GtniX9M6u06Z4}7X#o@09zEH#VaRSlr0JGl)@1E>KU&f$<+G4etk&e1Zf z&d{WCn2AuN&cJtagR!b0|Z3;$l0f6T3ju_zcJhi2%Kkbln@~nKc zA7_W1?(9%Wv<%#-k{F=NR~)pW28C--u#R`Sb8QW$O+PLMZPtl0E(ODEX>tTHF z5`?wQhU>7~nr(4lwT?e|ZV7z84o{EOVNS%VrOCNjRxJ7l)(FBjuL|3{d=@jpGEceG z#7sU!@v1|vLt2%vyXXQrNc0pP>3#)>^&=l*x3z&f zuR2Ia(&q|6X-Qasc@5B16957Q;Glhk^AVX`^<#Gb*lEwbVqrV|Y0s36?cFL09JSEX zyNtAE=tI}kA6DPibN^%Q?P}q0*1NJb;wn%V_>?VQ{s=(^&4S!wg-J_7w$^u&rt}AJo#5)19cFb#qci z>t5D4XPp#Wuj-gR0ZM&O<$PeqHiA2awm54QhfY!A0VDszS-Hbp=M7;IZ_)2hSDm0TXk<%C=u$lu*sZ=g*F zxVS@`JyE@B@A~N+;Yz$a$6o7K-TVCNO?^N?n0_66gk7zKR+VdYXb1(3Pqg0UPDY@7h-084Iz;B#y3%R zz%Og9c4G?(&hSU&3c5pD!VljV@uwqlb()-g>*K!t`PtgHKlVj<9_QEO6c)j4yCKlRhB)kF<5d%bP;x;W70XjEeM3cx+kF1h(|30M!Y z8xUQHf%Oo(3DJcZSP!uq5&bwTn1e0}Vg9h*4-vQ|1j0S_ID3|ayvWqg4-r@oVVI~E zU5J6pL$=jJw$(%I21OTQU_HccQuOnoQ7_a(>_$aDwY8Yg^$@#R(T`JPMph588x~!N zf%Oo(Y0-rkxIE-?J>;@#j++;C`J!sojuZl-+PAa0Ny;~S&HT2B&lE!U;z6oC6*Ca9 zSuD^_Knt?{%Ql8H$H5J^b!r3u8oqEfF%|{A)afNnSFRV93M73r|jW|##%r&k#KfB&mxras1pcMKVFyP|K z8bLZfa{3BH1nD_591zU7LS0h=bVPnMKC{I?^Rk}YSfQuUaaD!jt9o)WCMj_-gWy5c zwakoWc~3d6M9?;ENlhOz;#Ofe*jo{|1(}^J8aAyb8~lA1PRbwQ=xwFPHqLm$*qcgDJZ~d^FFH}K4Ry| zv800c=y|H0Crjyivdrq2nPqkba+;veJA2oC$b{6!xuJw}ZYWRA4duzXp~Act@Whsn_mNVWuHTQ7kv!_Wz=Zir! zUEvv-*)I6xdczzw%;kV<4r}oF=dcFFmAtUWFLSrfqQTf)q~sb}>ii_b)N_PWt+v*&9( z`Idw>vQB=!_z}1M7e7jLhmjTS`MNzNv9>vrEnoZq&pvCI^FapnR^exL)WY`$;p|aX z3hsHqQZPZxnNa2~Td3-Yz1{{}`fRILtc`lIkzUUic=A@IMJ#jC5Yo`rc_C+A;#Shx zmqg44agkB}GjFI{Yc?-kneo96NF#c)*7)b%Ryy-(J*U3y*U4%>l6F1%waTtX2U$PK zuEzi`J~U7`e`H=g>V_us!US6!mHe~o6x{DjAdclC3Y!vxBveW^FWJ+I!q!44*jgA+ zyj6p))u6c1U#^v8{-O|U$W!7Mt&4VDDSN4W=GbK8r^wy(kS*kD{(wgNtpb{@mY~%E zJ5+>q+fstm;y#YSu?C&9bgd3~L5C<@U&L!71#o@43RY`1T%#_zTcLT?qcD|%w^sIi zEnvl3fnJ>WtZ^rMrw&6Webz6H_NqOfH*vUyNf6qvZ8TSdn9L980$2qI5VfjfPNgK6 z-t(Nl5rofZTwb*@3~T?*o}W?pY0K0`4h(W(P94`1Ynmq}G*9ei*!7KIA!d~U21_{P zg+2YeH{^x9JxzE0zk554O(9`M78IovOUkfS@O^glqAA1zaHpPk7LZZ;F33)5yM+eh`p0_sS zt=?50F85EAJuepWIt!y?$Hs>a9;!q;3-?Ep@kBDlqdPiSP7jV&wjDg&KQz2~VDzx( zB|_e&UFH74iD>`GVDy>sp-OooYMJ#J~%QwwBPgE zL*AVRMmsBq#$h8m(SM+Pzp=G$S9xr7VyH4Ye(dq_;rAY@RK_N@JowyM|Ni0f zQ;&}B7#;ZJM+cvJD%I^6E0%g6|Cr}(3V9!PNfbvbkCrQ&^TWe?j*XQkwwH&;%Ht1g zHIE`9ge@U2vz*w8?%1yK#OUzTBJUd-8GK}PWOV0v`M}W8@`Pe0$g(@+rT+m@^R>E2 zDrP3_dEXcEy1qwDGE=_w$QC!_d0RtX_It%0ov7R*a+l}jLSE{7M7~ADtmmQK@$V6l z+WA=jz{4X4MomH)B-9)79{L`!mS;x-rK9}=mEmJ5ZWs0Q4-l2q;%H^O-|DEpa>%mp zO8nEaPkP=*LtghkwgmYR$34yEpAsECp~ETuqjG=58v5>X|Mo;dQ_)okK9|X4c^v1f$3PKJs1iP)}5+&)uS(?Jf@-p<_Sxt~HfFOB*EqF0q!^RRS4kz*)wh zI5MfJVLno>92)f%B8QY4I?H9$506Y#`bP%Jg;9X5~I8c#z% zzAU#Ty4nqE-<`Phba|v=%%tL!Iv(;Kcz0%&ODPp6^{$YYSQg<2G}w-B?j0W8zrEZ) z=9FxBcvt^3#r{ga)Hy+`Yv?uoXdgQ=H25yj$gD5qqcdKM}mdJV#!{yy$->MP&tna477&*vLddotq`KLpk8`n4c-G(3Y z@!jtdDM2LJSgkU$0Qel!0p@zmA#cUQl`{6u`jB@=Vf4sICHhcw(ts15_o0yYepgIq zFw}dOVtN0OgHH^VpV`M)@DCwFP2UspT5DPCD32Vh93l_dXp>L(4<9MxiH5xUCZ8S} zuN>(g&JPZbmnSApL?;KSc2xlcQ}ZEjYI?FlOFFS7x@Y&6$;!~-GI~+oUFknOw&~D` z=o4Ee5BLA*=(uk`ZW=tXdGhek$Wlaf_YZBEoFK)=4oIa=M0Y)r-!j?nGJNcSuW3rG z@3AeDW1~YODCC~eI^Og8L*8DC^-gY|fF~bkJl`@25{Ari;HRo`*6mt~x;^9-CMnf; z<*@??Cdw7qiA|P925Y{kli@>?zAU4?$1qZNln+!Mnyi5&v^nJ6Pci5~f}~DFcevci zlo4KSzw`dhvZsCW$-L?PiKx}rLz4}C-o)lWN7_Q(x=BUd?9`VOq)U^oEs=qrY-`B7 zeez)m@<9K9@=>oc=?ddh1t~-)A3i)bTs};{LbDtlf!K1{Bij_(T|Y{(ApEY77lH8~J5r|K3<#EXmQJU4_G`ugTe5_ox`l>&-Z~~T)Px!* z>E0jmHd6CyCpafIIT^|OgfUnbjZE)JY;+=R2zl)iwY8gr<#Cr<=lz>TevD8Pm{s+O zXe_Eq2KkAQ*VpM3V8_r%nT(tV7LObrIdMOfogxha0c$~%#nAzb`H{+Im;K!#uT7O` z(%ceA-Sbvzc4j5&?&{9QbH!vVo+)Kw>0DPLmQVG@W8Gb)bT(Be_I0KDtOtRf9|@tm zJ6kNq3x!xd+tn9K59E@uTrt}nE9G<9Os2b-%;t-ZvNv5QbtQ9Mv1GohHYiuq!?E8B|&pfvOG?ouYz%d{+?$&%(ke=JAVvEE#|FIz}uis^jbQFbLVi9)_e zcBB$Zr?UB2J{Ql$`nuA&RIU&&#?y=vO0(3JDP(eFm+VgGpiCEIxqMfVLMF25cs?F4 zXgm>RS0>w4=+0$h*;0=1WOpu>?5J2!iZUH9meTPQl!aU(mV$>^ zZ#+q{N{M`LUthA2k7IF&vbQVQ+nr1mV!fGoJeEpiNHdd8#ggg1R6Lu9uM%CTC^N-; zDj6^2V%>#gA(k#>@)SFnip7)JQoJjh?M=zy1Un}&8}QLo+-xr;I2f8dgF;$E?vyT@`*&gJDtd+yVHK| z`BHZ(+1IO#i%5QOKed@mC1a_0KFQdR#EO3I>0ECzQ-Ubdn@94A{R2pWdMy;Yl70E! zLN;CU%bqRf3%O)G8!M*rl)aG6#JYRCva#-DE}qDz(aAJch)F4*>MNDfg;=T3+l@Ta z@M&6?OZDZ`i9(Tix1%f-6X;bo8O!EMN%SI@rbIxg6gogQnWXGFr5W$-&SsNcrC4`K z8q^mj_k6MoT}e~@@$OV1(9cA&FHwq9kvwToy>a5CyK=D-f-fd|d*kUi4a)c|WJ{^O zOe)rwre@Lws=T|{TST5Yaw&CpWn@u{vRLTLW^?f(HB+KQnPOioU+AN96WLTk%7ZRD z%0j-YkSx(U67dv#cICU#&r~n1JDsM1WO4}HQ6`hcd@0{Y+2ehbqtusxvH%OTxOi`0 zGTYnd*E>~{N%oOQS1%d@`{+_S+eJlm7c$B2-c%}4a%pzwN>mC5+(dSiuj23^Y2HhW7YB}@W^II@fTZL_Zs&!)23bd0i6cBv7{ z-WAK!JZRXxr9y%};mvs3WU~xv=z-9xEYzeLFU|bFg@}&kDt2F(??>=yKguJ_Lw2a0+%0OIxMk8l*k~s+Diw(%*hWKRp z7zpoMpZU_id;Dayt@-Yqf4u9#pMU75kN^IoAAj}8)K7i<<=^~7=X~i8B6Fqp|LQBb z-@NndPj-CZZ-4nu9{R%Mj$i%oUqAJ!sf$l;yws8S%*SK*to*atU30IzbnfGq^O=8t z@87Kdr6=D1v47k1OMm~1&po>G55BnlrC)pDFPndFRoiEGHoftY#ZQ)Af6pTmhu-%W zpZ$^d9sCImEIZHc|0yr@$j&Cy8lP_`s;;zN6M9S z#)WMj8{F^h-kwipx;#Ivum7l@7W}^FbN}(@AO6EX+LHY2mnM&1fT!T+Hv~rm-*WfT z5<1Vr?ieo)4?ogBG~yke7#JNdmp2a%4_lP)e2_F+SFsZ-%r4oMyVpnVy)XKK4}G}v zBby%Zy#Ms$d!M)`{l;Qb=su%v3f;R((CX0pmu1La7U#eB11i4vp$|xco_D$DsZT}z zXw8-t;k(WMm7c%)@~{2iA3uEMgUwC<<@3+)d*p}C+N5Cxq2KwA=e=N5p0~|+zne2f zV9Wb{qs4o^`IYy-5Zdv|`}Z6gnuv~#j~>M4iVpOTjEq*I`^(YsBO}qFk!bO;-C9m9 zZ(g@<%|<`rcb4N9j{NqfFaDoBJwLpq_|(6C{c}CNA8dW_VEpqv_kQDv-!2^fe9s4W z{Q1ZK>h?=Lzmos+Klz=Xz0|Y+&#n$$c>Rk#{r~EB7LUC7a?kIcJ@NeGncwf}`r5s} z-t~)r*z?=Zy_7osd$0F&|J)~&C*-dBi@`_#?)9Euczbr>G2F+Rp4;&^=fByr<%2sC z8-D+rJ@c8SFK@+N|G$3v#p>6;*>n5@BR|yt>Nk7d^XGScR_;f;zyHfmpZV*ayK_(9 z_|HG_*F87)|8(ff`@Yq)>A(Nw)Kd3LKX>*;`G00O`{kFv^Q|6N+?zG`*7Y4vrqc9s zOMVhR@_?;r2^tL(ufO3x4fj~_hy_4B{m zbKCmFmY>=AwVubn^Wg)lzwvs{rLQLbR_>RIm*ZRR`O}{J?)r`2lG_pf;s5#A?|iH0 zD?j<=5B%9J_*#*otAzV-JW#`SG}>j_-Hf<3h-^>Isoig-e#+V72%&X70k zl}U5NJK&8P*+z@ChtPho6NLAB73fCsxu44`Hou;YZ+<(Z;f`cLyO`J_Fz5n7F?+~efZPd;^S z>-lbm-(h||?`d)hc{`v#Xw;JKn0L&$J_u(OXc}?iyFkpSmn7!|&zKK&gBv6@No17R z+er5?DN9>6djnQ?B(8GaLBay*3{fGP)mKhF#l xUDS?#a#oLd>aMPN$B@&z^Wo~#BLBtW6{`#Z;Jd5`)rTXp?_`gPNXu|*i literal 0 HcmV?d00001 diff --git a/AstroNet/bin/Debug/dnlib.xml b/AstroNet/bin/Debug/dnlib.xml new file mode 100644 index 0000000..69541a2 --- /dev/null +++ b/AstroNet/bin/Debug/dnlib.xml @@ -0,0 +1,38829 @@ + + + + dnlib + + + +

  4. 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%0AFzSbKin(3L-5n8H25vC24CrRWc&!u~ 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≦C zFb}%1bno2QjX8FHb2CnN^mB=IZm2e=%9+ToQsBkZO=Ne${GGCnuV8gDU~0O2{9A&{ z19pNTa;J`UY-7M3SmtVHJa&K=YeF%mQ0wYxAfTu2ru6NHMlgDd-Vq~s8%XFM`@?XTQCC>iMl;7H^tUnJGlwSJHlj?U{0GXch0 z<#Ev8Mn%Pl=QCDk)*8)_4NB|cYmMEOy9xX&n)shj>fzO)$0c9NhVyU_j4WVSvTPI- zZ!uV5F^4PVDjy%kN3r}#Nl_A;zDE{uGSj6qG(? zjtthrlo6;ae9sZ^?Y`EYO4!Y0S>4ex}96zQUl=9C;6weVh3Qfp}uYm*P zY$6Q%_|GM=KP;@SFDjBN!1rcX2<=n+nNIgl`a!ka-QL}iAMS7+t)rber6gO-8%ap> zZy$RRDc$L!ENe$9iwl$LWoCYu%RgR9W8wDUZ!uqu@D_W1XeY0Nb+D!$wyV9f-4wAp z%5C#Ug+7v8&SY5YHltuxF}z)F_KiMkTWPHwS(x$mt!)TF%yIOP zlI!)AGV^MsoGC^84k+?|$B49p=ZCS77XD&vrXfzzj?u$Svl$%e+w){M%Hx@9fe{Q<4ogI_T;P^%+s?T)m*oi z+clm%MTGJ%Gd~RUpK#(KCpvOw=d5CEN*D-@DmQQBoAZX7HjDyyu1M!c^w0Cy#;Dn0 z^@NOn>X6fwP8%9=Y&;q2V0onxCOf*cfrkO6=LA0#y|po(1i3rO^Kp1IJBYu4=)&Zz z?H?*6SK_b2pR~$5@+a+k)(%Uj&Q9hpYlAfyxIL%A!0jvz23|xDc5tG4(C5Eg#VYB3 zkawd}M|fs9b;gkMmRRc#`Jjg{)@en_A!i~?>(Eir4ee-W^kFdCI zJ9V^UYO-Q8Sw~7iar{70aI`2m+1KzfcyuIpBR6&CG2n|o0DvVi*8}Z`EfRv7LBeEz z`3~~oRkk%OI0f{i0L*91Zu87qpFi#Vsm5t%5zm@9{w*Vgbo%k{m z;rwbvCenmC0K6szm;=CT1%PjwpH>^cX~)i*r$woV;g(k_=7;-Gcq?5?gpg6eX&sgE z#X{Ts#-9JU7F}ff=GBzK3kfTQO)5`r+m7o4ifK%uoj_ z>8o%hr*gy&_uFxg{M;S=;l_Bs6a6qditg;s4!QYznE|AYk)={@KNa`#Aih@(!e*76Z*}Nc0Epv3T`^LV2?x<~yA`4Z zWoql-;%IT%8b=GwR*0tYR)}V$6ry@&x4f=z)|z7QCxI*1ZIsJdL#dr*jHArkG>%dW z@y1aaFLdrBV;iMr<{DctHpSLSWtnWqWC_Nm7&3`WZ>6NQLq3P*nLed9ucm0qcc)gr z8ucH`2M3nk*p!*$?@&`!Ys`kc(;DQ_9IV07Q5;`Gi^L>A(Mkzdx|F#}91M}2de_v3muGh0}7tD4r%v$@e^FN|GA^GxP76=lbHPP+T*! z*j}pcH9IUd+w$>4x=+ugtQL|%%09k@QV)(j+7R8gc*J6R#%VQxHK8=gNssiDs>2|+ z3clni|6C+8E2dSKtCVhEDKHqb3twc<+#h9`t8s#LbCB!G^)GMo_6Tsd8E>t+aTb~CEd&>`WW1q%(9*DAa zVcRh36iQ=%nh=Xj^7v7$^sHH{yPfmN7I>Ym7n=)Kjn(%fBooSMu%(BdrZlHh29| z8+G5}NAHwtfOLFE&i@eAYP?U~b|q9gN-L@l;PYYP_Qu~P1K)17_2)*PTM3%CnMXxU zzdn3UrEHjo&%mK%!yJ}WQ}=MoQSXvV(Z)rdJt*CV_e{NMr1?M@(V9cG5AZnq94RTS zHs@r@+}NCKQdpa{*~rSWW;@ZcWu3&wZ^OsFwLF%b=B$}3i_*CLkXSD6P9KuNpQ3RZ z*GZXuXS--DB!k8#=j0pA$eQ1p^QCo(#naZ_PUz(X3Nd1sZRi@-u!qcG1Kt5PhCR~1Gsok7uAa4L@lQmfM zbbJ+f)ckGpqmC8gI(9`p`Om!Ha76uX}&VYb$Z1HY#sf3boANTj_&6+Gf1qk z_gQfUiJc_xbQXyfXOZ}0QdU|m5;Z0d&qOs>x6xVoaF4#M3@1&ES6d^S1ho0mED!4% z{1WcbDpz--$4P`rzNuDnuJd3H{2+WAzkwLZLncpJ3hvD+cXbVobaurz$=Mz7?ENW> zps}KN&Bb>zzKR?In=YKl?;-NY-IS+mTlMCKT)1@g-tCgzb=)0&A+>Pl3 zJIkIor~03i)nA&z>YBH(tWB}4)X7rhmgzZXhL)%~GnSTJ$QBu<&B-urXCMIjJg4@gxt! zQA*ciS4MPlNynsyu-(>CX`|+UrkZ~*H5Olq-U&8E=)2;rK&M)pnn0mF1N!olur{^m zXDK@Cq2{KY+p;r21wOxtvc$VHkMKM)tdZABLXqa1$|N;Tt*{5ZTJp}D!ks@Bnr&*3 z`&wB0UFv>KexJM8Pvc*Zdn~{2qBiforR~&?$lQ`8?jgLy{2EqI3KAJn*xtI`Dr4U9 z_rZ*EwDB!W=yomIl{mIVr&ERF?T%IVJM0;iDES~*mfaW@ zT~=#O>KT0YFr)N?BAkVHkE-bPe$E+TEg@}HQOJ7U!GgCo?9E90UJ~1o#SqE zQN#}^{{nU_W){QM7T*N}Sv!*$mo@bYwNt7T`w>;?%8OCSg;O!hlq&w7r$@F^&NC}t z57~@y_j%#rEvlxct>JO_dQ(b?7&OB0%xHKhgN(1@A1f!9sxM7Nn2fLD?|Uj_ZPoDH zmi648^?WMpxg+bjQy$|nG~^mI;CY-7H#mgG;|UELVb$HE1|2e6jDO(ixJ#ZNde3L% zG3tr-*{tVtSFdw0RC>ZvZBE*R z9W4HdhKo|IKLvNEklj*<+v$iObrCOUf;9}e*hSxuoAP6MXy4AVlONlC=c#q4Nh|Hm zHKgmVu6s3zBdN)lw;>Odw}QzJ^{z{&;(nFPg)q5nS7K~$WIjYz z9a*7NcO2VTT07kJH9ydvNDbFzaO?Ve7An(O54DA-V-5ymkCMg}lnGIMbc+QaZiiV? z_oOA!!z_v7N7Mqk_NIp04u3%^N4&o6xJR7(*{FnV z-7LCsYuRLFAfaRo?T{=-OytFskHJ*7?_FK8<>ae-Fd*#XVz{n3AAAQsyJnKRfmsDT!yYM^WBPAzI6GSBFNI&U3&}JU2KQiVfWqJ$6ni5cu}O?6>5Do6VuB?#bmic?QT@dlhMbem_p1h z4n8s~gQdFrGp3L@bfk-*S5SwiHkOwAV7(6cC3F&UW}%hn@fcfkDAyeWMrPPP=z zJ~*Fa`H-74ssE@$r25a{A=&n-8=n*&g(9cf%{Hi;#j+Tz&B5|$26vJ9zS20jhD}{x z=*=byO^b>2vNf!)wK^*VOwgc*gG__Jqu&+rdQT>sop7*slo3sO z?$HS$pFLyzT3QG7CX`WfC)l;qYB{Gjth)V|i@;qG&wD0>ob6Ci%T}R?^+owK$;-^d zx%e(z?G)N*_qV`%-yY;XhX*BlNAta-$qi)RTS#u?Gs=6rx>TMY*}!}T6eF6689I0* z(r*)bJ^7Bgj#=kuTNc#c0RhQp$&V^xjx6S0 z$5;P?@y`LBc$>I4{%acK#8u|}yr6G4=NIG@f?)iMa=z1?Uy}1`bKWiIyUclyoLkI! zubkJI^UHExYtFC8d7YeGlFFkyZL^|Tg?J`iP*;+(_r=Kzi{lnvl@VJ_F* zz{y>~Rc;ZA7MwN{o4uZ{ww^AG_X<5-=yQ~(Jt?;0Y|>Q9mG;eD9fg6O(e~2vCB+51 zE(+!q&W+AJEnY<-bl*vI?jmDtu6y-q_|HA{?3tC0m5WIn@IIJc(Uj&Lg<#$YNBw>f zeCNF^G^O=w2fC$M^&a<`=RWiG!A>y#bDx%`nWX4ZS26d1cP(b5U9)*S>uDO9OVzH* z(8-nAyxO%!{?1D0@PQRBJZE*z(_vWa8j@9FT=%xQ8^pNot8J}3E( z2-_j3BMatv4{ir*i#};rU!^ZO+1FK#y6UUclGEhxuk=%rNF|B7cC75^Q9o5B*=gI{ zOH`7bl80PL&dZcU{jSnq*)e&Tuu6^ewMxy`)rF$=>`Bxf=cp}=?;vWwD{2=7byj_% zc2P>Ll6LJ}**Q7IQ#$~)J68shr^~;%vKVUBAG!)%ODan|wI_&Lt~PzWsEw1Yj@nHb zYBe-e7FU)ekBC~OAE*o%we7gs7m=md7Ueu7t_M=4&?SYjq^v%CicF6-(_ZII` z3a?Gs=3Bf2^V~S)9`SOrKsGP+80GbSXldki!&|20^;tlzc@=rU<=@Loqq6e)K{l@s zymd-mUk22gm);ou_wrIdQC>gH=5^cVDS3SxP-|WX@JRE&&WpjgQJt@Xue)%QJbn@sB{XQci$t=YWPj+NJ=*}NvbZmqmNcGcv( z-t%wsMRTa~dMs1!EMGLSD*UIJ@F@2M_&S$p*6Kg-_LdscjeFVNGd!#tLdL#ItfuID zW5wMG)9eKH`Z-pEE^RgW85wf7ZJ69n)c9$1r}WX>PXq9e=H9@-f`xtxi2vA}&9I$A zUjI2*5R;6aDES4xpeKENR*uHovr+DSl&PAQY43MTDN~kHzD#R~)hyF1F~-))b(%6+ z+G_I4v`jYj)H&$fPzAja5_=?2tOGK~EM0LNIK{#D=x(N<{EcBs+z8%LYrjFR6PZM^ClZxpJU zTp8N(xeK6eUP{}yrqY(}c@5gOa)QuhKew6v(U$$=jJQ;(C5w{ZS@xAi_Hw!GWy7_B zyyvHRhwq$Hr`gus$onx#1op^znEXs`W5bb6I-YHG{NAy_P(;ZejE!_QYh(ynuY;KT;JNzeHgCCsh$E zu0QiVPYWrtn?1Fk?VVf?hj^+z<9{LOB1INIzNxP&#vA~?l>*EG;M*y{8~`3n0p;_u<^XW75BReGe${{P^WVGmRRPSg%v~xH z>(VpVh7i}>c^uU*E2JtGWgNWaNVW_SD zdwg0W)K%2vuT-OK4P9DGG`w$0=0}O4@|YfzH^fJTve*x*Ip++`=DRv~j?w)$uuK^9 zr%g%&vZU=hlJp|fce$ZXIaixg9BLxan$W!gvjgRpjh)f?cXDVS;&J1D;7I<-&oCXb z@x<4oSsfO2=48}axgCa_Js?d$Oj1)`sY;bz@ocA8+~V|#QI68)`i$3ZC+z_egvM#t z@A{8BG?z=2{Re=>srZ6;1#YkV^9@0JqIUCzsgw(LFbhUyUOu98s>y7y4b$w4O9r)_ z(+qT)%1kqiSErQde52Y(!!@YrhlaI>7bua=ZAK_)$2oo(;wugFibtE(W+73#NrDAReM4TIZOAQApST^jM4i%%=}gV;k&XJFwPGHc9b~lj+rsfq8TZZ& zx8JPypCDe`2npg?ZrikPjWw+=i2EB!8`%0Lf!vto#%0@_!00P8d3TkEcEeg()3;gL z+7#YftY}Z5IcpVd+kLcSC@&i?;_tvYhmkLA?cn@n0WVw8<%dh$>FhR#ONcJ%KC++l zM+^I3QRqOpFxj8IXVXiOiKcVE5qJyYGSj4nR5Q3M6D*Glj%+58+&9Bsvad-daC6_y zM3O*cMpKbpcsq!9J%wWTCYDfOcdu#p#$@XQ$-lpuURF<1X}pF6vIjYk1Po6z>>eO? zb0sBBZ)tXzo0Ny6{(uR2u(s3S`DXWJOOJv3ZfhK5lVm6{XJ1fB6y7SoBwKR;cq9dw zgPk3HYyCQPuYDf#tv265&S&`;fa{lKN9>Uyj2a5bsh3brcaBB%N=dfyiQ3#56t`E^ z!EGG?XNK;{!}t&g9GiQ!KUZz%K&ySpXQ>*@)NE^&V-0?b)jlQX^R`WmkL|No{a79! z23Ct#;2>lDQHqx23eCNijnJuoey`<6ga_j@h%oVEbJ|wQPt9ptDL*r(ZJPYjoVIE5 zD{}@)_G>vO@1F$jhOmhrDzL6!7N<)nsyn!C>n<7vbl{|Ii45tArq`KHry-TDNE9no z2pw93|L^Ebf8w#`Jyy&8zoau&^{51G*}VQsI@8B|UQsr$|B}vB4M^qMp3YRQO5xkn znf}~|7qYbemvpAT@Oc%pdHt7krs_f}_x5zA>Q@TS>P+*w*ISRJ&))ZPe&ScN!xh9o zM)NXWg60V|*xK7*{e===OlR2N96GxrP~(IDznI&{oKmTWw(^b$zUB=(v(G0O3A8aY$cYG9+jny z+X!84wJ|<>x#GCosW;`kT+x=FNvR;i;0nu*+&|G~+}8>V z*T)G<`f_r#_jiK$7gG@3oIzA*AkwCQu3Y5Z+<;!QgCU|&dQ#00{c;MT`!a}14Mb91 zV{AJ28X+nteTImF(HTo18r&Gf>*(J>e1`p=X}@RL?=$&z^&Q$i=#b`oS0~ss{DwN= zye2AWxw5Qj)=>}79-&xM^%at39aP@*Dx*5IJw4-FdR%F@tmfEgOx*2%|3!)2{B9Bnkbd>R^*CRx;=VRk;3 z+u6p0bBP?xV|sD_%v^?xhK5pu7PCc};cQU~Q%zB%cO|MO-ehOc@BW3Jj-esSWFvqq zNIJu9b2rjcN>dFCYC}3B_2glH+y+1%x0qGZ6-=nZ6+!dLsN55mqd`nh9Zd1 z6Jz7^?KiRC3+(s#`kl9E^IP@rORJ3Go`JiNbol92md7lO6=L14_NOi-Sj1K=rU z@k7AJ|H@WvGK`DC|DBD&Kb_4y))B&&eSmAem9bj}Ed`{EI+T$FBdlL`1;%9C(a31E zGMcG(CCcOfR7ShwBBOhn84+0%b!Ks;jGki|S(PmF8O>5gf?yf7Tp7*QRP0N1kTRNG z-$NPA(1^RI%jmDojQqUqD|#=&mC@N-}7zQu=e@wAbuW{>Z%%(mra7(83}HDejag8 zyT|Pu9DG((+BEWX&9z)eR^#ZZj2FgU4s$E{OYS7k_<0D1CJNdnd?EgO)0#m;ne6qF z)$D#}=&$5mM>-e^y?}yTcEuAEmI{4iqe9($UdZvDQ4Vv$lyB-j$ssA<)X5T!aXw!Q zJv!xEBeaEYf)MjLIdx;sX44N#>x zO?9p6W9^ffPbagP8ao(TQstG#3$8ZI#m)NCAe$VS)|U-WOYnI_7W%@pz8ayvzGm8Z zA!sQ%O7*3oTJ;65xy{qf(Kaai`r@#xl}84iSTmTrkwwpF)84anU}-E3G} zb2$pn&|)G5*MX)(%S*-hw&{kJV!WVPs}eJ~Ff>XIZq};JHf?UAIht}TPQ?{2>|3@e zBXCTn8y;_(hR3@!d8}C`IR>28CmLdhM`WQdNqO7|ZQ-$?rQ}%gSaVf|#}?marAa)N zS!&ATMi%h6VWm2i$MF&AAoN5${^}F(c*iD>C5IW04{7pPbX3~hO#9Snc-$!bWY)mr zM_PDX%>98rJ!m}sBh2CXue!d2rt+rw+FT_GO$Rc~BYBt0#GOa87;YPxC0;3(c{J!N zmU%R0cXWmf2Aa5>7K1hNBrQh9FmG(&8n5zj!0hz6d#d2DR?JG4S=HI1`_f8hz@3$7 z+9y;LSD>Ed?PDuJ>Mss;h1A*g`D}v@QU3AcTv23UKT~g&A3+B%Rq~s4N`K{Ec&Z%? z{$|;Z63Z;x%Mx0baHy#44BN32*3~9rQ>EQBRmt&SO(oN4+1Cw+nW{?#B~x{9bbzCP zENW)zQv85Je5=fKI8G1_FLb6jWbiHV+pM<1F>7cabX~KY(KeR%!vh7(?|JyAJhA{+ zPr{o%RHp`+%4~=BM4|N}X0+_nMw*#dv!FNgYS7LBZ3&^$tgErL7ure#EvE1etr}d# z?A<$(lZ4g_l%P$!e+m2P_wfq1Z#YjQmTw&=o6`oxQ_N}2cNC|j&S!aEbUKk>jldm~ zP4BygYFv?FruW^IZt+iZT&3F;^ikXlJ@YU|RA@q_^>>6D@g$;u0V%1iVTCrz>Es4-iEJyjlV46mW(QP{|2+ zjRMY8z*#;(d?4Vp3V5aho}~cj(H-vG>5?0!-S(7w=w@oQ>^81IKb$L;HtPo4ACnsW zleA>Iy2d66bqyM^9r3_6q!PI!9+5lZ5!LO8M^x7lkEk%^fQLqU9q`b#Z|Vou2QWaw zt0ryDnS&^rw75NW)eD$YrH3on`JNF^>(KKZj|$1Np)A$&Nw_K`$1-|zrmR%o5duo} zo$Pm!{qAhP1N=^z_zNWy$%?~WTsEfmVXY%Mj|LBM82uH__bp9>(m4lg@N|VaUYN-( zwXv@;ohHvA4trJg##qrU1tG0a)l{(6mF_otuJU;y_Ss7h%XrG2?4yeDk@3A)KbvT= zj$il+(2QMjM=_`(9mNnc8>fP@bN!{_ouhHrCXJeol5-r5ADlv?T1>%~XQJ_WqVa3k zb&JM^X9|tyibhRmol_5fk^nhVaV72uhnS2lTJ3OhRCJnHI6q55`%n)OVHI5dea3gB_ zM&VqVT8*U>qqFMlhvwKPvJd~I=Z|)U{$2ZUOY7{z^CLTYy>Np?uVN!0k&aF*%2$VG z^ca_J0zBD>T%1t!loQh5IY=QnKg$WH4D@E^mi-f%nHw*pC-uDeI=pxyd-I=qUTEh~ zd%9LAQ{OfUb*qfcrGRZM)W2bruCfYCT2|@o9i)&X*|N5nts7}iWVUW)l|I(Wn$LZd zvObah`pwF}xPtEq__WqnBR;YiWjTGm!0cNIqw)8a_|>mY^Xf^2b|F4>#GTkcO} z25;lf0hEE_pszQ=O5E1)Qc5^d($hW1v5w$P_Uibvk$Cg*MFe0V-VCa7_-rkFHhzS; z-Jb~8@eWrj76U4|(ei}pPna&f0WH1mQ{#C$ z7$%S42ueM%sqnX!kTwnUu%|0Z#=+(Zax%y(bDdY(CEV~MP`y~)gz;I>T&pbQrl`>9 zr)VP1ZFOl|AxeJ3UY9O$uEx@oV{hM<`wZ!y=#0a!K#}f7H`=GE?;Gv&$DDFVq=0X2 zpW8nOp|+|-XHGar38UnRj!Izfv(`GE=FE3cuHC8Uu)ZFQ$x4p0 z4Wk3l#GC=y6wSO*&QFb&0j1H}qv4R(H^L1=sua`d#r?<_gHd5=sWVq_9w!<4TwX{_ zj`cX0M=4m0@RsgTHEA``Wf;~pX>EW~BFMM_OQU5#X|x8d2wx=8@3gc^SPdP<7p1fc z=1~eZJ*_V$Bsm1pLPR($4N&qw1UkMpU}>~`y#Y$2HE5M4Ja4+HX=#=G9J=He64Ur9 zm`5qt^t3iawUl9DQ+i7oM#fX3Wk6}P2CXZNR{c&(t7Ju=OFgAkFppBO>1l09X-!%i zpp*z`ZNSoK8BiLnL8~+!dDC}HORJ>0&|%z=(khroDVU>`P4d41mr32<^*tb{|Cw(x zK@6GBT^@{Y#5o~gF#Zxb|01V9Ff#EcB{G{4>Dqa;LH8#7RWZT|A;y|ccr#eXxkOtB zwk(^AKsb|Ilfw9=xO5Ll{i7IT4A1ipyI>Lb#{la3PDWF6yBEKI0w$8ajHDyFH7VRy zeXwz!I!ay+d@k>fM9C|JJQ_L)Yx!5o$vVA1_nXHbU#r!2Vd)-~VmlXh(5L?at$oGh zRYd9;t!-O7@6^%J2?597gxLqPg9=|vUQIZUh9pKn6u$=V$TbiUZL5B#LBPMjsBzxi z1HUYH_=WBsg&?;%cgEiv_dO_M89lyUgP`sPzl$`>ZQUTgn@y$;fD=yy4nzj z+BPxerf1*OV!Ffemt)P7TngsF?MDmqnP`$T+H&W^yJ5*Z_AU$dKLSQl$j7VbqEpnRVAb%hi6knJ`o9TI8op;_|2eR3hII<=MsZJ0Rt|J>eeyM zRm|2CLI-Qx`OsD+e;h?VIN1{ukc+Y`OS{J>emiv+a-({^toRPMWUTZ28X%}E`?1n> zypg#I(;Od>m`0Awsx6PB$zv;LI(0rw6eQp5*JfeI&`yP7vRH}~hr1Ld=YyInN9#lw zE!!R>cRUee**Ah{LS!%w8}&MO2KwBdv@_09#n(V9&rHTQ*f+k8PdnX{%V#ijsoxQG4s=Z=&lj6z8*FHH!4o@l9xgfSdc{HRiP|u-^HI-s)-76YR zPI%_I>*!or<37FAoyL6cIn%`qlV72bnOQpYFp7B`YISy7|D(SJq|@L2{_mN5WnQnX zX5r+nrUqW+bC35cjpF_qzy1{V|HNO-=PO#X`HQ|4M-k{M%JIv%yyE!jpxj{aOE_xX zZ^f?D$9Tbk>WQ-VjBlh@tSD|L+F^>eOwq0<+Ts=8gFjQq2w!j<(RhBenJ@0s8>yUo z<+Vy%NS*~e`K}BPgc4U!6f84bAspwAV1JY%x;Ohbo?imZ6Dh@UA~Wan>u2YAl=4&@t1+XQw$xUe?IF zB>{J`S>OF$bGm5uUEg(UbX{i;t2u-2PoL-Nd`rh&x_+9ex{@)^*zl3O1KP@52>tlu zwY|`RTI~3GADc1(wKwU@gogwj30yH`qNH)cV*EaV_6XOn6=)`)Qv7~_u$;B5FHW;gc{vx|l=ZSn z{NQd*+ST4R2BwrfS-Pj-4wDkuaF94mcGB*zHIp#eQF*I5mcwLcMVN)&RSpAkC$@{( zPO_SksTDJaSMe)pvDsqXyuHV)Vg~8n-}YEf%OI`p?psmqKr3~X#}6B1&_@@7TNIR< zxV2^DdMQe&26cPz6lh`Z`&+oCxg*F?XZG*kukR^*gP3Ys@Rpp?y$|Gw|Dat>m(S_s zlNlPKegv1?-Uw&bY`&N_8+Lode#I^{S>(;Ye=>!}m%xetJsO|eN~5Pm(0@V83xm2u z4L$E;A_1@UI?>=U7Nc6S&m+`M!I=ZV{1jjg0966__UOCOeS>;8K4fqE_9X9y5>z{* zir1SWFvsaWDq^RS^d#32m8&GLZ>;}20kgL0(x+`=E*}Ib#f@(u>SB{iqTF*_(~_Jd zf=D2Gf>`JDt#nE;!fR?mFt*~|xeMm`JFIe};k#4;G{P zCxN+;h(ua51SIbu|MsD?XwC1$ zMGvh3)k~B5Mx9~uRUJTEgy~Ju>QAIFjC`{>jFennU0m;~3U=4LxO@>lT(^RJb(pKk zV&qM(!~CGxVcZ&d|J()dbNyv$v($rkIZ8%&IsSeqnGjhH6!M-*$KtV$=TKc2qei$e zc|h}&E~R-Dt%u95?@)chAJroQq5TUszK+@&e;1TYi0i@l7CFTWmfGU1k8zE_YJb7_ zwQ{Pl1moAqsb&}SgYF`0t?mY^!6Uo3MW3ab$FC>OMH-Vd!!7pTCHn5un8;#z(Ie^W zF9eqEPO+J;EHa5L7L&&})Oz-!Y6Y8R~FE#fjDrI29u8laFx$M>|h*=3#CE7>d6M}dvnT|wb zTj(x>V>jrx%;k~d^`R^v^)INeAg*N@pG$`trqwqg=K-M;?nRV+=Gv0;0Gwtpzp~Bz ztK~lgZm#^Jt= zb$~Akpz{&I0tdKT0JYp;p#$6_z<~nn-~jguptc6uKH8J2|0^h^?FScZTmL_h^p0*DikMHZDHxiC!-X*xtv zR1C$QJf`dFF$N>iFa*!ViB1Ysu!a;r{h`J=U{2b)Rg1p8cvmN9of`~)C z{-_OpDu_BR?}NEGj|w7{Wv@SKg~tRD>w5iBGi(+_{Oa{b?eMrDuQf>25I+;-P=iD* z@pD1M$XL7m<qTcBBFLjV-1bMSTc5;wE3vz-% zMjYfXf~+yfsDu2sASW7RX9wZ@u-JHuL3VKvPS=W!lMJ$}gK*YaY^*iNZVtksT(J=f z5}*I>CJ*y|c9G3_4b3Juy@erkJ|yriJWRtE+BW$e^Mwx@loQ*D2IBaUn#hOX6aw ztgeU)5lUSU7o(=S9xm3t>TO#0? zyTKh7Wm1>H#Tr#z1sA1K7r{lb)HQHXE_Df96ii(K7bQ~{z(vu-`nV{YSRNNQ(8cPw z2E4jh92dJ{Vr^X8dUdfhuI+fk(7CqfogL>|$O9D4wTOq0oNEUjGjXnfH;$ZZM>kD? zh3Q``iHj35u_CS^HwWMv?jK%{aou!{BmE-&#r=yX`Iq!BndD#U)y1mB+{vqpMR9Su zA=bo&NGq1awX;_jE8^mXSg{~3L@}`*uHC%4SZ-6}Wd1vOW&yLta+9$IlP+&N_65Q< zEY01X4hyv3+u5sRB;+>}k=A{6wcQWvUin}o4l zXcZoE=wD>ZF)<0ZODSGZo7Qci0>e|MenUar?x!edD> zyd9OHIDG)#tSymKQAopm9BwI1C@kLYFUcgLtqZ3DIaCygdogupYc43DNi-oSlSdoDbfaglN1E z-j#%C+z-x4LNxvd?@mHA4+QT?LNp%)?@dB9F9hc%A(|h8_az~kCxVShh~|snyd*^P zMsR)-qWL3ue-d(_AQvPds|2|)3DLX~T$F@pehDs4LNw0=mn0#YZ-Psc5Y0QmWl4zU zpWp*Yh~}Z-gGq?yqu@hHh~}l>@+3s_Q*cERqIoK~G6~Uq6?`}e(YzI0m4s;i3Or!N-yiiD1FUlMs!-!8J*U=Dpw(Nr*(S;Myca^IGu9 zBt-LD@Tnw3^IY)hBt-LF@R=k;^Iq`TBt-LHa9t9jc`&#>3DJBQ+~6QKg4!hJM$^@9 zJHpoevct1CW0LeqG%?7y@X@%nD8t<=x7K60`{cHPt2IFL(%K4vCB6;ivjZDIceLJz zl?}muJp0%0 z@k2TN8X8!|S}G4<2LA?Edfn!bV!S5+`^l{DFcHF#qbqfr8TNK;d7iB)4a)x6xif8RPSWx5noQY#ZLiF~abC zbft8{FnWZ)&>Y&b=Gvy6KD;tFw66Dk5J6#{yxXb=(kca9 zs7_e^)ZtqR9YT25H`~RdRj}01Jjq5fu$9;^MzP~w_N3X0rfEEg&+;}H_=?~gzSeCH z|F*R`488IG@DZ1{&QsJU_7lIPLljPmy@&OThxdcFB4OpF++h0!Pzfs14b2ZcNA#uJ z^yHVO^9y#G)8Cn2n#uR~?=&;tzr*5UzJGWz-m^x%9(UQ#;T*XI8=Cf>=32j*N$>#p zV()m*xHhO&CdaREB%?4zC+H2IXmTCZ_b%=o+W1@!wnW>8NR)h;2o_5XIlbo z0<%ATIvzL1q6D1UU-iEZgYSCF5Iux+Cg_lMn7@vVHa%Tf^m4#v36`!LlBpb0f#$R| z;sN48dWssJaC_wF`NE_hsBtj9yWf%j~ zva`eEjyb|ETF9%b8-!(Zs_DXRbE+GJv(2fB4J+nU4+wkAsU8r;RS$4+gL#y=(&n=m zx3cGla{1UAfaTLm+K%cGXsyq|RZi#JdY^@|*cDxvun)M*bSZizoQrR9hiv?9hYEEt z7xcOQS$Jnlqk5jj4LRmVHyQW%0+zaMAYXuI_;Q9yt|0ueIaGReD^)*%T0!%kz<`|D z77?m|5^5mZ0GCO?W~O+8K9@NeWP)v#!5w6f*;4s)A_J=+O#v9!9L7$*=74fO*J}bH zrBq#V#ldE%TrZ{t+}JFtb8dkD21s*TDy;$Dt6Tj>RFA||7g|)SDM|%Lbq>1%=tO4A zMc%JQi8I?G_x@?*<{DyO-m%!3;fR+<)^xbL_a2Xl?7KF0zjwy6dt>+J8O!Ip_t-w+ z)s?RwZbuQ#Scu3(wFz$&R0$X2iFiLgC*~c{0Q!d5^iXBsB|_FD4a1@ujDc=$PeiMP zi-d7MCU($l=Z14+rh)EMO`C(wBSy09J%r`bdyb~kI2vo^K zWot(~hSVt+jQke$De~d9Uh!C)bTF6YVL`T??AE_AO~&eBm~BMy7+RLD9$Z+(7%JA$ z%#GZw8Oo|2L3n|YkL;07_0or51N~Ybh~!Y+rMkBkf*>oxhd&P+c+cN0UJ)}`wv}7X=hfdQlyfPk z+*~&ahobCmO=d?&+1}+B^^zN=v0c5@OY&nIXfvLPu#Qs5x{g8ti++hm=q*bu3`8BL z5V9Du5_WzzE@ALTWCNJ~1AJs3_WToi504*H9&g6-T|o4l3HDhfVP$&-)yaF_`ra~G zQ-Iohvil9B22v@zl|uJT_QdhHqS{*()!~;qBC0z?we`&QW<`CxNe`Atte19XyE=m_ z)lG|CoqjHO2xmOJd}M0H4Z42XnL6lbC+B&odg`?g#_r#yE?yt^(~r+MzTo<)`05?( zZXO6vzeiDOzbAyCArPWIg>%`PMi3#9nF~ySx~x1s+V@;S{`1k{!Oz`NP~(M zRkDlaJlXZ%Mv_}N+_Px?w{UF9UV(g9TSDZ88x#_q+kQKJSlvcDQ)mNRT8Cj_MZwcy9jX#D%SH)Z_GR(H)aIokLq6FZtE?X8|Bs$2_|bH=*h zxsm&AK1iqZUYhjtSYJ8uM13V~g&mI>R9!@y7@Ego7**1A=VN#OtikiS7iW6Z{=}Zw zMJm(=ndNzDTlu61x1?2#e_Vo4b!9V-AhWz`pQWFoO|0}PiXLu!QRP4^Yekf^%2Ju4vgluvYd>w zfEqq{YWpKMr05L)Prs8$|9|`2p0xT^Pn@`*OX^OyLA7J|jrVcL?1~s*;Y<5#;*NDz z-0aYTiH9afr2;mp?Ofy+Li9pmbg7NxGWeTlDZdxB-8dge}8^x}%x82_;UX8sS{zfrs?Ctb7 zic4efOn;+TH1^K&H;ONvcTxX9RK`X9+eEH|7}4HK`Fny@{P%0;s4i^JV3cM*MEuBt zm%WPD5HQ>}@fUF|dd|f&auX}}V*MJNz~yl5h8>tluRDw@NdH>W*Y>8K7uK#~&JQ_5 zD*82UuNT98aW2~2TSSfZTLi7jWW(?1+taqWZP8}#n6Aonuc{2@1~sqhZ^44p>=S*K zGjflneCC)LW|2dL+uY-)RuOin^&z#eHVrtDimbz6SS2`!sMQ&MTdsdaf(gcJ?*ooh zXNj`mD@fx!Ip-02>cqWY|2o4juJXHsGr3}h(H4|yv*C}it=E>5+i&Og&B5U8CXuD;eLSKK8crl zBXo^Jj~}8f10k++gk}jBAu1cb-)H9ffu=SzCq#21>`KDuwCWQ>XjAB$4WHy01op2u z!*;>h;G0ryeJyzp7P|+35>?y&5K%jTe+$ z-eyK~0Jty)nB&NaWj8Rg1g|3_FIdfgH%_pQQa@Iwy@&+iYlJTL94ODLU5FnlsUNNq z?8s;|I0#Qe>6*%%!JmYU89I1I4j3pM{8_Hgd+AeHb$X4972U6mfvs_=+?mE@`f#|1 zw9>c)_u$%@slMRTc!y@rOac9h^w&h$p*fqt)V>nKRP0Hv^a8 z^OiU~o%$;reHh`jqZQ_zsr(IPTh5R!u1t(mHMxytQ@=JOqR@`V7Yi%HJp{pHC zMVB+O#<*=M6P4kskkP-Q)b6@hcnDEqLyV;~R)~$*D6Y;o=8yM3dz77O6wVX=a<)?L zs8+BL*%8H3!LBNGV9FUokA;yZqj))4aI9bjvU5_r$T}nO5}7PYL|KEmTUTSser>rB z`6QLDEf)*5*Q!+P3(Ty(+67_G5qprAtQkMa=#1iPp&C3uBFuot7)9!uaZHJ~m1dPn zwN3Pj@KDvjOsL1iWMSmGQrr3;#C_-c)^|RkzVkX_E!?1xa2zLQ9LFAjg+SC5t`d&(J3NekrS4F@(yOZjLAtjJbm zMAPyrQoZXV>C}z%fy32DTFs%|59d3D#BDjQMsG_sNEj~hW2-5(oZq4RB;34{-xd5m z&+qH}e#Y-_{5p}U7V_Iu(iOju-*^8Xe(xjgb^OMd15;jI14OtC0vSkcuy7=c^}{`; zfj=Ygp3}ge75F97z`8>ezH}Ox+_5A%4Sa*ZE2e>O6nL*`V6kVoavE48S@^PP;4cfj z_cZWL0`D^oe6zs&P6OW}@XM!xzasD}rh%1Za5%ghzH+N!wbv_bzo}sn%cyw4ox;5T ze~fW}VjvLcF49PWn_)+Qd89J&PDZ-vgKn0CwIhiTgi0ov;4gkE_4?=I-IIycmYY3_ zZe)v9a^#b1=5wFrGi5;axh+mEY)wiy>mLe#&d}Xan7z2uK?>n@3_4Y=nJ8R?b8yTy zTCA5c1DSgsc+)QHa9o;QJhsb@I1YdE{EC7K6&3>dwkf%5^xXB$x>r!7wauMjvT+ogLEz;DziP#Rp77a!vJm{zwKkY zZ~=Yb{$m%Ou*Y34)=OWr@*R6%^Cgb3_^h#;UG#506x_E}4O^OVbr*WnZlp6;M4n^0Y}7(2#6k7+`e33>qkUd;IPJfp(@ z%0ToyW61N2PtP+D{jZETqNH||hL8Wz&=Mp@s%$>)|LN4rVbvp={ohYaVXJKjVksf{ zap7=!QFj$}0gVF)+Q-|-uyD9@kppG1&JIZTKWEr>PYxdQ0`BugHx;;y1*a zCR}pfvSWl#6Jf%+Xkz=%(-)7X@`q44i1s1BpB?;#S9=4%#*I`?bC2w^@JzqvC>fR(sO*NT-gc+a9Gh3C;lO)s@18Y1<}p{vO+o@q&6Y zMz4cdY_Bf#;SmH*f{KoC_ZHOrhsu8p^p^|Oxx8V0temvFvchQC*PxpP-Jn4QYfE#{0$-?Vd9uLAG({5)@hht>fL^|3oT?^mM$`%V(_l+>Cbh zQOO9~@;zGom^L9gIGs|nB^bPwuLJp+a92Eom($w*zy`&C$eP=qe;hY#4YKo-p6`Il zQ~g&`@EgGEue*)SIJCUNorJ_cm44^Jfa*@!@I+cJJXZlqQzgwYq#4L?)L!(YA=r)8 zD`^dNWal1}9WT5gwsUnLu#qQhOmcTFk5w6_ut%{vnl?$RVq@K##LIHhlkNgJVwLsgzoNV5$h2whwg>-{Z*FSi6`t)@FGR#fvb5WJ(0v6q&eg zKej^Ig!r6Nt9Lg&R?GC}&l6(19p(V=g&1It)^%8+(Duj|_2nXLa5m^T7%;yszRKaq zwff*li?8N}iOw%*D^}s>pP)U3kI|e~6~gzW2=ABmZ5=xZ40eM~Oe{4F^4LJ{Qn`H> z)%^@ReHdA%>i zk#CpxfTs5jc`s{v@09mvP48Xu4t_aKdpBM>g>0~?PmI_+h{RhQPInhK_jy4dZVWuy z%*g&?cF|^^UB>Rg?BEO~;BW5Sl#jXuq7v=}DgUjpdz+MhI&LcU8_GqeJLUlJ%@|+~ z0N;uM=Gf1xEg|2=w}D1GP*+U@Md)Z1Az@y#q@De9V29vCa6^c^$E8qD%_>ZkQ||)Q zq4QiT=Y>Qn&OJ}ZG7BqN6o|vCV1;UC;>J?yWUhZroJu|E_E+$JVsiUy;&cO0Ef)ho zchSC5Z<*L{{;IX|Tw_lt6@oeX^q1HC#X zqIOCXR_sY6{FM@_Rn4I?L9^XhceES0*qcc4bezH*(^DAuAg}&w;tewl|Aw!W#VU4H zN>Ex`z`^1i(2CPlg5T=fEWw1RHBhSrwI;0Cm!Rjrlu#uw$259^J5-?J+(e4sP0H$2 zp*2t|t94Bnl>J`OX%x*L3;0S84m;aG(SMY(Z~c$B7Y_T2x(9<>2gps-D130x3%*JA zD*mobr>;1IR*5X8IaG4ZNVU_HwPh)C1oCTdZNiH4D2Ij)Vfd52r^PKimA@>sIG^|$ zc@+Pd7mRPA#RZ9a`m^FUo8)v6VW3t$y{!qGRzLqu;<$ePihFAPC|pD-%&Ng0RHnYJ z!eVDsVSkHbnuDaz#sG5w_=^C|nq<{pY#69jlN`!Nu)YBXyA709W2*@Hdz@H|?{sku z)GDndHdx;PfdoHb4*Y5ZQW&$y8pP${e8aV}LmT%n+c-lyz0Cfm+RUW)pT84U#5415QSt zOe3q*eFOQ)x#k2_>zQLZt^JPHf=i{@S0&6VRg;p2ay1Y^9Wg?40O*VX<^V7=2ABiD ztQcSp0HqjU4gg&-z#QuL8Xeq4f*qhRa_%T%ABxA0z(Uf2pk5}Z>eHDHhV7dPme@BN z?8KLPDY_DxKtYaW<=8CYdX>;X1a-&6m;=D<7+?+nl^9?S06j6l8~}P_fH?rni2>&5 z?AMeL>Q4*Kzu?fr0nMc#ubxDSx~CC>dSxtBZltL5IyxnCpq%j9;lj%eeS0MO_z zsh%SjFdv>p?KLk=K9y)7(Z>0j<(hFB(mh}hZRCx&?)wUcBRp=vS=QWMEXV|?a-nGPe3q#k|Yk|X5J4o*y54xwH+ zj(6klsZcL?Jx;esK#T&@&M_u)0N5o4m?K8bA|yh6oN`D9Z*)1FJMr16IUK79!STum zbFjrhgfGzU8lyEwjJ8GbNefbsh*7sFK2-#zgVS6N z=T3ZeD#bNL2-YbdM{%F>**!*Uju>r=;)cVw6^hRkCP(pHVOkbrG6#S?Vt_ef)GdnN zDT272>vGr%#b+x*@Gj-!D4wT$_KeY*1HemSfH|h;bDqoR{m+}vM$6~?RzCBU&r4&p z<^Zrf2ABiDiWp#yIOB;X6J6#q{-8dY;Br22>u)B0Nz3%bHVs=`DaO749?%#->bpoOG1!XgNjVivR|B&Ij9<&j<6?j00D@vk<2QeqQ6St z2?ntJaUhP!@A^F=&HL zN8j+@j!%niNsr@Xt}i&i)=?!4IgOBrl3+ zG1nVnB<28cL<}&8&PRr*&lAK;^`nKD16L~k^>Us=P1N4aKMq==&`St?l)WL&S-ezR zs=Od&d%3ZVf9`^91#u5g+aYJ^J%%?^R2P5;kbaw;}pmOGuPE z?yW6RF8CGYZyc%cbnpmn`VmirMQd|E^%?N3Q5jzVCl@v+;j~3_@s>D~#^K;Y=Xo^} z93tRh67MW0=eF#~JVA&b9!{k2Q8dTaJwbUIs&YSky+pulcrJxgkL~j4vhTwaJPzH9 zoJHo5-{`!{OKk_;lG&1N;|H6GIK49Cx-8C)>(Wnc(@d{wl-}P)a&kKp2Jyr50QgQu zbo~-t!jd2Cr#u`VNaxNa%MGGPCNVh*;29KB+djD4U)*Z@`{DV-nnrL;@65iKhkWBj z<)19C@nTH+BHoIa#Ea-bPT|ExUL|-!RY{>#hcBTH-ZB}dy|lq`$z(2%{O{iyvEYdF z*?x(mm(C=HV?55L_9Ofx%R^jZ7KP=&VDS;w+CxifH$zez%Zzk@nY=7ood=79ehoCd zNi~|u22bG$b=lrcK3o?R30;6K^5wr!(PeLB;z#&ZcFk_-1f8{28nlzLM2W zvAP6h5*%$gQ+-^24AhzaBX{;3hi$aAqge~CPo$n)38bE!Pf;=w`?=VOi6b#k5G9*tdIkMHbfQ@>)@ z;}q!ZOb>hAgSCs))Lq3bv$_B7brn0)jfYYDD(UfQjUHa`OArRX=ijieXD%sE*Nob| z$}(ex$<>u0JeDG(;jRLO_fHEwj?nyg9R2{|jYmiorF}D@c0Waugj5CFFicTbgiwPz z$AN9(2s65^65}(@QfB0*QTjJ3y$l~+tV))u;ngvljAL^PK|BEX}HY3aZfG>j+O)m~Pe> zxjL73oFx`PbvZ$GnUmRasa)zBc|0oGHx#K9UJ8Lt-N(%Gm(x;FvEC%)x@&V; zRIKjm_EFkzDQynzxepK&zK)3D2Zg7bT%`P$8F|FTj8L7R7~dt4^D~C85%PScJbSDv zJ(hfFcK8?O({iO$33X@?AfjZ;J*A%Ab@@aOQlrjXo>Q9Bvw9zG^PT`y3U|BmJB}Z7 zrojY%zTZ7l;uMLy4?lgGg)N=jar)S;uYQUU3fq64H#_rMg!V*#cc75HhT( z>4%p9u}3cA1X8=-ecMS11Tr;#7ke7|zd-b4^lviFei!`_3r$dS|Fq~2*|h){{aQk? zctS%gyE2hd8eY7&78OCh;bN)MZE32fMeyO1N)@-Ip<-2!ipyk)S4~R%vS#AlOFgIV z&(hr9@>sVwuAv92+XLKJz)?;z%e|%Ep{`PIcrIh|Z~@1A&iFlch{TNi zCV?b0n*+d`V}LmToDc)d0borGFb9AWV}Lnqy|R)z)L%4F1%IH@-3;Xgf0ElKC=9*H zZS#{C{I}dTJ$b?3Zcb~m z2F6TFM)I_R(sRSj20LcK{JWsv) z%2f6cdaTxTI{-QLh021c5}Z%(4W1Jk<4qkg|EDzFb~^169TZhlP1OWChe>tmr``;% zb>!d8+x1*Nuo_Hvw{Lzep05xcYd>>&*fAacm~~;0g130i0vs=w`NFC_FYE#2Ucq+H|DjHTw0Z{lNakD0_cZly-@wq{(W1C* zbA?5TPjuwwMNRmYJ|{Pe)@`?qb>;lj0r=kvE?=w$PpYcorF7qJ+rgN&>R);Aek(_* zyh`x6VeTXE6XzAjdkmulJQD5wd0k2U4PtHNSUh}AJLCQZE4Q8Wyxu9~gj)~eHYVgwH);kl>AZ2O+!=T8WgTwip|+7W>f2P;X9{XN z41GJ#7>vBvLu=pSNnWm1D5kSd)$43ijr|C0i6rP48a5?wOU73RkL+0`qO?bDsU&t3 z7K{u;{>$;NU9e_#VeNPXvHKdk&KS(WCYAR5oSmAaDei*Rh4C_W*G895N048;x}5cL zbom06UCt$Al(L{K<#;Ou=}bo#E|9V03a~oQ0=opXtVfc!>g}({-Dile*nD%M6RVOG znk1=f_%TPPYWymkWb%TDZvCM1OOhzt8?B@~h{5nzyOt5eiOJ|=hu7ds#0ob-Pb?%C zP>@T?3VjA_8hz8dt5v8|^Qts-s zSJy?s%D&8{9cym$bfWCnxhn`tox{Bd@i&vEYvz{O-$z103jY|zsqW-qW1&OsFv}}( zdB?d+rCG{2N@JI4zC>b65{uM@k#kCvDcuvaSu>Wng$Jz+?nU`|d)83oYj-_=X(DQk zy9#RuzD9ekIcz*FnhUl2Rm6g>;=GRbb5R|y_pflw9wk@BXbI52!U|iieMc#~6UfW6 zCneu|wXsvB+*6&8sQ*=>N0HS{!jG$+dl1PG(o5x$$6Ofqa#}nXSe~p;hAJ|zqn2u| zes)tmxOPy<1~yQv@p8p0Rn}Ib%8F1{4CQnTBRtmGl|ain=%Xx=+Dqx-?)(s9qSQU8 z={*?OhrI6g{7_dDron#5?`GcZrVo9MvT@BQ{Fc7FonhYa8kI1*8dO+*^_J(JD-|M= zdEv-7$l7G}38qcmma9EP!WWM5h{dp~cs{26DN)K?uIe4@ZMLYZNtQnYvzX*nb)`AA zrxmfUQl4Mkjv1z1{IsC7!1$>ze2T!*0=F!iPbrK*^4<9##G|gjj z6vH383_hVI>7_WV8VbvQrY7Nbx3$Gqo5au6t|lduhsMBf!(w&K9d%7OR{!P-Pn#vF zBjf^yHU!5$N<6j%-+`B1{BZ*9Wu4vM3A_*FW zVfkvtc4P#V%|i_?l{%BM)esnXTRXv?{%-A@uCru8A{}h@xzEz)xDp)0SqME#_@e6l zr%g($u_6NK7{Q%W986vft4Hh7kI>CHQP0|Hg!hZ8OLO`0-oraE{h=j^s>K#1{wNlN z2Kkw9XG~5LS6f7FIoSZ5J^Hoo!CReh9=*Q$R+@?92z}h^tEUU#9`$`2PHWe6sti5r zp@+9^ktS!+5xP>DpqsCw_f3TBk44EDLXd9M^~uyvHS+vZb!@zLJo%kvb)>ZJmEpRw4fVJ%Xa6$>v$lZ+!?8!VkUctA zSy*!-Rtcp9z3(gi^g8t$KRe}Cd=GhfM@vsbv^XBfn%?CXc{|vv3o0Y$CF+2eVADg` z%@*;4-o)SDmpZv($B;pp(AiA5%23<8&9{mtHX=FCiO(vHY_rvG^#6m!B2r+$0@9g? zKi&z@ZPwzkTqc&8z?fqL<6&q{sJxy%~mPGxUm-K~@8 zgZ=7ii9WOX=-e*FLkUR5>nIyYLHG zUtybjYSu3G^sHUXidl?takN#@l(jB^8y@Gkm=XQA{0?N(YcAr|Vf;SCZ|nydRHxTH zh|EzgmWspkyosK#q)zUMnjjZ4Mi*TjGrAT{=nAi8FzhHe!&8*xcoHNUHmyu!xnv3m(6-FK%JKIS4o=D*?#|x9sx#Cbljo%Pw3ji8($dRlhjsj-4BG0ZPgb>#}28ax$sk}C|CA^8B^ zt<=!iIvAC0XOo7~;b&Dz$a*5??^B6kgI4lkcpZ`YSEw5=ylo0M66FDvhnYLF%`2zP zYc54&T8iF^T`sMRfbaWLL-is-%+M}(Cf4i8--dDT zOVH6|mgQ$7+l)O+3*^@QNKIKPm0q|hql`=8_tX%wH8*yPB}X9e%3Y66!pS*okcbxEur)^d9V1^9f!=nb7zt5UjI_<|Q@A85#T=7g?JPb~wIv6p zYCi{#pa*VmwsRuI$RkADtaihcidt%RqAPoZNle{J=baP&k^t9vt?O2|Z;~T)t(JCR zCjUFBW?_7kU`G$;uO;vlmbW3DRhQ+~eOL9zp@`~l6~*29m>y-+9ez|9sr4Mh<{|A4 z=2vU6IA_gx|G(B8RW6hYv)8JdUA^@RRK)O$U~zNN+@(zpmhEJ0PC70vl=7>Sb6Kfy zk`+7(&KZgpv$|&sRij2$zEl|J4wiPJ-Hg2a9nU`ZoD+=P)Ah8w+i;uf12Hjxy%_3x?_1rjP=hHfTdb{KvvHcAn zn#A@MtTR7h`yfMa#xx!En+>~WBY)(F_wXiOPC;W?%ts9K^)6dh_Pml3m`fKvgc*D% zCsdFxC8{YR`YYLd?WoA7WaNlEqU&(;bK%1PhA`)&oO9u8$T`N2ym%AYC&UV#6QoVC z8_MAD4wJbv!I7kAV^X=yTdV~G#_MC1i?+^m_<4G3t&a`hcFfSu<~uXvo_{Il(>V1A zNzkXMw1==Leg|{(*mYD|C%q~Bg2s#tOQiaF&}fk*ZP=rDz7?}v;0misMx6H(XSCbb zCVHlReltP7x}vKX1qWz?WHDE3G>@*t;z)~Rb+@4EPsUKn4^{GEFJyAMn=9pO zb8&`Wgu2$qy+0j4Z#rVlb&^R%Chh-kt&`$I3=T`)M*;1?#T@Ey@mYz7q3>O&SLxM! z`sJ}2O$Oh-3C$hTviZVAad6`u;N#Bcd=gq)ySEP1KfKzPC~4yyB6zh=ViBhCZaM8Z zg|*e$@}wK@vX60MwK|Cg#Uwjl=%NGlAqQXuYu6nXVFcnddnhj=C`^aSOON71Vr z_H4-24QbK1we-Gx->JOA1uR_H7(i?{O`#pw70}XRT^hrA*XUnIVWU1n1;6liIeKDU zzlZ%TvjtFp(SG`a;Cz>rN7Q@4O2`Zc_-DH55TdFIZ;-mk_ADYhs;kVhsI8ud_Mr>B z0Z~ue(c!ltMw^oZAa4%S!2+xO|3g4FSNcSg59r3PM7sX4x zi?W_WS^ape%gIYNd<;2>tM#~~0fBzXReahdiZ9AhzK`Ow@@dyj@hIwTu``-g^CJ(t zMKjwn$kJ%HuuIZYU8L!@L^)LSPZG2@FzU$V; zR}Gux9M-WX53p*XO~Jk@b=M4!3$SA8;8XMiSJ3t@e_l4wDC?@R5N>ZZXq_Zi|Cx@R zHKf=;5ME2VeE3t9nh|ceGjIAy3(INKKB7XtOdYF2hG&-2PUEGVF-0XRMhX}v9W8r1 zU0l^59*>ohX6PkYV5G9V zU>{%&ZM%4NYX=8U2dJQBwcLb>jRgx6-(%ikbr~o#9tL;da2{UGpg(TSN@@^nLO}vI zLU2bh7viMx)%Ne9j^0Dtr^DMI27Ov5uILs>h&dbeXw2Ezwt#jgMz_fv2ptozyt6s; zSsu$X`BOPk^Hx=NiDEwo;$64#Caxf6EZ4c9jr3B_F-tYaUJlo_q6;P?=b1df8ClBh z)lA~You7{%r|!78j_GokhtUwYE{n%`d^`JFT4%<6&<6D=65Liemgx z$Iphtc(A+=d}uBkH*y4@hEvPfXHX0nWU)oj97rF&gL0jB7w3BI2{+c7n{YiHmmT{s zrDY5X?|YJ7ayey zUJBh;vCWFW?gFgjSH)(6^XH#nJF2dn`2sb!gcR}kfnrbUT#aegkJF=hKVw-9HaGO( zn9oh7OQW7PN8J|Rg60-qDV-Vh@`GF7+xu~5m@qgTTyvxSpA2Fj?;vt=ZbOqyC?|%d zIgTct%yf>eMY3Vb$!?j{G4RIwC`)GGY4!?6Xof}iOl}66{=T^Bi+H{od(g{sjN(R+ zs5Wf)$>xF;#v0Ahr?S&&X&Z~mnObieCbC)UbvA36wioTjKqGyxu!nFrCcq{VL9uz~ zI4&RRZaDFzU}YDpHqxAtv=T#OudO6@= zUQ2ogghsY*O9XpSDw{IIy`Kd#RE;Xpd7IbLN||gAQEntkrIJD9u97mcdGjgm?V+i` z4D9$Nn+l=-Jm|+5J*5kONGhnd_pKg9Dui2YFn5a0hR*UI%})IS8!6w}&u zzRE=(Vl#Yi1z2KTcdll_r2=%Dz&kinF+&p@#9M>9nyQ5c(yW#bTus%IqNzF5626@# zQA?*N4smkiz0}+J)LV2WV~Vr`zyHIQ)F^K@NO#tGId#@TL!X zP5bt71!X6WN(NjEf-nj=HW^@Axm!zdX(9y&Mp2I0i4&8lrT=U9G95k9xlyxVI&0dS za_P^jaoe`o_y8%Wun+2EMQwaYPN!SaxLoc^;|hJ|ocBSdipG@=^kF{CRcUOWr&8EA zfxncn5^_Gkgd}{D`|D^24QEZEYLExY=o0H_H+6tF6u2m4X>zQ}xEEVQd4DvYt6Yo< zCd$Gcde7``j;(@INg<;{!VlkDO*>!6Kv*1*lFCk;B`e%KMniQL=`SZeA8B&z_Wmf1 z9i^#_{gl=U7Z~lT2GM&DbhvejE5VFOCFq)guzjUyLPF5IYsuL1A(fL?+EV?D&leg_ zRgv}t^j#A@p|+H_)I?N!kJiZ59dy{L8a@AnCEOa|_z|X&zm&dkahh7<=^D2u<+io?<~ZUIQAOsGR|#IkBk z12cr>jtcmdIZUKp>8S0AUVz&&qnyj;D(s;uXLf7!Isb%Gt_%C5qN%G8-VX(iz{=7# zx5GDfCadZxR8#+6Ypsi7urymZSV0RcmEyvCD$lRTPZwmk7m<=0lx*HsyYz^C?;sW~ z2ImgW8|2>K;A|VKJu_cVl$6)RhDc}_WZP4!Wpnur@LR}F(m{2x-@|)Wey{$`(Z4?Z zo2!5G^l!fYEzrOIg8t9u$t~>ZG(JLU8DT!k$DJ9%5vhx4ci*N6!DIekwuvBA5gj+5 zCjQUOUcHYB$F`PfLJ#2HkKdd4aaYGC9W6Tlo8OMa8B@e&hd2`y?Q97#l(Ww=mJF&B z)ap4Fv5>F5*~RQk#yms4iWN#Nbb%N!o}9zf>`r&_zCJZx?JO5?-X-1obxLMX~T(o>QeGdf^y4g@(W6D=y+R4Mk z-UqOUFAmW-u^nIBrS&_vxn?~_!f(cJxLG@9NDAKIF%C39itYSy7r=7CW2|&~ zd2k_PWs*PQ@sZ&%)f!!F9=qCc*(QB5jgRrMF&7J4sf*z?otbBX26fn#N^`Y+11?9i zml`F`5PA8-bXVcA&Czf=Ynu zFFZh9A)Sp=mF!Nwl`Mx5R4j*6n2TJ9-c;FAVcqVT>Vh++rMw4yh6pl=qm|OuS2Iw% z4Zmaft>^bSe$x05%W5@r8NV@RgOu;(PyM6NzMlMpv&h}hnLSKa^{T1-see+0V~OB| zQHk7#A(2^3A+T_}2i`(}4JSkXjMBbE$lu;XF6}y{`?JDyC%ct#6TEH`cx*+K72iIYKS|$b<^sKMJ z+T8&Xb5%lVZIpc}RO$~5m*MaZ+*0142pBUsF#I|WFZhPMS1}u0L(Z|G_fN>3XrP(4aD zPoiqOB&zF#>UN~v7lZ1;si?M3qLQGwQR4iILACExR11@+ZV)OqSY8yWf5IP=3b-hV z>PDfu^F^Y%aVn}ElBhl>R2RQURG6rlOjVFXB@N4scfCkdeN$2Gm_+quq5AlXMD<KG;G9^CuD+2-eZ zf=4}d-0oF5yXW&>z`OsN5iY;}QyLBRM#=6!#-FoyRDz!ndv}Sjh4r6~!-pmkT|3d? zSNC_USV?9mX17MxOgu)2!=ivGPPXPYkV@t-N}2w%j(Vu}P38%EPG{BT0~bB^d&~Ya z&Fo+DJlQW;aUU@?i&*wz9GNN1XKQB&F)AXEAK4 z;%Y;x2R zZ`~+ioP~FB8X$GwRmiAPts*R*8YO#6E|v`M3Wp4E7sYcjyk-H`-I}q(FV2(}iI|GW zO1F}9ycPLk(y@AOPAIwH@8Cdf9mBK>s0D8FIDDs1qQf==qWad%G8*rdv{=rx9Y_1N z-o~S*;w%1e_XdhQ0vsvv3m7HRmPPOD?b-IhTPL2y4!pYos4gL;zK6ImOk$3HF%ADeeaB`& zyys^#!9}Xg%sL34G1TE_u8||WTMIM{46CV@&~hfb`rA^tlncwOqgGr3Il_Aq365_j z*iH%b=fX3??Y{AuH4vG~=<86AZzjMq?qxnYLDAG>;_R=8u?^DiYq!GW!NnqZFn#LY zS`disu_FFo)(?i4L_~j&R5{rL=*&&mg=vZ7gZc0RI`Pn(^5Iwcx+~>rZb_~1-M&Td z>i)tmWBx*?WW_OK&zjYy^2El!MRFR(vCmbf$CIf>V?@kgcT|HE!G&-%&u$h66cI1^M6D%zs&C z-Gpnq%r$b9+q&9WN#-~ z#`KxZfNx@1FCI9ROZKkWt&*Py7luQOdvAzIu%rhm>AIMQxU@BirJ^K1CkeKWDvY7i z_7&3M@0bu~d1LS6>NljvM*vnM^IM%EZ&+|0I6w z%cjQe<6maoZE6(tVmZQ_6POK%=gv+6CySyH`4mLvR10`uGlS~MFxvrclmMV4a{&8rfT zBbp_dTVy$m`QrkoXj@uOla zgUo%}_L?;PYFJ53zZygm)35q8nao|9vEAy+C4=ZVEmOOUp^5EECfpC;vWE?uhQ}pl zH1G5F_O|Zx_HwuPNP-AX^>VjY_j#{p>*8}{!{q*XeKL(N=z}4bFWNV{!uusW>^pi~ zrdMi2bF~&(MN>)WJ9tYr!@-7-v&0*vAYO6-5$q zZ4)QkRJvrIdDPDpYNxvD(S%D^X00K6czI*?Xu7+N*IKf{$HAjl9WkTxXAnra@=tun z?xK3*no=r@*io2*i{mhdm@QFu@w>9~xa%!767Nj4T>VoVrw)yvEz$CtVnOgG;tb76 zfVrH^d?{+md2P;#9Y|Lfn((KwBB)Ic(26cvI=IFnyUVZn@ENGq^K}Vz%7`|%u4uOT z-V05)lEs!lQ5;F8c9>TCyQ@a4$D^nOo|WLUy||TYFBq?Hh$#GiKPn9DIj^@Y;^$poD9q8=^J4 z{rN%>>;mZ|oNdBMS+tH|q)UBxYrG+`f5Gc{fkGFaWzuX-l)IXr+s;Ob+~ss(n5%}v zJvn#JITPJ;&bWKdOL(%}+A-^)K``#z=d~Q%pXok0`H& zR8X(Z3Et``@5SlC5+9(-v zh8b?p7xl~UGJ+-0S5{8Iqwf8+S3u)OMdNNp-n)NQ!cva*-_m&U*Mi+IW6@~ zyS&I*VDqMDhMS(ww=>~At2?UPeeD@<&li@a3$sV>Gh3J$TL*3;KfAlhbaX9TqT8FF zp}vtv!jVoB5Zvig0xag#oo#?AV4VzVsE9nD)J&qeawDoA zpZXYi`=%np#phSmGXJSVEcsWbS!hu>xVv`zAPej@3v==&YMXso2N`{>{~`PY^3 zXqm)BX@6c_^iO;^p3>oK|5V*&3qDP8$F#K$;70;{Mu2l2KsR`T&jP5PNw6-I1lP&8 z7T=@tT`%9!_%_RTgM0_!LkGkQZj^6td_R-#^YZPAkIgbK_=0=^KB+YZUz86+BBwqj z-wK!{z2ZvU@i+RoYt1)?n#j>)Hq?!Jv@MR(T^-H3X`p9pl@FR71De(Z`vNqa4@a~V1y%1`32~UQ>t7j zNlKLT>gFM?y9wy@tCqi!@xhIkL0o@!XA7087-8EtCL?r}X7W=jjV@~aPt)jj(Thv- zQfRxz`i2H+#}~D_mN*(J!w1R z)#O>h7Lni1ji>yDL&QJY9+1lQ9MhKfi2Lj8LlKRwde!BCL>;}iNn?~}Oqa8_Y5Z^c z@`*HGdA>Bhz4ChPf8=xS-#j0mOC@(W%}u9n$Cth-=^9&d6Dy`s{O8+6l}JffiuPl= zh^N8Y)NnOen;LH1jMBw*Y)nXo>TNdg%aS44WXQT^NYqOl&Zw6(VZs((NpI3)-`1Nl zrj+aAZ>kAh5PUvI#oCF5;Eopui33>4$Y~g#%}rrGHyyx*tH@vO^iDcn*-wl9A?ffYE)A_SENYH=c(ctnLn-|dHdo78`(N&Tw{`cX3I;bzb%`uvv66)%ct9`OEH zi9X_J8=X$u@uxW2xE%Er_=oXeMrsZ;a%2s!-!5K!jwN<@)&hDu=#FPaBU8a3+^QMhLQ3eZ~a_gwh$fe^VZL6dOE!I^JC9Y zcKrbELHD>zd1)ba9CFQPTJ&vES%1*azo&7X$B~+cp~9#l{skzQAj{xUsNxFCmf4rU zc^WOGI1|MZ3iYTi)c;XvU!?mU^^4k}twvI`0$r{CThTK0O9==c!d>p{>J0t_UvcAG zPtR0y_)o{7i8r`IN%QNsfp{rR){%{TLC?U<|%?ju0^0Qc}^H6PuB zL>0zLTwtKDJ*J=x_6Zx`fe37InXI)dG+fu@4?o;i{ebMG0Mn#LnlC%k)&i@5*lzs< zbv$nKrJwo+%yE4aN0=x8Zy4NRe0w zlSfy_mf0w?)d$cSBm-v0M7tUBya63f%f$%C~xWiTlvqar$iR$W^gP7NOUj zHszqKxYP$J*$6Kj+cw^CcuTnmF-+V(Zph)}@MlzHPg(V+9SJ^Kl<)nZSlJJLPN21G zCiMks@P=l)`r$U>jqWx^$z$Qq-8T^IMvCAU)->?9ja#io3{Iz65VTFJv`ZEQk0E6_ z+s|f_DfX9Vbt%Ga-iG1P!KKP;vz7rVKU@zO#ed_v_|9sZIJ zHW3PIF=2cx`K=i#mx}TnC(lwW8xy~$75_=%yTp~Hx5Pt%E@nOdP|%KX6B`8DYrg?$ zxq~C8Qb$_>yCF}3jk{`{rMCJ*G#-#&34+#a8j3#z#p&Ryq-p$sP>+&zG7Q}h06TJu zaXB$coxuYR0^kY(W(Hpe5L+~eYJB;vu8E!|16oakPHy3Fd6Cy$!Sc&xO+C=J$xhChjC1?<(b&S?cang|%gjIJm?B$G2j4{`Hg+V-P9 zM_$&Ay5SO*2kZ0hQV|`if0wjt?|4YU21_#sB#v-28WL&;N(RYz1w_*DbrK=eDp>q3 zWs13>d=BVAKxH}V*jEi4Otju%ET^X@wQC+*rlN8A9Z)B1&`7RD!iK znkSx0k`k$6F7TwYJx9lPn$xyc|Dv@OXX%+KRiV}{W;2PJ zNXIpS`jFZT>%hMyd(~^s&dwc zGNlc_@G*AtF?&cE0$EOldfPSXno)40Y?A3pX}E3|xNhjJ5!*%5)hESvCZENETO>q% ziU3|C(2bj+mmx<;bQ@acnlRs)(WTyJ0C6+=QkumsozE-f*FDCDj7ICBTqkqps%oBx zx2>_P7U2#}9m~hzR^8sRAz*t-WjyOKp(O7}-2=0=q~0O!M$P^fYoedn-KcS|ZsAQq zSmAS9;bT$we2}=~8^X6~h4*rrAp~10dvXw9YUR-_r-_x#`%qr}e$lWXiDQQr4)U<@ z{$%)QD_nUf!dCK_bkFK;;!L?>RToSP5z(mcz0vo+=qtQ}e>M6(pzkwYu!`1T0iooq zTa=p3Q6<(noDzGTnT8U3o!N#Gd!4z4B?j5o@eAoUqVG4O@3-{*ycZnmkbey?$Q2vp ziY(-cEaVn>rB}CDdJy9qq*7m%jqT6yy#-$HDaKZzxjm72Ok=A*Y|eA#4B7b1_U)V@ zZ1b7U@^M*Hhj!x!Wbk;g1-$_zx6;Wt`ZE8jnTUJ{F?RxUkmWo}q?m-@hmQW|3IJoT@9 zZ>3DmPIIDM>BqDuJTui_3T}rYmrG1U;IPj8;cn<@vdVgzgqXDhW2YI$Y5oLJ}O9&~}rRoT_y zzu5M+4%?|aw`LxJkda3%f+{w>d53~C^sVzev?3q3y4#EqN*=z?ICBy9Ff~RT={@sU z9Hu^y+W!~sEfxxtdiwXSt~5UH1({#b*jLxeL-q&tWdi;#A1WmVWDPJp%gb7Xg>AM{ z$+0-Fh}Fm8Ou59N4@TebMPJEYf@|g+>_ovbKQGGA+f>T^8C>k}WSk#~*sroGvi62vBzMG@(X} z8!C*KV>HT{AJy50m5X|Kk|5Q`uk_XX3g!UtbPO;DfM3S|a{%~F3^0f2&!)Zt{kLoU za!Q|l&Q`Qk$QJ4!EpDqRuiIXK z_k!mD)<=qL_1CJ37hBW;z5g_x+D7nmRWS7@g&(u^_Ye*LPf(2 zyHk3n^?6k=gIm`2YPf-;y7uf1DdR^=Gx0JB3nP>Oj?B`1`j)W8f-p(KrN4biHb7^V!L^MO7m?YX>*KU#O@2*(JEq8qvu39#N}j@7-28d% zRGwW?-if1g5^CEs%P~#lfaL_Ky^`AhxZ>ve+s9eWxy#C$oW54zK7aiw(JPVS&1!Ti zUIK}|tj?6?)p(5^Q-B0{wLi!?$Hl7uj%3zP%t0^sQw%T%fM;TWIRN}Q2ABiDUt)kc zXiML&)lyxlh|l}CZ8Ey9o&+Tk;(Afz_oR;9e@M9hh&xU`D@tBh-G^eAnirooq0(q8caE<7mCqzMo z|KT60#mY{jkv6!Cb8s(zCB}C`#Rib zk)IFW0M>Ha6gd70kr_7`6kI!JT=Et(IX@dIR@dp&Bdp!-xBN8xBg^>bpMXv8*&WqA za{1iqo?{U+d9>#8P$Rvz{IkIdA|g&=po>FX0anHUY=Lv8-ce2G@;lv)f(TnS#wg`< zL{&UR6)q2b5)JQJUEpIv{BlXP!+WygR4&2M01?Ky==&RXPe$A%(vMFR=&NA%#FMaz=#u_Y| z-j8orNvYbFOfIBIgTm=$f?OG{!U>UmJQke8<36s z<{%G^3v;|w>Z@){lAN&YxA5-7yPKm@+6_u>U}Q{k{`T$;?x4HLbiikD+ND1~Z;$tq zG(V6|r&4>|4fec+EDpv_G57${_Bh+%+v8k(bber1Af2X-y_$c~z#8#Q7h|cIE6~*K zoaI8=*nY(D~4ueTpN|^&S;*Ia#mClzo7|Oo$htxky7U+hfv&F^UDmX0?YjmIJ#t6SldVc07w^?Q4Hn;? zJsT?I>c7U`nEqL|p|SA6ugru4nO=$; z#ETkNW<*~v`uh4t<4U~e06O+t-B_ydSkNlE!Pj^FoKw@?;kSk`MY2>w*zE=K88I&; z_S5^C`{@XvTEDtD>C}YnFDeJ|wIp^IuP4JbOm4i3 zttXDslkpRmj|a00T6hvSjVHldSE#|0h<}st-yPwP>38+op3T#ZRnKXZa!^3j)lgJ9 znw2k_I~?g8#aj^=w%s>d=%01$Ly~{`=Pm8i2!@gYXVYjHCa(2XeVSFOATkZa3u&4R zwK$&cpUH8-K5#D&dg~$kk(Qsx3D1;3%tt72UsAd>aw!hH<)y}G&Tm>DSKfYI{}-c{ zq%S%$4iIGM$8>(t#m=Q~j$i=$&4cS*R2T36u=gflauwy?c+WZAry#MEWzUP~H`c%DdRlQr)sZ)Cm;#e-mQ4!>3$g}Nj zv(a3ZMF#eR^eRb?ROzxU=c**<iKxoA(PaJG&@d01tZ61>g%^prYUCS4H}!>iW?V>&-K!uhMWN{%l+%j? zhu1;e#$?xe<-@vgXT7TO`s<6Y_)V?&F4l@NM9q^Kr?ORpUVN48p4gJy zI`A!XS>2Y_=+@a9c{fJD6Q!ll2PY-E8{k^*S@K+qCy(cH&lYeKo>;u(UIqJ=;wV#< zWz3y2GsjB+Zg0#Fwl%s*dYf>0oY#UB?wNQLCbeQzrp&z6=#lNMOol5I9VAI1N#9rS z&1~G4UhRJ~Ei6jmqNcygsw%ns1DcHlTLn&>2P4Jr6{!QavSHK1#w< zwS=Aw05nk6mV6IZX*AM{t0%0AjKY+e6pJiQ!3Pjd6G9QG8BX6b5VU1q`Y2yeqrn5C zG_Z>8-^Rt9>mgAE=OJUwTXB|;SP2BnYaJHkT9K`FD?eP<1Q7lnYv2q^`&+C{mnc8K z`->4SbwQbL2p1d0(V~+jMq;4(Da(0Uj3Y~`#N>{)%hyp9a_g~k`8BlF8!+3={MfyD zUlcVl`wfqR_P6=YNZv@fN;$i}2mv`%*cMNO0`69$g!p>@!g6*M@D|IPiy7wg;z#xr|(G-)g1x$i}#h2g;%PMv1Av<iTdJd zKx!mPSy2~+`nWPpTm)!{$3^Lcn4mGPOps6}P*L!i$C`|GNL^utOhsnv5FS`PrH$A1 zvTI_M8IDCjYRt~-KoTQ$Yjoi^)%UjbA<1xPCj& z1rj}(g_@Vn01fG3Dh*-qIHYjtN;XPD_TW3Q2{wLO?8qFky$mEtS!LGPTp!g5uy2)9 z`U`3|ysA=mN+>Okv=gu@k+n*JtJ3*OC6tKXUpY3SXvDpVAQ4BsVMne4uV=tZxBc_y z=$?lfpv4G-g1ej0EFWB^zqWczzWEx8Lu3CG`1f$Zx``Gk(2-Zv($*wtO0T zdv6_`kMwBfhDdHp?UtlE{aGUo>oP2z@9l^{KlH0odIW`qY)F zUSXCcuI3WM7kLkw)*4AJ8(U+WlqCSEdFkUKD|f2?BwMx@KdAgT9GH9W{8Nx=Bj(j1 zaDMM%V*kRjgc+725x;Lp6#{P(;;A*(X%r%s zEpIYV4f!+-IR!pgoO?}SkEwv}12zk{?c#DwP7j zzTvUZ;a{nP+^!sr*^olSY>{z3$6G>(o^EbR3T%P`OTI9dP=P(K<<&=0J)xJ`QxV- z%OYgyMju8Y_8x_G8(i!l>o$m3;KWO(ffqW!a_zNu27rXe7FQvfXxy7d9In>r-J1%p z)=1{qR^a-B!;X&FY&(nJzZ2Yv9DPD0#TX}8wxXY6@R*Nh<07=&Vq~a_r6A?m10oI>5#m*os|My+qstXt0d^}w(E?6F`C3W za`nuTtMD%Dm054KoCp=Ls;_rNmVRBmqa1C# z<;Tj;`TYo9$>&&qV9H~1zf+nE4p%EFY;OPnKHxNyG7>Gpwmhaxyc1xM`e^#a{^`+9 z6~~d=<^!c=+tZm?WVyDgdDbX;rIZdLa z1Wd)t(+N5rI^j5@1FLKN`U2ZdPQq)LS%A7|+eQFb9WAY=p7HtYAg2}_k^V$}jfi0Mswl`R73lW6e!dLr??ry%ifDDFvt=7!9ZTO8P0{p% zB3H?Cepd=}dhQ~0ebccX7FbLoOBrU@mn}$qyIJ68WAJC;3vp*&ql%X8Kb4_eY^@Mj z&MoQKab-wSU6`%XnWBH9B8Ikwev4G3b$Q%TLoTe7bPMRXF%*tUBN1gj(=QG>r3I{B_?afgq1C_ z&!gIl)X5wb4*X2Ai>~Hk?t=Scyf<9Cf0kOVKLjTeRLhiBmT`jDdd8^pEG*{i)88=G zkO}OpX=mk&f;xzT3e;+=ED5>RGhUv6K(C0^^SHP+gzhltM$AUA!cNK)O?S-otIC?+ z3yy=lI9kTgr(+Bm?U0NI{$hw(Q9Zoae?*mZokqH9p)&?uEp+Gu!}{nQkohO0WzM!9 z(6DVGp|vb5Ch_trFg5!LLx!KO3kEu0dr$&GNxb`zZs^5zKW1hmV~D`U_*$%j$VkDk z+y|t@at>l1Wc?{*#n3zrX>DiOQ;q6FPyka_`b8;(PN<=cagv27h&i0Wp?V=r;FtSk zRWIZ&$M1zSlP(q%IlU6Q(gHYlSkN{v{SMMxja?Ot=q(~;^_~7_$ksiM{)bBV7f^Aw ztiv`s+)N{+G)6;{q0U@%#3hJ8C{_sTV)b)sXmeGEq#gQ&Tju|W4#`JNheQNI??aZi zw^(65HT@6PEiWOj!u=1t)^aXdeyP#{yKf90T-{H&*0A@U7{01Y{4;?dYtG+3jGN7R%c2fF8I9P)h_6}IaDVY?3ycB=`CMwWx$zx({sZIKRd zCqs9ka;w7t3nfFJ7VFOiAKz`R!icAV&J2|n2k*oz&{~G7UZoORw+SsACRIa=_&DqS z_BjceDSz3Q0XpA-P~2XOEzIdTeCqzU2$NR(GNoC9h0JkpkBOX+$O(vr_40KIbw+^V z5ni+24vn~GeL7y8G1sg!g1=^+fK}#`vz8rnk!}2{qW>u1ozcRy=My12W2Kjt1hrAd_I?0HQKHx7jor%CM zc?E=hQg@NzF7Dv2hiP|VF*7bBgy-Mj={1-};VX?k?aCcj^LM zTLRMz`rI$?9_C|vGJjsYHQAQZYxq*wMsbJQ5T3&1V{)W435v+FzP1#$#NAN>2RZ$BC_gsL-65N_TT>5E2d+-!UOI3exYLSb2#^}n9&~efeQEmwwu#X7?t@Tj z%|a?o@l?*YwU%6l-HCKm-k z$Sw%gcd4fO5R#k8GBsz`pd2kd_Bi5LHSb|Wb7ZwRFN@UEVAyiB2OZ=+IJ;m^utYqV zH<4+u)+p>lmWDNpu@qOX7hjB=2(4b6gm|i426YN?QV%>KGUz&mSmr+J6yo<&r+mlE z?n^T@^=bc`J%s|{o88b`e2kM#H{)fzx-wPRW1Od|t+@g+9k%%SNfglMvA@@tTI!Iww`Fq0*@M$SgozX z^MDX;i)~IMy)Cp}u6t}JJmOpoG=`TNMPeL2-Ax*1%e*u{|8tU8s@ zn9PWmT;>-BiKVRF2s*ETPB5NbKrk+Dm1iHGqsFt9Dr!%%xxidTx6^HP9p2^4Nepnu zrLsoTlzNX58TWvqa+c_9nkK5p!k1D;<_E_ue?vXpLxDm)-C#SRF>!Ypuo!D=u;ZZt zain41&_@61+i2Tj*c$|9p@)E`>P?WdZwj|jpw`Rh^!C1ZGL0P(ZZkgFNwE>f3wg%n zZv#5>6`fF1~t9G@s+ItD@X_hEBqy*#8a7;B8 zK^rded&KAQ1RYq0K#OU{7UY?=_CO1rztTW)ir=HF;lYK*|PIfyHE3 zD&|C20>f>oiM=P_fO7%ckfcne=flAM$~%=9g%ne3r{ytR1S4JpLK^Y{PbT zi((8?(=WJ z%;q$fY4@`i}z9h183NweN z!|my7?G>i(Qk2e~9mKhZ!h0Dh;Jx6^T_}R$gcFJ*XO<#1)`mbH_%AniASu26K)o`e zmuOd|*Nk!MwK~x2h(NC+eZ7tvhh8&{USz8EB2MW=3ggmix9#4K%AtU1;9Ic+*m947 z6xa^*ZUULoIe>UMDzQ=9N-G4c)IO&^aw5%zzv8#~xw;rrgFBeB-5=Te(^PjI`gGm5 zpgGa~Sw!h(neTo(9@(kgzkoA2dx3zZso=hYI%IUF<%<4(+g_m2f;@yytm499W0fFX zfldDb`G)Ic$p%MRn(oM#^{e0>H>=g-yACHiM}I~oOqQ+7PQX)f=QZ})a6{8Nh=E0Z zF`PH?H4q?bh$!sl+0CjjnQz5x?PeSw-I|EH|BQ9)?MXJp(O|~9S?*l+59Nw4d?ab? z#Hx<{MO!lBe~DqFS!e5fCu%<}I@%cpJ@OZo9*u^tBQlPl>A*)N?MPdzzsc#YLz}B# zf1h=8!q)mq0&MHlA8$54^={{a%FOC=P9)0thbX3M=VAO)uVvF=A7EJcKIU+rm~lkW zM;OcWiHX(P62Bj9^}>0)fCCf_0~P&nJNDJ-HNk3+GsMAC-ML)kVoQ_uW4HTF+CId$ z>}@9@!z)b7d2%#*GvD!JpmO1hKbsCV&(9S%ipBKx_O@e@tb_OTrYj-dvjty8= zrb3@pCIjzG_C_(nCBUf!ASwadJB`qfl;9XwZ9^4wH5SjKSBv}EcW;iNr|r)eQb6F? zF}RM&wpJ%oknLT|u;rQo;%*@f8?gV=4Hwss;aw2+%~rGB%h+DfOTLqqg1; z=^Z4+@r1dc^EZ~UZD*+0slJ$}&7zcF5qG?qpv49#Z@$JoC+9IS>KJmyQejS>d8hcY z*|M@<)sG?@q*_axs3dtxY&89E)dgfCx4p zNQqhe6x2}EFFP7~co!p)Rc4mU$Qhd0^yBs#aLTRFA^fUE9H%g|InGupcX1Uk5oi>ARKH%FDu1+EG25aUBb6@ngWlXH@U zX?8eMmN!Ms)7wc0>xcEd!%QW4z&?rH(@=<^ZtKHvczr&Z(DuYWa4{xc zDDP?z>S$2T!_v<*6~pQM-XYc#S3c+lrX+xI|} zYtetRK;R=Fz_AzXc;fmy)CBrMFrXawQJ^GLZ{yg{QUiMquu3Ef;A}#nMLODs^J6|A-d)`5lsNBY!mH#^;oxh_joDS{qAK0B z&%=laV4PK;4f(jVjOv5+`6(NfD7D|RadW*RD>~-aIBWzN(Qzv|)I&c93Gde8Y_1>P$ z)b}ci3&RvYS)FJR!X{4A1aUW<+SI1fEe;dRc7S3wqe(6a2Tf*3N{1{Bhfs>iI^a+Q z_s?p*qzn1hQza*6xvX zdoBB!iue$6w2u)VFvsY)N6|&kL62aQ1YQ7!qURuiA3Z=Iw+xd98yi9y<;#lj{GZoQ zgcaZVIIfDv!XjCMRu6Xye%wx!pQJ9iPvxiR#k%Q#G*gpfg@`mmKx@_qsh`GU|k^!H2@v&Fo?A1MTz+<#{4q9 zjJXsO!4;wqla7k{Ns0Mu#(cMlc?D{M3Q>qjN5!PnR{0gceMKSoJw_vpXmli6{z4p! z!8lk^8pYAYG<)e!6p~oPq@!Xk$H5~23Nvwp2Hd{MLiKGhc!eg*o}WmZiSdkpMALu*b|?V1qoYKkc*vq+>`#t-4!;aw{ta7Nn_(ohyEJee0QYW4f_;DCaLgWy z>NkuIC(1VAH;)d#o8eku@4nID4}`-X@x$3h-2*u-lx^GlHAM0*M__CO<(#6}vb2A( ztPdD|466aO@;1(y!Ilh15KBBI(7VX#TZ#0Lq3 zTy`>#Js@m+#^>2_x~l==0zjT<-L^SZ z5@S6YW+Ii09U?d8=DJH;+E<4PwnEe*IYh5_dLFp_K{MALIK_SPtuaQl(A?z7pK z9y6c1tn3_YGL!ZX>m(c}fi_&_er2u)l(` zy}TattG~uEzY?!)#qO=1(7HQ>rn4 z!Y~_7jrk*o*-mQAFCS)`s4>4_m@S~jeE;wYaeIf^xWVlY!>hzi7k`d=)!un7nv!z4 zsA>fyvHvgbZKpwH*0R7|Y`4*j+8!y`)fj}Ckyv22#v7_;Fu#R!DJ!7B#&*bNc6Q~^ z>I8J9jo4Cg@FPrnv7z0G-%R}S{h3@R{=4vRm05QB#OPL;1<3eWij;qBO;84-5jKRR ze}GdoBJQUk6w78R@}I~n2YDXDW)M4Ch-Me%t!!>>cG0en!XD^6q>GvFMlPAO>m0VU z0rddN9#*;)6fonFDJ~_vTEm^4#npt5)bPZK#S_DDS6A`O5L~(v-doK`+&PNIB8Px=OnH`%@Jw- z4rIpX*!(>|g^mI;L6B$Fo>1?fw2GRcH=A0lkn z!ctXYK#!_CgwSCzdLY2XNI$hoswq>7*8&+x_0CaIrcNyqxqs#FL1qAU#^BwQZ7S}n;{7mVtqM{JmE!{5pBRHmbGEtobQP6fGL|V`$dkHf0Gr~c z?V_{H7`G+cQk;NjfdYNuL?ANyZOXQ0TZ>B(Ehu$kJxK1@Ck02i3O8 z5^Vd&ZZFQIUJ4)S3bpM$DT zD?UEQFkF|R9()smMFv?8NPA}dMd{CZ09g0O= zz8{96%kM(4p)w;oquBhfpdOf{$^;-&Wde|?G676dWdfL_$^hg{`O^bFLEgU+KBgSzv-#qu!7tF9)xBR; zL;CMhnwpPBAzLW^sw$P}lnV?t@!x87aI$^bJ{gTjOJ!vw=+E|#ft{V5JqC78c203N zCF3i zm5(66a&JXMy$8td+R=<74*&wyw8^xsYBzZjlhJbKcU{u6Z2(vP6OzlZ}mK>WVrOKazM z!4rMu>nAVWfe?-CKWEX0RFtb;ec+t_WkBz2yW@$aH!<<;3<=E!ED`K>h4p6zmcWdW zMQ>KvV0PdMVzGs@dWzty#4b_TV4mRn#B%Hi+#c~~51t~nNn!slm_lF~_#d4@`0C$Z zd#!5T;Dv{(3zK&wN_o4p=pvvoa&;6T3|q;Nu=jqv44nMgUje%iMPuU8znR>>4IY-g zr5|Me#7RpRunasbVEw}y)4y@i&zXO*?uOf6x@{?U{=t9YA2+?SQVM3Y*!LqdH6&#V z2RgD01Z4{w93qRb?2*_Neq1RToW%k*n0|Veaj#I=pltn)*mD#%C|l1Fd#u79>(l)M zvGak|(^ENmZJy%j&rhlMS5HzM4GYSRglZ~k$zPCO#b1h%eVL^)@nxz?;;XGKGF9~r zKfXU#W#Y?(mBgpAYG!K5h#%jdv@-E!=1Su4lK7lt=(|{iQPodS^h^?&$6=EES$Ya< znV!O$uM0)df9>68dExupUf!FS*iLv=R9O(>sx(>OT`r-Q50 zA^hpC1I%z?TOI|io#Dd8<$_mJTxN=D2SyXUUtwSpqwDg8T6zpBqP&R$Uu_*~?|0-XgH#(i={`aefevTDwwa-i}Jg+&@S-+%JL*rbsbC^gHy1C9vIWj<(FYSXTBjlv2h~O5Ym(4R!^N*>4_r|Rr&Puk<;s=^y>}s@k`bE zjcxqz`NrovMB6upWEwqPUnLXDn3Vm|w&&FTDA__~?90`%ja9}b7~8KNtBf7_hHOtg zn?ibyUUpEcr@X79^?c+YdVb~LdUhH;j~z?T-+o9+G)S3x9*@vcLz7E$XA8=^| z%asQ?{=w@aZ0}{*Hk%vNjRV_@z>s~|5RH{m-$IZ&S2HGi%bStcIGZkw>qmc$Aely& zg&FzDs#de(*h#0>VzkE+gH}8z6XR;##)9X#ke7S$E`%N}EI0DORV)jNkg+Ye=1)??Z76Uri3>B%<6LIk(c zCWRzU9(x>N*cV*4594Q%NpXB9xVQmd5|vuky`r-I3|2&x(27oRo&IMLgImRHt{{0* ziBkTQc0aA%&uEvC8Siu2eM-BZ*X|dz`$g^klXkyEm-2oE^77AeyDXU2b~}~BV`MAj z9xdP$b9%Bz&#Nz903+!oQfiG~g_3a*2jf#Zl#^0=K0rl48P}6=-Aeg+fKmo`Z{~uX7XbQ8c?6K9JTTag5JGE9f-6wh(2CE6 zk(Uu^VsLc`mI+A=u1P^;rld=tSpjDcWP3YlRM56NQ@4->{j$P{k= z>PgQ{T26YTvKQ!{41vr@<;Mg%33QHBUL-J)z{HWtPY84o=o+c~l)xkclSV2p5tvM1 z@<`=p1f~#}GE(_>08{CoI#PKV{@fb7(1_K-6v(WxS#B4&$v~m7IA<%a(h`9?L||o0 zy>7{j?m&Ak&Z8B6K^JR|Wj*92cw^;6dVwwlw277!=rX>|Nbqx=kVwL8;m~DQjxM`s zblLTy%XT7LXbR^(7A!7Rf)Aa0e8#ak~+`(S#qf$1q8OiyOei$d>h=#^72 zv34)DuS@C!l-kIw*^vgUf3N$@Xks0TScf8JD`HV0rr!OlAO}R^I;6jnk?4p!oW)fp z@}6ZS`EhXau;C9!FiDt)HS|tPUEadY)3~y4A+->N`>GcuQf{2_t5!nR7atE^Mt1?t z3jSO_%e8X+Q%2<_FdmApEC5yZC2C1GP&BqOHBpyCHd)fCS8xLLU7{ol&Ngcc{eF^K zpXcNK{!7)my$a-L=exkAXG&Z$U2+R4dxrTZ z3z$%iZN&O~d|<9+C9b74slS8NosLTFlYAyblJ&rB=q~iQ!0N#CZf8s1(#8rU0*~kp0d0;kmFSYN3`L{AeN9u zE9u!ls%3{$+t9BTd}av8=C?X~`fxXLO-|EM15XbYZ{s;JQTr0lJ7h`_bjUwJxWGbRo{@LVutO$46DZ z5FhBmZtIx3tO@c388ZP)Jm-yS^dW1zNabs!zKcOw`-9eLZAd5Lj862Ar4#XiPVAzN zL#H%#ivI(25~=p9(;u}?r-yVR&gewH(J2s#SCt2H4z?BH-qotLEblDzJww=LP4GVg1BytRH$Un8DAiM!3U zH@Ln<-rMiuF7|bLG4~DNF|gCxPL<<XnWzNwEEV>C`0{gt)V_>ZKqCwp{nilCxp>X>qB-T z&e(~5V<$UuE$q}O<&F5jP8@0rzeB1PmjOnMzb~;8UJUf*@Pnzi5(E=yNPwzZ?lE9h z9fKzN&SP8&5UQ%}4^j}731J2(OH2AmU7Ua=)zji0K` zEYdD}8ShP(q?1Vle%8^57e5=uI3q`Wa(I9eg;7%U^Tr2)rISDx_nId2X*6wH)wr;J zXY|QsMvEUSyGROL4k6mepmKXGgBQU|6mWQ2$~&2YZcrk$rrPSg92)k8W0A+@8#%)D zTfR_-5`4Q4_My1wU?%UI;=|_kHNl+9FmIH8nQttef;8L_?(uzU$E{Kg`629?Xpncf zUGKrMS{uC%n6#})Ni-MxBbr2pwq~(zA113brgR53CHJ&9d#8eOYco;`-v+$64Y-#z zK5(xx<5moEuSFEx|EDaG$l#)-L&Op-$`Tz=MS1&@xa6iqQECCDmev+sB))5H{|mAi zl?&%)NB>Jtf}G##|2NP`+phF3_?;Qu z_IxpjF=j)ps=d!m6E$tBn!d+RNzPFWxmD*}7F>O-s+^D3j50b2Wz^KfgpG- z*zd-~Bs6dV9`EEiCq$Y!j=_yC?F)^( zww(W^^|cMP=zcUd`hu2>iC_zI#(fKngW;~UyP2K<)obA;xJcuoDjFo=*zPh&F-6(f zn*j~IZ*%ND)7^~X_= zu=P1JC>g@b{Zd{Y>Dyy%F}zV_$ky&e3#Vg#TsG{=dX0E~Hj1h&*1*X*vN>)mT<(tB zx(@d%alCNrg8JeLp9i8(LD}v5`d-vbm~GcZSyRRBt>nW>vp?RN>g;d9a0c2%cIi$C zj(UHhf@eA!p<5z`a|5# zS7ji5fyF1n7g#7JX=NPruV@^nv%e|dnaHF|chMNJe1`tdDSwq=VmRVd8zxp`7#>(w zhceF-9#6c~O!r%nuYS#xc`H%}dt{+MkL^4i_XF8|S6i}Lr#^p{%KHWk!k>Zas&8IG z*6S4g6)uHjrnC+rsr*D8 zl-UYphaWq(oeJeQe(C_f%xF*#j62cU^*DCuRj3edqF!yMV>lSS^cK7v^@+aDxT-ng zy5g{Pz0rsbeRa3%4q^w{1KJX)wZ0!BUdY`yRsXTg$5iF`(7EnuowP^ zytQGXW*we!vA_C$Q^0PsV`Qx+aBT(D4Q@2sm`u|ND;f-1Zku499(Rd zn+4)?FmIPz1mbgWid}9Mh|j@hyWA!apRyPEkBX9_FwwmMtk)?5Qw+eA*?I#pWwu#C zxlh`1VL?=$s387qxtJy@&%vW?S)>$| zCpG4^0#SKVW8PU4l_#a>5{OSqF-agkMGBNhJ94aIp?N6UzCF@}%v!NF^#y+K#JJqVlA4Jp%Db>3Rj?b1d7DhobFEO47dVNI9?_ zX$H0<&9Lnb0URy!sdS=`wsQr~C#9Pu5TBGTClH^;c8sTD`4TbM*lyS^=OqoFq)-ru zPoZ#%3RiedfkO02G(IUrzd(GF#B721G(s?*iscKzU?aqD?D8B*!zVLfu0VW}`hY-u zlKP-PdI($o)5y+vDwa>3!A5o%aG|8( zlN1&S#HTSJLliz_z{L`cPYSU_AU;WAsX%-hAsA1^@`Yfq5dumbDrxv6y=4ONNqWl# z;?vM$JQd5Q$6!MbO0AGIe3HUSf%r5^F+|~wQp;_*O(ZH$M4PJM9Ecqz$@wI)!v*5g z5MzkKhlm{^(fCxv=wtS+7CfKS^hkmDBv zgky-phlE=r(fCxt(MREq6+E95?l^(?B76PNpN1aesaQTe1{-?F@wJkMPh|)Ca=@P^ zcs>=Lz8v23(*@5b-}5sB;*-*>6NpbrGb9k7BF*PjT9w9^hLN>2Duw@^qtvYz3Vf2@ znF8@C^iZ)eMBz0(7S#zOCUZ?B8DiuNd#@rmS}t`ZRtb5h3%7T{qO2ViNxpN zrFMCfKzt6KXP3_rh|j^(?DDw+@yRdMc>?jtFV*=1@ks-|NgzIHz&8uTCuP4tAU;KQ z$ieUYwkmm)9KJazfNxInH|A7Q1m7z1H{U8HMK)vFL*$>GWFYd-W`h>Ng@B`FK9#BH zPsf#HYxJ7lPpmZ^|~_*efI&pH%uvf%v4-R|&)?30^G_ zpF;5SDy>T6tI5c|nv84IWFaUE1wKiAyFh%BdPN{UO(9@B70aj2;Ghsx_Ya1J0H4gu zYXstxYV8n+Pcpt%AU?_XI)V5U#(%WSq@gJIjG5F|iz$s-D!s`)R)KFtXjGo$e7!(? zlJnaH;**?j5QtA>P^MLBe9nyQb7ow_nYG!CfTQvxy|)X*r_e)=GhE>{y_!DNO_G97 z+U#b5_@v~w2*f8P-zgBEI6Z@Fo#*=XQz4Cv|+MKzvfiI|SmB1osHUrw~MOXDXG( z*O8HZ9U0f?$lSRTa8#b8cb7nX8UY!u@J2xOO$qvg?~*ipvbK7+KzuT{Mg-!Mn!HCK zKB>uj1>%#O-zN~C!nvkDNa~8VuN8^MgBrzo4ciZA%xh#QqBrMO2RJ}Jff z1>#erKrPSMDwfZg!J0EIc(0`4lN9a~h)-idhA6zTAQIg#(fDMd2L$5NBw~odhY~#~ z(fDMdhXmr&Bw~odn?z9eVTr~k)qO-DK1t#O0`Y0oWjqzjSC_#?U9%{&zw|qdN$hAu z5Vq9Xl_q$w0_UzRcmVMWZfYAt@dhcoRZPxdbl0mNT@QIP-Vgt7fCv~&wy$gAgE^O#44S1px8ulW0fv(oysJ*($=bzW6%^o zr-q-=k1O_YeYT9Cr1GUSq^7hbeT-(GNI6A(vYqz0D|sHIQ!L= zaU?Bc>9njgRx#12_md6&a(9GK$b=q!9fhRGOMPiC7(pb<%2ppnoJC z92U(a<0!{WC3ayt;mwpGv5y7_vd6&LuU!~N(lS;^?lnv_$}Yr)-cDkn@PbeT}-GHHnJ$pAt36gsiWsc^4cTffDUGrfv7tz(F%s&HQSlg{ke%1EK48&uM>m=rpVnU--REn|gDaW)f;vIDU? z66qZYTk#KKZbS&g+(aiU`#y54>n+ zB}o}S)9wkkLlyzQ3coe@r^fkH(n`BK5; zqXP+UfGh9+!EHza!ipq>6^RHdQqioK-8TXRtGC11UtPv1l9Z7`cDhL=y_rs|atj?u zxl`O&Wf$Dso#1eQXlWIT@8$SxNm^n{G8F~MRum*(k&=u<3ho971#g9Ofbz^(lA7^C zso$Ye-zKT|Q(rTVq-89fmhZytD(ySz#42~tfqnMC9rwFH5~3!Fh?*oL%t$9B=$!ze z=3Q|1mye7hNf}8e{S4%MmrD9>I{X73lN0wgR|dnFylyC z#tNmqU!{HEKxr9A(lS;k?Sm@qLkCLBIFgpJLdJMlrG11>tnvXkIxi0VJ!3Ml1rrKg zCe?J&jxTM(Iv=d2DV;-?R(}-XFwO_*bW}bBC-{q6&ndp=~^d4`R92daPt z>9p+F-0_%-Uw%TnAJy*1=<@!yM%2$Z&YWv|cx#@^#ZRgX#Ul41jDKoP7w!Z*1m;b)0x&F^(Iax(OqA#1Tl zz&d4@UPY#HjaAxTW7QH*dVd18SFN)ecsW{#C+tBRA|&ko7Rv#C;=1hLHm;LB|8ehb zL`LR}I%9x!B1fTSf}f35-B>}jkavU2!2wvfsqV_+ZpUv>7M#K)IK~ zn!J>2cxOy9zx*FC5DUYv=(49N9w2_L174vUTo}aoD6hog#gIt1`}^2O2eM`}6#qs_ zWFa1~_`5-f2Z((JAs!%JGYIhjfik9OhzE!|gAfl8mO+RI2-_gU14Psy!~;akAjAWN zV-Vs2B5n}k0U}`#;sGLQ5aIzMWf0;4qTV3H14M&ChzE#9gAfl8O$H$zAes$AJV3M< zgm{2xH3;zl(Pj|h0ixX?!~;Z!L5K&42?ik^AkqdQ9w0IXAs!$)4MIFXOf(4b0MTU- z;sIikL5K&4$p#@FAf_0Ecz~E{5aIzMYY^fAqT3+E1H?3g5DyU34MIFX%rFS?05Q`b z!~;Z+L5K&4UV{)15Qi9qcz|#XLOejsG6?YikuwPK0FgHc@c>aU2=M^XXAt56qTe9I z1H^2D5DyS@3_?6W{Mo!w;sN3>1|c3G{*#C!aexBcspsMZ2e_M_W*zZg41xQ5?f$oR z|DfGJYWG#TIM0Fcc?Gm>0Nw=c1L_Qu_1NNpXni<@h0&)qz>xmQq#2iCw`39$g)#jBP7?*P7Yh8f$m#!cyLFv+Ijkao_H64_i-b@)@~Gr%=y(g|VM)&)s>PNQf(j zWAwM`Eo~tCFF0-Qx1ejezmw;G;mLb;yiYK*z>1&N%Adf>a{nqZ{)Q*Nkc8N-j7IK3 zruRx7-h+QpQrK&tx=yU4Gh3YOijC)POmD%LOyb8Q!*E^J zJMPtxKjql!0GniV--IhsS>vEg?-hu|)_G<~@0VwNvtHk8TPL?$I%OW})K=%+j<`;l zhdTKH4|VbZ9_pll((f^qe=V8tB3bU8+2YHxy;hd1#vzMS<}p(~tNlq-`UClrpyHc| z+~V`)Hs>lETs;oH*eAw|KL2-Y;FNi=l`+Vx6pS48d21*6a_y*x(x;MnDs)j1X$(RI{j!xtv zUq>GEQ)SP$j)N}@`7yj3+Nt8D%a5ujOGz>&MKG?e|9E6p72oT}!FT_*t&*WsPqrjD zI!}50R2AR1y&=A(MzSIeKTqG}+m=UrRq?uE9K3WPy|Ak2RIArao}}gT4Bii(?p4L} z#_{t6YgNsM-;Y)@BN1auu1{3oQ=SS|#p~_k<2CAAQfem?rUsMhy7axZJZ>5XkE(J~ znn2=A#=0c@e)CYSD*11Iy|k+`sgxlj($M)5{wBP?me(z>mse>b$upU%6NB#?PiLyq zW9K+%>vC45L3J^kM1CYyYd0P|R>g1EIQUiNNfp=96fz=>G3@qGEwA0LmscrE@=R81 zH=Y1hrN^z~pnY(=O(Q>&s^!Py`l|T7;~&Cr2KkYc;uo|rKUB*PNA4fAy}SQ>sxBQp z@<57+X&{q^!K9YX3%MxDa6KT=Ekov)krEYfB&(sm-3`t=!)2CT}TJH|o# zpyi?ZiK($!@>8VTxCo^n{lf6w^%kFHPq$c3rFh4$kdh^n(cSm8tp&4t>^gf2Nl1yT(sfXVLx~Wj-Fc>-Vg9ewl1rNG?oH+3V$; zV^t=;Sj*!*iaq6@mY8=rKAAH7Qy@RrCK@PJ3cu_zaLAhDdu-Pa;0CUc-C)K zJ#)|a`Dq=iI8|xtl*1z+t0)7>tGYJmcYLE(hWGyiWhfm^wxlTe8*cM`tCsJ*)5ZGhK~&3>`4m+v<1@jt-dy9L}k`*9Sy48r8&x}Za#F%}v@ z2A&Pac4D5kzzO$gE2nT)m-`XW;ku&Wwh}$X3W8rmi;ZEJ5_KQd{s@514esXvHsE-+ zeOhz|k;t-0pm!kZ>#aV!Bai8+wcsYY ziVy>qvhit@fdEV3=?0+n&maJq*#ByUyGhpG@f154%W}M@6J{PPiYzeUn61_k+@o0L zxF*7$5-VMc*lG6|qV$pp@oV~Xu??Z0y4&7G(93O|hS_SnG5`^<4s4JPR#Y4+VEHRn zBwCqAe@A60oG1=q{DQxlF}e+hv)AE0!Xf=o?q*6=i+?`1LU0J%JMcDFE@KQF zuy!19mH7gc>3C~WKx~6gmCtD8Rg|OIEI)lt>0Ahvv%K@*l+MQkr|{E{6_bm;iD)>} z`Aq;DOaH`6nuc9aQI@!D17*cAjnSUrSpoJeV%r3p3$PNmU9fo{t4!Y^*n*E$bSDV5 z&&R5`SjP%({WaK(U}x80JAuVX%&_yDA-|fLUeW*BYp?0`DI1_1hKDhy9kqA!>|LwO z_s83e7YftRd|}+Dno+z_5n5QfS%>Mhv!h%R&WrTd@tQjR#fguP+Zy@Ja6_kti72B`c|1GeDU$9+LU+q=C0X15}D}I z0M48)4dQ`g+84mduH3lfHAtqQ&Y^6>nNQ>N`-KSVMag|$f;K}l?=Q%ZY{Qmyjwj$` zh_9v)U%eS7j3}QB&!)RY2-^BrPDAR44J!P6pIclJkH8}n9cla!~{mW~QDytRe2 zS*aqWGPc-H(5yd+76XU@vA|MZzt*-^Bx9}HiX~oe#j7i2OO+ZNt1fnF#BJ%*`91H*8e(D-3uF=*h9!RVp= z5aj!;>e@?SlRVcrsb!uiJKK4FeLS0*KO^2bBxiNBBgRVnCTVvDTtw)fnqM5xw)SV^ z*-QGT-iy0sFn6OT0p8nxMcVc5O<`F^dN~f z4)+EKa!Cqx9Q19zJg8)aRhVGij}5_IsJ$LK@K#M}OZMRlp=HAIPD$B{qo!3mv%Yu? zQmPfg=pnGbu^P6(3AU}nb0LTAeF4pv!Xd+R1dwK{du%m(YsXw!%-XZ(l}nFZDyh=6IiPjwQoAfjO0ZX9ft8NV=q6ZC_!f z?NNa23&XN+BbfpkslFscxHsZ0l`2HaRFq{og0!YgNn=zMtZ<77Z>-;9%3Y536I;Gs z5fZ5degti=1lZUT=8r6bJj3%a-@;2gc$tiBkdez|>f@QA%z{`vJ82N7d9Y>Xcvuam zzMSj@GLI*K#vt-o>3}uH=%V5ity(h(W1JG|E&df>VF~#hiop){U5bDALH01$tSm2U<(slTPz_*0l_H6EqQP>!y)N^fE{_^4IB2@$&6Fou9gr`ANWcfJdyy7Xp7 zy<0`iW)bf_qvAc~#~V>RaUDSM-$zAbe^HUs(Iz6=+?T3Fvv=Z)6mX>msM%YJl~M7& z<-)wiX#LUUrm(CQTYXnJ9L z9qwbok1d6M{J0+b2>dt(wjMvuXXdvKKLQhb$D;zw4Syi;J{ovG7DB3Agv2_1~1U?$B5Y(yeg27?UN_qF6K8#M%Pk~6pDt# zYPN`|r}@=ue+OLt2-7v;Y&jYK3iyxKKjP>||JhpuJ9Mo>4~d?s#*?$ktX8&ti=#&- zQoN9gdzc$fb*;x19TT?KMt(Xx&=etB|&%62vqyo}Ca`61K%HkgIdB*>a>l!-4$QlD@^^ zZTC81CA{_^-BP5(D0nQr*3KR>$WAhqs*i7Ddl#de$%Gd{Dku(=ieM4l87o!Xv zp`Wh}{Z=^i3no<6CEXBsnP0}FTp=?GL)rQT2`9T4?tILc@D5nDH)C|%2~~0K2EFCg z^w70IMa2x|%je+7ylKLZgWQ-nh;-pM6~F2D_2S1uvIxKY5ff7RlW{%A@tIWqm`+^N zF%bv3bfxmkCZ+O=C#UlBr=;?8r>1y}A&d8etY1?3tcF;*r1GuB!+##R#Bwh}VJ-a~ z%&*2PiTA{kx^k30okJ5BG~yzo{)E$=M1x^a)Zc&n$tr#;<2O{tXE7W_Kik5X^+8M} z%giz3rWEmZCTa4MQ1%-Tf0Ugk53QzIY0~hIa)f_9fX$CtVSaH@V5oCGMlGcZ{371d zTzvA-)2Vz4-A}sQo^E^F(7KwJz|GH>v$@U*7s_-7XsxKtd-Q0dz_b2lTRejwUzK>a zX{d8SM_gyr+8%4TLU*)~hQqk|8|WUjYj5 zbs};D>f)7B7gN|2PI-qD{_wJY!~(?(=8yhvAo(Lq_ae9$XNWwEpDBD8XN)kdNk=$m zX^Aao+viZe+;`Cq2I*{jAMAiT(Ur&hk2us3m2*y^3FC=(qqu5>ReVQVeLRY$&b9r$y<;rMh7Yp{g;bs6{F6v$EE|9D?xHJhxf&V|6({*+`P zX=MuvwlKtxy{suwM@IKmdtu;5R(6((5-3?qv`Vc{+O@&O2ca6y!$+>v76cj7!OioL zCpn%}lQ2s8rYq)lDqX+mMc5w`oj-+%8WP#=Lz!2JDMPFIk!9V?mz0HZ06#PeaMc_N z27dVqt>UL4gR<))wlA#W7Xrlfg7~VB$X{+1zZpPC{d54Ww~EgO&~aArg#cP^6<-3B zkal6Hyytro*$w@%M0WaMyOrIbO`cG0K7kpiKcQUoV%Kv$>Wh=0---?lUWN_8SMGO+ z#1k!C?h|JVE$V(5ah31)#0^;Gb$q9;VqJo*^8|7@K$foUT}|u~4Mn{&!4q_!)GBQU zSdj!U2ivj>;HtU`g*s)0V&IdO)?`#2>Q#_fu8>ldD`tia9|^K^xTFsfe41r*dUS&F z2p@G%HTl>+RmU49J&C0+rV_QT0e0YdRM%K5U`6J^T_yFk1nxkfcOxWC6|5>kBD!hYeB`AJ?dRY&<}iT6-1qVi(g+A^fp4q z0#WYk$s{KvvG*o$fHce1H^iR5DyS%8iaU&*kBO8 z$B!bIV8lXb2164BF*G5ugL7CySj@i*SNUchf;>P|2mKu;NIC8qD3FD8@egCX)jl4 zAm%wHrg(rj*C52R+$x_3gmjeB`z)p)jJ{F%eByCnLrUWb6aOaS?}o%0PnhX0pvxQ+ z&jQPR4skm6)oDR4G{NHeyjD6>p-NWiCX|5+Ia{Th=_NC(bRQ^Gg#JUmktBXp#f_#QAf?Z zx7Dc?9&z`#;EXywCVlzC$BG*Z;;@ffORt8M@MX1LOG}eMxFhYdQQ=r&^*aiKw3LTk z9K}mk5=0A)QSp>+fr0ZlzCtU6Ra2vMndS38NLug|18AOhcv9Fmx+ zY$0q{-a-dQiqgT6qI9r|$%AXYX-l9F`atL(>;soR-0irxU|H^K0Ne>=<>I&ioZGSe zQY3QY@Mltcu^=F|H^zq)c(uk29r^x9?DJ@%f@GwBFcQP}vW{ap$D_SVbv8Y%5?W>2DBEz}GZNLr`UoWwvxO!`73na7mQ=9DQj=`MkX0t%uJvkd zq=F{SZpZWvxplvaVULZz04l2DkJJ5gAyQkdGBa)KI*sF*En62Lj$T`8N9IGdqr|pS zBFZ9BnZ-et$8B?^S16M}-Y>EC2J5@fC5_9v8+@-6eOW}3yV)uWjbJ9&3K4n$COk-# z2N?zOuq}5K+@k}z#-;oZK4d>eWM^(o-Pkt`vu`Y(6Z$(snWJz+7~forHUQs5UV6V1^?RWuowBwQ z?+BV|frpGg(UHG(5Ggv`)@gLJwob#!Uagc_pw?r;xHhCpirZn-cV; z;B(}dL?vg7<`R~XW2a5l)2a{s8|b(OI@&!V4d(_$7mpG^@3%fJBEU-%+c6L`X3yPqKIiMI=6G1>xWOUZZ&Vm%mH&k6eEfWvncqz@2RSuo&oOfKL2l@?dhuboH}*t)Tz+b)!hhhaSICPrYC}f zXKqR1nHyDjK85F#?AG%+=al^_YWhiB-{-vOzfm#3&87%km{ue^qOSR+Wz2CnMApCf zf23q<#L!6HFf@uB_FF??r#+?ZQz1--E`V}DY*h@(LcP58(g{WjwkN8+kORJC+fw`c zwjzTIfs|208C(oZFNNiD`y92PHK;e+nh9O@qAtEp$IVh<-*Dj0A`oo7kVcd(Kymj} zLSkmDVx-D2h!*REyvC1Emj zK5y2Sd8=hCZ4wlvupD7K^_gC%i{N}IWNwKcejAqe%k2yP)+wkdZZxAG$r>%HrVD&S z)@U8fP`ffh>p04y=O9=+W?+9uEGVWb#@vGG6^Fie*eN3BIC%Vc@zE4#M8cHLB1;9D zWL&-*RK8iQ!$H}`xSqcs%clHT%^1}~4;|#82OoitL;MK-0b|ue6#aI!vuyAUqcqdi z@a4o%T&EIsd@1D_2fP!=j_6sL8ZAqrdbE_sE%25twi&GFW1c$>I{6laiz9L;mh;sF z4lWRKm5X;&55O@QM;gbsINETWjpHI5SL48(#kvQ_G8`}9;H>0R9L-%71Esurg1>-R!9#?z^0A_JtcCfiu95Q)d8h96F$v^ zsZ$Z{Ls}}0P*Oru5$Y?ULlCN$(7p(zB(w`c4H6oG&^8DurBiqaBi&C3JrU|p!c&q* zC87g_fF}{yacsmI8*V}!t(J6y%2#wPaVQ**B?jdN_af#+mNHUQ!GA-4m=NkJWMSRT z+CS$%6oZ9)`rJ%aed4kF*!*~BW~ZYMM(e7a*{_4@D3yqoV}7J`6pgRNdnd=UNy{hPqxF-6$-&)lqXnaTx)A{kWa%cJ zcQ<`KrxeK{n?pkhZP7G$BE|UnXSFv<6RjO+8VrfDy}(>0DaM2aiU}l&NxR^+_~!TZcs~nIH}Re!ZlS5WhN>NP0{;Q58<{y2;kKE&XN8+r zdH1ZyccAdeSPedPpACF@_t~xlUyyw)KIx1~OAdqncxoWKy@_BEd@wJ(@WEyS;icPI z&e4RqG!`WtpI`=(7}yD)e@1{$EUA$AO_VRui#mfHCpL(o$RH;YV=^Z?*g=e;7`p3- zWF?cIpll=duI09Yo*Z+74H4yvxUBGvX3P)k$sE`cEixuZzN$Zb8EFq<+Vn_l>&5u@ z0Xo$5UHDP+E_7mz5wTB4^(2krz^gpfG~_05_AU>@DX}}WJT%}FC;bj3EX1@zX@N}; z4N=LRFF%c>suc%br7F6}?7|!NoB?Z`^m`O=kqF?F4m%ziVzQ>$G0L~6LI62p<*{@R zlu2!=#yEzJ@z@$K&w2!<$3xMql?&jSvXe4%75aqQA<2s&cy1fyt~}o(jm9>=+9Byn zNSZ^^1s>@^Nu@}0^GPrHNb~YZANxqBk>qXY%>3>noeom#rOfqT4Dt5G+_MmBBcZWp z@-mPz!LQMmU5-#9eFfv?h^Mb)qBFpSF@(<}jzw9=qaNFs9J4pR9%2!A+9=rWV5hG_ zq#+b7U7fO%qu|KB8Y8{!B&IDzt77{8L)6-CCw2d!2IKui z9i<=?9jsYE z=3a5)*;e1 zZU$83wEdgpTkzwokACIT%<`GKSwy1Dm?2 zx>$*4v_i=hxLD{_?YwbyuTDOX(*mMJJ^2z#?|$;#hQJ||H9s@i&I<2u`ehb-$b*us{chBskf1!Ai{rX-r1ZkEQdQ-X7;PjFy{V0FUm zYbcKUY|DBL$G13QLCeC@uZ0=5bvcfEaqJJCDL4*9xHk?w`((X@;~gBwAnNzvjiyl=xd-{3MC5^y1Sb{5p%hZZTA9N zR9z)MhR(>x)l;~p8f!+mnbWJ$NFg!dBYp!fkGAI=_7U&NCpIsZ_%x$K zGh0zq_6aJloGbAuhMsDTwjF6Ac?zdm@+dxSQzP>zK2@>h!Y|FIXR6po(Q9+5zhrIB zwvx~Z&%oljVf53RDnr;ri``UqI)d#4gLpNtDU4n_N8)v+h0Dnad3_{%%`NniT;!-N zA6$Xoc1?RSyzSFS-h40E5$m|^2DD2AYFiScd!dfX^>loU1Fd+?`V@}&;KA!Tt=(~c z5l3??QY$Ao(Z=0{(%7&`Kw`4(tT7R7yVPq!6{_{%ewijG27-QBA-%gtuOj{OLb~nI zt4Y72kp3yOimUubyo0a`%HGlu&mtaeyWS*GJ*RlEQT`@h>MIITpDn3x@KT?`xJu25 zLqmJr7#P9h>0LC9ZDZJ;9Bpj#U;MmM7e~7S}zr;^e zHlC|4Lfi8v)JC-JHltNk!ygKKdm)UM6@dGWLikRB?<|DzQaW(oRS4rn!hr8CgpU&V zoK2KJmh*g$!zlLWV=Z5Z59` z?33eGez-k=XxmLDQF9aH1%==Y#*R1k4z*BHDJ1Vb%_oay5~6A=<7jq)zb62kLc&)EzXnnrRmoQhS(U_p8=? zVzqwgIsa{Vb5+MYJ% zTX;&D^KRS1Qm{3VV@i_yZ*Xg0O~AQ=zB3J)zk<%iBtFz$+pJ7_6pC~_j#)U`;ow?l zUmV-w*bB!59CbJb;MfVrfjG*ebsyo>G^=?HPHoF6GL&jqaK+n!f}5pB_zAmOCvSBk0Q_{mRNCc#x+k zR<7)wFt5wF9~O6pU*_3;8{ac&oF>>lcRL}QVxiih5?Z>UF9t;xq^Osqsc>yRmsCd^FL)8-&)f?@_C+s5G}8m?CW6&;s;cb}kGIm$ za~F~{n4|zw=aDWVX%~>SYcf zp$;X;8G={inInjILkVi*#&8c1Kc0B^+Hw#QhOmT$IVALeO0`u6UrKxd@m{Qf3gdSV z62FvqZ{l9%KScZ*;(a<*`5NBC#BU~^Bwkb7NjvZ|67D9UZ*44(@(3x9kWydM1){tp zkCN~-38~ulaWn>_EC;O2D#hnUhHvnorko|yTE_~<;GQ^ri`cffbb!#R7*)DRz2TkJQ`yCn1_VQ038 zN@KY9h;K`LmpuG^;(HO_H4p!Q_ypp+<>4O^Kc4vRdH5>grxV{J5C4exrNs9n9yj`| zCVmU?z4G`!CjKDty@@9b|0l#>AifXrDub^f{vq+P#H$VdDe)hO?@PQxjc!q&5f6S3 ze7`*WbK;f6$K~N)5br~L|2+Il;=_m^Ab4jj|108q5I<1xt{PuU{4nAN30@o1gs(|R zlQ5oyj>dDpA$~IPmOOkN@j1i~&cnYYeirdV^6>A7UqJlOJp6m&*APD}5C4Jq&BPDS z!+#`xKk*59_sgb4ga6SBR>E?Di7a4JVAVV9{v~cKE#hE9yfCSCO(w- zF~k!F-$;BH;xmX>8GIA*gNPrSC;uPfM-rczC*Q)gPUd9d=}uMEzM(5X!Z{>xHdUQ- zb(@4sNjP2z9ZlN^l5jl<8O-CVa}$~n33rmv$~>yQu`W!)BP5(4qN;0)wEH@wyhh52 zLaFp95mG)P<)plVM~SZ|ekxL+CcG3eQZ|w@tEMXo;t`5Si2VpcHUWJ*dW2#UDoL14 zLQYf(2|Y+~N$5~pto1D=VH*d!rND>z=@={fh^dw1VXp-l7l_Y&k(wT*+ z;v{V(i5q6}1SUwTSq~Do3FVQhNE${G?q3SY%d48CgGf5JFjXg#T1h&ukW@p`1tiS} zNi0=utk{{f%Sl_HXz)AZs9i|AnY8moq`!u{l6Eg?TyxdFSE6gVmc%DXqg~Xc;G1mnRCh=Gj@0TonL(347&LHW5Lefx@t|4hjA*q?9B_u5^Bn>0!6_Oq- zBn>C&3zE1ln%A7SC21o`4{MUwoVO#X@)wY}G|E&SX#`1)Bs~R^v{`S=+@7=@NPAi* z^M+7khC*NuaWeQCV3OGT}b+vq<0HRyOQ)PN$(Ysb|WeLD@gAb zl6EJlhNKS)Nqdl#BI(0I(w-#kK+-Cbcu6XY?b^%tBKaVaxjHM?RDLp7kTXY+yc%R& zw-zMlifX2n^pADM-pqL{NvD(ai6(h9v@b~uN&15%|C-r;BwbI^pM|7xB;8BWhCp+s$khHOobP!4FN!nCM8c$N-H<11*B(;!KNs@(R;zMR$ za4<=|ND3H|nYkZAQX@%rA?Z+(29p#lBppW5Xp%yOq{B(tgQRdFX#z zlK2X|+Okfaa*H!ZlNR_Lw2n;XCmlmlB}o;9q!}c2BdL-SWtwerJC?Nmq{W5i7dex( zJxEJXB+T5Qi*BfCk`5xNs*rRXNk@`YO^JE>A5U7Ev`$RMX|i$23`uiH>da&^w>Gp^ z(iV``Md#)<-V;c=k)*C9`PDxWB)q$!TJMu@EKvdZ3c(HXq6Go)O6!mCph~s=S^?ND z#6?U*K2LCi+^Q0QY-%0e=KC|P{@3hLn=$J02~pP6|OMX_isU;In4|b#zjy~_;U0mUyF-`+&Q!pBX4k7R)Vm@TPG5_Jx#t!6K8aB%1OK4O zoe*Qk-Me_2eK&qLRWfZbdmmDzG0(&^zuCtTcJBdkb%`cmlIfUtOZ2kZ4V2e_Sx|=} zu#sENq6O{7{iU2*;|?A6Rx?W_{$h$(ab{s>na99A?X0LHgfz4%+GZFY*N|kGj)0Bi zG-eAXh}l7r%bdYRT4KBu2oDT*vXl1$C|aGDFQ&TAD(uHs@5U&zjygqNRfZjWg~~J) zXI??=s3!sZ2EvZ$`cAD~P(8DzdAF|aqYBCU@#{W-AF%M=P0-@BZ8Gn1X2}7qF+>*? z^CcaLrpeg;UFk~7h%)pNN{PEmaY`McFgr^yUztc&8H0S<7!nj?JV+S{5sQbOwfrpU zB{rS}65+PQm6$Xpb43F#iqoT*)|3r3$*8VL-me{svK--+rFPRmyqA)Nm0}MphT>9| zqEyFtD<&z}^{R^Nvdr>cjE5+{-p)RZGhP%?zf1)iYEgT{@XYIK@TM`27l~Kn`99*> z*SFWcu2H^gbQ!5Zm#IJ`uiDc&2D|jei23EeE7p_*3+=JVnxdBK@!MO-(rz6%GajXz0{99lbd93zGGlBh zpM9nkYlguke1R1khH%$}q>?+mW$Z!mpk^pp&JfBNvGxP^RPkZlQ4Q5W&fG*>caW=P ztwe&!3s7b}&hR*F-cXl01Jz<@$)0=yh-^TV-no?-%yRJ5_{B(ohjj+_5{_P_4V^RV zyi~Em6w#Trb(14AC*r#nl3!J@F&IyUsZ3yEJYJE!5aPIZ%V@CApIg&l0XS#b<>5~8 zc-wL)ms|+I9ROYNwq^XP@(hBWD99WCmzdD8F7^n8(0gFtHlFwt5y>!8CqsDsn%f9; zbsW1D_y`9op=g!wZ9{lZ(IB)p6oP%;6*#z0rUYmH5$}$JJ7so}8Y7Bb8TdpBb9Yp`E`Hu$D_brnxu23nC5-==e>>jq;G{puYKma00`#`008LADdGN?w69 zN26+v9$1%Y^HLR7q?l0@i6ozd8533bY|kPjEs0jP;)|?BNt&>+ESj_Du*JwBv--b_ zbmB)>C9i~>|0fNOPF}T{3Z*_3P^JGz{&rOPLPS?=#6>wmc!9-#soxSOJ|N;GFGtqB zSJj(u2XGV9WYk9*hpE$<{<_@ z875nY1kIRl5M?;s1HA6HB21)b8BXtk+#1t%HU}lrdjdl$(%mnZAmLIq8COL|mGq=C zJiRg(yz%~hj8>8p71HU`!bCMiAq-(k1K~q|T{QeKJf91gfL4D6lE+7E16)RDYG6iZ z4Av4grgu!m)C;s(v&im-3-(l#ZI!b-+_=lgsw9C zdjvzt$@unK`qYwqt{=#CzHt3mz;%%~Fo6C|pO}j>@G}sY|Bz)ulvPmnjr$x>sgZmo!PPE~UIumv=~Avfl1v z{pFh624=3z`8V@{Opfn0IIA{C20Q|@u?a8F99U$nM#uXgMBuG+YF=D!*&WHM=I)C?LXnUZ66Bgn&Qh}hYG5Kgbdt09xG;{=pxmexAZP zjAMWJX9#Eh?FNhTkP1P3re|=f(NL_F<$w%l$g)U2*OI90w;YYM$9VOqe2e~(^DU`H z@vR5Mx9lu-tA<=w8~Th*IJvB2=_?+|_c@1!S3Va-aC4s{LxImN-bi)zMAKN<@Ko49vc!u_ia?5HuY@Bdzd<*k{G$XQYm-c=-gcI8qB&rOjsY1nW+zE=Bp2hdi8Ov zS4LGIv|X+~M5k?NDl!20M{?9~3IM|i%06ui*N8$u; z7G<*uu%_8tH%v%Ai>XLvCl00TOKnAy?wxP#&D>Q63MQ3BLM}y5TT!~&ib+R1jMoBa zbd?Z?N~Y{Y(MKBzs+>}@qRDsBa2ql{cT+IwLvt|`XdS2NPjwIr?l;dv&IsUD3O!{*Si*0kI(NV zDt>OWnP?Rih*4){i!2sLO9Vlu0!S~ zp-%P!k~KbRCs|AdZK|A(*OP9Z-`^^~LB9O(7NT5!_~c1Uk zNm|mMnR4F`XkScTcx`CrC|EbJco;vOW{f5RH^r%{EE&KBv^h7Uz(;8YpN~pZe3WaC z8LzICkJ4{)J}T@eanno4BfLudcCHSJ}z0XeB%OB~Rj(YZ+ob0VKAq?JawhGM9~K zR4R8d;e9N7UlnHmJqa1$;YX}YQXe$;zBr-(Hm=IuGabN_n~F=p(5uyhG5G^~vL?=# zn-HZ-k&IXBWEoF4a=vUwF=K8ZS*7{O>;1NoG=Hl!=x-VK^|yUUP6!n~i^XU7tYX%z zroW{r&;g1#l`$#9Pv+!U3e4je&3)J~bse{fqr;c>SqE3}ohn=zF z^y`Aon6;pFQQrJHtA$hXJbxY!oANOJ%)V7DEBdqF6$47Yn=y7(S&=BJd7ZLKNGzWQ zho{m$hnFa?1NVVGCwTR){GEQ9^LG&{ee!200sWn>;qnLJMuurcgi{RD9i$z63vORK z=m%W4g8>Ng#s%-$+>QLzwKo~$t>THMR=MCNAT>2?KC4`U?qG_EyF+kFO~Q8{8O<`b zs5pY}x*?!024%LeC~vk_EhrVVm7mYk(e`Ci+25a=$8Bewh{ z-62fa%>?{?>YgRIcVtRQ)uWF_34ZS*P0AD&`sc%T8qh@}o(*o#94QT}4!3aIxN7U93ydDwL)1Jy-HoC_`1aES20ZQGWJ~ z)&5V*(SFAKe10ZT@4Dh-ul|*v(LZv2CaQ^_{igkF1n4d+0PS~MhFRm{bARXi+)lu? z&+Uxh=HnO{{{M_)c6S-a0zAn$7G&uEeH^1c@b6u4`mf`d6b$3ou3+?yV|yaX{+48p zV~qR8vE4~lX@2nrj=dz!-zrVY&NA*B$HtJH5UOt+ll&E{8OLY}_=1R28T-aD8VE${ zlN-l;>g2{TrOsbU9gJf+bz~e9b*i*FY8)%n1>+cNLF=N%v47wf|JyjGq)|~0M`FO- zIF`$bL{ZHf$F@d8CrhP$&M#3jj-4XD&&102>8Cm07ojqaZPLC^*Kqj*-`|5_S`p#h z7^XW&JBYvlzHw}C;JO`*MbNZ^+?ppDczx|#^DKb~crx2Ezmwr#^E?23uDWh!I#}WW zoUq=(rBB?Q=6nmcQg~?~8E5wed02voogIg;Z|U z7L{sF_NFoEK-sO~6GI^C=xTJR=<)G@H2S+=Juh#eShNf(l-d~|)WBK1TqQ2-EOCF) zTL%rh`!I1r(qaYXP$Nf6kp^(5out9wbdnRk<$*NlNqJHcd_4(a^rZEwCzWDVxKv&F zXb}yr=308)^9+=u9LHri931|2Pu{)e;h%#kYf}Nbrxa1#6E4Ui_*_t;(*JTUb*lIv zQ!5{&kK}w%q>2y5pdsf{tZtV-2=B)*s}JG*8D<5G50-)3=Yt0W*FJbCf}8sw847%` zk|x=*55A7F&l0_v4#k~-llH;Bpuq?4!3jPn8RK&!p!*zeGNN2jnTT`pcle2W1QEry z`6_%VE(@oSA?{AasTp^?>CFOVi7axbk&I7k;G|Yrk0bz}qXNxby9Sk*_?>$csd0BY ziP$y-YL?-~Iy)<*tZ0~})ZF3`9?0+Or;F3$D<+h+8LL{-pJK-St{nFdA!kBVLU+z> z3`RqheMk1P@LQ^)kgAcBmBT8nqyW;hH^~(WtB9-rJg?pX{x7AjFxH@HAdV+|gG7F5 zGc<$8@yI>c8B_k>k(Hh2|1UzlaX7lb*oA99&jaJ(_kXErF){sLG&TOua{K&WqMrX} zJwHglC`sUl`6yVxEvk=_8|0F{}|Jei)TkJn=>w5Uz9MO;I&|I=Oq5s5( z2b#vC^E@4Nbe@uHG`XC<)&>st7Q|B9*|Ql>J_!n5B-$8D77TuZy+3f0`XN+ybl3Y+3g zqt?$b(lJY4g-8@>Stp}$p6iua)d_8xs}qqbb&^8vZ0j_O%O8YYhFL(Vp8??TweLB= zb^XjkaP#^hLqYuvWf8YLzAb^Ss(zRb_46;Bbp6ag{ag+@%pkei+0#I5#gnj(dlo{r zuCTKihRMm48fnjFTveDon|!hKD^h1?5U;>TKBUg(B8EC+B2#CQi%Kqa_JEzF>Pn)& z&IYqUd3AQj9l1Koi7BWvX6dUliRwDz{A8Zg8B?n|qkVIACQ_x&1|fIW8BOK#2jMdr zW&sgCone|v>Tg?c`}cL6148z9^s@Hsa}nIizK-+AHNYm<{H=2>AlE42I)Ce27m({1 z;kt0^Tnou{vT$8gz%>o~iaN2@F9yL5wLXMBM(!mD`^$AH(_bR#FDpoI_GV&N%jM*{ zS-7s)I@gutdRe#@ZJp~Xa=jy5S8tu`c5)R5X~{db&UGibMhe$mTj#o$Tr-91z5=e? z&X4;+(Jgcdf*fJgKID^dK23a#EEr>!;-trzon#D_qzU&y;E`H<>79Yr3HTfizc9nk z;v`q&hR2DRp!3_*DGav{fCH_F31v7D36f6k$6>&wjFcK=$?WrgiE97n+WzUDZp#0u zea`a#s-w3Z9rz94J7Kb!5N-z$_CUuX9JNeHaJ|{fa<&a z5gSa&x4~n;wGEy?(AZ!$@;g)VAp>l%94Bpq-Ng?iVZwbHIKC&0hZ7LUvw@v`5>WbM zdIK(njW;|F5SCzav4qHx)W#B&l)7D}Tx9lHLZaUIb(W`}vIF(c*+Jxr9j0kJum~=H z(EmNfF!d9g%*eONGr+Y?o<-2u5MTbBXyq`gUmi-NYu=)&hhk8wxHfQTZmY(#Y}Ars_ybf z%6|gO@9P0y03my;^dT=IxRw6@C31ZzTrY2(>lJeK3Za~{UoGH*J-Ocu`?2K@`}1D| z2d;!($0?X?L?ZKi3EnIpO25dPr7J<>LncDS)gosNST2^enQE(JgZG>Xg>au!-kJ9- zc<)#}XTt21AbHMYHf1MYLN55SfrMXXjuaq|hve8V(T|7de9NrbZPfE2_?m+xd<6+} zb(OpZYx4a5`y0#<@6(1c-b8RKhJA}%xSI#Ax3|vq4!Ll@09@~Go$EbvVO0ZM?-y|8 zI>HY?(GI@~K{&j*9y?e3igftuJJSJz{bE|R?%;@#Dhf#))CQr8QuXx)ljUrjm8fYC=XrXo_P}E0+Jj^u z?cqG#9#}M&Khh2s=Jy9{fNS%7hM?&Wc)hCZLk8IAbDZ+*BMG&AzMv57#>Gk5=Su={ z_bZ%eAE9R%GxqVW$37)z!lg8^kBAjkWgjNOhG+SuRBaz7^VvtD#y<1KJ`|+v!*b>9 zBN>Q&F4p#8(OmwBeXcC%FV=#P-5^f(HG+P(=Cf?y0K?wibvV^ui#^LY2jw?;9RxMt z%OxZQKA{oXiBNgHxV;B%!ts#vj^;CuN@ifw*hqMEeLm%b2mxZN@$u znSa8iG_j9}6;@>*Cc;)_`K45CA13qJN210)3&lPZr0m0TUn{)l~+ z=G!O8oK>?6BWUcyc6X8FLk8H#!6~oZNy12S0^41TLa;Fwr}P25I4mL%cZ+diyAyhr zv2=@ScL|5>E&?Ri?m|qIa4A?!B{@hcWh$n}j$8R<2D;rbna@-b_1YbVPwd;FBxNg> zF=s2uL2UJqwiS!%@(0>Q8K#P2x5xACRsvkxtsR1XyImrAk^y#Wk5iuABw-|Z3hmZ` zLa=ESr}TleTSo$Mw*n{HP3T$1(uXL!O$gI&Wk7OvD`ldDOTl6{$w5*nyD_~jaqPlH zSlf-se0GzlXSYkeGAO&Tj5)hW4q~_E+HNeS%O7Z0&M;LJyFHt4w@TpJZV3eacDqdS zBm?YLg;Sp0Bw-{ui*~D_5NveBDSZ&_)|o)u?Sd2SCiE<0=|h#>?k}a?s)6L}7H6V_ zOTl6{$w5*nyD>d>P|7be&~{@opWP(t+3j+#49adSW6o}pgV^nPZ8sLvfVM!=TOXhM<35fREdAQjE0SnW(p2+a>uX#Wl6Qh11*~ zMBD7vOK7@Yh}f-{GT58J+6u+HpWS*ihtNI(Rw@vp%8aP@C@M)&K-(Mi1EPJ2`mTBE z5zihgx~35H>+0ibAlF&K)mXrFFv`*d40hOtr?A@(Cwv|_n0%R!wkVnk`x$z-w}Q#f zS@Z!W6vs2qm?$wtP=1v|V4}o?LHQL36Q#q0Cw2>BFE=JFcJO8fm9WVweeyNrtMNqT)#APoQNay zd}fcwK~1p2&XOm&12!KeYw_TlZ&ENA1l`DnB8ZE){AZ6yFIXe~4oYohjkq7~e_bJd z&2(5JZpKO91AQLj1eS^0g9XdPl5cA>eQ6kYpe|3XOQ51VoIo`D3+lHqm`Fuc@cilS zwu>p!YU;=CgN3{T(}AX{q#B2?4{8lG~EBn$m7l zn|D!< zW)5(rS0AdMVKwLa8Idgg%r{VlYt^hWmp{_CtOqK6%PQIp7iT!t=X#CTc!7OGFiSWj zzkJOA(O{M-Lh_qlNw#?XG{xv=NWTu!c%MU#LeAPDcSMl;8~xA1kzC-98)(BV-?LZ_ zmslj_XFB-fXq@yti=*I-H_&A&UCA@|iA5G__^pRZdDAKCn{Mc$1xEDO3)dDj)Uy z;}4cC_sqXL)hMmJ=sAEBVRDRj}|so zQM3E!StRKh8JMy!FHTVv%lia9?Ub|Lhni-cg1!H z*;+&R^r3sGW}U?IPj+%Pz3mOO9rrL{dJA#)a0$v-J%PcvJ5imO3bDyJ$(qtY_&vG^ z%y$VjIIY-}UNj31N=DoX5PrOgp(hG~-jc$c^p_Yp^d1530m5^gr9VZNR%J_I0u;oa#ftWG|%J7n>Hq78;v=8KuAu7(~!k zC21ryw)H9Sq~C%7C`ejp?D^BjOVJ|I&pEPoNqv$PD2JVX8@!3}^6|MM1;y1new=vv z9ng9^SW`%}EJVSV#_>u9(VP7Y?`>QodQ%}8V~SGkQ8*4L#leV-5s0#1Z(O^&9lpAh z>yN!YsKn}=;0noa z`ZAac#qY=BXCT5W{=vcYeWc%iBa>p9_z6zwH4ID2^f2(^6;-&&MnQ_rNq>rP_A~t8B~>C$URI^3>Cb@= zcnz(CD%ZEQet}c3p!+3Hw)+)Mo1C@yZT%WQ?7u|C^f!#n49XjA8pEOZ{+LWEQYbx$ z8lPmht^hE&(eI4^i8GXE1fj-KQJZdQG1*wl05q-Rv(MN!Wyet^gSrqu+ za_V!TVfJD^eR8_LMBYJ$*NbhD_bu|?YUdp3|@mcKrEEE8_sl?NN`%6fe07cZeo?}~L08dL(R@;KdD zh?JP_T!a(nYZvSDB|MW(0Cb7xW=oeUa)o;t$rY}|)m&j$x3i?B|Ba3xj+4AJ zfb26r$we)>(|CQ8qrMDZz!T4|uQt%3dgw$wz zHsi^wLBYzEviNPVcq}V6?gUe|UYfu)_#!4tNGfd0dd^h}q!P9<%VlE=JRbGcI)ur@A+7xpJ|Fv{?7=?%bT3QLD88*eKaPB$RTvnUnl- zU@{b31J7XLw|otJBhud}`Y|1R=mwnhHSh#D4)^rKaU|Dh_C?m+U#zLI0W4;Pp%tQ%EgG*m|Rfh;xsk>kyrg4d#q_*e;C{fkj(NrIG z7ts4E7cEj%#^*S5>A8nmv@m<9nVYX(7|pMjo4j(XdZ9gY^&*m`UZx{|)(cJJ@<;0B zIH2_z@1pGo&UtWqO`XGssNr){P8qV$fVi{=-PfWp-HT#7p*Y zC4gIKhz8RE#IjTt8FC*%A7pbg?4hQY4P}}S*Jd_2^>h;#XiT!dd>1ZgaSs+=(t^I3 zSu}FlgQ~be=A+a}Ic(Gg0Oil$4Aq@sy*>#OqL&3HOHp@;Wn$b8mQ(D)VDF{~Pr7flcxI(TwDB z0eA2qRjxD|_`cE@lHi(`Ctc2tKv@wbd;=!~(Nw7?;u$=wS(MrqEVv`gggk9MVL2FC zw<3#yXi?B3#GNSioc0_UQEF<%mqw~Pt$Xt+|=@q!$P`K3pC-o!(0`rB= zh^4QEdEF-oV9a5P=DAEgn^5vP5HVj#bKeP8Zq(9_`xHnD!%jjkeE#%gHEJ4eC*p;o z)@2_95Benv$KbTD$taJLD@&5DLd5I*7bE}S$H_WAEuzp(m7jW(kF#i}{B`^w?8C!9 z_Yg}+kv7Gd*qdQcHQz|aXyKaeZJw>wSjIZcjb$QP#B?V^BUvnozfnQwA@^0BL*iYRqx-uR7;yIkOUpxfa@QZ&~vz4x7 ztnL9l4<6J5PwF1f3k0IslX5=8AbjRUML2;z6U8Iu?n?yVGnAIf+Oru?#y~-DLV4Z| zARXZiAUtNr3}Q*U3bkoxMW}H5?)j_$2i%2n%{?E{IFDW5^AQ0m>mp=5{6z5;T1hFi zsdAm?D+_76d|%B6*3(O>rjne1&@Xe1*|MU%A7xzw#B-l2rNj4sd8wC6MId<{6YSTz61n#ZreEPHlzt7TS-6_(#6G;Kbum?YEl)L>Q&l1l z_GQ8Jxu{sV#$!Oq%q_paj+E$P-=Kg@W}0-SjLg4DI#ZI>3*DPqZ)Q$!lF?jC?jD>? z-cXjm$r>tzyrb5+sK2|#?(c(;?hHZ&-Z>vHiI-M%48=Q!n|bRqgm>}w#;O}<&)I|U z4tsnV*ctW(^e%VOKU7=Ju=f$Rvy`EcbQg#k{uE%Ru}EVWaFI?DG({4{%~0HeQ-6R| z*ey3UT6J*82)-{oYMW5)sE!ePHVNgC-EqTQ6^{fXBDLYMt@aNieU72M!A`fk8*YlV|SnWRB~x~IF!bw;-ZnC&&bJXKcM{R)v-6vc149z2nTDreXwd~#Dv<|NWxVXfxV`1xe4mewNT z(w24-@6AfNw1Zx^XBTJf2WQw1{Q5m zrK!3|Ojl&M982ai!RnY|72)y4(pYrBD%){Cg(UdDV~s#wXckyw!7Ek-wX@8Iv({sg zn(H>$SPLXG7ao~d5Qj7NiU)5=sgP~(u0%XUfMzgODVKj0VNXCOJI z2CbR9BECQ(l<-TQ!tPfT!3CSO3jUgLuDADw95o*xC6n05sRpU%PlwPXE+>mJ-2f(M zqNA%n+FXl-lJ`L~I~&51QF1P9jj}?ouslzCpXl{%7nt!Ryqh+(2kI_F@UwF??6J&;H1w%AbAy5C4y;5eF9QD>GOcLlq5=1nAuFM_0M6m7_pN=Mro16}Wjj+_EhAny(pry88d_^Lxn6coLH zQnN!qEe*y7+R^%0aEKEnUkILE_59_Q$(4nJ`OAc|#7x@C`YK34k}`P$1usa|{7_F%CYS z#v868HkkeoE}SqS+e|n-~wxf_dE4qaKB#9aV^|gc0im+`E!kzRb5aCiGttwu_ z!(8$DJFqb1WAS|VdWy|@|KnzI{r9ZXt~|cdwR^QZ?4s<^#I<=!Ubw~ zaHu6`?0g5L?pDctF}a(CM(iVmas+kR)707n0_O6%)yoItE0-WbauKN5biH}I1!Vby zemRg@^TxRZ01PsK1kgjS=WK%IWQ#yK*?!eMr@<%-ObdGw3(D^xT!s1LL$DH#_f~-p zj}A&eX@s;pj@x}ld_x8yOCEMPX;4$Yrh)wi_Lm1~!qyDnpWN+OJ=!d5&wCu}j$Z;+ zk8vktrq4XGm1+LCDQX?J(Xx6RFwQ#ah8Wl1tsc7^u-i^JpMv;X-N3)&j5P11^Ut=z zfrI{8Ix^N3kqv=?7RLt!zrum8$wDctH!vmp8WXLX5r<{1DUM}fY?1f#lD7m0d`RA1 zz_}*AYhmH?+Ik*@(`<#$LE4U>Q6HuOyLAnY{y661sK8-aD>o@BCMDJt&sf%elhMUm z3s;!X%g>t7shGJOcxV7JhfSqCra16vTswZr(EZ>m!z3C5AkwOk<6(V0>~`d#sLy+$ zPdw_Q$U{-rK50S+0ee=o`Vh<7yPv^4zDHUW8UbqK&%`PaQree3XIVWRVr{ntbf^rL zaj{hASh#tpLzC_^e0}gjOO;}@7fN4guoHl(wA(`~+Q6|EAU72n>`^Bn#WrV=y0cfJ zZm@ykn~v}1sXYGnFg)9-C6C7o!c^Kfy>iS&DOK7Z6DI9QRH>5k59(Wm7Gh~!g?7S? zhT&ZNx03Ig&|%O;QLl~}z7^XCtby;4Z%im)J=RRSyjp8QJ#gu#QuJRJ(Dm_2ZxcGu zqwe5^mVIGqdFQ|*l+JrkGx;8fkG3g!v-dE01kmObc2~KFXAt2;0<4`W!lb2q4vx{tLCAAbuzAlv3Et+LOZJubXM3}d=*vY zu{~bLt3nM8#*%N~zLoO!t{(Oq{6}H!t~J!FJ=>q4^XOn51}|0?x)=4^L9CXB?NwXY z&9hn^bXM}N^zyiJgeeDKsHyBS5-;*rp&{EDY6jaEdxDi3)YQlRKParo+Gq!?QK%=!nslq-yQ0|eZM&E8*wT?E)CTPJ@0cR&X>blgx|Hyy zcOIebFGLFE&#S&L?dVptBjruoc%jqpHrRR(n-vIH*W-?%W3|UnqC!`EYxrisx=P9( zo(4~%r6?@aX0%`Lm3-oBMuVH+v8v90on>laAzI#p*!t;M4|}20z0eZ)pQ7HkqY0IJ zb@}zzM&8BHPf3oUdsm@}DHCdUFy3B@7U@{`;ANUB)Xmd=rq?^}-eR<`*%B56S@~|Mz!gkx*Fd-s?LPoL>|hEFT z+L!&Ld^{0Yg*^Dz!J3TTdm-|1tXRslfM?D%V*3O#suxjV+tUb|Y*y7t+ z=e%Ls{zT8ShkF)39GWVt4e~;>+Z(Lav(Uh+3^sg`2@Uf6AmFv+ccvQZzs@qD3a?go zM(a^F*dLZvp-CRLz1Iu$MB7(=$v7{!Kle2Cu?99!t#)VES72Xs+=-Q8cBP%Zi}h4r6m_-;puREpJ}lv&7wZJK}E_mLBRWL}7ynKpWh za`pT$N|>%K$gL0C`TbI>2_XT-LQL)$T2#vCaafqsz@H< z@$|9g2=X1~JxarR>ohA0eI{zjQ>{kp49V+1?E=;jUmz>Ix^Ry&CNe278D0AVQ(9HtP2gs05f6*b6IC4mF2 z2au}F`p!efTMvnxk_Rj;d7|~C@a!_&q&h((k2V|RMC)ncdG#`b%(h+<CI z0@DI)O;5}-NGx!i$oZtN$*U-k5o9~ZNG=9KITs+q2QZuc!|J4w=RBk)&?dQ`^n>F0 z*6JKMHxTGnW}VqhA+K9?fr|rdO|QX*lrt5`rGa_ymTPpX7OQ9AU1(@o|M-wEB=<{j zn~14i!S~kIN~$7TAuV_k#DF>7caxA zl-y#~17S;f93T8KNZh_2wey%pu%kOrBa%mWC2a_Ff#fo4p@$3&Gzrgbo_&S~1`G0q zhin_z(PsPF9pmOlw+CR2?E?FVhRaV-$O<51ZQAD+Y+oWzi!~MqHC#4E@iYVu3EU=< zr#2}bBKL~qiQg(@sx>9BTqJXDKshU{se$LE>~&`-q{V6lLi_xbH9W0>U4yKz$2<*Z z0bxlGM8B`}X$y=CQp3wXG8+CXFb_3_UVUf9Gd6I3;ISa<;z6w;k>|lB2*g9oeg3BgSrX_HB2V`<3YigjIM7Fs zKIn}oc}8GaU^hYb)RLzFIb4v0PBkU)NZ=@u{LtG*!$$+hhgh!jb-CsSo(SMw70By_ zZIompSxI&4gC^DTfGeq{=~VLrPY3W$9HhENry_EWp`?6(FDbkfnn3)Tzkxm>}(Z$TO1rSX>XQI{i5C zQi%2bHs%sUrdpo|z7(Df8fme<4E!MFdJ6Lh@*Hk`69|Wyd&@{uif;n#!-2Xo>&b2k zSz@gVl!qy~ZaX7+U7#||8k~Vu29^6yfqr4y`2lUQm4V*_JBj2EwZ(|+B69wX4o+#f zA+T4N{`1a5#$p=-;|00SYfU}u@siiIUTf+Ngn8XLM#)(l7+^1yybjd9O5{>WwM^GV zi#5o;N>c5uQ~eScWd|IV{e8^asSlB$Lw(-Ftcl19YqTA8Skm5a8#^Bagt<@9azgeo zHn#mi&bL|)k$EC#Uv$Ar&P@A!k@L1E=XfBLGfT^jhu7ry(28w zukZ&Y`8<372=y7FYjBW#iG7)*TCepXvM56P1Y1?A71m|;jUwj_ydG4^Sqy}7TD6>= z?3?WeM9v-B6NoI0Q0GJ6RjH<0x7v?JSgvKdZ?UY~?570TpuL62(}J9-y8{!EyyI@ny61FL5h8Hx(L!v_s`_1 z6XaT~2^kFs3DO6%L4ynz|feJUvF4R1W~*_%&A}E!G3}_EEO4 z_nH(>i}j#AI?8sji*6Uc*pJ%yjsQ~4*8WW7c**NK+;FEpE3C)tR*`d~ZtpGD(?HmE z`tGH8rUE%tc&20UVX7AEdHZ3>tEbMZB>1xZyyW$fZp%bolu~r}THI^)Yl2MP3^~q+ ztQ4NbKIC;l=3pkQZ1|e}h9Jv!QTkZcYxYOc#qibXl{uc(!c(uu9rAoE$Zl8Uc-Ba{ zb~#5OE#Ub=$~8>)ncD^5u{TM%9@c#?5j)2Eig|r6w(`Yju@km67Q@YJtoxQ(=PWUj zKeo$|s?0h>BV&V~*c}Ba_K-DpT#&gQ@~PcfkfS~1bGwfq|MHM8?f!!F@{o1*7(qV4 z6%Z{pHu!@*PBi?v*l75p-69&!^~U92>`ZJfH0-sHspU}co)~>>_$pJ1Q1CuU^^3O8 z>|k*aTYHh}7G3W|ensxM9`MGvcEJrI=cTueoIXHkpBY-t{NTvovLed)OWT>q@*-O7 znFgcJ=-}%>u(EWvLRMJ21XoF_p}J>lvGxQ)o(H|!*(>;25o>3XuH~uL1R&(u!x5t( z5cCaL$5AbAcCddj^IGp&V-66?IaBBLeDK!bH-cPKrcx34K_vIpc3v60E%=*A-qw@+ zO7N}{j?2rv`Oh0bnAfB4nR2}o>|DycKG1o668tbY5Q`x2RV|sw;8N;*>3v4$kAlO1 zlvx++R@q{eg^1vOfHzW?hqfDB3=(CvckcB1iwJ%BLx-@V-TArFujb?z0RLqk7G?kDTqiTomY z9kf=-=@~ja^q0t4^n|h4M7%J9WuIAQcqWGu?P%wXdnjb8H96F!-CQ8+{-ux>Yf7kF zJI->~)G1^MkiLSvuaQBaDWOI|Zu24i1$n}U43^wCd6u6N8V1C&e!Sb%&a}`D?O67G zyngIxAT0YuXDgmPL&t^2x071d-a9tb8aiBfI_XqEq|H@>kk^hYo zAjmxJy)D>xRfJ)t%o?e6o@%uZ*OgJuH5$R{Ww>`4^P1?jrVinzGM3`EcT6b;17RsH z(QW7D(AaR-a+YG4E(MY9f{gG+kp06um$O~m;^lsLxTTyWeYcw_>4fl!<+SRt-ncv= zd}=v!|3F);#hMVFC6ZTaWNm0l_-f(lq-T0)U*Z3hQ^U1d!yiM(hOtQtxnHR@B(hdg z&DQGxE!J`2?*w^LBY%gE4|nds+<(=G6+S-PwFB+^w64=oI1}zIJaNqv3b%%n!ZTVU zB|!QLve)OzhD1`5YQ@J2v4AuR&#wcNHLAiVg_{L=$A^p%pUgCJXY3ma|>h z4W}j5AD$dHe4_9S(H7e^+!j7rkV!ffky8a(t*y}yNLG+_o`!8cB}u-@BDj|Aiqk#msO-p>m^DM**EjGXylZ1YE|l^)Lp z;r1Qp0;xF7w66=p9Xqn6%=A_dE)4etQf5uR)bKnfh-E!8OCc+)7sCC8=Zo`AUatXR zUw8R8hUbm&NaTh6BUc(Z9{^!qb8a>~>%x0uf{1khj50f6ESzfn0ED^Q{S>k)ygq!W zAj^KWgr~*&Eqs*7nTKm+rdnbB8E)-Ji*?1SK9QM$O+e`LV~b6yP2rO|UXNB8M(;-+ z>|Al$B=-@!o7{;|&Qve2B4@GWeyFEUd*=>8j(`lxX|Xyu_X%>{PX?)Uo)_e#^#(~e zFGybJcqQ%Xyw`CaO3HOeC8xXdnWWm?%d5MyR_g19QHH0d^P`lj0{*O0^>luba&^%< z<7<|9cy2Mux04TvRl;kF-y&wl(X7U>BbQR{yf6uFl8``r+r=&Mn{>Rl#~+p=~(TI@H-$kkWlss;Sl_ z=U|a@CVY(gSk^RWvgF>utJ7)DF%`67i6?o6lLZg%&%jriY6Zrddqnbl*GN7G2+KYU zGgwv9^PKxd!wWIXRmehTg~)joD+5Z-#m=)L=T=Y7Wg2D*(lt(f>a-1K1F6MD8s^wux%x-86XZt^ z85kKU$WQyJl1{Y-M|Ol9^an)>c{ngMGFp(QbY3g0p^;tUY+vI&eMSJGh66n0fXF;a zHRL%}t`*kw$kI4R*dMwnWQlba5oq|PSBkSD%LM7|7Q3Q+OWL?P68<-;s6+N{*jrQr!`$7G(Kl26-{kS&%<5_oL-63#^XplwiNQ%VNXx zNo21C^E%AS>oXvfe8!K4=eNkYlIoQa2H6<7B*EE5TOWl?wKhgB6{PRU2Kgs)nMj`Z zj!ET2uSn1nzQ>$Ic|u9_+5~H`QCnlGRT8~Ua__m9@yzn*J%T*hPo-KFu8BS&$kIm* zPw(hTLH0SvSLT{Xmc^ukX!7e-q?h&#JA_4T7BK^{b~uBUQB6H}j0- zv!lJLXrH^s;F{ri@CaYMknHsUI`O*GW^q+ga4``nG(V>#6_#uN_7(Gak3-2(< zMbX2m0^Kl!h5u0U66@mVB=F$5=jAG|hXWT!r&Q5m&tTq5o~htDN_gJFbpeqT*5%Pw zk-QOgt~9&@2)*}dPv?81uJF92k*df8(K7^Dg=-m=YDx5*s(Hw3ufqe@AMg*XYeg4` zHG-!Z~|>7l@pnml~cI1;Ja5adk|d71pcKt3;n0;Xg|9XFzDx zyOIiNj(irqR*=)`4f195MnRtUc)p6>D#*7UvNn2`=yTfbMxU>v4+u|*Cud!BsUX9= zRNqD)5oCnN^Ih~wLGJ!T$!W2^k3K8NwtbC0>!Ys;QsyB)Mc));t%v*^eOHjDb*QFCU7J!GPQ`NwHNx|j#}kQl7UXPCPBhjX2zKUT{8DxL|1tOG zaXQxT-~Vwj#*7)vNXnYaGG&WFvX!NU5GJ}Zc4aGDS&PyokwPoVlBH7FvL&fLMV4q2 zQd*>xlC&vl@Ao>6<2;V@GN!(L?%#dik9+>`czV6}{dm96_jz8asafKuHg4i*n-&d} z9$u@brPdceCGeC={gg~?SepCTbC{7-DVy3sV$Sg1QYp2ggsQs2V$Ko;PvqTCwbU-9 zxra}A)8eTIg=^#N$r|c~!u3+SiPG7X`l(lo@*ZyNaOy7IX`u{D4AU~ z<`)V#N*yQ4i$O_WDBL*pHc@7HsHUk?MQQA5U6?vUl%4A><`$_7M0wo%*hQ&NLLnMI zT+_m-TIw_6rv;t`X#KQ-!gKGfumM=TOY>7li=SHVXF=+XqRc?KG}NNhTO?F6tV#{_Sn6%!C)YzQPMsvmQV+E}^=?rj zsCkWNb?VGA3$a>N!v2C4qGwVc7e8}QtLldpZk@~^=H@BSr#>sG??jtw>My0fC4S1H z!?IF8WmBMVcVMMq%J$UvBoy}+4fRIq0SWbT;OF9$H&Q@ot znD?h16Qx9XRT`!oO8s4wq=)e|0e*7n>(t_9InPbdf~+)6Ii6Zkl$+3AtX!P(Q)(qq zu6;d;uVP|;wP=3riD`)QSg=lp5k#lTd72mre(Q@Pe%Q)l1tf8 zxQDlVSe1TIE+|V;oTZ$l$~vl7q^-nUItbM~rCyN^5)app#?z|EAj!{C&rho&gUc?& z*>mznq&^o}#mmU5jO4Nh$`J80gJTYqp`vs?J@j*{D6P*7m5HJ(Ef*@2McH2=RPGX` z0=GpF^E6S)+#33sCCYBxUNb)nMHz!x%alh%>BKc3#Pg&mGj9)-)uL>}tYvWxwUerj27kjs-beDC_@wSbF(PLuqUz{j@M8am8QhYaSz9RFi~*E zm^M+Ak1toHU21CDedTzDyeX)STuM*dCVoZ)O1sqbwB+&}Pp-#PJgulGJeE1F`Y9#S z%81e?$WJbnOsgUak8bwUFy-{Lb3_>vC{0t!rqvPU+dyfaQZB7-c^)Z;xQ8QDE=AK? zh##H-Sh+YQEA4Vocm`mlT}sWguA<;VpD5>~)Jp4Bo>!vl3m^`hF3n4=pEg>Q_UWqN z)<@dSqBO$H&wg_0lC&vMaKiZ({s(0%wMm;P%0k#Js?37IweeVM_49h_eD;Gnq$Kt8 zQ0juTh2?n#Ne+};T9EdLD0gC(;CLQNeKc*2q@IEukf#1<+S3yA0FU{}wCBXn952P1 zw4IWl@y}Qe*QD(cKYYHy@uWxALs^7zzXdB1D@2>qJ`rUF)&f%wmY;x9{DN~KO?`9P zrxNpsajI;k-J)dB9XP2_Kkq}~a`8EUDqp1iP@enGh8I=Yp87>vRt1iE-!~TXpJ~@r z;I`m%01lNN`7>>pC|$fB}zhbTY0pJ@7DqU>=$XQxNb;{5#np~Z7f zdO=a1a-~LkAyKw?erlx`7G?7R3somQRg?zqr+#{xC_Ox$^V5rp^7F?Qs!@7zQKq@l zG(A(4zOFP&KTVX99#4z((?!|4-{NVReugN=y<8Wkmlh?-1`jnA@gDMY+`dv`?=r$|TQEPI^^Q;$HU7>1T^F&TIb4^lG9!?WxDoYl!mU zK1-`>dM!~JdCc9@Yl|||L-kD07G;~4t5R2uIK7c5 zH9XX)^d_Pd^iX5cFA!y%_tkOf%|uD{c*du<5T&B~nV5c&D8s$R?nu8xl=r+`cc!-z z?({aIWP7>pO>Za4A&=+&^!B1u^V*n|-cghdp87-SSBTQVmHFwNMOo?bEJ}}w z^0E7QG`))`2RuKE)4Pf?z|(pny}Ky6yRE&JruRIH=hdgis)Bnm=>wr;(2tE&Nsp`! zl(&Kza$f4w>BA&cL)ZX3Cv2ss(?>|C)3MXkS>i~btnqpEoAj~bXEG9GKl4(vi#D#v zslRj=(VJM~w^DY|3oG&*#b?y4?p2c=l&i6F6}HnPLu&F%+IdkaZ!dRC=(?=yScdd%cWh#CyVk^ zf^ru^5lsq0Va+W*Jz6lDL4Td4p?1+bP`F&LJYn&?Q~VxL+J9!s$Hiw!>Wd0nem*O{ zK$P@CrhHxe2~o~XGUeOiOGGJN#p3zC_%cx{dfAT`UoJ}1(iZC1;!lh6eR)%oGyWsW zn2M$p&DbW&tV*Vo%-AVPACLL0jQ2zdDg*VCmGP-4+fpo4os4fpDGuX`|8nX4jGsi= zRLYc#GyW9i56@xyjMPfpg7;N4KV36Qh_co5d|gIaQR1G%8!{@3vIe#~|K-w+88t+y z<9+PbjQXO4wR&g91)_wtIyIx2D8s#;r)RXtqui5mQJzruWn5B;`)b#k+7>vc&1jX! z&&-V0qCDbl`d~(zJj(2hc6mb0&1eq=@8;kfiT}3J!xrKaYr6yU&fuHd|1?S_NyY=BglQelm@74Qj?XqnG9DH`BfZZb%~&W3K9Lv1b3EfoQTBU({yk%r zC{sLC!OUk>@zm2ZH;VEjc8L6!OQ&aUm(*+DZtYbe^DXgnk+*5Z%w3fxVfO2JxrM5f zxu;Sg^tzw%jGq7crdQ5&Cq$Xo!TjJ?IV$rkvEaDH+$yuMD5G3yn^{bhb6x3>dAcb4 zen0=^Qm4#vqWtVi*Ua*jc`V=EPGjyzJu)kb($q)yHJRsB=6SxUx5Z#q5bC(M*Raf* zdHf8|tX-Mgt0zuQ_%D}6W!4kr7hm;m%xt8o!$#u2esoi2^E~m~0)=z9D#&v`x-aue zQQod@p&rPLRW1NOZOTzVcSymH9{>KYKDClhm)=Bo&XE z-<$b_gu3=3jX9UzgTgg`@HX>vAahBccs|WsCVr-QZ#k6tROO-w6~Rdb|MjE8nJW=9 z(Sh?co~?8wbG0bd>YMUSpnTublw*MshB|RdsNYTr^%oQ#Uw!V;cyNwXLeqNA?Uq6% z)>S@vHco|75VOryRjusBO1vOSEGPv|N=t02i~|VzDd<1_sC0>!MX4C9AfZwL=VSaA zDqjZHPN-B2W{FUFH<&X+rA5#aLS>dloDlQsQ_`xeg$Vp`3qIOVgK0e67Bz4N!hc(- z3QEC#diofw0fp-)Tpena*erb`oFQwM*pjCwWS7_`exCN3tzL;8l?$L&k71|4e>f#B z@w%i%zV4h?VpruTt;7l1tK*5H)NL)^k%LVYrRHDbo+2nhGo~6n)>A2oF72-Vl4wh| zQ77DM*ojz@=)Qmo(Cq^vv>RFhdK%|I?}KvU+31Iw#`wMwItVR74Zg877EF!M=b|;c z$LR7WiN1vvr6K+CZV%crO03OF=CDoPh|mw>x}jZ!PDt4DxM9F0iqLC8i6Zo;m*`Bm z?v}Eh=l=G)zYNby9rwp+{4Qxc_8rlkl7o$VaLWo*iJ0&?d8B6ft3(Z2MrfJ%vk-Wy zg(p&#k#3aE*@0g$6DqU_rAIlUG^Zxv)-{T_>+z1}uL(-7u^{?@oNX3p24_OtccU^RaW9F|*8iBl*BeHtv}lvyuYyp+4%*wJbm;U5RT8Z@T0yA{P9Jn` znt8F&ey3MowN@qg)AsF(Hd6Wt{Yt~Wh~2-^T&F!HEvLniZjk5GjD|X0;;y5d24N&? ze7^;Aag<6wXlZ(d^YoCuZ*G;31%3}7e{(q#_ zxUT9*%>S>|mF9};N{Q=AiR((~pX=(m$8}{2)~FiXC#$_>Ef~%W(@q)FQF?un)&1;Q zMhl>6e;Eud?Csnm66Zvo1$gwt;xAUzaTJTgOQ02VVrxMC;U@wE`tfX|YM4dUbpqxM zrJ~tJMamkru3)t7e4|m-jrLt=Gz0dU#_|GcLg{*sc~NQ8UO&sIlWPyQFl~>!mcXp4 zu`F>a>oKqMunRqn*IfI=%aJ?JVyWje$mvq2$#u+Mcc(c{H#klE%<8_s(|o6!oZj^i zE1ixwZFY)yTOPnnt>w*h?YltJ)@OSNEsZ?alh$8?r)f+%@ghxh-Or{&d+}5iS~iV* zTPfmJUxc1rg&P%cjnDvCp%(}}e@%p1f}#mlMlZ|W`{f4X+x8Kxb(+^8^C zXN~Wh?X%-p23<7@|!u&;P`dS;S zr>#`N>>Fs=)B@?M9ku~yMJ$(~pC?ft zSQ$Lx@wK2HxDT2qr(yoWJhz#HZ}V9 zmPxIVXQqFyjr{5_%zZ50Zz-M~AeLC1-@H?*?AqrI%=IAVD|H=#v8wdA(;Un%s{M+# zRO*;(T9coQzHzF8Cjsj3_e18|9j7^}Et+lGRLtnAEkR2wT@=KUL?86i8c(8cv93-* zIg+R$dd_sA?xWOxM$4dV_lw4Rk_UyBV0}}H42;k`(fBtQ7YqF`0(X{#+T0zXwV)_9 zdl+{Fg*IGmEqxfXvbI7MSH0cn0467fQz5uEgJeQ{peYDV>4-qtw)0OSzT?t501|a~g(LRqg#UMh_QN z(!A)*wfhO8ZIT22(xeiH!)pH0QkBi={4*>ol>fCED0v<~~^PeuEFyt)20M+sj*dpANy;TomxaQ$9r zQ-7@dan>e4OB31|5We5`mF*T^TWa&w-07w@zg#I?4YUQ>YL3NAKNF!6h%Xj@6+J@f z8MKU2`9Ft1PWy_Rc8$~B7@-U7vBeuvT7c+#q2Gn{hJ zhggf!&mWSEp2QJfV<)~p2-jG=`)f+sR1p2IKD2E58tvOis2;Qng-U}i0^v-hON3er zm1?am7^VJ?MCfv8QK|%riEGMJwh~+W>e+~%ew0S9(=|DC4aa`x=OWZg;

OlV*+0h+FRqj<=PebOE@K&)XrD}Aa9b8KPQ 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≫n%N_Wvz z$pjmBAMqmz7od!R3L3BPUr96qh+%<~o}A@u)dC?_q&9JNJd~h7D^PqW5_Vf|!ox`j zjSr?!d%VeK5Andqg#~RbkGPExg5E|rQ2ox~9k-1Z+nlEGLU9E8m@qTMD|dLLle})Q&D%HARy%DJ0A8d!Whd+r4B-R- z(9zNHlln-yf-4vdISJcIB6loKJV{2%w3>Je3G7^5VMaeRaZDlY7)(LM8u(v)G>x7s4i^cf z_NShrYe<*>2}<1N&}!R*09|+{4j>BRBPWmz%F%3RXBgC}v~oj1MV2mmYVoCKj16Et zwbqvd5JkL9__|X!m)kH=#x|1p$Q*@n^9X(xbq6o_)IOO>Ohk78^@$m>|J*mfToAyV z(x?n`LunZ8cxJc`V{^MH=Z-zDFB9%M_79H|6W>$Zjgs+HOlQOW;Cj$C)h+mu;ww_A zbw|0>v`w(ox(n&F*ZnVb)BM$Lpq6P6tF0(WebkIoP{K9##8udBhMxt1tLA&EO^Pun zJfkWD>ZC!lz$?-si_>AbIT;Qk6ajTX0{en{W6k?w;GA=8POh@-bQ2@M< zEZLB6kYQO}vm-Z*lXIc{MEbbk7!)Mf)JY zyF3(7Y)Q`tq=shQ*LC^Gu||zx>VD5Fz}EFi2KZ520}jdLB2sPOD@9s}Sg>_a%$c!T zt6D6gF6e}MG?S0oWOoy_jdN>p(ADO2;LRbKGi~&L>g51&3Y*=2ACVmJ=0~ydg1eIQC_XC#X6#bGB~N&YrUE++LW?ie>!7zZCYE7U~VZumuiy} zF+cS_KULP`156gUs$FOT(SQw&?>>%VT&~vw&!~ieft(eJDvu?yj0ubON14+7e7U0eU<(`J5x*Ph*$b*0i zQbB+h9jf&H8wjQMfR+dkF9-dtd01)oz(#U|Yk&N6ddN$ka8!VyTt@H$B#b*hQztU; z_iIIE&rfuRRS^<9Dj?H61f8Z40zBPq9l7D1_5v_@RFn)6UXY?eEy0Zp2unrmClAq$ z8bAetm)Ak0;LhsU^c3?vhn_t76|}V|6D^0%ydF=H9S3-gANpJNp_9O|LCTlnXWdN+ zoN3jCiTX8|hH5H&5FLW+K_j0d=K2$A?Wa4`VO|bYmH{PWVzZbkcx({ER|iH69-}}m zkzIK?h?E&MPFUV*A+I~{1bBf+simI+M2e|xc84!v&=$6mO^K6G`&!DCFy5@2Uvve- zT4zhFHTxFQ&APdhoC35ZiA5xt)D-m80w8uW0@?tt+e2cyqJaJ@c+^9I8(|V~MhI(* z#N)?Abyq>?;8!~xlprjD5+qO*G?Pv1<*5i0&_AOIg37ra^8TK`c|iTrTnfU!z3QY| zQfc#|F$6;L5rFX8xFPJnwpZSB0(?inVc4t&_dzg5<&&?Pb(#UQzJ?E({t0Yt@_q6} zfZp#;u{=e3tOMRQU3!ihFOd6XoB+prElZ+7KYjA|=HvXy8FM;0$Y>nW2b4CIAupj< z(iih8k8WgKo?8vYPqk3OvO71fFcG56vL|%uDE?M{rfIoX;9A6EjS2H)azQq&)Y)YO zSVV~gg78cynFA%r)QBB;yKVRPkS9U6K}>1>KQW~-LVk^$VrGuw<$$0=NQLt-yCH+% zjjLesB0{`~jB*0y=xgRd^~2p}*^xg+V3&~{mi$yOtd@wri)Z$v`9H3OWqn#WWxmT7 zewE-~!z;6YA>ATrx~7o5%k=+2dU3Mvb~k9*xYW-^Y<60V-TnJ%fGa}JuAMuD7d;6l z^DEi1UIAZ>l$(hX$|bq$xt+tcF8;!Y_D%(d(v97Hk}0WX5U3Ii2H z!k361P_KSbn}{lAmWNkF!tej!(hX`ocvC}*7u|XLg}SRJ{SCE5#ms_$TvDWXM=tGp zn;TBfIfz6tZvFO)ES!kW8Rcl%W{6kFwWJW9MWt1gT<&xFQ6Q;A&3M;;v!IqVr+ZB)fk~j{F=GP+i%yxBXhawT z+bZs>b*P$?A3hP$!p&Nmmdsk(r&H5N@#jeTZ-iynlR-8rie=Y8|I@{ks-N{0`iO*Q zVDpRQm&t$+rT8xdOP(}L#iJsYzP3wr5{`EFUfB&7@K`Oszwj@xf8|!Jrk+W#=8^as zduIFhHFZ4)T7QffG+pY#Jm{ja?BGM!FR`aoAi$9W6UeRjru&__H^e~m=v!SE39Jtr z4%D4Dh^31egWTUufCD0js_BMVu5SY-@bbrqVolqS`9!n+5l9}ix8*H)c#4MwV?brk zuBjr&le%$L+B{_t@T*hlSi|Ud(WiVsDH$km#PVIhpgTwJm`E(cmkA$fo|hMKGN`30 z8phhR%8+Uw_P*mY*5Ltw*&tSm#d$@uggAs04Il^?iiW{J`i-==Yg1iR^Dl+wI+gY5)`MF z;kD03f{ixf@B+Aj*AsA&BL=p4XzrTQ&jy55L7W^>01%BQ0I(mIN)+W^dM*b?go}(f zM2yUv_oPtZ1?LqX3hd16U)L)ycGkd0PTNY_%I0bP)fsCL1?#8w$9l#mz@*6Kny-`Y zUkM?~`a=NaPS+o5sB~P^%TsTD5^Zvjfyp4(OMYdv#qDOWHpXPWz@c-T)pxaMa; zL8ZQTvnbf_%KM@Z#H9q|N;3~C-`vY+W zfF(g(TRdFyx)Z_qy!1_Mr`SR}^;J>yWPGy8EWyHVx?p_c{{Ek6xzX5d zuc)u(Y0K96QF!T!?dwf`LA^7Z4_-wN%JaBkA=zG54GAwNm1dXg-}x?#7k%AC8C&m5 zUwK|>TczhrdRkGE9Dznm5&gj>jKH57XQu2=84s`1syNj(0mT`c{nmXeSa{%n(w~KA zIw|}-?NR0FFYUGXG;Cz8tnIyD`2j>RTEIc88y&X{&&}4BHY<##W*2Ay%9Kx1l#4Z= zpz#ivuqOLa*j%uPA28$HTG9ctJQd4Eq!PHJot3*#N>({&eI;~Ha&IK#&BL|ZnW<4i ze%H4mw&3%7*d#Rf4)tP8rWTv7-mYjc>N&JgSHbX0qeG|T4Flb>46&hH{dq9(@gXyf zaOe61Tim=3na5;Y`Gs>g;k^i#lgPGzA+f?hp5;AvmRSr=+$1D3cjN*fuvHPF))Pix z)f(5Hbpn$rjOR3Z>@I8x7v6@`FJfcFWUN>=8@GK5oqOUtnB!o(qpJFsh90`MVY2~S z+GZEiPTp1GMi;?8SCERIcVN055comd!-~{BfrIz3{=MZSfcvR@odjy(=~wAkIp6s4 zbPnH;)Gj${{2;2AOW|zupScvy`q@0q%mHH9FT`xYP4c_fpaife zsCV&-kQGT-l1ZK*Hm2aifJe^fkH?4t1FE&A$^*2YECsgilzQ$=Jhc-_XhpGIps14B z0LV)2=biRz6>^^x)oU+D0ew)vmFv6B2ncXK^fd_|HxzQ>jo3mcyZX;7!CD}3P1~SA z`JtXhDg`WjOg6+NliIKv9+;bm1#UH~p@fV6Eq;x|Eg`#8$&SdNhSih#54pqm3I$6; ztQXq~W^=7l#scpJd8BjU494`^E|JwaGu0sJroLj+ebljNb?+vI8cl4zSSCac!aqlb zb`za@BCKm9PepC0i!99Va`T|JyjaLf{=DLyzK_M8#SuD`fzNX1CeqN#vMV|yfHs2u zR54x>LGCKq;lWQ@Xnu zK)SnQPzgz;Te>^G=Uw~T$NPLvX3d%>?)$oa|6K!)f|f6s;)U;xmykvGwcW4~^Xxh@ zwTB42jU4zv{A{CB?nJFIIEw5SJTS{kh%>4YxX9fKf~L)qP%YCFyoXqDO_V>G{LWOb z{1pLnA<-Fbrmn}ad!`Q8r?&IOhNF&Ih$i`XhaUD|U6K`OqBD&o;=VGV25#x#+sjEu z9#c5p^q(%u@o#Y1;7=WK+sDFJ@j9Ncqin6VmIYGa>6EZT{kU#3u$?6rhOuEw5-B{D zTYREr7gU<+pbz>Bzv_fUcIW3Mp?ZzXFucNq@~;ZFu00ik!&J>`Vo}21h~2N|vv+J+ zF3M22zExIO=J=_g{69^|s}dvVR)Fn;+ZW$@bfxrCoHvfMLai4H479xC(fzF{=N;00 zxOxe56KZydat*G@oqbev53V#bB3TtNe}wRV5jzER%j}VV@O0_8>;g%ona(2@aaqJQ z$(}gCHwHG)k15NTgIo!?I4Wg>NVoG7gK^Mioif&|W(0;dx}T6EQJbUyCwI|43v&;A z%FHh*zty!yp|%Bw2{JN`amu6Q`|WTlNZa#Yqd0+VP`Bk!-!-bL9vz79XaHBY-xWh}@y23~zmXduQYeIeW_hNJjHM zC8mz0OVPadQlX*XQYY!nq_~EnD{?AsXslF-IGsN9Nrga`e@?VnSf#VE>cS@bpjvtv zBP0kz2xf<*m)9s4#6U`{_-V@3@<{;c%h>=n1eD;i*=)Y;xiyIc59&riF!SW6sX=%m zpX9b-^mKh#GwuvoLI0db_x(Nbb1N^L{5bwgw{ldih0ljnF^N{7nG<<($^X^3*@}GA zWPe*VERgEwrp|8dE@L4L&)9{2EoV%lpBy)?C)Qsel>XN6*;8XbZHS zyvyUYXue?}yMxVPJnMW-tcDW`c7qx8=~vYtK`^CgI6>uV{eT0;Rg3v*?C~{D?4M~Zwc9K92_f*$39!6GRd;)s6#!%>`?(+ z%)9{Jie7elJ!e~n*qj$d(twN=aaZ77>jIKPhy%deZ1g)=77es6VA<8su^srYBEFrby#K9YpLSOJ}AA`S_8 zEqpj!vXyDTal3DGY#*OHqN6llC`4oN#=hbOmN46NgnK`@QrE`flx^KWRFdg;La5gb$%O2V-q7`>-SB??gQe@v(;g#6;JM}57aC^8LN}uN5 zbB)qIfjZP6e>G?FQx{M3LhgP3uKCe_Uy)N8#X%M8mhcT9EM%WCUyUNMtc-2GY>5lV zx^Orz{QKu#ac`%TD>l~uUk~I{Quz3YpMet>W zAZiR^R}wNI_zNJN(G7^K8<2fmrBw!Ro|@T2W8*gBAzYVxQ$ogjGb-5N?#i{8nLg7I z5e|iUzRG?@NT>>P8GNPey*KZ+xZV3S^X{7A9cjXC&-b~`6jD%#5E&g^k&51%Y&DYs z3^*c}>O?w(&lC!r5QMg#$bk5Lx-1(E&>2XiORVg8eRdS;Wk6#J+5*vTz;HG$FA91< z7#~Nr&ffQx8>qHWAf1!K->$7ca7O*aTSZp(wPEj#nez$#G^clomwn}LR$KWaL^2&{ z1V{DUnrbQBhQpy0T(IRQwxqG``>HG+(8%3NleByA~;X9FL$PAjr5{+~%JPPRRad{Zo zZ25Y#kfa8li?M>#t1fNg4Uq`iU)g*!-6M?+r?2I1{B$1?V0ZzGT8oB@mPTp`C)4f6 zoGj=;%`$fmQX&|smf8%0T}^41upsK>;#8i3SULo#Z9ii#hSd)79RFIMUyOzLF)uiw z)C)nm@F(5X@<(Q*01E8s2tgl6OVkYINJ31OH-!~#=Y2E^m}dXy?;M^pru(1;wJW2i zn4F>DBae~acJPO)C#fIy{?Rhw=gEpxw?@KOnCM-BZjMQ@6}Q=``4yyXP%Bi{ z2tP+^1T0wKmh~UW-(mOORLGLN*kTbV#ql%i$Vr&0Tp#4ms7oYxKKu2HXyu{5_(ge( znzEV>CKcB-ydve^F%Wu38Yc559lpg@uRn|*TKiMz5jIr62+T1mZ~fi_xib%B2ah~{ z;MoN;KBfw;mg#F46+JvhlLDbPTqN9{O0jI@@AG$P1X#2SDYY#r@aQmZ&Z-EPeQ9ED z6=eD@Lpw4+nBWjh3IttmzqfXcQUzi0B!`C56qkcyM;q+M>K7v$y=n1IUG#oCFa=frEJZRRn|L&#p>6z&k%X%i-&HrXN{c@-Q;S%JE{i1iO^%?V#1PfIuSbi~RS^8O_ zzzco_lOHuZ41;F+5ZZYpg0I~in1mj^pL5Jl;uiZy9Q3ZM$GOIvjsCPSY+*tX z3Bfs*1Z09q88x)ffpxbGf}n~IJ((xDfhEU+dNAh%^AkJ7SEOBnZK|f$KXfq8S(r8n zW~#;1y~-@~gCgPyB_w-y`3~Nu98EbC4IU|d95Gw8odLXXaqk9?)&*b4S(kFmr;9? z#_0j+`=3+=H(7t5L+Mc^2T_30Hvy7JqQ!LS=k2B|n+wgoZWFC{IhFD==LX@^5zbq) zUt!RWAD+x0^}=7A!Z#Si_tprt24zo+yoBeo?mB-{2aTo{dL7SkWy?5we$O~B7Hq|u>sz2 z-4`a%<`k$uE;?G?63za)EQm3Ig%}HB9BTYAZd?BFm<_1~Mru~KLAao8yw4<)zHX_~ znd)-wqUQHNAqPBUe{T1b4OZ&fvfGJvwZe zQ9)xjVgLD6Zb7hDKT(L7TEiT?j+$`}4-!DjB%{Yb1WMT->_ItI2nB^{Dt5$CZCRl_ z4Ylr!mK{3B(bD%fzZb%1ibLuIKWd*(8i00*4};c)gZdg73bp08_};lhYvwmEy=Wjz z88mC{KNRnfgUDG`UtdN>{^8xHtagLO> zksfsQ?fo6x_Ta%2A*=Y!koxVGV?4^=o<<@A_=o;Ny{tz0tC!yLhMD{nars$_qi!FPx-^JT!5-p;5{V3b9?XU(LK%LV!dV#e#+xt0>=4Hm2{1-mlli3+KLl z@(l4~E(Nukual%`XpG;P`K;9D7%pUQ5oT20uCnj_lPy&vosMJfhRhOkMD3E+R!vrp zL5EJt{qPm?XT&{K zysq~@vy^vA7l&{{Z0g{EMqBc>Ks_tb8?yHg z1~*=xiu>^bg=6lom{E5q!sIg4jc`q6bO|sL9}jD3Yrn3jiDjIZtfG3#a57hlZD7ZD ziLIhDimsC8!{sC9k0+mk-_mFJW=!~7Ql#~|UDQ8?n-25zB_JoDX7KGqDD#LmqK_BkcLGu>m&?xk>NO?d&9ol((r$@Q6QwaA*?urp#3)x zNOe<^YriZOiWOQc#p7ZEBnd(ymsEia-#>Xr4$u;9q=QO+SP$gfHRyOgXDfa#KV52F zCauLd+ZgN8f2?bQcHYbO_IQ$JCcVoAXtDZv&y-f`=?(o@Zr1#c=VARzt1;_@d$k)m zg!M3-^)^F0R$5BXP}+~UyrgMpBZ`-YG>JJJj-B84#|&x|9(~Syl;BhF@TpUGgrA;M z$D?I(ecOU2ib{uv)s}zTt-5dQsVu4?12{EhO+)|q?DvkIf`s0u!J_a&TnDw4b3W< z;p|2URRhxK(UUi$*)XxIoiFkJ+18Zj`%Pb29(CR+p68~TruC!xAo|EE-a|b=Oy0iQ zK?DmIycVyOso1l0hXbLe^c%1*0aolv+n-(0p9}=)dy|ak z(^^k6Kr4NCdQvw}JRYNo+$?|T?y09Iye+-0+;x21xkayJ+5aH}FtvCV{XBNQu1wq< zA~KzE&zbrw8r06*+xLC8w5T%cxiCgjpK&-&V!XPsPayY?$k(yS!` zbiYm;s&*I%L(%JmVBj<7-a%liQfR}7goD6C0>I#?mhrFkr{G|`qpHKe{FZjnP$Eq5 z&tZdatH^E1XT96z?b^8aWpn7N*E4VKW&WXzIQB^{5a{{udLJGyMXKqRQE%kczvwST z|CI(3#0q_aZ8^G_WysRm!)>DR6S~c-dnbzWX|U#wr` zp1?UIm_d%PgzJo0Z_Fyvrbntl>{ zyWF&&vt~?$uuVHL71|A8MW*?-%&Q*q%6p}^*@L!VxfzGt0WgqyM~{8R%0MaXi_0Sk z`ca~*^;OT~0uE#z=wv*P0%8xpNG<&GVvE9Yg@b`et}`^c?+qT4_;#6k;Tz`H zng0KQ!*G_FNNxZ)%(FTaw+}SsI|??C^p0|F#UgyD!6F?Yx{upO+9{v368Kmp1-F+2 zs>ns4kI)eK;;Q)0Nn#`FW82?5;?Dv`7X*!~7C^qXGZEu4^jd;#EJz(LSbGy<%8eZGELgV}#O{^QrmReMm8f1u7c)DDKjx(#LHn;5mf;{fZ{ zIE>V{PwJVxx_CV!09PD?$-DJ#U*A~`KVWNMatr{Gc#v`$y1X30g7ybyWnom35r8gY z27y0k%5xJWg)c^f#}X$d;oK7vPw^~7z4>U{aZ+vNzlF8w-S*s-93Y~$?m#MTJDG}t zz!8P0Sd1O^y`~=+NwBHKf$V$ZO7+lfvA%t!z2q(D7IJPRb{WC0+vgqeMHv2urj`nm z3#7yQqHpcxwgf~gU$p%%b$1Zno|>KJS_SKp-O~s9HVO6KBk?M?zDa#?exU71*Lj&< z&8W>FqPoMP)I#mlj+Nj|?Il`y`xgAu(RTn{R$>C3YLJvX@e_+}P^_EW@%4-f2Z`Gm z7tpkm6HS$^#CwitNvNb@&QCwJg`HCqqUg|g>`AO0Xo7kW3 zUYQj1kaHblil2(oTa>ij7CJA>(o3+?brp)lGkX*KelhTzG*WZRK{?nOUg5L1aOT40 zY-CcWrvFu6IlV43Ld<&eu9~p-I0@XbkKf1z2Z$z9@H(!h=OtWDl=f=s7LgM!l0+Ql zYqJ@!Cj!bNB_F3pd}dCq26U8A0Wj@|Tv9MG!i)qafh_1#LBYo?D;mLy_DmNHiALY~ zL!!A~=dXgs@jUBs_Cp_(tqA>&{uFCK{*T> z=|F%7etbjU<%m?iOjW=C4Yw{Sh?Weoot8!c-1P7H44j%d^N7 z3;Gbw(1SZAL?emyN7s)pDh}p?pqA8^;j7-Nw;|}w30_YcdFk6IAEL^u@kWl&x5H;3 zgMF^##|TWk>)*}P?ab$HYx~WG&@k~at~IgrnKKbcMo-jlp&&Qq^tGdUZw5%tV|7nd zk~5$0l$Eg(2Y;N69dyEY%`5kTdrBEo&`$?PX&s8oKUChuygcow9a$?&sMB9u+Dc8y55~lEh%~{*64z^YFKl=cR zK~(t$t;_0++Wi%A?Rrl;nk>B^-r|fsGnHpv6uLzcc&>Fmrj%J~-lpBO5#EDK^R^)3qOv15x> zq)K3NAKHt5>rUY(-ehRoNg0w1q3xy_Z4E%8#<*<#!giX3YVLJkM5iz0ox!G2> zd%~(((w%qpzT8FYBhYVm|AJ~QSRNX@pwdP0BeogQ_MZdh1HS_kO%n@9(hAnI< zv5>dG;+?=HB0&mpl8)MVHs}v5f&zfL#;-bCx5a6&BzEvxJXn#PpFH#aPuU5B+h5b! z@`Jn!bRtSE-zs!qVKZxTm+7xyJqn<}L4MZ}vEBO0JA#0O(SLnc`YmLq+^h zsK`bbsFSO`n+yJ>7bXfO#FM`(?ZZ=us-l?-Bb5)>D#oy=ikqRh$-eWq*|MZ#mkin6 zExAg#C$EL%pXNiWjTXQ11il<*tUOd-u40t&#K1_s|Eb<&J)x(jS17yLX?x!!$z#08 z-@uQ)C$LiKF~ZV@zyZxHdonWrwS{qGGNjRx9@Oy)Nj3^OX?vT)Q6Rs*o+LlYSVTfORP#I&`AT4`Q;>|&h#QK)yKWJv|%=jBGAan5h&^MOt zz(0mq>hyDfS z0edUcCx#(>UTe<$hS;W*wZ6NHY0lH?Go`1a6px(?g!frES{7yRoNV`>9qIR%ey<6Z zNC$&=PwM+|bXBQ~YF7+>Bm|TPxH;UPn(*A0?U1oj2Bge3F>#^_>Qz-LsH47wjK1ID zCKE0Ajcd-VoR|r`6$?LM#`l{MiXh`TpONfn)f9YwBAiEyyYmCuCrZ)mGY(h9j9tB~ zPhq!+YjDTiTkTI|_Xw$^j;WWu1eI$Urm%dwAjf0`3;SavvHm|1FVtph7+l>qOa?t;O(Os|i{6&*1=A%8Ht9BDre6&?B(r*bk^*nzw zu9W=Z!~P!Z=A)O;m=Qii4dP$0#R1)Hx>SM!s-eLsZtJwpe+ux8s>-;f0%V_Lhbz1n=FqdH$p68Gyg3fnwBQ!sva~0Uo5u#UVvkc;? z6Jya0r~F=MQhTXiAaA%NA`~-89QED)FF1DOez1H5pJZ>d`u?+u%gjz!4?n|_y{i`;%4zWhB~~j6>&ypDRK?B@h163*n@t>2 zv)ge(qQDzi>>~G&@8U^A2twgq~ObPMA2R0y4J4>(0qY78&H1JRMH?6iuTvE)ga8;c4sJ z7vdM_uW`rCL9Cp~HIqmzSArm-FGs>}{2 z*`F`E@yJFc^s~tTS^0rKYdZQ!&DV2vV3$-DhrL}wR(H3Sn%QOUWd3wCyX2Ald3A}; z&&R7v6YBVze~yxzMc{%#j&~BYGgMP4Ostfs`#0b*X@Zo^#hw{S5&L))a{5ifUI6f? zQ@BZAHG1X#Ui;W^`Y;(jft zItD7f2sh2ltO>GhZ%V&Vaj@hQht1>+$9{r*AKq7!xC``!=fxso-u+9f(1LF585{fj z_?M`A#3I)mMF%tIzz;K?3++?gOVK8rH8MBTKz1NVi8y8&dYj^Z{K=gHI5q=LL3eu! z^d1HKC4Uf|F1MgE+&mI%(n48+Bw~#!Q^*<-%KqnvfjO?j;IphdIU{e`pQ3co)(_fJ$%c??TDx}P6^g>uxv$_~s2Od{qJZ{pK4JwTzW z;{Vp3RayKV`09y0j=wH_cNT>r!v2M5{}O0oyLIBE4wK8J=!&(yK1ETh7&5m#1O6f| zm{MZ@9sQ!|6$H!w$GGdn5ZLf4`&w)CE5R4;=}j~?Y(Vx zip(JQi6SCR-6sy#sV(+fZTnQ?zEFCiLE0;z483giiSpTL?f3s2Z*#TKu~3+3S3R>< zB^%(BvU@~m2pqbj)*XSfavfe&#EUilE@htQE8?&DfL~LuX%*t{qylREqJgW#|8XwQ ge;-&F(ti~X%@e%^Z4RaYCklZS-mA*gNSOuyKN}KR;Q#;t literal 0 HcmV?d00001 diff --git a/AstroNet/bin/Debug/Astro_Renewed.exe b/AstroNet/bin/Debug/Astro_Renewed.exe new file mode 100644 index 0000000000000000000000000000000000000000..a10f40c18fc5c2b6b67f7967b519b6c4dec73b3c GIT binary patch literal 70656 zcmeFa33OCN_CH?lb@%JNlkTiQLJ~F`vOoY4kS!zu0)#anK^8;OKqScv-3bton1HzN zBO-j=2S;!P9T!x_6-L}fopDzLM|5;%+?R0yf1i8nb@xjM==XQ#{LlHF^Ka;?dvD#k zb?erx_0{W?&%aVwgb-GIfB8j-hY{0f9ET?l+K}wadc-IG=zKBfVP)!zITg!mBiW5% zeOb7wKD)ZAp+RrTUJ}X_X&JSyKF?N)Ekh{D4@?-3eyR+h_f~ck;wn!v4Ii;KARzT zIss1z@kIjxoj&6f;Q{H*y+RD{lyp)wTL_1V!2x`d2`^|0t!V=O#f=D%#&tz~%%5!3 zrXU;%SA)p9JprH*-&^rDea68c1>sPg4o1>dKxeXz2p~3n#tAXrgfe)5?1~TRrV5+* z&vGFSRgmoni<_01enXHn$RbKmEdKjN5TWJ@BW!esUsgqq#1v)FQcLVD2+l<8Sl-p4B*R+E= zd2Xp9)XG&-lQh4U*F%K+L3sC|iwqs?0fGHegBc`OIFjtS!fzkYV~|bEfdOGOzX&&x zj%*Ls$R#X#CfLKbg0A-j?X)I@-dO z<&B_&y4Lq4N^3ua`Y8y69;7f@>Qm8DVfLEiN_`<(YLc~cv9TnV>bL$c$_;-2nd#D8 z;Xc-=EyTgWNj4EK0l~1P-=_B`r3WDB(!2+SmZZVJ8aPA|Oimwopm4(0J@6e27(S@< z7^I5d1GbR;)gU6xmFyN;axfRN-QwUNZ--WN{%XPDE1_q!5+B4WVGj-@FR%yE3KT&+ zMQBHg&>D!eAckqp<48435U`0x1D4)1KqwgQsEs_SVi4)yOAY1`KA<3ykGKt0vr?Ut zP%m_I8u!spsdu=71qeL>H9Q|;NgJ0t)94#@MB(nzO;YR5cm(lwbrAZd^yo`QUg zAyN5J=D0A`<8a$c!NQ{zCQdC8v95hioLV5V zjIJDRi&N7@mdB8AUYx4til~AY#;DQSkiBeT2b97*gZelKumqhHN#hxLEf|E*2kRu& zW9YA@T{Z`8(Kj`#*9|)6HJ8_!y3H7VqLt|d*LJ3D!^)U`|%`iHKBv z62eFs0vA#yBW8WvxdnFC$D=XP!TLB(tdBjWk3G+BkLu&i6;5;;>> z)O0LMz@2NiH(}yYs7^CL(Ptv?=4LqcSpbr(8dLpNOAwaQ^x2fjDQocVLANu{?lfwE z{OIs59iE7pFn1`%$hib+8q;O5e#}cj9|ZMHvP%X0_9k>pML&ZCBM-OL(+9nNTb=`` zY%R#1N3zjvT}ckecIfj7bZSgDWIO%NU_vL^n6woAOqOl<0m*hicH9$O@B|mxK1jY$ zEP^Yf?NxD}DB34rHKHF9ML7z?J418iMMxC_Pi~$=UjhJrOvG3&C#|z&u1F0aJ%k|Y#V>U5VmThG;&d@Q67^r3c-zYB zG=Jn0sDU|LdV|!EZ0)wovM?5_`cf)u85Ogfim~gp1fNZ?s;@wV{)zc_wB51}Ba2ni z^g3dyM-XX1U=Z~<*hon$5$NblT<-`WO$gBOh6b#`W&&+?o#-)j(BP|p2UjC#f_Npe z29Vx@Kp@Xr#Q9GjObA$yr6$AY4ewC(bx5G~7_EA2!{5U!YFG7hDC>FzkyZ-OVy;LV z1?>nh5^?$l!1_i6LO+i}EwTyGdW>6E)Sp?-Cl<7*3rnWu0ekR50v%YSP%FcR@T7}C z3SNwWOb)lS$8-9f`lX=t^E<(J86f>~1cK2k2)&X}Z5@^9cYymU!Uf8?8bJOPsIC22 zDtc(Nwo$cyN13ldkmMTv2E5Vl(l-<47Jm1-YXKqJf+%twg1$huB3@5HlE?4iq$I!J zpOolNY(531PV)M_`58da3zQ_E-$jo1U`2{`Kg`Vq*jtZvy(h`B; zP)GO!(h^C+pTzadOE&B)QT+x8q(ySFKRK_5KdEEljYyQLmmAreGhzLt6n_f3LQ<+f zHE*at$)BRF8-gb5o1flK(~fCqV=ZzMvi40%TTco8G}@iy(rzS|#gSTElZCP-0n{WA zt%>1kw?csadjv`8!#|~(r0d%W>t@uH(*51m-G(Ug2LyeA+>SUeE#5AY!h=q(lDwXh z`x-Uuwr&S7ood+B4-LDX(0Jm`j){cE6YuDlNN7Cq&W?$Ml4^G$&g&K{oX~jTq#RT3 z2AOKg#&JpGq{BGrhH+%wje+SNVjck9$I+O4ohW)sV8|zUmeTxZ#ehFiKK-lemGrOG zJ8rNT@LtQ&N30CfygCpJKst@#Jt5p>9>ecNk#dCGB@3tV|32i!JmwcxmzL*HEwtCv zXndam9-c$pxruh3Lp=^l8tpf+z?QSyKMrES6Px*wr-Jg(yy?xw0Kl^*c9s^}vTD)E z_T$czZG1wsOeE6j(HqVGY_4{OM@d2|loxV-k5 zHOc0;<-h9WePMk6NB%My<)K~tA}jGSlH-azg6wYWx%5W?2+_eO!q=k|E%+Ex=#W5@ zyYQQ-=t9suxxzv1hrep4v@0Mo z@+S!D+eRrt8+d~7-rUIJAYwVB4Tvr23nEW|hV2dZbt6UiGe}L7+rv0dKddb==4t4d z|8Lng`#0N`_B9TS<*8&_-s<)ZkI`@{@+7Py`i2*n;B!pyjVAcvE@4-yCpRE8+IeYG znsB7e^Ek4Sk6FFW{3D<~g)-oV^RWbanm`-IjAsCZpMXSk{e48#)G&5ka`z*X_5Gj+ z|BS$|MV=)dyWh?$sw9W1A0WCzuB~Ws^&Ig08|31ucYL{l!w6M>9%=duB*B?GI^Ybx zNFWAnm;MrTG+Hd@IRU%}fRbp{tmdYI!ppIPAVX{rZG$nv*y~-C{{|j-VMKLwoe9)Pa{S1z0tYFCmwlL!n9wVg0Tsso1a#w*r&)fkSaGI zJkM)ta5IwD569r6Y3nEo_KOmXCDZRvuKqq1uIh&frjEg$&uekFX%TOiEAiID;0S(z zz|;D7gpS~c2)!aTcnW0eM}VNSWuQxZM4-)75c=Bnpiy`E7;*kPvb#X1=<3|W-1-l& z*n^)Sl)21lRIrl^J}%86DOd_~z1NLIwWG_-t~u&7QZYW)m>Ss8)8j|9zBX%{N(l9i5{jk5aPMx|ZxO1qAwo}kj7BL^E- zW{Mj-$!V_t7bMth0Mh5GnEgFa#UoYmnzCUekoNb)RYBi2sS>SL+B{Rme30go(h|(l z5)5g+xHMk}X(r~AwI&vAtQMKR1Qi?Ea*Q`CSQ&yMdxlxmacv=+TK^Jx(<)7hCqnT= zskq-H!0$H{PmC*`ctXWHwTMYhE46~T5zJ}ip@s_{)39lien&@>x!h2x`q$v-+J&R` zh`R9UCKraK;x0@HaN(Fx+4};hc0g7;$)u7$$*6W9UhP1KY7Y=a*ivAc7T4h0AK$(B zCg4jSqF;m#LiGC(o9W3&B>HH?X8IC?en}_#WaPgb-#0<$4TT}UhegUML2Q;2z*tA} zPe&Z3)0zUqz39ekif>>|8pOUu?9R;zD8cUld9+pyHcHjlIrQ&Aa_Ij-h=*^%9}wri zjxk6%mYN$MgR~B3i3y@$v@9|S%bRNv#CYdu4xQBlTLm7J^oMR0EE!@X}$(QDGoGoPt zhbE`rqaehPV}yYJ7sPqJ9Xg)*x$=5AbcNz1hptlWcIXzw{M0Lr*5P>xF##;i5RjiO z1>~no0r`niK)yo?h)$8V;io}a;oxdWrJ{ORQI2jyfR%kF`n5)&9S_k=ymrud1g2pi z|84BO%wqs_nFo6G7&8+?-hALmP8M@zq2UP9kyKGM6;r#TKm#c!{OvCi%T4nO-T=Be${7Lop9VI8XEt z!`R=B^wa2P-r|Obp|zu{COi*2NA|^!U}*B6L|EM1hjM`vot{gY>5T?`TPOMhz(;`p zvrhD6(7prB1>eNdlRxIQ81;wSK+Ryk^`Uac4zM)=uqS*WwDwqddDKrtpd~M$gT(0I zts?IeU4Fan2MOb%PnZ&2B7*1RSW5VDhMq(Wervj(90gJ≺ZK7H9TU`{lKI8Za*w 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 yzeMwQ= + + + + + \ No newline at end of file diff --git a/AstroNet/bin/Debug/Astro_Renewed.pdb b/AstroNet/bin/Debug/Astro_Renewed.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ce7de7f6b7b96b4ffcda3fa1b5a0b9f13b4f8a8f GIT binary patch literal 187904 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