Make InstructionEmulator class public

This commit is contained in:
de4dot 2011-10-26 14:17:33 +02:00
parent 685c5ba79c
commit 349ebc4e72
5 changed files with 22 additions and 11 deletions

View File

@ -23,7 +23,7 @@ using Mono.Cecil;
using Mono.Cecil.Cil; using Mono.Cecil.Cil;
namespace de4dot.blocks.cflow { namespace de4dot.blocks.cflow {
class InstructionEmulator { public class InstructionEmulator {
ValueStack valueStack = new ValueStack(); ValueStack valueStack = new ValueStack();
IList<ParameterDefinition> parameterDefinitions; IList<ParameterDefinition> parameterDefinitions;
IList<VariableDefinition> variableDefinitions; IList<VariableDefinition> variableDefinitions;
@ -31,6 +31,13 @@ namespace de4dot.blocks.cflow {
List<Value> locals = new List<Value>(); List<Value> locals = new List<Value>();
int argBase; int argBase;
public InstructionEmulator() {
}
public InstructionEmulator(bool hasThis, bool initLocals, IList<ParameterDefinition> parameterDefinitions, IList<VariableDefinition> variableDefinitions) {
init(hasThis, initLocals, parameterDefinitions, variableDefinitions);
}
public void init(bool hasThis, bool initLocals, IList<ParameterDefinition> parameterDefinitions, IList<VariableDefinition> variableDefinitions) { public void init(bool hasThis, bool initLocals, IList<ParameterDefinition> parameterDefinitions, IList<VariableDefinition> variableDefinitions) {
this.parameterDefinitions = parameterDefinitions; this.parameterDefinitions = parameterDefinitions;
this.variableDefinitions = variableDefinitions; this.variableDefinitions = variableDefinitions;
@ -201,6 +208,10 @@ namespace de4dot.blocks.cflow {
return new UnknownValue(); return new UnknownValue();
} }
public void push(Value value) {
valueStack.push(value);
}
public Value pop() { public Value pop() {
return valueStack.pop(); return valueStack.pop();
} }

View File

@ -20,7 +20,7 @@
using System; using System;
namespace de4dot.blocks.cflow { namespace de4dot.blocks.cflow {
class Int32Value : Value { public class Int32Value : Value {
const uint NO_UNKNOWN_BITS = uint.MaxValue; const uint NO_UNKNOWN_BITS = uint.MaxValue;
public readonly int value; public readonly int value;
public readonly uint validMask; public readonly uint validMask;

View File

@ -20,7 +20,7 @@
using System; using System;
namespace de4dot.blocks.cflow { namespace de4dot.blocks.cflow {
class Int64Value : Value { public class Int64Value : Value {
const ulong NO_UNKNOWN_BITS = ulong.MaxValue; const ulong NO_UNKNOWN_BITS = ulong.MaxValue;
public readonly long value; public readonly long value;
public readonly ulong validMask; public readonly ulong validMask;

View File

@ -18,7 +18,7 @@
*/ */
namespace de4dot.blocks.cflow { namespace de4dot.blocks.cflow {
class Real8Value : Value { public class Real8Value : Value {
public readonly double value; public readonly double value;
public Real8Value(double value) public Real8Value(double value)

View File

@ -18,7 +18,7 @@
*/ */
namespace de4dot.blocks.cflow { namespace de4dot.blocks.cflow {
enum ValueType : byte { public enum ValueType : byte {
Unknown, Unknown,
Null, Null,
Boxed, Boxed,
@ -28,13 +28,13 @@ namespace de4dot.blocks.cflow {
String, String,
} }
enum Bool3 { public enum Bool3 {
Unknown = -1, Unknown = -1,
False, False,
True, True,
} }
abstract class Value { public abstract class Value {
public readonly ValueType valueType; public readonly ValueType valueType;
public bool isUnknown() { public bool isUnknown() {
@ -70,7 +70,7 @@ namespace de4dot.blocks.cflow {
} }
} }
class UnknownValue : Value { public class UnknownValue : Value {
public UnknownValue() public UnknownValue()
: base(ValueType.Unknown) { : base(ValueType.Unknown) {
} }
@ -80,7 +80,7 @@ namespace de4dot.blocks.cflow {
} }
} }
class NullValue : Value { public class NullValue : Value {
// There's only one type of null // There's only one type of null
public static readonly NullValue Instance = new NullValue(); public static readonly NullValue Instance = new NullValue();
@ -93,7 +93,7 @@ namespace de4dot.blocks.cflow {
} }
} }
class BoxedValue : Value { public class BoxedValue : Value {
public readonly Value value; public readonly Value value;
public BoxedValue(Value value) public BoxedValue(Value value)
@ -106,7 +106,7 @@ namespace de4dot.blocks.cflow {
} }
} }
class StringValue : Value { public class StringValue : Value {
public readonly string value; public readonly string value;
public StringValue(string value) public StringValue(string value)