Exemple #1
0
        public OperatorEffect GetOperatorEffectFor(Byte[] code)
        {
            switch (code[0])
            {
            case 0x05:
                return(OperatorEffect.Add);

            case 0x29:
                return(OperatorEffect.Sub);

            case 0x31:
                return(OperatorEffect.Xor);

            case 0x75:
                return(OperatorEffect.Jnz);

            case 0x83:
            {
                var rm = ModRM.GetOpcodeGroupIndexFor(code);

                switch (rm)
                {
                case 0:
                    return(OperatorEffect.Add);

                case 4:
                    return(OperatorEffect.And);

                case 5:
                    return(OperatorEffect.Sub);

                case 7:
                    return(OperatorEffect.Cmp);

                default:
                    return(OperatorEffect.Unknown);
                }
            }

            case 0xc9:
                return(OperatorEffect.Leave);

            case 0xc3:
                return(OperatorEffect.Return);

            case 0x90:
                return(OperatorEffect.None);

            case 0xc1:
            {
                var rm = ModRM.GetOpcodeGroupIndexFor(code);

                switch (rm)
                {
                case 4:
                    return(OperatorEffect.Shl);

                case 5:
                    return(OperatorEffect.Shr);

                default:
                    return(OperatorEffect.Unknown);
                }
            }

            case 0xe8:
                return(OperatorEffect.Call);

            default:
                return(OperatorEffect.Assignment);
            }
        }