问题标签 [intermediate-language]

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 投票
3 回答
365 浏览

.net - il 汇编器的 vs2008 语法高亮显示

有没有办法让 Visual Studio 2008 为中间语言做一个很好的语法突出显示?

0 投票
4 回答
144 浏览

compiler-construction - 什么是复合指令?

我在中间代码章节做类编译器设计。通过在网上做一些研究,我发现了这句话:

当源程序可以包含复合指令时,递归解释是必要的。

我在谷歌上找不到什么复合指令。

0 投票
2 回答
1796 浏览

c# - C# 编译为 MSIL 代码

Microsoft C# 编译器 (CSC.exe) 是否有输出中间语言文件的选项?有点像 GCC 中的 -S 开关?

0 投票
1 回答
464 浏览

c# - 在 C# 中动态调用方法的选项

我已经看到很多与如何调用这样和那样的方法相关的问题。我还没有找到如何通过反射或 csharp 中的任何其他方式调用方法的不同选项的列表。

有人可以详细解释在 csharp 中动态调用方法的不同方式吗?从反射到发射 IL 以及介于两者之间的任何其他方式。我想知道在资源方面从最昂贵到最便宜的所有不同方式。

0 投票
2 回答
5376 浏览

.net - .NET 的 IL 编译器?

这可能是一个愚蠢的问题,但是是否有 IL 代码的编译器,类似于 Reflector 在 IL 模式下显示的编译器?

0 投票
1 回答
334 浏览

c# - 不存储引用时更大的.maxstack?

我不是任何类型的 IL 大师,我只是有时使用它来检查编译器对我编写的代码的影响。我一直想知道的一件事是为什么.maxstack有时会获得它所获得的价值。考虑以下类:

然后,我有一个这样的程序:

上面的代码给出了以下 IL(发布编译):

现在,如果我将程序代码更改为:

...它会产生以下 IL 代码:

第二个 IL 代码较短,这是意料之中的。但是让我有点好奇的是,为什么.maxstack我在第二个代码示例中是 8,而在第一个示例中是 1?为什么第二个代码会导致系统为操作保留更大的堆栈?

0 投票
2 回答
170 浏览

.net - 变量比较

以下 C# 片段:

生成此 MSIL:

为什么有两个ceq电话?

谢谢

0 投票
2 回答
474 浏览

c# - ildasm 和动态 exe 文件

我正在尝试创建一个应用程序可以修改 IL 中的属性以创建一个略有不同的可执行文件。例如,客户端 A 运行应用程序,并且 WinForm 标签上的标签读取“客户端 A:”。客户端 B 运行应用程序,标签显示“客户端 B”。容易我知道使用配置文件或资源文件,但这不是这个项目的选择。主程序需要能够根据用户输入的一些表单域动态生成.exe文件。

我的解决方案是创建一个独立的可执行文件,其中包含我需要动态化的所有元素。然后我使用 ildasm 生成 IL 并认为我可以使用这个 IL 并用标签替换我想要动态的元素。然后,在用户使用正则表达式等填写表单后,我可以在运行时替换这些标签。问题是,如果我将 ILDASM 生成的 IL 文件另存为 exe 并尝试运行它。我只是启动控制台,什么都不做。

我会以错误的方式解决这个问题吗?我不想深入研究反射,因为动态 .exe 非常简单,我认为使用 ildasm 对 IL 进行逆向工程是最快的方法。

非常感谢您的想法和建议。托尼

0 投票
2 回答
2961 浏览

c# - Mono.Cecil 可以修改 AppDomain 中已经加载的代码吗?

我想在运行时向某个类添加一些行为。我知道如何在运行时使用 Reflection.Emit 进行子类化,但这还不够。根据一些外部配置,我需要在类型 T 的方法中注入操作码,以便从它继承的所有类自动获得此行为。(我不能使用 .NET Profiling API)。

可以用 Mono.Cecil 完成这样的事情吗?

如果无法在加载的程序集上修改代码,那很好,如果我可以在加载程序集之前进行修改,然后将修改后的程序集加载到内存中,但我不知道如何控制程序集加载。

0 投票
2 回答
1027 浏览

c# - 在 CLR 级别上,铸件实际上是如何工作的?

在进行向上或向下转换时,幕后究竟发生了什么?我的想法是,在做某事时:

最后一行中的强制转换的唯一目的是告诉编译器我们是安全的,我们没有做错任何事情。所以,我的想法是,实际上不会在代码本身中嵌入任何转换代码。看来我错了:

为什么 CLR 需要类似的东西castclass string

向下转换有两种可能的实现:

  1. 您需要一个castclass something. 当您到达执行 的代码行时,castclassCLR 会尝试进行强制转换。但是,如果我省略了 castclass 字符串行并尝试运行代码会发生什么?
  2. 您不需要castclass. 由于所有引用类型都具有相似的内部结构,如果您尝试在 Form 实例上使用字符串,它将抛出错误使用异常(因为它检测到 Form 不是字符串或其任何子类型)。

此外,简而言之,C# 4.0 中的以下陈述是否正确?

它真的创造了一个新的参考吗?我认为这将是相同的引用,只是存储在不同类型的变量中。

谢谢