C#/ CIL:本机int的类型

时间:2019-02-15 14:47:52

标签: c# cil

我正在编写一些工具来帮助验证运行时发出的IL。此验证的一部分涉及在发出操作码时维护Stack<Type>,以便将来可以将使用这些堆栈元素的操作码验证为使用正确的类型。但是,我对如何处理ldind.i操作码感到困惑。

Microsoft文档指出:

  

ldind.i指令从以下位置间接加载本机int值:   指定的地址(本机int,&或*类型的地址)作为   本地int。

在C#中,未定义native int,对于哪种类型最准确地表示此数据,我感到困惑。我如何确定它的大小,以及应该使用哪种C#类型来表示它?我担心它会因系统硬件而异。

1 个答案:

答案 0 :(得分:3)

在我看来,最好查看VES的定义方式,并使用专用的枚举为堆栈上的类型而不是C#可见类型建模。否则,当我们使用浮点数类型时,您会感到意外。

摘自MS Partition I.pdf 1 ,第12.1节:

  

CLI模型使用评估堆栈[...]但是,CLI在其评估堆栈上存储的值(int32int64native int。此外,CLI支持内部数据类型以表示内部评估堆栈上的浮点值。内部数据类型的大小取决于实现。

因此,这些以及引用之类的东西都是您应该跟踪的东西,我建议您使用 its 术语使用VES Stack的显式模型进行此操作。


1 ECMA C# and Common Language Infrastructure Standards