Exemplo n.º 1
0
 public void IsEvDwordTrue()
 {
     code = new Byte[] { 0x31, 0x05 };
     Assert.IsTrue(ModRM.IsEvDword(code));
 }
Exemplo n.º 2
0
        public RegisterName GetSourceRegisterFor(Byte[] code)
        {
            var opcodeEncoding = GetEncodingFor(code);

            if (GetStackEffectFor(code) ==
                StackEffect.Push)
            {
                switch (opcodeEncoding)
                {
                case OpcodeEncoding.rBP:
                {
                    return(RegisterName.EBP);
                }

                case OpcodeEncoding.rSI:
                {
                    return(RegisterName.ESI);
                }

                case OpcodeEncoding.rSP:
                {
                    return(RegisterName.ESP);
                }

                case OpcodeEncoding.rAX:
                {
                    return(RegisterName.EAX);
                }

                case OpcodeEncoding.rBX:
                {
                    return(RegisterName.EBX);
                }

                case OpcodeEncoding.rCX:
                {
                    return(RegisterName.ECX);
                }

                case OpcodeEncoding.rDX:
                {
                    return(RegisterName.EDX);
                }
                }
            }

            switch (opcodeEncoding)
            {
            case OpcodeEncoding.EbGb:
            case OpcodeEncoding.EvGv:
            {
                return(ModRM.GetGvFor(code));
            }

            case OpcodeEncoding.GvEb:
            case OpcodeEncoding.GvEv:
            case OpcodeEncoding.GvM:
            {
                if (ModRM.HasSIB(code))
                {
                    // MOV EAX,DWORD PTR DS:[EDX+EAX*4]
                    // Since SIB does not have a single source register
                    // it currently returns RegisterName.None
                    return(RegisterName.None);
                }

                if (ModRM.IsEvDword(code))
                {
                    return(RegisterName.None);
                }

                return(ModRM.GetEvFor(code));
            }

            default:
            {
                return(RegisterName.None);
            }
            }
        }
Exemplo n.º 3
0
 public void IsEvDwordFalse()
 {
     code = new Byte[] { 0x31, 0x07 };
     Assert.IsFalse(ModRM.IsEvDword(code));
 }