diff --git a/bindings/rust/src/lib.rs b/bindings/rust/src/lib.rs index 0f1c7049..d72f82ad 100644 --- a/bindings/rust/src/lib.rs +++ b/bindings/rust/src/lib.rs @@ -1189,7 +1189,7 @@ impl<'a, D> Unicorn<'a, D> { } } - pub fn ctl_flush_tlb(&self) -> Result<(), uc_error> { + pub fn ctl_flush_tb(&self) -> Result<(), uc_error> { let err = unsafe { ffi::uc_ctl(self.get_handle(), UC_CTL_WRITE!(ControlType::UC_CTL_TB_FLUSH)) }; if err == uc_error::OK { Ok(()) @@ -1197,4 +1197,22 @@ impl<'a, D> Unicorn<'a, D> { Err(err) } } + + pub fn ctl_flush_tlb(&self) -> Result<(), uc_error> { + let err = unsafe { ffi::uc_ctl(self.get_handle(), UC_CTL_WRITE!(ControlType::UC_CTL_TLB_FLUSH)) }; + if err == uc_error::OK { + Ok(()) + } else { + Err(err) + } + } + + pub fn ctl_tlb_type(&self, t: TlbType) -> Result<(), uc_error> { + let err = unsafe { ffi::uc_ctl(self.get_handle(), UC_CTL_WRITE!(ControlType::UC_CTL_TLB_TYPE), t as i32) }; + if err == uc_error::OK { + Ok(()) + } else { + Err(err) + } + } } diff --git a/bindings/rust/src/unicorn_const.rs b/bindings/rust/src/unicorn_const.rs index b0b440c4..d5c60c1c 100644 --- a/bindings/rust/src/unicorn_const.rs +++ b/bindings/rust/src/unicorn_const.rs @@ -53,6 +53,13 @@ pub enum MemType { READ_AFTER = 25, } +#[repr(C)] +#[derive(PartialEq, Debug, Clone, Copy)] +pub enum TlbType { + CPU = 0, + VIRTUAL = 1, +} + bitflags! { #[repr(C)] pub struct HookType: i32 { @@ -227,6 +234,8 @@ pub enum ControlType { UC_CTL_TB_REQUEST_CACHE = 8, UC_CTL_TB_REMOVE_CACHE = 9, UC_CTL_TB_FLUSH = 10, + UC_CTL_TLB_FLUSH = 11, + UC_CTL_TLB_TYPE = 12, UC_CTL_IO_READ = 1<<31, UC_CTL_IO_WRITE = 1<<30, }