Ejemplo n.º 1
0
        static DecoderMemoryTestCase ReadTestCase(int bitness, string line, int lineNumber)
        {
            var parts = line.Split(colSep, StringSplitOptions.None);

            if (parts.Length != 11 && parts.Length != 12)
            {
                throw new InvalidOperationException();
            }
            var tc = new DecoderMemoryTestCase();

            tc.LineNumber       = lineNumber;
            tc.Bitness          = bitness;
            tc.HexBytes         = parts[0].Trim();
            tc.Code             = ToEnumConverter.GetCode(parts[1].Trim());
            tc.Register         = ToEnumConverter.GetRegister(parts[2].Trim());
            tc.SegmentPrefix    = ToEnumConverter.GetRegister(parts[3].Trim());
            tc.SegmentRegister  = ToEnumConverter.GetRegister(parts[4].Trim());
            tc.BaseRegister     = ToEnumConverter.GetRegister(parts[5].Trim());
            tc.IndexRegister    = ToEnumConverter.GetRegister(parts[6].Trim());
            tc.Scale            = (int)ParseUInt32(parts[7].Trim());
            tc.Displacement     = ParseUInt32(parts[8].Trim());
            tc.DisplacementSize = (int)ParseUInt32(parts[9].Trim());
            var coStr = parts[10].Trim();

            if (!DecoderTestParser.TryParseConstantOffsets(coStr, out tc.ConstantOffsets))
            {
                throw new InvalidOperationException($"Invalid ConstantOffsets: '{coStr}'");
            }
            tc.EncodedHexBytes = parts.Length > 11 ? parts[11].Trim() : tc.HexBytes;
            tc.DecoderOptions  = DecoderOptions.None;
            tc.CanEncode       = true;
            return(tc);
        }
Ejemplo n.º 2
0
        static DecoderMemoryTestCase ReadTestCase(int bitness, string line, int lineNumber)
        {
            var parts = line.Split(colSep, StringSplitOptions.None);

            if (parts.Length != 11 && parts.Length != 12)
            {
                throw new InvalidOperationException();
            }
            var tc = new DecoderMemoryTestCase();

            tc.LineNumber = lineNumber;
            tc.Bitness    = bitness;
            tc.IP         = bitness switch {
                16 => DecoderConstants.DEFAULT_IP16,
                32 => DecoderConstants.DEFAULT_IP32,
                64 => DecoderConstants.DEFAULT_IP64,
                _ => throw new InvalidOperationException(),
            };
            tc.HexBytes = parts[0].Trim();
            var code = parts[1].Trim();

            if (CodeUtils.IsIgnored(code))
            {
                return(null);
            }
            tc.Code             = ToEnumConverter.GetCode(code);
            tc.Register         = ToEnumConverter.GetRegister(parts[2].Trim());
            tc.SegmentPrefix    = ToEnumConverter.GetRegister(parts[3].Trim());
            tc.SegmentRegister  = ToEnumConverter.GetRegister(parts[4].Trim());
            tc.BaseRegister     = ToEnumConverter.GetRegister(parts[5].Trim());
            tc.IndexRegister    = ToEnumConverter.GetRegister(parts[6].Trim());
            tc.Scale            = (int)NumberConverter.ToUInt32(parts[7].Trim());
            tc.Displacement     = NumberConverter.ToUInt64(parts[8].Trim());
            tc.DisplacementSize = (int)NumberConverter.ToUInt32(parts[9].Trim());
            var coStr = parts[10].Trim();

            if (!DecoderTestParser.TryParseConstantOffsets(coStr, out tc.ConstantOffsets))
            {
                throw new InvalidOperationException($"Invalid ConstantOffsets: '{coStr}'");
            }
            tc.EncodedHexBytes = parts.Length > 11 ? parts[11].Trim() : tc.HexBytes;
            tc.DecoderOptions  = DecoderOptions.None;
            tc.TestOptions     = DecoderTestOptions.None;
            return(tc);
        }
Ejemplo n.º 3
0
 void Test64_DecodeMemOps(string hexBytes, Code code, DecoderMemoryTestCase tc) =>
 DecodeMemOpsBase(64, hexBytes, code, tc);