Я пытаюсь что-то вроде эксперимента в 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, перевести весь код CIL в коды операций ilgenerator.emit
и выдать все это с помощью ilgenerator.emit
.Просто я думаю, что это утомительная работа и не может ... работать.
На самом деле, я бы хотел во время выполнения прочитать мой собственный метод main, а затем с помощью некоторого трюка поместить его в динамическую сборку.
У кого-нибудь есть идеи?Спасибо:)