From dd588bf9f872d2677255a3bc42b548540b02cc49 Mon Sep 17 00:00:00 2001 From: de4dot Date: Wed, 28 Dec 2011 13:26:04 +0100 Subject: [PATCH] Add MethodCollection class --- de4dot.code/de4dot.code.csproj | 1 + de4dot.code/deobfuscators/MethodCollection.cs | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 de4dot.code/deobfuscators/MethodCollection.cs diff --git a/de4dot.code/de4dot.code.csproj b/de4dot.code/de4dot.code.csproj index a728ee4a..38a9463e 100644 --- a/de4dot.code/de4dot.code.csproj +++ b/de4dot.code/de4dot.code.csproj @@ -109,6 +109,7 @@ + diff --git a/de4dot.code/deobfuscators/MethodCollection.cs b/de4dot.code/deobfuscators/MethodCollection.cs new file mode 100644 index 00000000..4593c8f5 --- /dev/null +++ b/de4dot.code/deobfuscators/MethodCollection.cs @@ -0,0 +1,60 @@ +/* + Copyright (C) 2011 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 . +*/ + +using System.Collections.Generic; +using Mono.Cecil; +using de4dot.blocks; + +namespace de4dot.code.deobfuscators { + class MethodCollection { + TypeDefinitionDict types = new TypeDefinitionDict(); + MethodDefinitionAndDeclaringTypeDict methods = new MethodDefinitionAndDeclaringTypeDict(); + + public bool exists(MethodReference method) { + if (method == null) + return false; + if (method.DeclaringType != null && types.find(method.DeclaringType)) + return true; + return methods.find(method); + } + + public void add(MethodDefinition method) { + methods.add(method, true); + } + + public void add(IEnumerable methods) { + foreach (var method in methods) + add(method); + } + + public void add(TypeDefinition type) { + types.add(type, true); + } + + public void addAndNested(TypeDefinition type) { + foreach (var t in TypeDefinition.GetTypes(new List { type })) + add(type); + } + + public void addAndNested(IList types) { + foreach (var type in TypeDefinition.GetTypes(types)) + add(type); + } + } +}