reverted unfinished commit
This commit is contained in:
@ -80,12 +80,12 @@ extern "C" {
|
||||
|
||||
pub struct UcHook<'a, D: 'a, F: 'a> {
|
||||
pub callback: F,
|
||||
pub uc: Unicorn,
|
||||
pub uc: Unicorn<'a, D>,
|
||||
}
|
||||
|
||||
pub trait IsUcHook {}
|
||||
pub trait IsUcHook<'a> {}
|
||||
|
||||
impl<'a, D, F> IsUcHook for UcHook<'a, D, F> {}
|
||||
impl<'a, D, F> IsUcHook<'a> for UcHook<'a, D, F> {}
|
||||
|
||||
pub extern "C" fn code_hook_proxy<D, F>(
|
||||
uc: uc_handle,
|
||||
|
@ -77,15 +77,16 @@ impl Drop for Context {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct UnicornInner {
|
||||
pub struct UnicornInner<'a, D> {
|
||||
pub uc: uc_handle,
|
||||
pub arch: Arch,
|
||||
/// to keep ownership over the hook for this uc instance's lifetime
|
||||
pub hooks: Vec<(ffi::uc_hook, Box<dyn ffi::IsUcHook>)>,
|
||||
pub hooks: Vec<(ffi::uc_hook, Box<dyn ffi::IsUcHook<'a> + 'a>)>,
|
||||
pub data: D,
|
||||
}
|
||||
|
||||
/// Drop UC
|
||||
impl Drop for UnicornInner {
|
||||
impl<'a, D> Drop for UnicornInner<'a, D> {
|
||||
fn drop(&mut self) {
|
||||
if !self.uc.is_null() {
|
||||
unsafe { ffi::uc_close(self.uc) };
|
||||
@ -95,25 +96,25 @@ impl Drop for UnicornInner {
|
||||
}
|
||||
|
||||
/// A Unicorn emulator instance.
|
||||
pub struct Unicorn {
|
||||
inner: Rc<UnsafeCell<UnicornInner<'a>>>,
|
||||
pub struct Unicorn<'a, D: 'a> {
|
||||
inner: Rc<UnsafeCell<UnicornInner<'a, D>>>,
|
||||
}
|
||||
|
||||
impl<'a> Unicorn<'a> {
|
||||
impl<'a> Unicorn<'a, ()> {
|
||||
/// Create a new instance of the unicorn engine for the specified architecture
|
||||
/// and hardware mode.
|
||||
pub fn new(arch: Arch, mode: Mode) -> Result<Unicorn<'a>, uc_error> {
|
||||
pub fn new(arch: Arch, mode: Mode) -> Result<Unicorn<'a, ()>, uc_error> {
|
||||
Self::new_with_data(arch, mode, ())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, D> Unicorn<'a>
|
||||
impl<'a, D> Unicorn<'a, D>
|
||||
where
|
||||
D: 'a,
|
||||
{
|
||||
/// Create a new instance of the unicorn engine for the specified architecture
|
||||
/// and hardware mode.
|
||||
pub fn new_with_data(arch: Arch, mode: Mode, data: D) -> Result<Unicorn<'a>, uc_error> {
|
||||
pub fn new_with_data(arch: Arch, mode: Mode, data: D) -> Result<Unicorn<'a, D>, uc_error> {
|
||||
let mut handle = core::ptr::null_mut();
|
||||
let err = unsafe { ffi::uc_open(arch, mode, &mut handle) };
|
||||
if err == uc_error::OK {
|
||||
|
Reference in New Issue
Block a user