ILDASM树视图中的字段顺序是正确的还是MetaInfo中的顺序是否正确?

时间:2012-06-07 03:46:34

标签: ildasm

在尝试确定.NET值类型中字段的精确顺序时,我查看了ILDASM树视图和ILDASM“MetaInfo”(即实际IL)。两个数据视图中的字段顺序是反向的。

例如,System.Runtime.InteropServices.FILETIME的树视图在dwLowDateTime之前列出了dwHighDateTime。 (我会张贴一张图片,但这里缺少足够的声望点。)

另一方面,这里是相应的IL,使用View>> MetaInfo>> Show!在ILDASM:

TypeDef#1655(02000678)

TypDefName: System.Runtime.InteropServices.FILETIME  (02000678)
Flags     : [Public] [SequentialLayout] [Class] [Sealed] [AnsiClass] [BeforeFieldInit]  (00100109)
Extends   : 02000009 [TypeDef] System.ValueType
Field #1 (04001e2e)
-------------------------------------------------------
    Field Name: dwLowDateTime (04001E2E)
    Flags     : [Public]  (00000006)
    CallCnvntn: [FIELD]
    Field type:  I4

Field #2 (04001e2f)
-------------------------------------------------------
    Field Name: dwHighDateTime (04001E2F)
    Flags     : [Public]  (00000006)
    CallCnvntn: [FIELD]
    Field type:  I4

...

哪个订单正确?我认为IL是正确的,但是想要确认。有谁知道造成这种差异的原因?

1 个答案:

答案 0 :(得分:0)

看起来Win32 FILETIME struct是小端(低端部分)。 .net版本是一个互操作结构,因此用于与本机代码交互,它几乎必须与本机代码兼容。

至于“差异”背后的原因,请注意“dwHighDateTime”按字母顺序排在“dwLowDateTime”之前。