带有.net反射的自克隆可执行文件

本文关键字:可执行文件 net 反射的 带有 | 更新日期: 2023-09-27 18:10:19

我正在尝试用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方法,然后用一些技巧把它放在动态程序集中。

有人知道吗?谢谢:)

带有.net反射的自克隆可执行文件

你应该使用Mono Cecil,它可以读取和修改。net程序集