请查看下面的MSIL代码:
IL_00: ldstr "Hello World"
IL_05: call void [mscorlib]System.Console::WriteLine(string)
IL_10: ret
IL_00,IL_05和IL_10是什么意思?我在大学读过操作系统概念,因此我当时了解Windows操作系统如何为进程分配虚拟内存。我也不明白为什么在上述情况下;地址递增5。
托管代码是从VB.NET应用程序生成的。
我花了一些时间谷歌搜索这篇文章,我在MSDN上阅读了一些文章。我仍然不清楚,因此问题的原因。
答案 0 :(得分:6)
它们只是IL反汇编程序生成的虚假“地址”。 LDSTR操作码需要一个字节用于操作码,0x72和4个字节用于操作数。这是一个标记值,用于从存储字符串文字的元数据表中选择字符串。因此,下一个IL操作码从偏移量5开始。相同的配方,CALL需要一个字节用于操作码,0x28和4个字节用于操作数,即方法令牌。所以下一个IL操作码从偏移量10开始.RET需要1个字节,0x2A并且没有操作数。总IL代码大小为11个字节。
您的反汇编程序生成这些“地址”以向您显示分支指令的目标。你没有,尝试反汇编使用if()语句来查看代码。它们在其他方面并不重要,因为抖动会将此代码转换为看起来非常不同的机器代码。