相关疑难解决方法(0)

基于反汇编的简单C#代码的手工编码IL的问题

我刚开始看一下IL,我很好奇我的尝试(如下所示)从编译器输出中删除多余的代码有任何意想不到的副作用.

关于结果的几个问题:

  1. 原始操作中nop操作的目的是什么?
  2. 原始方法结束时br.s的目的是什么?
  3. 重写版本是否以任何方式不正确?

原始C#代码:

class Program {
    public static int Main() {
        return Add(1, 2);
    }
    public static int Add(int a, int b) {
        return a + b;
    }
}
Run Code Online (Sandbox Code Playgroud)

csc.exeildasm.exe(原始)编译和拆解它:

  .method public hidebysig static int32  Main() cil managed
  {
    .entrypoint
    .maxstack  2
    .locals init (int32 V_0)
    IL_0000:  nop
    IL_0001:  ldc.i4.1
    IL_0002:  ldc.i4.2
    IL_0003:  call       int32 Program::Add(int32, int32)
    IL_0008:  stloc.0
    IL_0009:  br.s       IL_000b
    IL_000b:  ldloc.0
    IL_000c:  ret
  } 
  .method public hidebysig static int32  Add(int32 a, …
Run Code Online (Sandbox Code Playgroud)

c# il

6
推荐指数
1
解决办法
358
查看次数

标签 统计

c# ×1

il ×1