问题标签 [il]

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 回答
10650 浏览

c# - 查看从编译表达式生成的 IL 代码

是否可以查看在表达式树上调用 Compile() 时生成的 IL 代码?考虑这个非常简单的例子:

现在,表达式树执行最后一行Main所说的内容。编译应用程序,然后在 Reflector 中打开它。p.Value = 5;您可以看到执行分配的 IL 代码。但是表达式树是在运行时创建和编译的。是否可以从编译中查看生成的 IL 代码?

0 投票
2 回答
259 浏览

.net - 将 IL 注入强命名程序集?

我有一个库的问题,它的程序集是强类型的并且我没有源代码。感谢Reflector,我找到了错误的来源,但不幸的是,该类被密封,这使我无法将其子类化。由于它涉及大量内部方法,因此对整个源的简单复制/粘贴也会失败。

作为最后的手段,我认为我可以在程序集中注入一些 IL(这是一个相对简单的事情,只需要在|| something.GetType() == typeof(System.DBNull)if 语句中添加一个,但我认为强命名会是一个问题?

有没有办法解决这个问题,还是我受供应商的摆布?

0 投票
3 回答
1486 浏览

c# - 从大会获得 MSIL?

是否可以在不加载类型信息的情况下从 Assembly 对象中有效地提取 MSIL?

我有一个简单的应用程序,它接受一个字符串并尝试动态创建一种方法来进行非常快速的计算,但我想通过使用CodeCompileUnit编译 C# 代码字符串、从编译的程序集中提取 MSIL 来避免加载程序集/类型信息,并将 MSIL 发射到 DynamicMethod 中。如果这是可能的。

0 投票
1 回答
4801 浏览

c# - 如何在运行时将 IL 注入方法

标题或多或少说明了一切。基于这篇文章,我想出了这个:

这实际上有效......偶尔-.-

例如,这有效。

但是,这不是(SEHException)。我所做的只是改变定义函数的顺序。

至于文章中的代码......我根本无法让它工作。

有什么想法/替代方案吗?

0 投票
3 回答
702 浏览

.net - .Net 中带有字符串参数和 ref 的方法

我有一个有趣的例子,你能解释一下吗?据我了解,字符串是一个参考类,但不能修改。因此,当我尝试修改字符串时,框架会创建对新堆地址的新引用。我不明白为什么 Bear 方法中的这个新地址没有传递到主调用堆栈。

所以 sss 将具有“我喜欢伏特加”的价值,但为什么呢?

PS还是这样

PPS 示例中的一些 IL 代码

0 投票
1 回答
2103 浏览

inheritance - Mono.Cecil:从其他程序集中调用基类的方法

如何按名称获取对基类方法的 MethodReference?

我试过了

如果我将包含基类的 dll 添加到 assemblyresolver,它会返回方法。但是如果我使用

(其中 baseMethod 是通过从已解析的 TypeDefinition 中获取方法找到的)生成的 IL 是不可读的,即使 Reflector 冻结并退出。

现在一些IL:
如果在类型上调用私有方法:

如果在基类型上调用受保护的方法:

那么,如何使用 Mono.Cecil 生成后者?

0 投票
3 回答
1039 浏览

c# - .NET 函数反汇编

在反汇编 .NET 函数时,我注意到它们都以类似的模式开始。这个初始代码有什么作用?

此代码出现在函数应该执行的实际代码之前。是某种参数计数验证吗?

功能1

功能2

功能3

[编辑] 那么这是对它的正确描述吗?

或者?

0 投票
5 回答
528 浏览

c# - 代表比类更轻量级吗?

我尝试反汇编 C# 创建的可执行文件,但无法得出结论。我想知道的是,对于 CLR,c# 的代表是真的特殊实体还是只是编译器糖?

我问这个是因为我正在实现一种可以编译为 C# 的语言,而且将匿名函数编译为类比编译为委托对我来说更有趣。但是我不想使用以后会后悔的设计,因为它们可能会占用更多内存(我认为 Java 的 PermGen 可以作为我提问的基础。尽管我知道 CLR 没有这样的东西)。

谢谢!

- 编辑

为了更清楚一点,我想知道以下之间是否存在(以及有什么区别):

并且,例如

- 编辑

我认为两者之间可能存在很大差异:

不过,我在某处读到该语法Func<int, int, int> add = Program.add;只是Func<int, int, int> add = delegate(int a, int b) { return Program.add; };. 但我真的不知道这是不是真的。我还可以看到 C# 编译器已经缓存了所有这些实例,因此它们只构造一次。不过,我可以用我的编译器做同样的事情。

0 投票
1 回答
364 浏览

c# - microsoft ILGenerator 的输出文件在哪里?

我使用过 Microsoft ILGenerator 及其 Emit 成员。我想知道在哪里可以找到它生成的输出 il 文件。

0 投票
1 回答
61 浏览

.net - 存储当前指令位置

有什么方法可以存储当前指令的位置,以便将来可以分支回到它。

我正在尝试实现一些类似 GOSUB 的功能。

现在,Branch 指令接受一个参数,该参数表示相对于要跳转到的当前位置的字节数。它很容易将标签存储到我想去的地方,然后分支到它。如果我可以在分支之前存储当前位置,那么在返回时我可以获取新的当前位置 - 存储的位置并将其传递给 Branch..

但我不知道如何......有什么想法吗?