pub mod chain;
pub mod eat;
pub mod hotpatch;
pub mod iat;
pub mod inline;
pub mod mid;
pub mod veh;
pub mod vmt;
pub use chain::HookChain;
pub use eat::{EatHook, EatHookBuilder, EatHookGuard, EatEntry, enumerate_eat_entries, find_eat_entry, find_eat_entry_by_ordinal};
pub use hotpatch::HotPatchHook;
pub use iat::{IatHook, IatHookGuard, IatEntry, enumerate_iat_entries, find_iat_entry, hook_import, hook_import_all};
pub use inline::InlineHook;
pub use mid::MidFunctionHook;
pub use veh::{VehHook, VehHookType, DebugRegister, BreakCondition, BreakLength, get_available_debug_register};
pub use vmt::{VmtHook, VmtHookGuard, VmtHookBuilder, ShadowVmt, VmtObject, get_vtable, get_vtable_entry, estimate_vtable_size};
use crate::error::Result;
pub trait Hook: Sized {
type Guard;
fn install(self) -> Result<Self::Guard>;
fn target(&self) -> usize;
fn detour(&self) -> usize;
}