ctftools 0.1.6

Moved to pwnr crate
Documentation
use std::num::Wrapping;

pub struct MemoryBase<T> {
	base: Wrapping<T>,
}

impl<T> MemoryBase<T>
where
	T: Copy,
	Wrapping<T>: std::ops::Sub<Output = Wrapping<T>> + std::ops::Add<Output = Wrapping<T>>,
{
	pub fn new(documented: T, leaked: T) -> Self {
		Self {
			base: Wrapping(leaked) - Wrapping(documented),
		}
	}

	pub fn documented_to_leaked(&self, documented: T) -> T { (Wrapping(documented) + self.base).0 }

	pub fn leaked_to_documented(&self, leaked: T) -> T { (Wrapping(leaked) - self.base).0 }
}