├── Kmem ├── en.lproj │ └── InfoPlist.strings ├── Kmem-Prefix.pch ├── Kmem-Info.plist └── Kmem.c ├── Kmem.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── comex.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcuserdata │ └── comex.xcuserdatad │ │ ├── xcschemes │ │ ├── xcschememanagement.plist │ │ └── Kmem.xcscheme │ │ └── xcdebugger │ │ └── Breakpoints.xcbkptlist └── project.pbxproj └── kmem.c /Kmem/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Kmem/Kmem-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Kmem' target in the 'Kmem' project 3 | // 4 | 5 | -------------------------------------------------------------------------------- /Kmem.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Kmem.xcodeproj/project.xcworkspace/xcuserdata/comex.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/comex/Kmem/HEAD/Kmem.xcodeproj/project.xcworkspace/xcuserdata/comex.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Kmem.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 804A4FDE15571A030001547E 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Kmem/Kmem-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | com.ex.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | KEXT 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | NSHumanReadableCopyright 26 | Copyright © 2012 __MyCompanyName__. All rights reserved. 27 | OSBundleLibraries 28 | 29 | com.apple.kpi.bsd 30 | 8.0.0 31 | com.apple.kpi.libkern 32 | 8.0.0 33 | com.apple.kpi.mach 34 | 8.0.0 35 | com.apple.kpi.unsupported 36 | 8.0.0 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /kmem.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | static uint64_t parse(const char *in) { 12 | bool hex = false; 13 | uint64_t result = 0; 14 | const char *s = in; 15 | if(s[0] == '0' && s[1] == 'x') { 16 | s += 2; 17 | hex = true; 18 | } 19 | if(!s[0]) goto bad; 20 | char c; 21 | while((c = *s++)) { 22 | result = result * (hex ? 16 : 10); 23 | if(c >= '0' && c <= '9') { 24 | result += (c - '0'); 25 | } else if(c >= 'a' && c <= 'f') { 26 | result += 10 + (c - 'a'); 27 | } else if(c >= 'A' && c <= 'F') { 28 | result += 10 + (c - 'A'); 29 | } else { 30 | goto bad; 31 | } 32 | } 33 | return result; 34 | bad: 35 | fprintf(stderr, "invalid number %s\n", in); 36 | exit(1); 37 | } 38 | 39 | int main(int argc, char **argv) { 40 | if(argc != 3) { 41 | fprintf(stderr, "usage: kmem addr size\n"); 42 | return 1; 43 | } 44 | off_t addr = parse(argv[1]); 45 | size_t size = parse(argv[2]); 46 | int fd = open("/dev/kmem", O_RDONLY); 47 | if(fd == -1) { 48 | perror("open /dev/kmem"); 49 | return 1; 50 | } 51 | void *buf = malloc(size); 52 | assert(buf); 53 | ssize_t ret = pread(fd, buf, size, addr); 54 | if(ret != size) { 55 | perror("pread"); 56 | return 1; 57 | } 58 | write(1, buf, size); 59 | return 0; 60 | } 61 | -------------------------------------------------------------------------------- /Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/Kmem.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 41 | 42 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /Kmem/Kmem.c: -------------------------------------------------------------------------------- 1 | // 2 | // Kmem.c 3 | // Kmem 4 | // 5 | // Created by comex on 5/6/12. 6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t) 0xFFFFFF8000000000UL) 21 | #define VM_MIN_KERNEL_AND_KEXT_ADDRESS (VM_MIN_KERNEL_ADDRESS - 0x80000000ULL) 22 | #define VM_MAX_KERNEL_ADDRESS ((vm_offset_t) 0xFFFFFFFFFFFFEFFFUL) 23 | 24 | typedef struct pmap *pmap_t; 25 | 26 | extern vm_map_t kernel_map; 27 | extern pmap_t kernel_pmap; 28 | 29 | extern kern_return_t kmem_alloc( 30 | vm_map_t map, 31 | vm_offset_t *addrp, 32 | vm_size_t size); 33 | 34 | extern void kmem_free( 35 | vm_map_t map, 36 | vm_offset_t addr, 37 | vm_size_t size); 38 | 39 | 40 | extern ppnum_t pmap_find_phys(pmap_t map, addr64_t va); 41 | 42 | 43 | kern_return_t Kmem_start(kmod_info_t * ki, void *d); 44 | kern_return_t Kmem_stop(kmod_info_t *ki, void *d); 45 | 46 | static int mmread(dev_t dev, struct uio *uio, int ioflag); 47 | static int mmwrite(dev_t dev, struct uio *uio, int ioflag); 48 | static int mmioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p); 49 | static int mmrw(dev_t dev, struct uio *uio, enum uio_rw rw); 50 | static boolean_t kernacc(off_t start, size_t len); 51 | 52 | int 53 | mmread(dev_t dev, struct uio *uio, int ioflag) 54 | { 55 | 56 | return (mmrw(dev, uio, UIO_READ)); 57 | } 58 | 59 | int 60 | mmwrite(dev_t dev, struct uio *uio, int ioflag) 61 | { 62 | 63 | return (mmrw(dev, uio, UIO_WRITE)); 64 | } 65 | 66 | int 67 | mmioctl(dev_t dev, u_long cmd, __unused caddr_t data, 68 | __unused int flag, __unused struct proc *p) 69 | { 70 | switch (cmd) { 71 | case FIONBIO: 72 | case FIOASYNC: 73 | /* OK to do nothing: we always return immediately */ 74 | break; 75 | default: 76 | return ENODEV; 77 | } 78 | 79 | return (0); 80 | } 81 | 82 | int 83 | mmrw(dev_t dev, struct uio *uio, enum uio_rw rw) 84 | { 85 | register int o, c; 86 | register addr64_t v; 87 | int error = 0; 88 | vm_offset_t where; 89 | vm_size_t size; 90 | 91 | 92 | while (uio_resid(uio) > 0 && error == 0) { 93 | uio_update(uio, 0); 94 | addr64_t offset = (addr64_t) uio_offset(uio) | (VM_MAX_KERNEL_ADDRESS & (1ull << 63)); 95 | 96 | switch (minor(dev)) { 97 | 98 | /* minor device 0 is physical memory */ 99 | case 0: 100 | 101 | v = trunc_page(offset); 102 | if (offset >= mem_size) 103 | goto fault; 104 | 105 | size = PAGE_SIZE; 106 | if (kmem_alloc(kernel_map, &where, size) 107 | != KERN_SUCCESS) { 108 | goto fault; 109 | } 110 | o = (int) (offset - v); 111 | c = min(PAGE_SIZE - o, (int) uio_curriovlen(uio)); 112 | error = uiomove((caddr_t) (where + o), c, uio); 113 | kmem_free(kernel_map, where, PAGE_SIZE); 114 | continue; 115 | 116 | /* minor device 1 is kernel memory */ 117 | case 1: 118 | /* Do some sanity checking */ 119 | if ((offset >= VM_MAX_KERNEL_ADDRESS) || 120 | (offset <= VM_MIN_KERNEL_AND_KEXT_ADDRESS)) 121 | goto fault; 122 | c = (int) uio_curriovlen(uio); 123 | if (!kernacc(offset, c)) 124 | goto fault; 125 | error = uiomove((caddr_t)(uintptr_t)offset, 126 | (int)c, uio); 127 | continue; 128 | 129 | default: 130 | goto fault; 131 | break; 132 | } 133 | 134 | if (error) 135 | break; 136 | uio_update(uio, c); 137 | } 138 | return (error); 139 | fault: 140 | return (EFAULT); 141 | } 142 | 143 | 144 | boolean_t 145 | kernacc( 146 | off_t start, 147 | size_t len 148 | ) 149 | { 150 | off_t base; 151 | off_t end; 152 | 153 | base = trunc_page(start); 154 | end = start + len; 155 | 156 | while (base < end) { 157 | if(!pmap_find_phys(kernel_pmap, base)) 158 | return(FALSE); 159 | base += page_size; 160 | } 161 | 162 | return (TRUE); 163 | } 164 | 165 | #define nullopen (d_open_t *)&nulldev 166 | #define nullclose (d_close_t *)&nulldev 167 | #define nullstop (d_stop_t *)&nulldev 168 | #define nullreset (d_reset_t *)&nulldev 169 | #define mmselect (select_fcn_t *)seltrue 170 | 171 | static int 172 | seltrue(__unused dev_t dev, __unused int flag, __unused struct proc *p) 173 | { 174 | return (1); 175 | } 176 | 177 | static struct cdevsw csw[] = { 178 | nullopen, nullclose, mmread, mmwrite, /* 3*/ 179 | mmioctl, nullstop, nullreset, 0, mmselect, 180 | eno_mmap, eno_strat, eno_getc, eno_putc, D_DISK 181 | }; 182 | 183 | static void *mem, *kmem; 184 | static int major; 185 | 186 | 187 | kern_return_t Kmem_start(kmod_info_t * ki, void *d) 188 | { 189 | major = cdevsw_add(-24, csw); 190 | if(!(mem = devfs_make_node(makedev(major, 0), DEVFS_CHAR, UID_ROOT, GID_KMEM, 0640, "mem")) || 191 | !(kmem = devfs_make_node(makedev(major, 1), DEVFS_CHAR, UID_ROOT, GID_KMEM, 0640, "kmem"))) 192 | return KERN_FAILURE; 193 | 194 | return KERN_SUCCESS; 195 | 196 | } 197 | 198 | kern_return_t Kmem_stop(kmod_info_t *ki, void *d) 199 | { 200 | devfs_remove(mem); 201 | devfs_remove(kmem); 202 | cdevsw_remove(major, csw); 203 | return KERN_SUCCESS; 204 | } 205 | -------------------------------------------------------------------------------- /Kmem.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 804A4FE915571A030001547E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 804A4FE715571A030001547E /* InfoPlist.strings */; }; 11 | 804A4FEB15571A030001547E /* Kmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 804A4FEA15571A030001547E /* Kmem.c */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 804A4FDF15571A030001547E /* Kmem.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kmem.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 16 | 804A4FE315571A030001547E /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = System/Library/Frameworks/Kernel.framework; sourceTree = SDKROOT; }; 17 | 804A4FE615571A030001547E /* Kmem-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Kmem-Info.plist"; sourceTree = ""; }; 18 | 804A4FE815571A030001547E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 19 | 804A4FEA15571A030001547E /* Kmem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Kmem.c; sourceTree = ""; }; 20 | 804A4FEC15571A030001547E /* Kmem-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Kmem-Prefix.pch"; sourceTree = ""; }; 21 | /* End PBXFileReference section */ 22 | 23 | /* Begin PBXFrameworksBuildPhase section */ 24 | 804A4FDA15571A030001547E /* Frameworks */ = { 25 | isa = PBXFrameworksBuildPhase; 26 | buildActionMask = 2147483647; 27 | files = ( 28 | ); 29 | runOnlyForDeploymentPostprocessing = 0; 30 | }; 31 | /* End PBXFrameworksBuildPhase section */ 32 | 33 | /* Begin PBXGroup section */ 34 | 804A4FD215571A030001547E = { 35 | isa = PBXGroup; 36 | children = ( 37 | 804A4FE415571A030001547E /* Kmem */, 38 | 804A4FE115571A030001547E /* Frameworks */, 39 | 804A4FE015571A030001547E /* Products */, 40 | ); 41 | sourceTree = ""; 42 | }; 43 | 804A4FE015571A030001547E /* Products */ = { 44 | isa = PBXGroup; 45 | children = ( 46 | 804A4FDF15571A030001547E /* Kmem.kext */, 47 | ); 48 | name = Products; 49 | sourceTree = ""; 50 | }; 51 | 804A4FE115571A030001547E /* Frameworks */ = { 52 | isa = PBXGroup; 53 | children = ( 54 | 804A4FE215571A030001547E /* Other Frameworks */, 55 | ); 56 | name = Frameworks; 57 | sourceTree = ""; 58 | }; 59 | 804A4FE215571A030001547E /* Other Frameworks */ = { 60 | isa = PBXGroup; 61 | children = ( 62 | 804A4FE315571A030001547E /* Kernel.framework */, 63 | ); 64 | name = "Other Frameworks"; 65 | sourceTree = ""; 66 | }; 67 | 804A4FE415571A030001547E /* Kmem */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 804A4FEA15571A030001547E /* Kmem.c */, 71 | 804A4FE515571A030001547E /* Supporting Files */, 72 | ); 73 | path = Kmem; 74 | sourceTree = ""; 75 | }; 76 | 804A4FE515571A030001547E /* Supporting Files */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 804A4FE615571A030001547E /* Kmem-Info.plist */, 80 | 804A4FE715571A030001547E /* InfoPlist.strings */, 81 | 804A4FEC15571A030001547E /* Kmem-Prefix.pch */, 82 | ); 83 | name = "Supporting Files"; 84 | sourceTree = ""; 85 | }; 86 | /* End PBXGroup section */ 87 | 88 | /* Begin PBXHeadersBuildPhase section */ 89 | 804A4FDB15571A030001547E /* Headers */ = { 90 | isa = PBXHeadersBuildPhase; 91 | buildActionMask = 2147483647; 92 | files = ( 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | /* End PBXHeadersBuildPhase section */ 97 | 98 | /* Begin PBXNativeTarget section */ 99 | 804A4FDE15571A030001547E /* Kmem */ = { 100 | isa = PBXNativeTarget; 101 | buildConfigurationList = 804A4FEF15571A030001547E /* Build configuration list for PBXNativeTarget "Kmem" */; 102 | buildPhases = ( 103 | 804A4FD915571A030001547E /* Sources */, 104 | 804A4FDA15571A030001547E /* Frameworks */, 105 | 804A4FDB15571A030001547E /* Headers */, 106 | 804A4FDC15571A030001547E /* Resources */, 107 | 804A4FDD15571A030001547E /* Rez */, 108 | ); 109 | buildRules = ( 110 | ); 111 | dependencies = ( 112 | ); 113 | name = Kmem; 114 | productName = Kmem; 115 | productReference = 804A4FDF15571A030001547E /* Kmem.kext */; 116 | productType = "com.apple.product-type.kernel-extension"; 117 | }; 118 | /* End PBXNativeTarget section */ 119 | 120 | /* Begin PBXProject section */ 121 | 804A4FD415571A030001547E /* Project object */ = { 122 | isa = PBXProject; 123 | attributes = { 124 | LastUpgradeCheck = 0430; 125 | }; 126 | buildConfigurationList = 804A4FD715571A030001547E /* Build configuration list for PBXProject "Kmem" */; 127 | compatibilityVersion = "Xcode 3.2"; 128 | developmentRegion = English; 129 | hasScannedForEncodings = 0; 130 | knownRegions = ( 131 | en, 132 | ); 133 | mainGroup = 804A4FD215571A030001547E; 134 | productRefGroup = 804A4FE015571A030001547E /* Products */; 135 | projectDirPath = ""; 136 | projectRoot = ""; 137 | targets = ( 138 | 804A4FDE15571A030001547E /* Kmem */, 139 | ); 140 | }; 141 | /* End PBXProject section */ 142 | 143 | /* Begin PBXResourcesBuildPhase section */ 144 | 804A4FDC15571A030001547E /* Resources */ = { 145 | isa = PBXResourcesBuildPhase; 146 | buildActionMask = 2147483647; 147 | files = ( 148 | 804A4FE915571A030001547E /* InfoPlist.strings in Resources */, 149 | ); 150 | runOnlyForDeploymentPostprocessing = 0; 151 | }; 152 | /* End PBXResourcesBuildPhase section */ 153 | 154 | /* Begin PBXRezBuildPhase section */ 155 | 804A4FDD15571A030001547E /* Rez */ = { 156 | isa = PBXRezBuildPhase; 157 | buildActionMask = 2147483647; 158 | files = ( 159 | ); 160 | runOnlyForDeploymentPostprocessing = 0; 161 | }; 162 | /* End PBXRezBuildPhase section */ 163 | 164 | /* Begin PBXSourcesBuildPhase section */ 165 | 804A4FD915571A030001547E /* Sources */ = { 166 | isa = PBXSourcesBuildPhase; 167 | buildActionMask = 2147483647; 168 | files = ( 169 | 804A4FEB15571A030001547E /* Kmem.c in Sources */, 170 | ); 171 | runOnlyForDeploymentPostprocessing = 0; 172 | }; 173 | /* End PBXSourcesBuildPhase section */ 174 | 175 | /* Begin PBXVariantGroup section */ 176 | 804A4FE715571A030001547E /* InfoPlist.strings */ = { 177 | isa = PBXVariantGroup; 178 | children = ( 179 | 804A4FE815571A030001547E /* en */, 180 | ); 181 | name = InfoPlist.strings; 182 | sourceTree = ""; 183 | }; 184 | /* End PBXVariantGroup section */ 185 | 186 | /* Begin XCBuildConfiguration section */ 187 | 804A4FED15571A030001547E /* Debug */ = { 188 | isa = XCBuildConfiguration; 189 | buildSettings = { 190 | ALWAYS_SEARCH_USER_PATHS = NO; 191 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 192 | COPY_PHASE_STRIP = NO; 193 | GCC_C_LANGUAGE_STANDARD = gnu99; 194 | GCC_DYNAMIC_NO_PIC = NO; 195 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 196 | GCC_OPTIMIZATION_LEVEL = 0; 197 | GCC_PREPROCESSOR_DEFINITIONS = ( 198 | "DEBUG=1", 199 | "$(inherited)", 200 | ); 201 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 202 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 203 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 204 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 205 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 206 | GCC_WARN_UNUSED_VARIABLE = YES; 207 | MACOSX_DEPLOYMENT_TARGET = 10.8; 208 | ONLY_ACTIVE_ARCH = YES; 209 | SDKROOT = macosx; 210 | }; 211 | name = Debug; 212 | }; 213 | 804A4FEE15571A030001547E /* Release */ = { 214 | isa = XCBuildConfiguration; 215 | buildSettings = { 216 | ALWAYS_SEARCH_USER_PATHS = NO; 217 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 218 | COPY_PHASE_STRIP = YES; 219 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 220 | GCC_C_LANGUAGE_STANDARD = gnu99; 221 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 222 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 223 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 224 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 225 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 226 | GCC_WARN_UNUSED_VARIABLE = YES; 227 | MACOSX_DEPLOYMENT_TARGET = 10.8; 228 | SDKROOT = macosx; 229 | }; 230 | name = Release; 231 | }; 232 | 804A4FF015571A030001547E /* Debug */ = { 233 | isa = XCBuildConfiguration; 234 | buildSettings = { 235 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 236 | GCC_PREFIX_HEADER = "Kmem/Kmem-Prefix.pch"; 237 | GCC_VERSION = com.apple.compilers.llvmgcc42; 238 | INFOPLIST_FILE = "Kmem/Kmem-Info.plist"; 239 | INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; 240 | MODULE_NAME = com.ex.Kmem; 241 | MODULE_START = Kmem_start; 242 | MODULE_STOP = Kmem_stop; 243 | MODULE_VERSION = 1.0.0d1; 244 | PRODUCT_NAME = "$(TARGET_NAME)"; 245 | WRAPPER_EXTENSION = kext; 246 | }; 247 | name = Debug; 248 | }; 249 | 804A4FF115571A030001547E /* Release */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 253 | GCC_PREFIX_HEADER = "Kmem/Kmem-Prefix.pch"; 254 | GCC_VERSION = com.apple.compilers.llvmgcc42; 255 | INFOPLIST_FILE = "Kmem/Kmem-Info.plist"; 256 | INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; 257 | MODULE_NAME = com.ex.Kmem; 258 | MODULE_START = Kmem_start; 259 | MODULE_STOP = Kmem_stop; 260 | MODULE_VERSION = 1.0.0d1; 261 | PRODUCT_NAME = "$(TARGET_NAME)"; 262 | WRAPPER_EXTENSION = kext; 263 | }; 264 | name = Release; 265 | }; 266 | /* End XCBuildConfiguration section */ 267 | 268 | /* Begin XCConfigurationList section */ 269 | 804A4FD715571A030001547E /* Build configuration list for PBXProject "Kmem" */ = { 270 | isa = XCConfigurationList; 271 | buildConfigurations = ( 272 | 804A4FED15571A030001547E /* Debug */, 273 | 804A4FEE15571A030001547E /* Release */, 274 | ); 275 | defaultConfigurationIsVisible = 0; 276 | defaultConfigurationName = Release; 277 | }; 278 | 804A4FEF15571A030001547E /* Build configuration list for PBXNativeTarget "Kmem" */ = { 279 | isa = XCConfigurationList; 280 | buildConfigurations = ( 281 | 804A4FF015571A030001547E /* Debug */, 282 | 804A4FF115571A030001547E /* Release */, 283 | ); 284 | defaultConfigurationIsVisible = 0; 285 | }; 286 | /* End XCConfigurationList section */ 287 | }; 288 | rootObject = 804A4FD415571A030001547E /* Project object */; 289 | } 290 | --------------------------------------------------------------------------------