func writeMemory(thread *Thread, addr uintptr, data []byte) (int, error) { if len(data) == 0 { return 0, nil } var ( vm_data = unsafe.Pointer(&data[0]) vm_addr = C.mach_vm_address_t(addr) length = C.mach_msg_type_number_t(len(data)) ) if ret := C.write_memory(thread.dbp.os.task, vm_addr, vm_data, length); ret < 0 { return 0, fmt.Errorf("could not write memory") } return len(data), nil }
func (t *Thread) readMemory(addr uintptr, size int) ([]byte, error) { if size == 0 { return nil, nil } var ( buf = make([]byte, size) vmData = unsafe.Pointer(&buf[0]) vmAddr = C.mach_vm_address_t(addr) length = C.mach_msg_type_number_t(size) ) ret := C.read_memory(t.dbp.os.task, vmAddr, vmData, length) if ret < 0 { return nil, fmt.Errorf("could not read memory") } return buf, nil }