我在C#.NET中尝试了一种实验。我想创建一个克隆自己的程序(最终作为一个变异的克隆)。最后,我希望它能够产生一个“儿子”,它也需要能够克隆自己等等!
我想做这样的事情:
static void Main(string[] args)
{
string Son_Name = "son";
string Full_Son_Name = Son_Name + ".exe";
AssemblyName aName = new AssemblyName(Son_Name);
AssemblyBuilder aBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Save);
ModuleBuilder mBuilder = aBuilder.DefineDynamicModule("Module", Full_Son_Name, false);
TypeBuilder tBuilder = mBuilder.DefineType("Program", TypeAttributes.Public);
MethodBuilder methodBuilder = tBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static);
ILGenerator ilGenerator = methodBuilder.GetILGenerator();
MethodInfo m_ReadLine = typeof(System.Console).GetMethod("ReadLine", BindingFlags.Public | BindingFlags.Static);
Clone_My_Main_method(methodbuilder);//I need something to do THAT
aBuilder.SetEntryPoint(methodBuilder);
tBuilder.CreateType();
aBuilder.Save(Full_Son_Name);
因此,使用此代码,我成功在运行时进行动态组装,并将其另存为“son.exe”或执行它。现在我需要“构建”该程序集,读取我的主程序并将其复制到子程序集中。
我开始使用ilgenerator.emit
,但我将进入一个无限的“编程”循环。我想制作parent.exe,用ildasm反汇编它,翻译ilgenerator.emit
操作码中的所有CIL代码并用ilgenerator.emit
发出所有这些代码。简单地说,我认为这是一项乏味的工作,不能......工作。
实际上,我想在运行时阅读我自己的main方法,然后用一些技巧把它放到动态程序集中。
任何人都有任何想法? 谢谢:))