1234567891011121314151617181920212223242526 |
- //+build !windows
- package monkey
- import (
- "syscall"
- )
- // this function is super unsafe
- // aww yeah
- // It copies a slice to a raw memory location, disabling all memory protection before doing so.
- func copyToLocation(location uintptr, data []byte) {
- f := rawMemoryAccess(location, len(data))
- page := rawMemoryAccess(pageStart(location), syscall.Getpagesize())
- err := syscall.Mprotect(page, syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC)
- if err != nil {
- panic(err)
- }
- copy(f, data[:])
- err = syscall.Mprotect(page, syscall.PROT_READ|syscall.PROT_EXEC)
- if err != nil {
- panic(err)
- }
- }
|