首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reflection.Emit不安全代码

Reflection.Emit不安全代码
EN

Stack Overflow用户
提问于 2014-12-11 03:58:18
回答 1查看 338关注 0票数 3

我正在使用F#中的反射发射进行一些黑客攻击。我正在尝试执行与下面的C#代码等效的代码:

代码语言:javascript
复制
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");

这一行特别是定义字段行。在F#中,我能得到的最接近的是

代码语言:javascript
复制
let f = t.DefineField("foo", (typeof<nativeptr<int>>), FieldAttributes.Public)

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-12-11 04:14:31

我相信ilsigptr<int>是C#的int*的F#对应物。

另请参阅:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27409760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档