From 5dd6567fc9757dda0ea6d8a6b43a4ffdfb25bd9c Mon Sep 17 00:00:00 2001 From: de4dot Date: Sat, 24 Sep 2011 18:48:15 +0200 Subject: [PATCH] Bug fix. Some methods have a body but 0 instrs --- de4dot.code/ObfuscatedFile.cs | 8 ++++++-- de4dot.code/blocks/BlocksSorter.cs | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/de4dot.code/ObfuscatedFile.cs b/de4dot.code/ObfuscatedFile.cs index 5e4831c1..c35382e0 100644 --- a/de4dot.code/ObfuscatedFile.cs +++ b/de4dot.code/ObfuscatedFile.cs @@ -411,7 +411,7 @@ namespace de4dot { Log.v("Deobfuscating {0} ({1:X8})", method, method.MetadataToken.ToUInt32()); Log.indent(); - if (method.HasBody) { + if (hasNonEmptyBody(method)) { var blocks = new Blocks(method); deob.deobfuscateMethodBegin(blocks); @@ -434,6 +434,10 @@ namespace de4dot { } } + bool hasNonEmptyBody(MethodDefinition method) { + return method.HasBody && method.Body.Instructions.Count > 0; + } + void deobfuscateStrings(Blocks blocks) { switch (options.StringDecrypterType) { case DecrypterType.None: @@ -481,7 +485,7 @@ namespace de4dot { Log.v("{0}: {1} ({2:X8})", msg, method, method.MetadataToken.ToUInt32()); Log.indent(); - if (method.HasBody) { + if (hasNonEmptyBody(method)) { var blocks = new Blocks(method); handler(blocks); diff --git a/de4dot.code/blocks/BlocksSorter.cs b/de4dot.code/blocks/BlocksSorter.cs index 441d98ab..9566810b 100644 --- a/de4dot.code/blocks/BlocksSorter.cs +++ b/de4dot.code/blocks/BlocksSorter.cs @@ -41,7 +41,8 @@ namespace de4dot.blocks { visited = new Dictionary(); sorted = new List(scopeBlock.BaseBlocks.Count); - search(scopeBlock.BaseBlocks[0]); + if (scopeBlock.BaseBlocks.Count > 0) + search(scopeBlock.BaseBlocks[0]); sorted.Reverse(); // It's in reverse order // Just in case there's dead code or unreferenced exception blocks