2
我想在C#.NET中進行一種實驗。我想創建一個克隆自己的程序(最終作爲一個變異克隆)。最後,我想讓它產生一個「兒子」,也需要有能力克隆自己等等!自我克隆可執行文件與.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);
因此,與此代碼我在運行時進行動態組裝succeded,並將其保存爲「son.exe」或執行它。現在我需要「建立」該程序集,閱讀我的主程序並將其複製到子程序集中。
我開始使用ilgenerator.emit
,但我正在進入一個無限的「編程」循環。我認爲要製作parent.exe,用ildasm反彙編,翻譯ilgenerator.emit
操作碼中的所有CIL代碼,然後用ilgenerator.emit
發送所有這些代碼。簡單地說,我認爲這是一項乏味的工作,不能......工作。
事實上,我想在運行時讀取我自己的主要方法,然後用一些技巧將它放到動態程序集上。
任何人有任何想法? 謝謝:)
歡迎來到[quines]的精彩世界(http://en.wikipedia.org/wiki/Quine_%28computing%29)! – SLaks
File.Copy()太無聊了嗎?然後使用codegolf.stackexchange.com –