public InstructionPrinter()
        {
            _formatter = new FasmX86Formatter();

            MnemonicColors = new Dictionary <X86Mnemonic, ConsoleColor>
            {
                [X86Mnemonic.Call]     = ConsoleColor.Cyan,
                [X86Mnemonic.Call_Far] = ConsoleColor.Cyan,
                [X86Mnemonic.Retf]     = ConsoleColor.Cyan,
                [X86Mnemonic.Retn]     = ConsoleColor.Cyan,

                [X86Mnemonic.Ja]      = ConsoleColor.Yellow,
                [X86Mnemonic.Jb]      = ConsoleColor.Yellow,
                [X86Mnemonic.Jbe]     = ConsoleColor.Yellow,
                [X86Mnemonic.Je]      = ConsoleColor.Yellow,
                [X86Mnemonic.Jecxz]   = ConsoleColor.Yellow,
                [X86Mnemonic.Jg]      = ConsoleColor.Yellow,
                [X86Mnemonic.Jge]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jl]      = ConsoleColor.Yellow,
                [X86Mnemonic.Jle]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jmp]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jmp_Far] = ConsoleColor.Yellow,
                [X86Mnemonic.Jnb]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jne]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jno]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jns]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jo]      = ConsoleColor.Yellow,
                [X86Mnemonic.Jpe]     = ConsoleColor.Yellow,
                [X86Mnemonic.Jpo]     = ConsoleColor.Yellow,
                [X86Mnemonic.Js]      = ConsoleColor.Yellow,
            };
        }
        private static void ValidateCode(IReadOnlyList <X86Instruction> originalBody, byte[] assemblerOutput)
        {
            var formatter    = new FasmX86Formatter();
            var reader       = new MemoryStreamReader(assemblerOutput);
            var disassembler = new X86Disassembler(reader);

            for (int i = 0; i < originalBody.Count; i++)
            {
                var newInstruction = disassembler.ReadNextInstruction();
                Assert.Equal(formatter.FormatInstruction(originalBody[i]),
                             formatter.FormatInstruction(newInstruction));
            }
        }
Exemple #3
0
        private string Format(List <X86Instruction> instrs, List <ulong> labels)
        {
            FasmX86Formatter formatter = new FasmX86Formatter();
            string           lines     = "";

            foreach (X86Instruction instr in instrs)
            {
                if (labels.Contains((ulong)instr.Offset))
                {
                    lines += string.Format("\r\n@L{0:X}:\r\n", instr.Offset);
                }

                if (MemOperand(instr) && labels.Contains((ulong)instr.Operand1.Value))
                {
                    lines += string.Format("{0} @L{1:X}\r\n", instr.Mnemonic, instr.Operand1.Value);
                }

                else
                {
                    lines += formatter.FormatInstruction(instr) + Environment.NewLine;
                }
            }
            return(lines);
        }