Skip to content

RUNUO服务器分析心得 第三章——进入Main函数

RUNUO服务器分析心得 第三章——进入Main函数 published on RUNUO服务器分析心得 第三章——进入Main函数有91条评论

        好了,接上篇。进入到Main后,我们来看看里面到底在作写什么?首先提醒一下各位朋友,如果不是很懂IL呢,还是最好找些资料来看看了,我呢是边看边分析边写,如果大家有时间可以系统的学学IL,只有好处没坏处的。

        上章中带领大家一起进入了Runuo.il的调试工作,众所周知,控制台程序有有一个Main函数,通过IL代码搜索,我们发现Main函数是在Server命名空间Core类里面,至于什么是命名空间和类的概念我就不多解释了。

 

.method public hidebysig static void
Main(string[] args) cil managed
{
.entrypoint // 这里看到没有,这代表是入口点的意思啦,证明我们没有找错喔。
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )

        好了,不废话了,顺着这个函数往下看,看到这里IL_019d,我发现了一个关键字,这个是我最关心的东西了:

      IL_019c:  ldloc.0
      IL_019d:  call       bool Server.ScriptCompiler::Compile(bool) //这里,有个Script
      IL_01a2:  brfalse.s  IL_016c

        灵感告诉我,这里面一定有我关心的问题。看代码来看,这里调用了ScriptCompiler的一个成员函数,看到前面哪个Server.了么?也是Server命名空间里的啊。解下来我们找ScriptCompiler类的带参数的Compile方法

     .method public hidebysig static bool
            Compile(bool debug) cil managed //就是它拉
    {
      // 代码大小       564 (0x234)
      .maxstack  4
      .locals (class [System]System.CodeDom.Compiler.CompilerResults V_0,
               class [System]System.CodeDom.Compiler.CompilerResults V_1,
               int32 V_2,
               class [mscorlib]System.Collections.ArrayList V_3,
               class [mscorlib]System.Type[] V_4,
               int32 V_5,
               class [mscorlib]System.Reflection.MethodInfo V_6,
               int32 V_7,
               class [mscorlib]System.Type[] V_8,
               int32 V_9,
               class [mscorlib]System.Reflection.MethodInfo V_10,
               int32 V_11)

        找到后,看下面的代码,很多,不过别着急慢慢来,直到看到这里:

      IL_004d:  ldarg.0
      IL_004e:  call       class [System]System.CodeDom.Compiler.CompilerResults Server.ScriptCompiler::CompileCSScripts(bool)
      IL_0053:  stloc.0

        看这个函数名字大家都知道它在做什么了吧,编译.cs文件啊,还带了个参数,不管它老办法,搜索这个函数:

      method private hidebysig static class [System]System.CodeDom.Compiler.CompilerResults
            CompileCSScripts(bool debug) cil managed
    {
      // 代码大小       447 (0x1bf)
      .maxstack  5
      .locals (class [System]Microsoft.CSharp.CSharpCodeProvider V_0,
               class [System]System.CodeDom.Compiler.ICodeCompiler V_1,
               string[] V_2,
               string V_3,
               class [System]System.CodeDom.Compiler.CompilerResults V_4,
               int32 V_5,
               int32 V_6,
               class [System]System.CodeDom.Compiler.CompilerError V_7,
               class [System]System.CodeDom.Compiler.CompilerError V_8,
               class [mscorlib]System.Collections.IEnumerator V_9,
               class [mscorlib]System.IDisposable V_10,
               object[] V_11)

        好啦,主角上场,这个函数里有我们最关心的东西……

原创文章,转载请注明: 转载自游戏无界·达秀的黑暗空间

本文链接地址: RUNUO服务器分析心得 第三章——进入Main函数

本站作品除特殊申明外均为原创,采用知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。如果需转载请保持文章完整性和标明原文出处,禁止商业用途。

  1. Pingback: neil

  2. Pingback: edward

  3. Pingback: russell

  4. Pingback: walter

  5. Pingback: Jerome

  6. Pingback: darren

  7. Pingback: Eduardo

  8. Pingback: armando

  9. Pingback: Manuel

  10. Pingback: calvin