【发布时间】:2012-08-14 10:11:22
【问题描述】:
事实:
CIL指令
rethrow的操作码的正确编码是两字节序列FE 1A。OpCodes.Rethrow.Value(类型为short)在我的 little-endian 机器上具有值0xFE1A。BitConverter在与字节序列进行转换时遵循机器的字节序。在我的 little-endian 机器上,
BitConverter.GetBytes(OpCodes.Rethrow.Value)生成字节序列1A FE。
这意味着,使用BitConverter 在little-endian 机器上序列化OpCode.Value 不会产生正确的操作码编码;字节顺序颠倒了。
问题:
OpCode.Value的字节顺序是否记录在案(如果有,在哪里?),还是“实施细节”?上面的步骤 4 在大端机器上是否也会导致错误的字节顺序?也就是说,
OpCodes.Rethrow.Value在大端机器上会是0x1AFE吗?
【问题讨论】:
-
你不能这样组合操作码。元数据阅读器会轻咬内容,并在找到
FE时知道它是一个长版本。如果它代表相反的方式,那么您将很难阅读它。 -
@leppie:我知道
FE必须首先出现在指令字节流中。我的问题是关于存储在OpCode.Value中的操作码编码的字节顺序。 -
可能是为了阅读方便:)
标签: .net endianness cil reflection.emit opcode