Я создаю расшифровщик, который будет выполняться во время выполнения.Он отлично кодируется, но во время выполнения выдает ошибку Parameter IndexOutOfBound Exception.Это возможно только тогда, когда правильные аргументы не переданы.Я знаю об Idarg_1, но когда я непосредственно назначаю ему значение, он выдает ошибку, говоря дополнительную информацию.Как я могу присвоить значение этому аргументу?Я использую библиотеку mono.cecil.
Я пытался выполнить такие инструкции, как Instructions.Create (Opcodes.Idarg_1, "abc").И каждый раз выдает ошибку, говоря дополнительную информацию.
private static MethodDefinition CreateDecrypter(AssemblyDefinition AssemblyDef)
{
string key = "FF5KS94PP0927GQ0";
MethodDefinition Decrypt = new MethodDefinition("Decrypt", MethodAttributes.Public | MethodAttributes.Static, AssemblyDef.MainModule.Import(typeof(string)));
Decrypt.Parameters.Add(new ParameterDefinition(AssemblyDef.MainModule.Import(typeof(string))));
Console.WriteLine(AssemblyDef.MainModule);
List<Instruction> Body = new List<Instruction>();
//Body.Add(Instruction.Create(OpCodes.Call, AssemblyDef.MainModule.Import(typeof(System.Text.Encoding).GetMethod("get_UTF8"))));
Body.Add(Instruction.Create(OpCodes.Ldarg_0));
Body.Add(Instruction.Create(OpCodes.Box));
Body.Add(Instruction.Create(OpCodes.Ldarg_1));
Body.Add(Instruction.Create(OpCodes.Box));
Body.Add(Instruction.Create(OpCodes.Callvirt,
AssemblyDef.MainModule.Import(typeof(ClassLibraryDecrypt.Class1).GetMethod("Decode",
new Type[] { typeof(object), typeof(object) }))));
//Body.Add(Instruction.Create(OpCodes.Arglist));
foreach (Instruction Instr in Body)
{
Decrypt.Body.Instructions.Add(Instr);
}
return Decrypt;
}
}
«Декодирование» - это метод, который принимает две строки в качестве аргументов и возвращает декодированную строку
Может кто-нибудь сказать мне, где я неправ и что мне нужно делать дальше?