Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | /* * Copyright (c) 2000-2007 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * Copyright (C) 1992, NeXT, Inc. * * File: kern/mach_loader.h * * Mach object file loader API. * * HISTORY * 24-Aug-92 Doug Mitchell at NeXT * Created. */ #ifndef _BSD_KERN_MACH_LOADER_H_ #define _BSD_KERN_MACH_LOADER_H_ #include <mach/mach_types.h> #include <mach-o/loader.h> typedef int load_return_t; /* libmalloc relies on these values not changing. If they change, * you need to update the values in that project as well */ __options_decl(hardened_browser_flags_t, uint32_t, { BrowserHostEntitlementMask = 0x01, BrowserGPUEntitlementMask = 0x02, BrowserNetworkEntitlementMask = 0x04, BrowserWebContentEntitlementMask = 0x08, }); #define HR_FLAGS_NUM_NIBBLES (sizeof(hardened_browser_flags_t) / 2) /* * Structure describing the result from calling load_machfile(), if that * function returns LOAD_SUCCESS. */ typedef struct _load_result { user_addr_t mach_header; user_addr_t entry_point; // The user stack pointer and addressable user stack size. user_addr_t user_stack; mach_vm_size_t user_stack_size; // The allocation containing the stack and guard area. user_addr_t user_stack_alloc; mach_vm_size_t user_stack_alloc_size; mach_vm_address_t all_image_info_addr; mach_vm_size_t all_image_info_size; int thread_count; unsigned int unixproc : 1, needs_dynlinker : 1, dynlinker : 1, validentry : 1, has_pagezero : 1, using_lcmain : 1, #if __arm64__ legacy_footprint : 1, #endif /* __arm64__ */ is_64bit_addr : 1, is_64bit_data : 1, custom_stack : 1, is_rosetta : 1, hardened_heap : 1, is_ipc_containment_vessel : 1; // 0 if not entitled, non-zero otherwise uint8_t hardened_process_version; unsigned int csflags; unsigned char uuid[16]; mach_vm_address_t min_vm_addr; mach_vm_address_t max_vm_addr; mach_vm_address_t ro_vm_start; mach_vm_address_t ro_vm_end; unsigned int platform_binary; /* Flags denoting which type of platform restrictions binary this is */ hardened_browser_flags_t hardened_browser; off_t cs_end_offset; void *threadstate; size_t threadstate_sz; uint32_t ip_platform; uint32_t lr_min_sdk; uint32_t lr_sdk; user_addr_t dynlinker_mach_header; user_addr_t dynlinker_max_vm_addr; mach_vm_address_t dynlinker_ro_vm_start; mach_vm_address_t dynlinker_ro_vm_end; int dynlinker_fd; struct fileproc* dynlinker_fp; } load_result_t; struct image_params; load_return_t load_machfile( struct image_params *imgp, struct mach_header *header, thread_t thread, vm_map_t *mapp, load_result_t *result); load_return_t validate_potential_simulator_binary( cpu_type_t exectype, struct image_params *imgp, off_t file_offset, off_t macho_size); #define LOAD_SUCCESS 0 #define LOAD_BADARCH 1 /* CPU type/subtype not found */ #define LOAD_BADMACHO 2 /* malformed mach-o file */ #define LOAD_SHLIB 3 /* shlib version mismatch */ #define LOAD_FAILURE 4 /* Miscellaneous error */ #define LOAD_NOSPACE 5 /* No VM available */ #define LOAD_PROTECT 6 /* protection violation */ #define LOAD_RESOURCE 7 /* resource allocation failure */ #define LOAD_ENOENT 8 /* resource not found */ #define LOAD_IOERROR 9 /* IO error */ #define LOAD_DECRYPTFAIL 10 /* FP decrypt failure */ #define LOAD_BADMACHO_UPX 11 /* malformed mach-o file */ #define LOAD_BADARCH_X86 12 /* -no32exec boot-arg + attempted load of 32bit x86 binary */ #endif /* _BSD_KERN_MACH_LOADER_H_ */ |