gpt4 book ai didi

c# - Reflection.Emit 不安全代码

转载 作者:行者123 更新时间:2023-12-04 02:22:19 25 4
gpt4 key购买 nike

我正在使用 F# 中的 Reflection Emit 进行一些黑客攻击。我正在尝试执行与此 C# 代码等效的操作:

var ass = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("Test"), AssemblyBuilderAccess.RunAndSave);
var mb = ass.DefineDynamicModule("Test", "Test.dll", false);
var t = mb.DefineType("Foo", TypeAttributes.Public, typeof(ValueType));
t.DefineField("foo", typeof(int*), FieldAttributes.Public);
t.CreateType();
ass.Save("Test.dll");

该行特别是 definefield 行。在 F# 中,我能得到的最接近的是

let f = t.DefineField("foo", (typeof<nativeptr<int>>), FieldAttributes.Public)

然而,编译字段最终编译为 IntPtr 类型而不是 int*。(注意它是 nativeint 或任何其他类型的 IntPtr)

此外,我希望能够使用我以编程方式定义的结构,并在另一个结构中有一个 Foo*,但显然我不能在这种情况下使用 typeof(在 C# 或 F# 中)。有没有办法从 Type/TypeBuilder 中将字段定义为 Foo*?

在任何人指出这一切都可能是疯狂的(我同意)之前,这是一个有趣的项目,让我自己弄清楚我可以生成 C# 不允许我生成的代码有多疯狂:)

最佳答案

我相信ilsigptr<int>是 C# 的 int* 的 F# 对应项.

另见:

关于c# - Reflection.Emit 不安全代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com