tangyanzhi1111

Main是函数的入口,也就是第一执行人,如何在Man函数之前运行一些代码呢?
有两种方法:

1.通过RunStartupHooks(DOTNET_STARTUP_HOOKS ),也就是添加环境变量的形式

点击查看代码
public class StartupHook
    {
        public static void Initialize()
        {
            Console.Write("Call Method Initialize\r\n");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadLine();
        }
    }
    }




2.通过添加特性(ModuleInitializer)代码如下:

点击查看代码
  public class ABC
    {
        [ModuleInitializer]
        public static void AA()
        {
            Console.Write("Call Method AA\r\n");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadLine();
        }
    }



前者是CLR运行时调用的,主要是通过非托调用执行托管里面的.Net类库操作进行的,后者则是Rosyln编译的时候把特性标记的方法放入.cctor里面去,然后调用。

在一些特殊的场景里可能会用到这样的一种应用方式,所以微软做了两种不同的选择方式,供你选择,前者可能更能灵活些,灵活到可以在程序里植入后门。或者可能安全性更高,但是同时也丧失了灵活度,对于选择,就看应用的需要了。



个人公众号:
image

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
  • 2022-12-23
  • 2022-12-23
  • 2021-09-24
  • 2022-12-23
  • 2021-07-30
猜你喜欢
  • 2022-02-21
  • 2021-05-22
  • 2022-12-23
  • 2022-12-23
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案