Make InstructionEmulator class public
This commit is contained in:
parent
685c5ba79c
commit
349ebc4e72
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user