private static int GetTotalOperandSize(X86OperandType operandType, X86OperandSize operandSize, X86Operand operand)
{
int size = (int)operand.OffsetType;
switch (operandType)
{
case X86OperandType.None:
case X86OperandType.ControlRegister:
case X86OperandType.DebugRegister:
case X86OperandType.StackRegister:
case X86OperandType.Register:
case X86OperandType.RegisterCl:
case X86OperandType.RegisterDx:
case X86OperandType.RegisterEax:
case X86OperandType.RegisterAl:
case X86OperandType.ImmediateOne:
case X86OperandType.SegmentRegister:
case X86OperandType.OpCodeRegister:
break;
case X86OperandType.DirectAddress:
case X86OperandType.MemoryAddress:
size += 4;
break;
case X86OperandType.RelativeOffset:
case X86OperandType.ImmediateData:
size += GetSize(operandSize);
break;
case X86OperandType.RegisterOrMemoryAddress:
case X86OperandType.StackRegisterOrMemoryAddress:
if ((operand.ScaledIndex != null) ||
(operand.OperandUsage != X86OperandUsage.Normal && operand.Value is X86Register &&
(X86Register)operand.Value == X86Register.Esp))
size += 1;
if (!(operand.Value is X86Register))
size += 4;
break;
}
return size;
}