Самоклонирующийся исполняемый файл с отражением .NET - PullRequest
2 голосов
/ 02 октября 2011

Я пытаюсь что-то вроде эксперимента в 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, а затем с помощью некоторого трюка поместить его в динамическую сборку.

У кого-нибудь есть идеи?Спасибо:)

1 Ответ

1 голос
/ 02 октября 2011

Вы должны использовать Mono Cecil , который может читать и изменять сборки .Net.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...