cil相关内容

cecil:Instruction.Operand 类型对应 Instruction.OpCode.Code 值

是否有任何文档或 cecil 源代码的一部分,我可以查阅以全面了解 cecil 将用于给定 CodeOperand 类型> 价值?例如:我可以从 MethodBodyRocks 中收集到 Ldloc 采用 VariableDefinition 类型的 Operand,但我没有能够找到其他一些指令代码. 解决方案 可以查看OpCodes.cs 文件. 例如对于 Ldloc 你会看到 O ..
发布时间:2022-01-23 15:19:10 C#/.NET

编译器为委托关键字生成的密封类包含虚方法

在C#中使用delegate关键字时,C#编译器会自动生成一个派生自System.MulticastDelegate类的类. 这个编译器生成的类也包含 3 个方法:Invoke、BeginInvoke 和 EndInvoke. 所有这三个方法都被标记为 public virtual extern 但有趣的是类本身被标记为 sealed. 在密封类中定义的虚拟方法不仅违反直觉,而且 ..
发布时间:2022-01-18 12:23:22 C#/.NET

使 CLR/.NET 语言可调试

有哪些资源可以使 CLR/.NET 语言可调试?我正在开发一个 ActionScript 3 to IL 编译器,它使用 DLR CallSite 和 CallSiteBinders 来处理其他静态编程语言的动态方面.我正在寻找有关将发出的 IL 映射回源代码的任何信息,并且我还想知道如何使动态调用站点也映射回来. 所以这最终是两个问题: 如何使 IL 可调试? 如何使 DLR 调用 ..

在动态事件处理程序中引用“this"

在我的“myClass"类中,我使用 Reflection.Emit 为 myClass 类的成员之一动态编写事件处理程序. 我已经成功完成了. 现在,我想修改事件处理程序以调用 myClass 类中的实例方法之一. 但是,我无法弄清楚如何使用 Reflection.Emit 将对“this"的引用推送到 MSIL 堆栈.在事件处理程序中,Ldarg_0 不是对“this"的引用 ..
发布时间:2022-01-15 12:14:03 C#/.NET

在 F# 标准库实现中看到的 (# ... #) 语法是什么?

阅读 Array2D 模块的源代码,我在许多核心功能的实现中偶然发现了这个有趣的构造,例如: []let get (array: 'T[,]) (n:int) (m:int) = (#"ldelem.multi 2 !0" type ('T) array n m : 'T #) 我只能假设这是内联 CIL 的语法,在这里使用显然是为了获得性能优势.但是,当我尝试在我的程序中使用此语法时,出现错 ..
发布时间:2022-01-05 09:56:47 其他开发

Call 和 Callvirt

CIL 指令“Call"和“Callvirt"有什么区别? 解决方案 call 用于调用非虚拟、静态或超类方法,即调用的目标不受覆盖.callvirt 用于调用虚方法(因此,如果 this 是覆盖该方法的子类,则调用子类版本). ..
发布时间:2021-12-26 14:17:46 C#/.NET

生成尾调用操作码

出于好奇,我尝试使用 C# 生成尾调用操作码.Fibinacci 是一个简单的方法,所以我的 c# 示例如下所示: private static void Main(string[] args){Console.WriteLine(Fib(int.MaxValue, 0));}public static int Fib(int i, int acc){如果(我== 0){返回acc;}返回 F ..
发布时间:2021-12-16 08:24:51 C#/.NET

通用 FromEvent 方法

使用新的 async/await 模型,生成一个在事件触发时完成的 Task 相当简单;你只需要遵循这个模式: 公共类MyClass{公共事件 Action OnComplete;}公共静态任务 FromEvent(MyClass obj){TaskCompletionSourcetcs = new TaskCompletionSource();obj.OnCompletion += () => ..
发布时间:2021-11-30 13:36:04 C#/.NET

动态替换 C# 方法的内容?

我想要做的是改变调用 C# 方法时的执行方式,以便我可以编写如下内容: [分布式]公共 DTask解决(int n,DEvent回调){for (int m = 2; m 在运行时,我需要能够分析具有 Distributed 属性的方法(我已经可以做到),然后在函数体执行之前和函数返回之后插入代码.更重要的是,我需要能够在不修改调用 Solve 的地方或在函数开始时修改代码的情况下(在编译时 ..
发布时间:2021-11-29 09:38:02 C#/.NET

使用从 IL 编译的程序集和 .NET Core &沙马林

更新了对我有用的解决方案.请参阅此问题的底部. 上下文: 我需要一种方法来评估泛型类型的大小,以便计算数组长度以适应某个字节大小.基本上,sizeof 类似于 C/C++ 提供的. C# 的 sizeof 和 Marshal.SizeOf 不适合这个,因为它们有很多限制. 考虑到这一点,我在 IL 中编写了一个程序集,通过 sizeof 操作码启用我正在寻找的功能.我知道它本质 ..
发布时间:2021-11-26 13:03:58 C#/.NET

验证 .NET Framework 程序集

我刚刚浏览了我们的德国 VB.NET 论坛 有一些有趣的事情让我有点头疼. 实际上可以使用 ReflexIL 或其他一些 IL 编辑器编辑 .NET Framework 程序集.您唯一需要绕过的是程序集的强名称签名.更改程序集 IL 后,您必须运行 sn.exe -Vr [assemblyname] 以跳过强名称验证.之后,您必须清除缓存的本机图像.只需通过 C:\Windows\assem ..
发布时间:2021-11-26 12:17:05 C#/.NET

什么是“<模块>"?类型?

我正在使用 Mono.Cecil 读取由 Regex.CompileToAssembly() 生成的程序集.当我遍历类型时,在名为 的根命名空间中有一种类型.该类型没有基类型.这是什么类型?这是一些 Mono.Cecil 工件还是实际上是 .NET 程序集的真实部分的东西?它扮演什么角色? 解决方案 类型是不适合 CLI 模型的声明的占位符.通常只与混合模式的程序集相关,其中包含用托管语言 ..
发布时间:2021-11-26 12:11:17 C#/.NET

堆栈的目的是什么?为什么我们需要它?

所以我现在正在学习 MSIL 以学习调试我的 C# .NET 应用程序. 我一直想知道:堆栈的目的是什么? 只是把我的问题放在上下文中: 为什么要从内存传输到堆栈或“加载"?另一方面,为什么要从堆栈转移到内存或“存储"?为什么不把它们都放在内存中? 是不是因为它更快? 是不是因为它是基于 RAM 的? 为了效率? 我试图掌握这一点,以帮助我更深入地理解 CIL 代码. ..
发布时间:2021-11-26 11:56:10 C#/.NET

使用从 IL 编译的程序集和 .NET Core &沙马林

更新了对我有用的解决方案.请参阅此问题的底部. 上下文: 我需要一种方法来评估泛型类型的大小,以便计算数组长度以适应某个字节大小.基本上,sizeof 类似于 C/C++ 提供的. C# 的 sizeof 和 Marshal.SizeOf 不适合这个,因为它们有很多限制. 考虑到这一点,我在 IL 中编写了一个程序集,通过 sizeof 操作码启用我正在寻找的功能.我知道它本质 ..
发布时间:2021-11-24 20:53:08 C#/.NET

使用 IL Emit 调用现有对象的方法

我正在尝试编写一个基于属性的拦截器(类似于DynamicProxy).这个想法是,基于某些自定义属性,将调用该属性内的方法,即 在调用实际方法之前调用属性类中的方法. 调用实际方法. 我能够使用 MethodBuilder 和 TypeBuilder 覆盖现有方法.但是,我不知道如何调用Attribute内部的方法. 我的代码: static void CreateMetho ..
发布时间:2021-11-24 19:13:01 C#/.NET