- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请查看下面的 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 应用程序生成的。
我花了一些时间在 Google 上搜索此内容,并在 MSDN 上阅读了一些文章。我仍然不清楚,因此问题的原因。
最佳答案
它们只是由 IL 反汇编程序生成的虚假“地址”。 LDSTR 操作码需要 1 个字节作为操作码 0x72,4 个字节作为操作数。这是一个标记值,用于从存储字符串文字的元数据表中选择字符串。因此,下一个 IL 操作码从偏移量 5 开始。同样的配方,CALL 需要 1 个字节用于操作码(0x28),4 个字节用于操作数(方法 token )。因此下一个 IL 操作码从偏移量 10 开始。RET 需要 1 个字节 0x2A 并且没有操作数。 IL 代码总大小为 11 字节。
您的反汇编程序会生成这些“地址”来向您显示分支指令的目标。如果您没有,请尝试反汇编使用 if() 语句的代码来查看这一点。否则它们是无关紧要的,因为抖动将此代码转换为看起来非常不同的机器代码。
关于.net - MSIL 虚拟地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546485/
我正在编写一个“弱事件工厂” - 将任何 Delegate 转换为具有相同签名的新委托(delegate)的代码,但在目标上实现 WeakReference。我正在使用 MSIL 来避免对 Deleg
两个混淆相关的问题: 1) 是否有任何工具可以将 F# 从 MSIL 目标形式反汇编回其源形式或接近它的形式?这不是通过默默无闻来实现安全性的尝试,但我想保护某些源代码免遭“盗窃”。 2) 我简要地查
关于 SO 上的 MSIL 有很多问题,但没有一个直接回答这个问题。 我一直在用 Textpad它确实有 MSIL 的语法定义文件,然后在命令提示符窗口中使用 ILASM。 我确实找到了对 ILIDE
我正在尝试为 .NET 平台创建我的语言的后端。前端和解释器用Delphi编写。非托管 API 只允许类型定义,但不允许发出 MSIL。 有哪些方法可以从非托管代码生成 MSIL?不使用 Reflec
是否有任何可读的最新(.net 4)MSIL 引用手册? 最佳答案 有一堆可下载的引用文档here . 包括 2006 年 6 月的 ECMA-335 公共(public)语言基础结构文档 (pdf)
在 VB.NET 中,您可以添加文件引用或项目引用。例如,如果您想使用 SQLConnection 类,那么您可以添加对 System.Data.SQLClient 的引用并导入命名空间。 这在 MS
请查看下面的 MSIL 代码: IL_00: ldstr "Hello World" IL_05: call void [mscorlib]System.Console::W
在 VB.NET 中,您可以添加文件引用或项目引用。例如,如果您想使用 SQLConnection 类,那么您将添加对 System.Data.SQLClient 的引用并导入命名空间。 这在 MSI
假设我的解决方案中有一个 C# Windows 类库,我在 VS2010 IDE 中构建它。我的 bin 目录中的输出是 X.dll 1) X.dll现阶段不包含MSIL,而是“压缩字节码”。 这是真
我正在使用 RemotingLite 库 ( see at github ) 并且 Proxy 类工厂有问题。简而言之,问题是在生成代码以返回 ValueType 对象(如用户定义的结构)时。 部分原
我正在尝试使用 Reflection.Emit(在 c# 中)创建一个新类型。 我要创建的代码类似于 public class { public static int[] A = new int
我试图弄清楚 MSIL 如何能够通过仅存储一个整数来表示对静态函数的调用。 例如,如果您添加对 Interlocked.Increment(ref someVariable) 的调用,您的 IL 将包
我只是想知道这是否可以做到。如果它不包含一些显着的性能优势,我不打算这样做。我是一名网络和游戏开发人员,但我通常不使用 c# 开发游戏。 最佳答案 是的,有可能 - 您可以使用 ilasm (附带 .
有人可以解释这几行 MSIL 吗?为什么它将评估堆栈中的值移到局部变量中,只是立即将其移回并返回? 以下 MSIL 代码加载单个参数(字符串),调用返回 bool 的方法,然后返回该 bool 值。我
这些问题似乎找不到好的答案。 以下是我认为我知道的和我不清楚的。 评估堆栈是一个类似于 C 风格堆栈的内存缓冲区(它是原生 int/size_t 的堆栈)吗? 评估堆栈元素可以是 32 位或 64 位
我可以访问这样的函数体中间语言: byte[] ilCodes = NestedFooInfo.GetMethodBody().GetILAsByteArray(); 我可以修改它的 IL 代码,以便
考虑以下C#代码段: static string input = null; static string output = null; static void Main(string[] args)
我有一组 MSIL/CLR 应用程序(用 C# 编写)。我正在寻找一种将它们刻录到纯硬件平台上的方法。我已经看到 Altera 有一个名为 NIOS II 的嵌入式处理器,它似乎支持 eCLR(嵌入式
在某种同行评审期间调试一些 C# 代码时,我注意到一种奇怪的行为,乍一看似乎是某种范围界定违规,但回想起来,编译器可能试图通过重用引用来节省内存。代码是: for(int i = 0; i < 10;
我尝试使用谷歌搜索和搜索 StackOverFlow,但没有看到明确的答案。如何查看我的 C# 编译成的 IL 代码?我想比较两种方法,看看它们是否产生相同的 IL。我曾看过一个非常棒的视频,内容是这
我是一名优秀的程序员,十分优秀!