问题标签 [ilgenerator]
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.
c# - 自修改 C# (MSIL) 代码?
如何使用 C#/.NET 动态修改内存中的 MSIL 代码?
是的,我真的很想替换已经在内存中的现有代码。
具体来说,我不是:
- 只希望生成新代码(通过表达式模板、ILGenerator 等)
- 尝试发出一个新的二进制模块,希望稍后将其加载到内存中
c# - 如何在 IL 代码中发出三元运算符
我正在尝试生成动态方法。假设我arg
在堆栈中有布尔值。我想调用一个接受类型参数的方法,该参数将通过简单的规则int
从该值转换。对于一些示例代码,生成的 IL 代码如下:bool
arg ? 1 : 0
发射时OpCodes.Brtrue_S
,OpCodes.Br_S
如何正确识别要跳转到的偏移量?
c# - 如何使用 IL 改变盒装结构
想象一下我们有一个可变的struct
(是的,不要开始):
使用反射,我们可以获取 this 的盒装实例struct
并在盒内对其进行变异:
我想做的是编写一些可以与此相同但更快的IL。我是一个元编程迷;p
使用常规 IL 对任何值进行拆箱并改变值是微不足道的 - 但您不能只是在之后调用 box 它,因为这会创建一个不同的盒子。我猜我们需要在这里做的是将它复制到现有的盒子上。我已经调查过ldobj
/ stobj
,但那些似乎并没有完成这项工作(除非我遗漏了一些东西)。
那么:是否存在这样做的机制?还是我必须将自己限制在反射以执行 boxed s 的就地更新struct
?
或者换句话说:什么... evil goes here...
?
.net - 如何从单例调用实例方法与发射
我有例外:操作可能会破坏运行时,我不知道为什么:(。请帮助我。
我添加了本地,但仍然无法正常工作...
方法要动态创建(REF000001):
这是类,我想从单例中调用方法。
从 ILDASM 返回:
我的带有 IL 生成器抛出异常操作的代码可能会破坏运行时的稳定性
c# - ILGenerator 属性不是实例
我想得到这个:
但我得到了这个:
为什么我得到“.property class class”而不是“.property instance class”?这是我用来生成它的内容:
c# - 公共语言运行时检测到无效程序 - ILGenerator
基本上我试图将字节数组内的数据反序列化为对象。我正在尝试使用 UTF8 编码的 GetString 方法来读取字符串。这是我的代码的一部分:
我在这段代码之外检查了“getstring”的方法签名,它可以工作。我尝试删除'.boxIfAny',我也尝试使用'call'而不是'callvirt'。据我了解,“callvirt”是适用于这种情况的实例方法。有任何想法吗?
c# - 如何发出调用动态方法的代码?
我正在尝试发出调用我之前发出的动态方法的代码:
它通过一个异常说:“MethodInfo 必须是运行时 MethodInfo 对象”
有没有办法将动态方法转换为运行时方法?
c# - 使用 ILGenerator.Emit 设置对象的子属性
我有一些代码使用 IlGenerator.Emit 使用数据读取器创建和填充通用对象。它很好用,但是当数据库字段名称包含下划线时,我需要扩展它以填充简单的子对象。
例如,名为“Address_Line1”的数据库字段应填充属性 Line1,它是实体上地址属性的属性。在 C# 代码中,基本上......
我尝试编写 c# 代码并使用 ILSpy 尝试识别我应该编写的 IL 代码,但我不断收到内存错误等。
下面的代码包括当前工作的 IL 代码,并且我已经在我的代码尝试中包含了注释。谁能帮我吗?
c# - 为什么 ILGenerator 在 Foreach 语句中插入 Leave 指令
我生成以下代码:
直通Emit
这是完整的代码:
这是结果 IL(请参阅IL_001f
):
您能否澄清为什么leave
会出现指令?