Составители:
Рубрика:
}
break;
case OperandType.ShortInlineVar: /* unsigned int8 */
Result.Add((byte)operand);
break;
case OperandType.InlineVar: /* unsigned int16 */
operands = BitConverter.GetBytes((UInt16)operand);
foreach( byte op in operands )
{
Result.Add(op);
}
break;
case OperandType.ShortInlineR: /* float32 */
operands = BitConverter.GetBytes((Single)operand);
foreach( byte op in operands )
{
Result.Add(op);
}
break;
case OperandType.InlineR: /* float64 */
operands = BitConverter.GetBytes((double)operand);
foreach( byte op in operands )
{
Result.Add(op);
}
break;
case OperandType.InlineSwitch: /* switch */
int[] targets = (int[])ins.Operand;
//Write length of switching table
operands = BitConverter.GetBytes(targets.Length);
int nextOpOffset = dataOffset;
foreach( byte op in operands )
{
Result.Add(op);
nextOpOffset++;
}
nextOpOffset += targets.Length*4;
Исходный код программы CilCodec
297
Result.Add((byte)codeValue);
object operand = ins.Operand;
int dataOffset = ins.Offset + ins.Code.Size;
switch (ins.Code.OperandType)
{
case OperandType.InlineNone: /* None */
break;
case OperandType.ShortInlineBrTarget: /* int8 */
Result.Add((byte)((int)ins.Operand – dataOffset – 1));
break;
case OperandType.InlineI: /* int32 */
byte[] operands = BitConverter.GetBytes((Int32)operand);
foreach( byte op in operands )
{
Result.Add(op);
}
break;
case OperandType.InlineBrTarget: /* int32 */
operands = BitConverter.GetBytes((Int32)operand);
foreach( byte op in operands )
{
Result.Add(op);
}
break;
case OperandType.InlineI8: /* int64 */
operands = BitConverter.GetBytes((Int64)operand);
foreach( byte op in operands )
{
Result.Add(op);
}
break;
case OperandType.ShortInlineI: /* int8 */
operands = BitConverter.GetBytes((sbyte)operand);
foreach( byte op in operands )
{
Result.Add(op);
296
CIL и системное программирование в Microsoft .NET
296 CIL и системное программирование в Microsoft .NET Исходный код программы CilCodec 297 Result.Add((byte)codeValue); } break; object operand = ins.Operand; int dataOffset = ins.Offset + ins.Code.Size; case OperandType.ShortInlineVar: /* unsigned int8 */ switch (ins.Code.OperandType) Result.Add((byte)operand); { break; case OperandType.InlineNone: /* None */ break; case OperandType.InlineVar: /* unsigned int16 */ operands = BitConverter.GetBytes((UInt16)operand); case OperandType.ShortInlineBrTarget: /* int8 */ foreach( byte op in operands ) Result.Add((byte)((int)ins.Operand – dataOffset – 1)); { break; Result.Add(op); } case OperandType.InlineI: /* int32 */ break; byte[] operands = BitConverter.GetBytes((Int32)operand); foreach( byte op in operands ) case OperandType.ShortInlineR: /* float32 */ { operands = BitConverter.GetBytes((Single)operand); Result.Add(op); foreach( byte op in operands ) } { break; Result.Add(op); } case OperandType.InlineBrTarget: /* int32 */ break; operands = BitConverter.GetBytes((Int32)operand); case OperandType.InlineR: /* float64 */ foreach( byte op in operands ) operands = BitConverter.GetBytes((double)operand); { foreach( byte op in operands ) Result.Add(op); { } Result.Add(op); break; } break; case OperandType.InlineI8: /* int64 */ operands = BitConverter.GetBytes((Int64)operand); case OperandType.InlineSwitch: /* switch */ foreach( byte op in operands ) int[] targets = (int[])ins.Operand; { //Write length of switching table Result.Add(op); operands = BitConverter.GetBytes(targets.Length); } int nextOpOffset = dataOffset; break; foreach( byte op in operands ) { case OperandType.ShortInlineI: /* int8 */ Result.Add(op); operands = BitConverter.GetBytes((sbyte)operand); nextOpOffset++; foreach( byte op in operands ) } { nextOpOffset += targets.Length*4; Result.Add(op);
Страницы
- « первая
- ‹ предыдущая
- …
- 153
- 154
- 155
- 156
- 157
- …
- следующая ›
- последняя »