IL代码中的符号是什么?

时间:2016-06-21 18:58:13

标签: c# .net intermediate-language

IL代码中的这个符号(IL_0000等)是什么。它是真正的内存堆地址吗?

  IL_0000:  nop
  IL_0001:  ldstr      "here is something"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ldc.i4.s   18
  IL_000e:  newobj     instance void Proj.Stock::.ctor(int32)
  IL_0013:  stloc.0
  IL_0014:  ldstr      "another"
  IL_0019:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_001e:  nop
  IL_001f:  ldstr      "and even more"
  IL_0024:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0029:  nop
  IL_002a:  ret

1 个答案:

答案 0 :(得分:3)

IL_0000:是代码标签。它实际上只是一个标识符,因此您可以通过名称而不是按字节数轻松引用跳转位置。

请参阅公共语言基础结构(CLI)标准文档。 ECMA-335第II.5.4节

  

II.5.4标签的标签和标签

     

提供标签作为编程方便;他们代表了一个   在元数据中编码的数字。由a表示的值   label通常是从字节开头的字节偏移量   当前的方法,虽然精确的编码取决于   其中在逻辑元数据结构或CIL流中的标签   发生。

     

...