Memory IO
Read/write via /proc/<pid>/mem or process_vm_readv with automatic fallback.
A fast, Go-powered framework for Android memory inspection, scanning, and patching. Built for reverse-engineering workflows, automation, and deep debugging.
$ go get github.com/pwh-pwh/memkit
$ memkit scan --pid 1234 --type i32 --eq 1337
> matches: 18
> patched: 6
Read/write via /proc/<pid>/mem or process_vm_readv with automatic fallback.
Parse /proc/<pid>/maps, classify ranges (heap/stack/java), and resolve module bases.
Typed scans, sliding search, AOB patterns, range filters, refinement, and set operations.
Resolve and search pointer chains to stabilize dynamic addresses.
Snapshot memory and filter by increase/decrease/unchanged values.
Virtual-to-physical lookup when system permissions allow.
Use process_vm_readv/writev for speed. Automatically falls back to /proc.
Direct /proc/<pid>/mem access for environments without syscall support.
Unsafe pointer reads for same-process debugging.
proc := memory.NewProcess(pid)
proc.SetMode(memory.ModeSyscall)
base, _ := proc.ModuleBase("libil2cpp.so")
s := memory.NewSearcher(proc)
s.Workers = 4
hits, _ := s.SearchPattern("12 34 ?? 56")
snap, _ := memory.CaptureFuzzySnapshot[int32](s)
changed, _ := memory.FilterFuzzySnapshot(s, snap, memory.FuzzyIncreased)
chains, _ := memory.FindPointerChains(proc, target, memory.PointerSearchOptions{
MaxDepth: 3,
MaxOffset: 0x1000,
})