sighook
Sighook is a macOS (aarch64) runtime patching crate focused on:
- instruction-level instrumentation via
BRK + signal handler - function-entry inline detours (near and far jump)
It is designed for low-level experimentation, reverse engineering, and custom runtime instrumentation workflows.
Features
patchcode(address, opcode)for raw 32-bit instruction patchinginstrument(address, callback)to trap and then execute original opcodeinstrument_no_original(address, callback)to trap and skip original opcodeinline_hook(addr, replace_fn)with automatic far-jump fallback- zero-copy context remap (
HookContext) in callbacks - register union access:
ctx.regs.x[i]andctx.regs.named.xN
Platform
- macOS on Apple Silicon (
aarch64) - single-thread model (
static mutinternal state)
Installation
[]
= "0.1"
Quick Start
1) BRK instrumentation (execute original opcode)
use ;
extern "C"
let target_instruction = 0x1000_0000_u64;
let _original = instrument?;
# Ok::
2) BRK instrumentation (do not execute original opcode)
use ;
extern "C"
let target_instruction = 0x1000_0010_u64;
let _original = instrument_no_original?;
# Ok::
3) Inline function hook
use inline_hook;
extern "C"
let function_entry = 0x1000_1000_u64;
let replacement_addr = replacement as usize as u64;
let _original = inline_hook?;
# Ok::
API Notes
instrument(...)executes original opcode through an internal trampoline.instrument_no_original(...)skips original opcode unless callback changesctx.pc.inline_hook(...)first tries directb; if out of range, it patches a far-jump stub.inline_hook(...)usesb(notbl), so replacement returns to original caller vialr.
Safety Notes
This crate performs runtime code patching and raw context mutation.
- Ensure target addresses are valid runtime addresses.
- Ensure callback logic preserves ABI expectations.
- Test on disposable binaries first.
License
GPL-2.0-only