我想将我的代码从文件直接编译到内存中(Runtime-Compilation或RunPE 方法)。
这是我使用的代码:
var param = new CompilerParameters
{
GenerateExecutable = false,
IncludeDebugInformation = false,
GenerateInMemory = true
};
param.ReferencedAssemblies.Add("System.dll");
param.ReferencedAssemblies.Add("System.Xml.dll");
param.ReferencedAssemblies.Add("System.Data.dll");
param.ReferencedAssemblies.Add("System.Core.dll");
param.ReferencedAssemblies.Add("System.Xml.Linq.dll");
var codeProvider = new CSharpCodeProvider();
// The file contaning the codes is here
var results = codeProvider
.CompileAssemblyFromFile(param, @"C:\Users\xxx\Desktop\code.txt");
if (results.Errors.HasErrors)
{
foreach (var error in results.Errors)
{
Console.WriteLine(error);
}
}
else
{
results.CompiledAssembly.CreateInstance("Program");
}
这将使我在调试中没有错误,但也无法正常工作。只是在调试输出时我看到了这个:
加载“3kp0asrw”。模块是在没有符号的情况下构建的。
其他的看起来还不错。
这是code.txt文件中的代码,假设只需编写 3 行文本并在控制台中显示一条消息:
internal class Program
{
private static void Main(string[] args)
{
string[] lines = { "First line", "Second line", "Third line" };
System.IO.File.WriteAllLines(@"C:\Users\xxx\Desktop\writeHere.txt", lines);
Console.WriteLine("Some Random Text!");
}
}
问题:我在这里缺少什么?您是否知道直接在内存中从文件或源代码运行代码的任何其他方法(AKA RunPE 方法)?你能给我一个简单的例子吗?
注意:我想为更大的代码执行此操作并将其自动化以供以后使用,就像 .net crypters 在存根文件中所做的那样,无需每次都指定类名和...。可能吗?