问题标签 [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 投票
2 回答
3650 浏览

disassembly - 从 DLL 二进制文件中获取 IL 代码

我正在学习伊利诺伊州。

我喜欢 RedGate 的 .Net Reflector 工具(最初是 Lutz)。我已经有了 Serge Lidin 和 Ecma-335 的书。看起来这些东西就是我们必须使用 IL 的全部内容(当然,除了 ILAsm 和 ILDasm)。

我的任务是解析汇编二进制文件并获取 IL 代码。很明显,程序集是一个二进制文件;因此,它只是一个字节链。为了做我想做的事,我需要知道汇编结构:存在哪些标头,它们占用多少字节,字节偏移量以逐字节读取,等等。

Lidin 的书对此进行了描述,但对我来说并不是 100% 清楚。有没有人尝试将 DLL 解析为字节流?要将元数据和 IL 代码作为字节流,然后解析 IL 字节流以获取 IL 源?我不想在这里使用反射;我只想使用二进制文件,而不是。

单声道塞西尔做同样的事情吗?即使是这样,我也想知道该怎么做。

是的,我正在尝试创建另一个类似 .NET Reflector 的轮子,我想知道它是如何制作的。就像有人说的那样:“Lutz 不一定是世界上唯一知道如何制作它的人”。

顺便说一句,ISDasm 是如何工作的?它是用 .net 编码的吗?

有什么想法、资源、例子吗?

谢谢你。

0 投票
4 回答
362 浏览

c# - C# 遍历 switch 的 case

是否可以在 switch 的所有情况下以编程方式检索?我不知道,也许是 IL 但不知道该怎么做......

事实上,我的全球问题如下:我得到了一个带有字符串作为属性名称的 siwtch 案例。方法很重要,不允许回归。我不希望重构破坏这一点,所以我想要一种方法来测试所有大小写字符串实际上是我的对象的真实属性。(注意:默认值返回一些东西,所以我不能为重构的无效值抛出异常)。

0 投票
4 回答
836 浏览

.net - 是否可以在 MSIL 中编码?

我只是想知道这是否可以做到。如果它不包含一些显着的性能优势,我不打算这样做。我是一名网络和游戏开发人员,但我通常不使用 c# 开发游戏。

0 投票
2 回答
1119 浏览

c# - MSIL 问题(基本)

好吧,假设我们有这个 c# 代码:

伊利诺伊:

现在对于这个问题,我的理解是 ldarg.# 将提供给方法的参数放在堆栈上,以便我们可以使用它们?但是,当方法只接受一个参数时,为什么要调用 ldarg.1 和 ldarg.0 呢?

0 投票
1 回答
3303 浏览

c# - 将对象转换为 IL 中的特定类?

我发现了在我正在生产的 DynamicMethod 中得到“操作可能破坏运行时的稳定性”的原因,虽然我很容易修复它,但它给我留下了一个看似简单的问题:

  • 如何将“Object”类型的对象引用转换为特定类型,以便我可以在对象引用上调用该类型的方法?

下面是一个示例程序。运行它时,它会在编译方法时崩溃并出现“操作可能破坏运行时”异常。

只需将声明为 typeTestClass而不是的变量的类型更改即可解决此问题Object,但我仍然想知道如何将引用转换为代码中的适当类型。

在代码中,我用星号标记了一行。那时我可以发出什么代码,将Object堆栈上的TestClass引用变为引用,以便方法调用将通过?

请注意,我知道这是产生问题的方法调用,如果我完全注释掉这些行,那么变量的类型无关紧要,该方法被编译并执行得很好。

这是代码。

0 投票
4 回答
3448 浏览

.net - 对于一本关于 .NET CLR 和 CIL 的好书,您有什么建议?

您是否知道任何关于 CLR、 .NET FrameworkCIL的工作原理的好书,而不是任何特定的 .NET 语言?

0 投票
6 回答
1689 浏览

static - .net 程序集的静态分析

我有一个 C# 项目,我需要为它找到不直接或间接从任何其他公共方法调用的所有私有方法。

此外,对于从公共方法调用的每个私有方法,我需要知道它是哪个公共方法。然后我将确定该方法是否真的是从该类的客户端调用的,如果不是,我将能够删除它。

过去,我使用 Lutz Rorder 的代码,它是 Reflector 的基础——它可以选择分析 IL 代码并在其之上提供对象模型。我现在找不到此代码。

有什么建议吗?也许指向那个 Lutz Rorder 代码?

萨尔

0 投票
4 回答
1500 浏览

.net - IL / CLR / DLR 参考?

我想了解更多有关 IL 和 CLR / DLR 的信息。我的一个朋友推荐了《Inside Microsoft .NET IL Assembler》一书,但自从它于 2002 年出版以来,我担心它现在已经过时了。

有没有人有更多最新的书籍或网站可供了解 .NET 语言的人使用,以了解有关 IL 和 CLR 的内部工作原理的更多信息?

0 投票
2 回答
338 浏览

compiler-construction - EXE 文件中部分和内存的对齐方式

在 Mosa IL 编译器中创建使用时,我需要指定 EXE 文件中的部分和内存的对齐方式是什么?

谢谢。

0 投票
2 回答
1807 浏览

c# - ConstructorInfo.Invoke 的 DynamicMethod,我需要考虑什么?

我的问题是这样的:

如果我要构建一个DynamicMethod对象,对应一个ConstructorInfo.Invoke调用,当我可以保证正确的类型时,我需要实现什么类型的 IL 以处理所有(或大多数)类型的参数在我拨打电话之前要传入多少个参数?


背景

我正在进行 IoC 容器的第三次迭代,目前正在做一些分析,以确定是否有任何区域可以轻松节省大量使用时间。

我注意到的一件事是,当解析为具体类型时,最终我会使用ConstructorInfo.Invoke调用构造函数,并传入我已经计算出的参数数组。

我注意到调用方法有相当多的开销,我想知道其中大部分是否只是我所做的相同检查的不同实现。

例如,由于我拥有的构造函数匹配代码,要为我传入的预定义参数名称、类型和值找到匹配的构造函数,这个特定的调用调用不可能最终得到它应该能够的东西以正确的顺序、正确的类型和适当的值来处理,例如正确数量的参数。

在执行包含对我的 resolve 方法的一百万次调用的分析会话,然后将其替换为模仿 Invoke 调用的DynamicMethod实现时,分析时间是这样的:

  • ConstructorInfo.Invoke:1973 毫秒
  • 动态方法:93ms

这约占此分析应用程序总运行时间的 20%。换句话说,通过将 ConstructorInfo.Invoke 调用替换为具有相同功能的 DynamicMethod,我能够在处理基本的工厂范围服务时减少 20% 的运行时间(即,所有解析调用都以构造函数调用结束)。

我认为这是相当重要的,并且值得仔细研究在这种情况下为构造函数构建一个稳定的 DynamicMethod 生成器需要做多少工作。

因此,动态方法将接受一个对象数组,并返回构造的对象,我已经知道有问题的 ConstructorInfo 对象。

因此,看起来动态方法将由以下 IL 组成:

还有什么我需要考虑的吗?

请注意,我知道在“减少访问模式”下运行应用程序时创建动态方法可能不可用(有时大脑不会放弃这些术语),但在这种情况下,我可以很容易地检测到这一点并且只是像以前一样调用原始构造函数,开销和所有。