问题标签 [cil]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1131 浏览

stack - 有人可以解释这几行 MSIL 吗?

有人可以解释这几行 MSIL 吗?为什么它将评估堆栈中的值移到局部变量中,只是立即将其移回并返回?

以下 MSIL 代码加载单个参数(字符串),调用返回 bool 的方法,然后返回该 bool 值。我不明白为什么它调用 stloc.0 将方法的返回值存储在局部变量中,然后执行显式无条件控制转移到下一个标记行(似乎没有必要),只是将值移回返回之前的评估堆栈。

我对它为什么这样做的最佳猜测是执行某种类型检查以确保评估堆栈上的值在返回之前实际上是一个布尔值。但是我对明确跳转到下一行一无所知;我的意思是,它不会去那里吗?该方法的 C# 源代码只有一行,它返回该方法的结果。

0 投票
3 回答
353 浏览

jvm - Java 和 ASP.NET

请问谁能告诉我JVM和MSIL之间的区别?

0 投票
3 回答
344 浏览

.net - 自 .Net 2.0 以来,.Net IL 是否发生了变化?

在.Net 3.5 对其编译的 IL 没有任何更改之前,我已经听说过这种说法。在考虑了我所知道的所有编译器特性之后,事实上,它们似乎都可以在同一个旧 IL 中实现,但我找不到官方来源来证实这一说法。这是真的吗?

0 投票
0 回答
284 浏览

assemblies - Linking CIL with native code

In C++/CLI the following is sample code that links native and managed code within the same file.

I am trying to experiment in getting other languages to link with managed code. I can compile other languages with the available tools and can compile CIL with ilasm. Ilasm produces the final .dll/.exe directly and I cant figure out a way to link in .obj files from other compilers.

0 投票
2 回答
738 浏览

c# - .NET 2.0/C# 中泛型方法的元数据的签名格式是什么?

例如,out在 C# 中使用关键字的方法中的参数将显示在元数据签名中,前面带有 & 符号&。我正在尝试为通用方法创建签名,但我不想使用元数据 API 来解决这个问题,它肯定记录在某处吗?

这是我对 Socket 类的 BeginReceiveFrom 的含义的示例:

0 投票
2 回答
424 浏览

c# - 在动态事件处理程序中引用“this”

在我的“myClass”类中,我使用 Reflection.Emit 为 myClass 类的成员之一动态编写事件处理程序。

我已经成功地做到了。

现在,我想修改事件处理程序以调用 myClass 类中的实例方法之一。

但是,我无法弄清楚如何使用 Reflection.Emit 将对“this”的引用推送到 MSIL 堆栈。在事件处理程序中,Ldarg_0 不是对“this”的引用,而是事件处理程序的第一个参数。

有谁知道如何在堆栈上推送对“this”的引用,以便我可以调用实例方法。例如,这就是我希望 c# 代码的样子:

谢谢!

0 投票
2 回答
524 浏览

.net - 如何将 .entrypoint 指令添加到方法(动态程序集)

我想使用 System.Reflection.Emit 中的类创建一个简单的应用程序。如何将 enrypoint 指令添加到 Main 方法?

AssemblyBuilder.SetEntryPoint 似乎没有实现这一点。

0 投票
1 回答
2202 浏览

c# - 迭代器块在 IL 中生成 try-fault

在尝试了一个迭代器块后,我注意到生成的 IL 代码不是我所期望的。而不是 try-finally 块,而是生成了一个我从未见过的 try-fault 块。我注意到编译器不允许我在“手写”C# 中使用错误关键字。

2有区别吗?

C#代码:

MSIL 代码:

有趣的行是 IL 的最后一行,其中指定了错误处理程序,其中在正常的 try-finally 块中指定了 finally 处理程序。

0 投票
2 回答
1567 浏览

c# - 将对象文字提供给 ILGenerator

显然不可能将 obj 干净地推送到评估堆栈上,但我对丑陋的 hack 持开放态度,这可能会损害例如可移植性。ModuleBuilder.DefineInitializedData 允许将 System.Byte[] 存储在 .sdata 中。有任何想法吗?

编辑:生成的方法正在作为新程序集的一部分发出。

0 投票
1 回答
1096 浏览

c# - “操作可能会破坏运行时”和具有值类型的 DynamicMethod

我正在尝试概括以下 IL(来自 Reflector):

但是,当我尝试使用 DynamicMethod 重现此 IL 时:

我得到一个例外“操作可能会破坏运行时”。IL似乎与我相同,有什么想法吗?ValueSource 是一个值类型,这就是我在这里做一个 ref 参数的原因。

编辑

这是 ValueSource 类型: