Fix method signature

This commit is contained in:
de4dot 2012-01-27 01:02:17 +01:00
parent cd46fb9793
commit 887ee7c9e8
5 changed files with 20 additions and 14 deletions

View File

@ -30,7 +30,7 @@ namespace de4dot.blocks.cflow {
public void init(Blocks blocks, Block block) {
this.blocks = blocks;
this.block = block;
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
}
// Returns true if code was updated, false otherwise

View File

@ -39,7 +39,7 @@ namespace de4dot.blocks.cflow {
public bool deobfuscate() {
bool changed = false;
foreach (var block in allBlocks) {
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
var instrs = block.Instructions;
for (int i = 0; i < instrs.Count; i++) {
var instr = instrs[i];

View File

@ -35,18 +35,24 @@ namespace de4dot.blocks.cflow {
public InstructionEmulator() {
}
public InstructionEmulator(bool implicitThis, bool initLocals, IList<ParameterDefinition> parameterDefinitions, IList<VariableDefinition> variableDefinitions) {
init(implicitThis, initLocals, parameterDefinitions, variableDefinitions);
public InstructionEmulator(MethodDefinition method) {
init(method);
}
public void init(bool implicitThis, bool initLocals, IList<ParameterDefinition> parameterDefinitions, IList<VariableDefinition> variableDefinitions) {
this.parameterDefinitions = parameterDefinitions;
this.variableDefinitions = variableDefinitions;
public void init(Blocks blocks) {
init(blocks.Method);
}
public void init(MethodDefinition method) {
bool initLocals = false;
this.parameterDefinitions = method.Parameters;
this.variableDefinitions = method.Body.Variables;
valueStack.init();
args.Clear();
argBase = 0;
if (implicitThis) {
if (method.HasImplicitThis) {
argBase = 1;
args.Add(new UnknownValue());
}

View File

@ -144,7 +144,7 @@ namespace de4dot.blocks.cflow {
foreach (var source in new List<Block>(block.Sources)) {
if (!isBranchBlock(source))
continue;
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
instructionEmulator.emulate(source.Instructions);
var target = getSwitchTarget(switchTargets, switchFallThrough, source, instructionEmulator.pop());
@ -170,7 +170,7 @@ namespace de4dot.blocks.cflow {
foreach (var source in new List<Block>(block.Sources)) {
if (!isBranchBlock(source))
continue;
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
instructionEmulator.emulate(source.Instructions);
var target = getSwitchTarget(switchTargets, switchFallThrough, source, instructionEmulator.getLocal(switchVariable));
@ -193,7 +193,7 @@ namespace de4dot.blocks.cflow {
foreach (var source in new List<Block>(block.Sources)) {
if (!isBranchBlock(source))
continue;
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
instructionEmulator.emulate(source.Instructions);
var target = getSwitchTarget(switchTargets, switchFallThrough, source, instructionEmulator.pop());
@ -264,7 +264,7 @@ namespace de4dot.blocks.cflow {
}
bool emulateGetTarget(Block switchBlock, out Block target) {
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
try {
instructionEmulator.emulate(switchBlock.Instructions, 0, switchBlock.Instructions.Count - 1);
}
@ -278,7 +278,7 @@ namespace de4dot.blocks.cflow {
}
bool willHaveKnownTarget(Block switchBlock, Block source) {
instructionEmulator.init(blocks.Method.HasImplicitThis, false, blocks.Method.Parameters, blocks.Locals);
instructionEmulator.init(blocks);
try {
instructionEmulator.emulate(source.Instructions);
instructionEmulator.emulate(switchBlock.Instructions, 0, switchBlock.Instructions.Count - 1);

View File

@ -126,7 +126,7 @@ namespace de4dot.code.deobfuscators {
public static Value[] getInitializedArray(int arraySize, MethodDefinition method, ref int newarrIndex, Code stelemOpCode) {
var resultValueArray = new Value[arraySize];
var emulator = new InstructionEmulator(method.HasImplicitThis, false, method.Parameters, method.Body.Variables);
var emulator = new InstructionEmulator(method);
var theArray = new UnknownValue();
emulator.push(theArray);