diff --git a/Editor/Virtualization/ConstDataNode.cs b/Editor/Virtualization/ConstDataNode.cs deleted file mode 100644 index 82892bc..0000000 --- a/Editor/Virtualization/ConstDataNode.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; - -namespace Obfuz.Virtualization -{ - public class ConstDataNode : DataNodeAny - { - - public override void Compile(CompileContext ctx) - { - - switch (Type) - { - //case DataNodeType.Byte: - //{ - // // create ldloc.i4 - // break; - //} - case DataNodeType.Int32: - { - // create ldloc.i4 - break; - } - case DataNodeType.Int64: - { - // create ldloc.i8 - break; - } - case DataNodeType.Float32: - { - // create ldloc.r4 - break; - } - case DataNodeType.Float64: - { - // create ldloc.r8 - break; - } - case DataNodeType.Null: - { - // create ldnull - break; - } - case DataNodeType.String: - { - // create ldstr - break; - } - case DataNodeType.Bytes: - { - // create ldstr - - // RuntimeHelpers.InitializeArray(array, fieldHandle); - break; - } - default: - { - throw new NotImplementedException($"Type:{Type} not implemented"); - } - } - } - } -} diff --git a/Editor/Virtualization/ConstValue.cs b/Editor/Virtualization/ConstValue.cs index 7c862d1..c3bc001 100644 --- a/Editor/Virtualization/ConstValue.cs +++ b/Editor/Virtualization/ConstValue.cs @@ -4,6 +4,7 @@ { public readonly DataNodeType type; public readonly object value; + public ConstValue(DataNodeType type, object value) { this.type = type; diff --git a/Editor/Virtualization/DataNodeType.cs b/Editor/Virtualization/DataNodeType.cs index 081e292..0919179 100644 --- a/Editor/Virtualization/DataNodeType.cs +++ b/Editor/Virtualization/DataNodeType.cs @@ -9,6 +9,6 @@ Float64, String, Bytes, - Null, + //Null, } } diff --git a/Editor/Virtualization/DataNodes/BytesFromEncryptedBytesNode.cs b/Editor/Virtualization/DataNodes/BytesFromEncryptedBytesNode.cs new file mode 100644 index 0000000..6394bc2 --- /dev/null +++ b/Editor/Virtualization/DataNodes/BytesFromEncryptedBytesNode.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Obfuz.Virtualization +{ + [NodeOutput(DataNodeType.Bytes)] + public class BytesFromEncryptedBytesNode : DataNodeAny + { + + public override void Compile(CompileContext ctx) + { + // only support Int32, int64, bytes. + // string can only create from StringFromBytesNode + // x = memcpy array.GetRange(index, length); + } + } +} diff --git a/Editor/Virtualization/DataNodes/ConstDataNode.cs b/Editor/Virtualization/DataNodes/ConstDataNode.cs new file mode 100644 index 0000000..f4053b6 --- /dev/null +++ b/Editor/Virtualization/DataNodes/ConstDataNode.cs @@ -0,0 +1,69 @@ +using System; + +namespace Obfuz.Virtualization +{ + [NodeOutput(DataNodeType.Int32)] + [NodeOutput(DataNodeType.Int64)] + public class ConstDataNode : DataNodeAny + { + + public override void Compile(CompileContext ctx) + { + + // only Int32 - Null, + // to avoid GC, + // the leaf node that can create string or bytes is ConstFieldDataNode. + // float and double can only come from RawCastAs int32 and int64. + // so we only need to deal int32 and int64 + switch (Type) + { + //case DataNodeType.Byte: + //{ + // // create ldloc.i4 + // break; + //} + case DataNodeType.Int32: + { + // create ldloc.i4 + break; + } + case DataNodeType.Int64: + { + // create ldloc.i8 + break; + } + //case DataNodeType.Float32: + //{ + // // create ldloc.r4 + // break; + //} + //case DataNodeType.Float64: + //{ + // // create ldloc.r8 + // break; + //} + //case DataNodeType.Null: + //{ + // // create ldnull + // break; + //} + //case DataNodeType.String: + //{ + // // create ldstr + // break; + //} + //case DataNodeType.Bytes: + //{ + // // create ldstr + + // // RuntimeHelpers.InitializeArray(array, fieldHandle); + // break; + //} + default: + { + throw new NotImplementedException($"Type:{Type} not implemented"); + } + } + } + } +} diff --git a/Editor/Virtualization/ConstExpression.cs b/Editor/Virtualization/DataNodes/ConstExpression.cs similarity index 84% rename from Editor/Virtualization/ConstExpression.cs rename to Editor/Virtualization/DataNodes/ConstExpression.cs index 3cfc750..ad3b850 100644 --- a/Editor/Virtualization/ConstExpression.cs +++ b/Editor/Virtualization/DataNodes/ConstExpression.cs @@ -2,6 +2,9 @@ namespace Obfuz.Virtualization { + [NodeOutput(DataNodeType.Int32)] + [NodeOutput(DataNodeType.Int64)] + [NodeOutput(DataNodeType.Bytes)] public class ConstExpression : DataNodeAny { public IFunction function; diff --git a/Editor/Virtualization/ConstFieldDataNode.cs b/Editor/Virtualization/DataNodes/ConstFieldDataNode.cs similarity index 91% rename from Editor/Virtualization/ConstFieldDataNode.cs rename to Editor/Virtualization/DataNodes/ConstFieldDataNode.cs index 44df38f..69893cd 100644 --- a/Editor/Virtualization/ConstFieldDataNode.cs +++ b/Editor/Virtualization/DataNodes/ConstFieldDataNode.cs @@ -7,7 +7,6 @@ namespace Obfuz.Virtualization public override void Compile(CompileContext ctx) { - switch (Type) { //case DataNodeType.Byte: @@ -35,11 +34,6 @@ namespace Obfuz.Virtualization // create ldloc.r8 break; } - case DataNodeType.Null: - { - // create ldnull - break; - } case DataNodeType.String: { // create ldstr diff --git a/Editor/Virtualization/ConstFromBytesNode.cs b/Editor/Virtualization/DataNodes/ConstFromBytesNode.cs similarity index 63% rename from Editor/Virtualization/ConstFromBytesNode.cs rename to Editor/Virtualization/DataNodes/ConstFromBytesNode.cs index 6fd0132..27e07bd 100644 --- a/Editor/Virtualization/ConstFromBytesNode.cs +++ b/Editor/Virtualization/DataNodes/ConstFromBytesNode.cs @@ -11,7 +11,9 @@ namespace Obfuz.Virtualization public override void Compile(CompileContext ctx) { - + // only support Int32, int64, bytes. + // string can only create from StringFromBytesNode + // x = memcpy array.GetRange(index, length); } } } diff --git a/Editor/Virtualization/DataNodeBase.cs b/Editor/Virtualization/DataNodes/DataNodeBase.cs similarity index 100% rename from Editor/Virtualization/DataNodeBase.cs rename to Editor/Virtualization/DataNodes/DataNodeBase.cs diff --git a/Editor/Virtualization/RvaBytesNode.cs b/Editor/Virtualization/DataNodes/RvaBytesNode.cs similarity index 100% rename from Editor/Virtualization/RvaBytesNode.cs rename to Editor/Virtualization/DataNodes/RvaBytesNode.cs diff --git a/Editor/Virtualization/DataNodes/StringFromEncryptedBytesNode.cs b/Editor/Virtualization/DataNodes/StringFromEncryptedBytesNode.cs new file mode 100644 index 0000000..9074d62 --- /dev/null +++ b/Editor/Virtualization/DataNodes/StringFromEncryptedBytesNode.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Obfuz.Virtualization +{ + public class StringFromEncryptedBytesNode : DataNodeAny + { + + public override void Compile(CompileContext ctx) + { + // only support Int32, int64, bytes. + // string can only create from StringFromBytesNode + // x = memcpy array.GetRange(index, length); + } + } +} diff --git a/Editor/Virtualization/FunctionBase.cs b/Editor/Virtualization/Functions/FunctionBase.cs similarity index 100% rename from Editor/Virtualization/FunctionBase.cs rename to Editor/Virtualization/Functions/FunctionBase.cs diff --git a/Editor/Virtualization/NodeOutputAttribute.cs b/Editor/Virtualization/NodeOutputAttribute.cs new file mode 100644 index 0000000..60dcab2 --- /dev/null +++ b/Editor/Virtualization/NodeOutputAttribute.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Obfuz.Virtualization +{ + [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = true)] + public class NodeOutputAttribute : Attribute + { + public DataNodeType Type { get; } + + public NodeOutputAttribute(DataNodeType type) + { + Type = type; + } + } +}