From 7bca6ad19e54e2edc4ec9cfa10da20a26e294334 Mon Sep 17 00:00:00 2001 From: Pwn20wnd Date: Sat, 9 Mar 2019 23:30:26 +0300 Subject: Merge pwn's changes to support arm64e via rebase --- kern_funcs.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'kern_funcs.c') diff --git a/kern_funcs.c b/kern_funcs.c index a1f03c8..553d25c 100644 --- a/kern_funcs.c +++ b/kern_funcs.c @@ -19,7 +19,14 @@ #include "patchfinder64.h" #include #include "CSCommon.h" +#include "kern_funcs.h" +#include "kernel_call.h" +#include "parameters.h" +#include "kc_parameters.h" +#include "kernel_memory.h" +offsets_t offs; +uint64_t kernel_base; static mach_port_t tfp0=MACH_PORT_NULL; size_t kread(uint64_t where, void *p, size_t size); size_t kwrite(uint64_t where, const void *p, size_t size); @@ -117,3 +124,29 @@ size_t kwrite(uint64_t where, const void *p, size_t size) } return offset; } + +uint64_t task_self_addr() { + uint64_t kernproc = rk64(rk64(GETOFFSET(kernel_task)) + OFFSET(task, bsd_info)); + uint64_t proc = kernproc; + pid_t our_pid = getpid(); + uint64_t our_proc = 0; + while (proc) { + if (rk32(proc + OFFSET(proc, p_pid)) == our_pid) { + our_proc = proc; + break; + } + proc = rk64(proc + OFFSET(proc, p_list)); + } + uint64_t task_addr = rk64(our_proc + OFFSET(proc, task)); + uint64_t itk_space = rk64(task_addr + OFFSET(task, itk_space)); + uint64_t is_table = rk64(itk_space + OFFSET(ipc_space, is_table)); + mach_port_t port = mach_task_self(); + uint32_t port_index = port >> 8; + const int sizeof_ipc_entry_t = SIZE(ipc_entry); + uint64_t port_addr = rk64(is_table + (port_index * sizeof_ipc_entry_t)); + return port_addr; +} + +int _pmap_load_trust_cache(uint64_t kernel_trust, size_t length) { + return (int)kernel_call_7(GETOFFSET(pmap_load_trust_cache), 3, kernel_trust, length, 0); +} -- cgit v1.2.3