ropr 0.2.26

A blazing fast multithreaded ROP Gadget finder. ropper / ropgadget alternative
Documentation
use colored::{ColoredString, Colorize};
use iced_x86::{FormatterOutput, FormatterTextKind};
use std::fmt::{Display, Formatter, Result};

#[derive(Default)]
pub struct ColourFormatter {
	output: Vec<ColoredString>,
}

impl Display for ColourFormatter {
	fn fmt(&self, f: &mut Formatter<'_>) -> Result {
		for s in &self.output {
			write!(f, "{}", s)?;
		}
		Ok(())
	}
}

impl ColourFormatter {
	pub fn new() -> Self { Self::default() }

	pub fn clear(&mut self) { self.output.clear() }
}

impl FormatterOutput for ColourFormatter {
	fn write(&mut self, text: &str, kind: FormatterTextKind) {
		self.output.push(match kind {
			FormatterTextKind::Function => text.red(),
			FormatterTextKind::Mnemonic | FormatterTextKind::Prefix => text.yellow(),
			FormatterTextKind::Keyword => text.normal(),
			FormatterTextKind::Register => match text {
				"sp" | "esp" | "rsp" | "ip" | "eip" | "rip" => text.red(),
				_ => text.normal(),
			},
			_ => text.normal(),
		})
	}
}