From dd6856043a7cb9814a4aeab48e8cf4222438647c Mon Sep 17 00:00:00 2001 From: Sam Bingner Date: Tue, 27 Nov 2018 09:16:27 -1000 Subject: Initial commit --- include/kmem.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 include/kmem.h (limited to 'include/kmem.h') diff --git a/include/kmem.h b/include/kmem.h new file mode 100644 index 0000000..698bccc --- /dev/null +++ b/include/kmem.h @@ -0,0 +1,72 @@ +#ifndef kmem_h +#define kmem_h + +#include + +/***** mach_vm.h *****/ +kern_return_t mach_vm_read( + vm_map_t target_task, + mach_vm_address_t address, + mach_vm_size_t size, + vm_offset_t *data, + mach_msg_type_number_t *dataCnt); + +kern_return_t mach_vm_write( + vm_map_t target_task, + mach_vm_address_t address, + vm_offset_t data, + mach_msg_type_number_t dataCnt); + +kern_return_t mach_vm_read_overwrite( + vm_map_t target_task, + mach_vm_address_t address, + mach_vm_size_t size, + mach_vm_address_t data, + mach_vm_size_t *outsize); + +kern_return_t mach_vm_allocate( + vm_map_t target, + mach_vm_address_t *address, + mach_vm_size_t size, + int flags); + +kern_return_t mach_vm_deallocate ( + vm_map_t target, + mach_vm_address_t address, + mach_vm_size_t size); + +kern_return_t mach_vm_protect ( + vm_map_t target_task, + mach_vm_address_t address, + mach_vm_size_t size, + boolean_t set_maximum, + vm_prot_t new_protection); + +extern mach_port_t tfp0; + +uint32_t rk32(uint64_t kaddr); +uint64_t rk64(uint64_t kaddr); + +void wk32(uint64_t kaddr, uint32_t val); +void wk64(uint64_t kaddr, uint64_t val); + +void wkbuffer(uint64_t kaddr, void* buffer, uint32_t length); +void rkbuffer(uint64_t kaddr, void* buffer, uint32_t length); + +void kmemcpy(uint64_t dest, uint64_t src, uint32_t length); + +void kmem_protect(uint64_t kaddr, uint32_t size, int prot); + +uint64_t kmem_alloc(uint64_t size); +uint64_t kmem_alloc_wired(uint64_t size); +void kmem_free(uint64_t kaddr, uint64_t size); + +void prepare_rk_via_kmem_read_port(mach_port_t port); +void prepare_rwk_via_tfp0(mach_port_t port); +void prepare_for_rw_with_fake_tfp0(mach_port_t fake_tfp0); + +// query whether kmem read or write is present +int have_kmem_read(void); +int have_kmem_write(void); + +#endif -- cgit v1.2.3