zoukankan      html  css  js  c++  java
  • 动态创建 Hello World

    var myHelloWorldApp = AssemblyDefinition.CreateAssembly(
        new AssemblyNameDefinition("HelloWorld", new Version(1, 0, 0, 0)), "HelloWorld", ModuleKind.Console);
    
    var module = myHelloWorldApp.MainModule;
    
    // create the program type and add it to the module
    var programType = new TypeDefinition("HelloWorld", "Program",
        Mono.Cecil.TypeAttributes.Class | Mono.Cecil.TypeAttributes.Public, module.TypeSystem.Object);
    
    module.Types.Add(programType);
    
    // add an empty constructor
    var ctor = new MethodDefinition(".ctor", Mono.Cecil.MethodAttributes.Public | Mono.Cecil.MethodAttributes.HideBySig
        | Mono.Cecil.MethodAttributes.SpecialName | Mono.Cecil.MethodAttributes.RTSpecialName, module.TypeSystem.Void);
    
    // create the constructor's method body
    var il = ctor.Body.GetILProcessor();
    
    il.Append(il.Create(OpCodes.Ldarg_0));
    
    // call the base constructor
    il.Append(il.Create(OpCodes.Call, module.Import(typeof(object).GetConstructor(Array.Empty<Type>()))));
    
    il.Append(il.Create(OpCodes.Nop));
    il.Append(il.Create(OpCodes.Ret));
    
    programType.Methods.Add(ctor);
    
    // define the 'Main' method and add it to 'Program'
    var mainMethod = new MethodDefinition("Main",
        Mono.Cecil.MethodAttributes.Public | Mono.Cecil.MethodAttributes.Static, module.TypeSystem.Void);
    
    programType.Methods.Add(mainMethod);
    
    // add the 'args' parameter
    var argsParameter = new ParameterDefinition("args",
        Mono.Cecil.ParameterAttributes.None, module.Import(typeof(string[])));
    
    mainMethod.Parameters.Add(argsParameter);
    
    // create the method body
    il = mainMethod.Body.GetILProcessor();
    
    il.Append(il.Create(OpCodes.Nop));
    il.Append(il.Create(OpCodes.Ldstr, "Hello World"));
    
    var writeLineMethod = il.Create(OpCodes.Call,
        module.Import(typeof(Console).GetMethod("WriteLine", new[] { typeof(string) })));
    
    // call the method
    il.Append(writeLineMethod);
    
    il.Append(il.Create(OpCodes.Nop));
    il.Append(il.Create(OpCodes.Ret));
    
    // set the entry point and save the module
    myHelloWorldApp.EntryPoint = mainMethod;
    myHelloWorldApp.Write("HelloWorld.exe");
  • 相关阅读:
    jQuery中$.get、$.post、$.getJSON和$.ajax的用法
    easyui笔记
    查询用户表中都存在那些表
    在tomcat下端口号设置后面 添加 URIEncoding=UTF-8可以使传递中文的不乱码
    jquery 实现ajax 上传文件的功能(使用插件 ajaxfileupload)
    oracle 分页(rownum的理解) 以及 树节点的查询
    Server.Transfer,Response.Redirect用法点睛
    Excel 生成sql语句
    exjs3.2的gridPanel的表头总宽度与列的总宽度不一致的解决方案
    Nopi .net下面的Excel第三方dll
  • 原文地址:https://www.cnblogs.com/nanfei/p/12123924.html
Copyright © 2011-2022 走看看