From a724f8b238411aa29b9d061b8b949c2d4ddde370 Mon Sep 17 00:00:00 2001 From: npyl Date: Sun, 30 Jul 2017 19:06:33 +0300 Subject: [PATCH] Added files the way the first developer did --- Kmem.xcodeproj/project.pbxproj | 289 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 26382 bytes .../xcdebugger/Breakpoints.xcbkptlist | 20 ++ .../comex.xcuserdatad/xcschemes/Kmem.xcscheme | 58 ++++ .../xcschemes/xcschememanagement.plist | 22 ++ Kmem/Kmem-Info.plist | 39 +++ Kmem/Kmem-Prefix.pch | 4 + Kmem/Kmem.c | 204 +++++++++++++ Kmem/en.lproj/InfoPlist.strings | 2 + kmem.c | 60 ++++ 11 files changed, 705 insertions(+) create mode 100755 Kmem.xcodeproj/project.pbxproj create mode 100755 Kmem.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100755 Kmem.xcodeproj/project.xcworkspace/xcuserdata/comex.xcuserdatad/UserInterfaceState.xcuserstate create mode 100755 Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100755 Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/Kmem.xcscheme create mode 100755 Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100755 Kmem/Kmem-Info.plist create mode 100755 Kmem/Kmem-Prefix.pch create mode 100755 Kmem/Kmem.c create mode 100755 Kmem/en.lproj/InfoPlist.strings create mode 100755 kmem.c diff --git a/Kmem.xcodeproj/project.pbxproj b/Kmem.xcodeproj/project.pbxproj new file mode 100755 index 0000000..2924746 --- /dev/null +++ b/Kmem.xcodeproj/project.pbxproj @@ -0,0 +1,289 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 804A4FE915571A030001547E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 804A4FE715571A030001547E /* InfoPlist.strings */; }; + 804A4FEB15571A030001547E /* Kmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 804A4FEA15571A030001547E /* Kmem.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 804A4FDF15571A030001547E /* Kmem.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kmem.kext; sourceTree = BUILT_PRODUCTS_DIR; }; + 804A4FE315571A030001547E /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = System/Library/Frameworks/Kernel.framework; sourceTree = SDKROOT; }; + 804A4FE615571A030001547E /* Kmem-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Kmem-Info.plist"; sourceTree = ""; }; + 804A4FE815571A030001547E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 804A4FEA15571A030001547E /* Kmem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Kmem.c; sourceTree = ""; }; + 804A4FEC15571A030001547E /* Kmem-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Kmem-Prefix.pch"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 804A4FDA15571A030001547E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 804A4FD215571A030001547E = { + isa = PBXGroup; + children = ( + 804A4FE415571A030001547E /* Kmem */, + 804A4FE115571A030001547E /* Frameworks */, + 804A4FE015571A030001547E /* Products */, + ); + sourceTree = ""; + }; + 804A4FE015571A030001547E /* Products */ = { + isa = PBXGroup; + children = ( + 804A4FDF15571A030001547E /* Kmem.kext */, + ); + name = Products; + sourceTree = ""; + }; + 804A4FE115571A030001547E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 804A4FE215571A030001547E /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 804A4FE215571A030001547E /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 804A4FE315571A030001547E /* Kernel.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 804A4FE415571A030001547E /* Kmem */ = { + isa = PBXGroup; + children = ( + 804A4FEA15571A030001547E /* Kmem.c */, + 804A4FE515571A030001547E /* Supporting Files */, + ); + path = Kmem; + sourceTree = ""; + }; + 804A4FE515571A030001547E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 804A4FE615571A030001547E /* Kmem-Info.plist */, + 804A4FE715571A030001547E /* InfoPlist.strings */, + 804A4FEC15571A030001547E /* Kmem-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 804A4FDB15571A030001547E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 804A4FDE15571A030001547E /* Kmem */ = { + isa = PBXNativeTarget; + buildConfigurationList = 804A4FEF15571A030001547E /* Build configuration list for PBXNativeTarget "Kmem" */; + buildPhases = ( + 804A4FD915571A030001547E /* Sources */, + 804A4FDA15571A030001547E /* Frameworks */, + 804A4FDB15571A030001547E /* Headers */, + 804A4FDC15571A030001547E /* Resources */, + 804A4FDD15571A030001547E /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Kmem; + productName = Kmem; + productReference = 804A4FDF15571A030001547E /* Kmem.kext */; + productType = "com.apple.product-type.kernel-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 804A4FD415571A030001547E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0430; + }; + buildConfigurationList = 804A4FD715571A030001547E /* Build configuration list for PBXProject "Kmem" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 804A4FD215571A030001547E; + productRefGroup = 804A4FE015571A030001547E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 804A4FDE15571A030001547E /* Kmem */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 804A4FDC15571A030001547E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 804A4FE915571A030001547E /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 804A4FDD15571A030001547E /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 804A4FD915571A030001547E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 804A4FEB15571A030001547E /* Kmem.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 804A4FE715571A030001547E /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 804A4FE815571A030001547E /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 804A4FED15571A030001547E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 804A4FEE15571A030001547E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; + }; + name = Release; + }; + 804A4FF015571A030001547E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Kmem/Kmem-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvmgcc42; + INFOPLIST_FILE = "Kmem/Kmem-Info.plist"; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.ex.Kmem; + MODULE_START = Kmem_start; + MODULE_STOP = Kmem_stop; + MODULE_VERSION = 1.0.0d1; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = kext; + }; + name = Debug; + }; + 804A4FF115571A030001547E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Kmem/Kmem-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvmgcc42; + INFOPLIST_FILE = "Kmem/Kmem-Info.plist"; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.ex.Kmem; + MODULE_START = Kmem_start; + MODULE_STOP = Kmem_stop; + MODULE_VERSION = 1.0.0d1; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = kext; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 804A4FD715571A030001547E /* Build configuration list for PBXProject "Kmem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 804A4FED15571A030001547E /* Debug */, + 804A4FEE15571A030001547E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 804A4FEF15571A030001547E /* Build configuration list for PBXNativeTarget "Kmem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 804A4FF015571A030001547E /* Debug */, + 804A4FF115571A030001547E /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 804A4FD415571A030001547E /* Project object */; +} diff --git a/Kmem.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Kmem.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..a528379 --- /dev/null +++ b/Kmem.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Kmem.xcodeproj/project.xcworkspace/xcuserdata/comex.xcuserdatad/UserInterfaceState.xcuserstate b/Kmem.xcodeproj/project.xcworkspace/xcuserdata/comex.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100755 index 0000000000000000000000000000000000000000..e19cec40a03fb2cf22ad50427ca5dc53c1fb850c GIT binary patch literal 26382 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 K-{Q~a8UGI-a>IuJ literal 0 HcmV?d00001 diff --git a/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100755 index 0000000..5d59fcc --- /dev/null +++ b/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,20 @@ + + + + + + + diff --git a/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/Kmem.xcscheme b/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/Kmem.xcscheme new file mode 100755 index 0000000..27f263a --- /dev/null +++ b/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/Kmem.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/xcschememanagement.plist b/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100755 index 0000000..3bf83c6 --- /dev/null +++ b/Kmem.xcodeproj/xcuserdata/comex.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + Kmem.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 804A4FDE15571A030001547E + + primary + + + + + diff --git a/Kmem/Kmem-Info.plist b/Kmem/Kmem-Info.plist new file mode 100755 index 0000000..76f58b4 --- /dev/null +++ b/Kmem/Kmem-Info.plist @@ -0,0 +1,39 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.ex.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2012 __MyCompanyName__. All rights reserved. + OSBundleLibraries + + com.apple.kpi.bsd + 8.0.0 + com.apple.kpi.libkern + 8.0.0 + com.apple.kpi.mach + 8.0.0 + com.apple.kpi.unsupported + 8.0.0 + + + diff --git a/Kmem/Kmem-Prefix.pch b/Kmem/Kmem-Prefix.pch new file mode 100755 index 0000000..fac2c9e --- /dev/null +++ b/Kmem/Kmem-Prefix.pch @@ -0,0 +1,4 @@ +// +// Prefix header for all source files of the 'Kmem' target in the 'Kmem' project +// + diff --git a/Kmem/Kmem.c b/Kmem/Kmem.c new file mode 100755 index 0000000..3915f1e --- /dev/null +++ b/Kmem/Kmem.c @@ -0,0 +1,204 @@ +// +// Kmem.c +// Kmem +// +// Created by comex on 5/6/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t) 0xFFFFFF8000000000UL) +#define VM_MIN_KERNEL_AND_KEXT_ADDRESS (VM_MIN_KERNEL_ADDRESS - 0x80000000ULL) +#define VM_MAX_KERNEL_ADDRESS ((vm_offset_t) 0xFFFFFFFFFFFFEFFFUL) + +typedef struct pmap *pmap_t; + +extern vm_map_t kernel_map; +extern pmap_t kernel_pmap; + +extern kern_return_t kmem_alloc( + vm_map_t map, + vm_offset_t *addrp, + vm_size_t size); + +extern void kmem_free( + vm_map_t map, + vm_offset_t addr, + vm_size_t size); + + +extern ppnum_t pmap_find_phys(pmap_t map, addr64_t va); + + +kern_return_t Kmem_start(kmod_info_t * ki, void *d); +kern_return_t Kmem_stop(kmod_info_t *ki, void *d); + +static int mmread(dev_t dev, struct uio *uio, int ioflag); +static int mmwrite(dev_t dev, struct uio *uio, int ioflag); +static int mmioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p); +static int mmrw(dev_t dev, struct uio *uio, enum uio_rw rw); +static boolean_t kernacc(off_t start, size_t len); + +int +mmread(dev_t dev, struct uio *uio, int ioflag) +{ + + return (mmrw(dev, uio, UIO_READ)); +} + +int +mmwrite(dev_t dev, struct uio *uio, int ioflag) +{ + + return (mmrw(dev, uio, UIO_WRITE)); +} + +int +mmioctl(dev_t dev, u_long cmd, __unused caddr_t data, + __unused int flag, __unused struct proc *p) +{ + switch (cmd) { + case FIONBIO: + case FIOASYNC: + /* OK to do nothing: we always return immediately */ + break; + default: + return ENODEV; + } + + return (0); +} + +int +mmrw(dev_t dev, struct uio *uio, enum uio_rw rw) +{ + register int o, c; + register addr64_t v; + int error = 0; + vm_offset_t where; + vm_size_t size; + + + while (uio_resid(uio) > 0 && error == 0) { + uio_update(uio, 0); + addr64_t offset = (addr64_t) uio_offset(uio) | (VM_MAX_KERNEL_ADDRESS & (1ull << 63)); + + switch (minor(dev)) { + + /* minor device 0 is physical memory */ + case 0: + + v = trunc_page(offset); + if (offset >= mem_size) + goto fault; + + size = PAGE_SIZE; + if (kmem_alloc(kernel_map, &where, size) + != KERN_SUCCESS) { + goto fault; + } + o = (int) (offset - v); + c = min(PAGE_SIZE - o, (int) uio_curriovlen(uio)); + error = uiomove((caddr_t) (where + o), c, uio); + kmem_free(kernel_map, where, PAGE_SIZE); + continue; + + /* minor device 1 is kernel memory */ + case 1: + /* Do some sanity checking */ + if ((offset >= VM_MAX_KERNEL_ADDRESS) || + (offset <= VM_MIN_KERNEL_AND_KEXT_ADDRESS)) + goto fault; + c = (int) uio_curriovlen(uio); + if (!kernacc(offset, c)) + goto fault; + error = uiomove((caddr_t)(uintptr_t)offset, + (int)c, uio); + continue; + + default: + goto fault; + break; + } + + if (error) + break; + uio_update(uio, c); + } + return (error); +fault: + return (EFAULT); +} + + +boolean_t +kernacc( + off_t start, + size_t len + ) +{ + off_t base; + off_t end; + + base = trunc_page(start); + end = start + len; + + while (base < end) { + if(!pmap_find_phys(kernel_pmap, base)) + return(FALSE); + base += page_size; + } + + return (TRUE); +} + +#define nullopen (d_open_t *)&nulldev +#define nullclose (d_close_t *)&nulldev +#define nullstop (d_stop_t *)&nulldev +#define nullreset (d_reset_t *)&nulldev +#define mmselect (select_fcn_t *)seltrue + +static int +seltrue(__unused dev_t dev, __unused int flag, __unused struct proc *p) +{ + return (1); +} + +static struct cdevsw csw[] = { + nullopen, nullclose, mmread, mmwrite, /* 3*/ + mmioctl, nullstop, nullreset, 0, mmselect, + eno_mmap, eno_strat, eno_getc, eno_putc, D_DISK +}; + +static void *mem, *kmem; +static int major; + + +kern_return_t Kmem_start(kmod_info_t * ki, void *d) +{ + major = cdevsw_add(-24, csw); + if(!(mem = devfs_make_node(makedev(major, 0), DEVFS_CHAR, UID_ROOT, GID_KMEM, 0640, "mem")) || + !(kmem = devfs_make_node(makedev(major, 1), DEVFS_CHAR, UID_ROOT, GID_KMEM, 0640, "kmem"))) + return KERN_FAILURE; + + return KERN_SUCCESS; + +} + +kern_return_t Kmem_stop(kmod_info_t *ki, void *d) +{ + devfs_remove(mem); + devfs_remove(kmem); + cdevsw_remove(major, csw); + return KERN_SUCCESS; +} diff --git a/Kmem/en.lproj/InfoPlist.strings b/Kmem/en.lproj/InfoPlist.strings new file mode 100755 index 0000000..477b28f --- /dev/null +++ b/Kmem/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/kmem.c b/kmem.c new file mode 100755 index 0000000..f517de6 --- /dev/null +++ b/kmem.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static uint64_t parse(const char *in) { + bool hex = false; + uint64_t result = 0; + const char *s = in; + if(s[0] == '0' && s[1] == 'x') { + s += 2; + hex = true; + } + if(!s[0]) goto bad; + char c; + while((c = *s++)) { + result = result * (hex ? 16 : 10); + if(c >= '0' && c <= '9') { + result += (c - '0'); + } else if(c >= 'a' && c <= 'f') { + result += 10 + (c - 'a'); + } else if(c >= 'A' && c <= 'F') { + result += 10 + (c - 'A'); + } else { + goto bad; + } + } + return result; +bad: + fprintf(stderr, "invalid number %s\n", in); + exit(1); +} + +int main(int argc, char **argv) { + if(argc != 3) { + fprintf(stderr, "usage: kmem addr size\n"); + return 1; + } + off_t addr = parse(argv[1]); + size_t size = parse(argv[2]); + int fd = open("/dev/kmem", O_RDONLY); + if(fd == -1) { + perror("open /dev/kmem"); + return 1; + } + void *buf = malloc(size); + assert(buf); + ssize_t ret = pread(fd, buf, size, addr); + if(ret != size) { + perror("pread"); + return 1; + } + write(1, buf, size); + return 0; +}