diff --git a/blocks/DotNetUtils.cs b/blocks/DotNetUtils.cs
index 005eeee5..30ff667d 100644
--- a/blocks/DotNetUtils.cs
+++ b/blocks/DotNetUtils.cs
@@ -149,7 +149,11 @@ namespace de4dot.blocks {
return module.GlobalType;
}
- public static MethodDefinition getModuleTypeCctor(ModuleDefinition module) {
+ public static DN.MethodDef getModuleTypeCctor(DN.ModuleDef module) {
+ foreach (var m in module.GlobalType.Methods) {
+ if (m.Name == ".cctor")
+ return m;
+ }
return null;
}
diff --git a/blocks/DumpedMethod.cs b/blocks/DumpedMethod.cs
new file mode 100644
index 00000000..3d768859
--- /dev/null
+++ b/blocks/DumpedMethod.cs
@@ -0,0 +1,43 @@
+/*
+ Copyright (C) 2011-2012 de4dot@gmail.com
+
+ This file is part of de4dot.
+
+ de4dot 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.
+
+ de4dot 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 de4dot. If not, see .
+*/
+
+//TODO: DumpedMethods and DumpedMethod should be moved to dot10
+
+using System;
+
+namespace dot10.DotNet {
+ [Serializable]
+ public class DumpedMethod {
+ public ushort mhFlags; // method header Flags
+ public ushort mhMaxStack; // method header MaxStack
+ public uint mhCodeSize; // method header CodeSize
+ public uint mhLocalVarSigTok; // method header LocalVarSigTok
+
+ public ushort mdImplFlags; // methodDef ImplFlags
+ public ushort mdFlags; // methodDef Flags
+ public uint mdName; // methodDef Name (index into #String)
+ public uint mdSignature; // methodDef Signature (index into #Blob)
+ public uint mdParamList; // methodDef ParamList (index into Param table)
+
+ public uint token; // metadata token
+
+ public byte[] code;
+ public byte[] extraSections;
+ }
+}
diff --git a/blocks/DumpedMethods.cs b/blocks/DumpedMethods.cs
new file mode 100644
index 00000000..fe70ccf8
--- /dev/null
+++ b/blocks/DumpedMethods.cs
@@ -0,0 +1,68 @@
+/*
+ Copyright (C) 2011-2012 de4dot@gmail.com
+
+ This file is part of de4dot.
+
+ de4dot 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.
+
+ de4dot 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 de4dot. If not, see .
+*/
+
+//TODO: DumpedMethods and DumpedMethod should be moved to dot10
+
+using System;
+using System.Collections.Generic;
+using dot10.DotNet.MD;
+
+namespace dot10.DotNet {
+ public interface IStringDecrypter {
+ string decrypt(uint token);
+ }
+
+ [Serializable]
+ public class DumpedMethods {
+ Dictionary methods = new Dictionary();
+ IStringDecrypter stringDecrypter = new NoStringDecrypter();
+
+ [Serializable]
+ class NoStringDecrypter : IStringDecrypter {
+ public string decrypt(uint token) {
+ return null;
+ }
+ }
+
+ public IStringDecrypter StringDecrypter {
+ get { return stringDecrypter; }
+ set { stringDecrypter = value; }
+ }
+
+ public void add(uint token, DumpedMethod info) {
+ methods[token] = info;
+ }
+
+ public DumpedMethod get(MethodDef method) {
+ return get(method.MDToken.ToUInt32());
+ }
+
+ public DumpedMethod get(uint token) {
+ DumpedMethod dm;
+ methods.TryGetValue(token, out dm);
+ return dm;
+ }
+
+ public void add(DumpedMethod dm) {
+ if (MDToken.ToTable(dm.token) != Table.Method || MDToken.ToRID(dm.token) == 0)
+ throw new ArgumentException("Invalid token");
+ methods[dm.token] = dm;
+ }
+ }
+}
diff --git a/blocks/blocks.csproj b/blocks/blocks.csproj
index 7d7a2f48..4cd1f791 100644
--- a/blocks/blocks.csproj
+++ b/blocks/blocks.csproj
@@ -63,6 +63,8 @@
+
+