mirror of
https://github.com/yck1509/ConfuserEx
synced 2026-06-08 18:29:44 +00:00
41 lines
1.4 KiB
C#
41 lines
1.4 KiB
C#
using System;
|
|
using Confuser.DynCipher.AST;
|
|
|
|
namespace Confuser.DynCipher.Transforms {
|
|
internal class ConvertVariables {
|
|
static Expression ReplaceVar(Expression exp, Variable buff) {
|
|
if (exp is VariableExpression) {
|
|
if (((VariableExpression)exp).Variable.Name[0] != 'v') return exp;
|
|
return new ArrayIndexExpression {
|
|
Array = new VariableExpression { Variable = buff },
|
|
Index = (int)(exp as VariableExpression).Variable.Tag
|
|
};
|
|
}
|
|
if (exp is ArrayIndexExpression) {
|
|
((ArrayIndexExpression)exp).Array = ReplaceVar(((ArrayIndexExpression)exp).Array, buff);
|
|
}
|
|
else if (exp is BinOpExpression) {
|
|
((BinOpExpression)exp).Left = ReplaceVar(((BinOpExpression)exp).Left, buff);
|
|
((BinOpExpression)exp).Right = ReplaceVar(((BinOpExpression)exp).Right, buff);
|
|
}
|
|
else if (exp is UnaryOpExpression) {
|
|
((UnaryOpExpression)exp).Value = ReplaceVar(((UnaryOpExpression)exp).Value, buff);
|
|
}
|
|
return exp;
|
|
}
|
|
|
|
static Statement ReplaceVar(Statement st, Variable buff) {
|
|
if (st is AssignmentStatement) {
|
|
((AssignmentStatement)st).Value = ReplaceVar(((AssignmentStatement)st).Value, buff);
|
|
((AssignmentStatement)st).Target = ReplaceVar(((AssignmentStatement)st).Target, buff);
|
|
}
|
|
return st;
|
|
}
|
|
|
|
public static void Run(StatementBlock block) {
|
|
var mainBuff = new Variable("{BUFFER}");
|
|
for (int i = 0; i < block.Statements.Count; i++)
|
|
block.Statements[i] = ReplaceVar(block.Statements[i], mainBuff);
|
|
}
|
|
}
|
|
} |