├── 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 |
--------------------------------------------------------------------------------