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)); } }
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); }