private static void FormatInstructionPointer(Instruction instruction, Formatter formatter, uint pointerSize, StringBuilderFormatterOutput output)
        {
            string ipFormat = formatter.Options.LeadingZeroes
                ? pointerSize == 4 ? "X8" : "X16"
                : "X";

            output.Write(instruction.IP.ToString(ipFormat), FormatterOutputTextKind.Text);
            output.Write(" ", FormatterOutputTextKind.Text);
        }
Example #2
0
        public static void FormatTest(int codeSize, string hexBytes, Code code, string formattedString, Formatter formatter)
        {
            var decoder = CreateDecoder(codeSize, hexBytes, out ulong nextRip);
            var instr   = decoder.Decode();

            Assert.Equal(code, instr.Code);
            Assert.Equal((ushort)nextRip, instr.IP16);
            Assert.Equal((uint)nextRip, instr.IP32);
            Assert.Equal(nextRip, instr.IP64);
            nextRip += (uint)instr.ByteLength;
            Assert.Equal(nextRip, decoder.InstructionPointer);
            Assert.Equal((ushort)nextRip, instr.NextIP16);
            Assert.Equal((uint)nextRip, instr.NextIP32);
            Assert.Equal(nextRip, instr.NextIP64);

            var output = new StringBuilderFormatterOutput();

            formatter.Format(ref instr, output);
            var actualFormattedString = output.ToStringAndReset();

#pragma warning disable xUnit2006 // Do not use invalid string equality check
            // Show the full string without ellipses by using Equal<string>() instead of Equal()
            Assert.Equal <string>(formattedString, actualFormattedString);
#pragma warning restore xUnit2006 // Do not use invalid string equality check

            formatter.FormatMnemonic(ref instr, output);
            var mnemonic = output.ToStringAndReset();
            int opCount  = formatter.GetOperandCount(ref instr);
            var operands = opCount == 0 ? Array.Empty <string>() : new string[opCount];
            for (int i = 0; i < operands.Length; i++)
            {
                formatter.FormatOperand(ref instr, output, i);
                operands[i] = output.ToStringAndReset();
            }
            output.Write(mnemonic, FormatterOutputTextKind.Text);
            if (operands.Length > 0)
            {
                output.Write(" ", FormatterOutputTextKind.Text);
                for (int i = 0; i < operands.Length; i++)
                {
                    if (i > 0)
                    {
                        formatter.FormatOperandSeparator(ref instr, output);
                    }
                    output.Write(operands[i], FormatterOutputTextKind.Text);
                }
            }
            actualFormattedString = output.ToStringAndReset();
            Assert.Equal(formattedString, actualFormattedString);

            formatter.FormatAllOperands(ref instr, output);
            var allOperands = output.ToStringAndReset();
            actualFormattedString = allOperands.Length == 0 ? mnemonic : mnemonic + " " + allOperands;
            Assert.Equal(formattedString, actualFormattedString);
        }
Example #3
0
        public static void FormatTest(ref Instruction instr, string formattedString, Formatter formatter)
        {
            var output = new StringBuilderFormatterOutput();

            formatter.Format(ref instr, output);
            var actualFormattedString = output.ToStringAndReset();

#pragma warning disable xUnit2006 // Do not use invalid string equality check
            // Show the full string without ellipses by using Equal<string>() instead of Equal()
            Assert.Equal <string>(formattedString, actualFormattedString);
#pragma warning restore xUnit2006 // Do not use invalid string equality check

            formatter.FormatMnemonic(ref instr, output);
            var mnemonic = output.ToStringAndReset();
            int opCount  = formatter.GetOperandCount(ref instr);
            var operands = opCount == 0 ? Array.Empty <string>() : new string[opCount];
            for (int i = 0; i < operands.Length; i++)
            {
                formatter.FormatOperand(ref instr, output, i);
                operands[i] = output.ToStringAndReset();
            }
            output.Write(mnemonic, FormatterOutputTextKind.Text);
            if (operands.Length > 0)
            {
                output.Write(" ", FormatterOutputTextKind.Text);
                for (int i = 0; i < operands.Length; i++)
                {
                    if (i > 0)
                    {
                        formatter.FormatOperandSeparator(ref instr, output);
                    }
                    output.Write(operands[i], FormatterOutputTextKind.Text);
                }
            }
            actualFormattedString = output.ToStringAndReset();
            Assert.Equal(formattedString, actualFormattedString);

            formatter.FormatAllOperands(ref instr, output);
            var allOperands = output.ToStringAndReset();
            actualFormattedString = allOperands.Length == 0 ? mnemonic : mnemonic + " " + allOperands;
            Assert.Equal(formattedString, actualFormattedString);
        }