#include #include #include #include #include #include #include #include #include int main(void) { int rc, fd; char str[20]; unsigned long kva; void *mmkva; fd = open("/proc/xen/xsd_kva", O_RDONLY); if (fd == -1) { printf("open(/proc/xen/xsd_kva) failed: %s\n", strerror(errno)); return 1; } rc = read(fd, str, sizeof(str)); if (rc == -1) { printf("read() failed: %s\n", strerror(errno)); close(fd); return 1; } close(fd); str[rc] = '\0'; kva = strtoul(str, NULL, 0); printf("kva: 0x%lx\n", kva); fd = open("/dev/kmem", O_RDWR); if (fd == -1) { printf("open(/dev/kmem) failed: %s\n", strerror(errno)); return 1; } mmkva = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, kva); if (mmkva == MAP_FAILED) { printf("mmap() failed: %s\n", strerror(errno)); close(fd); return 1; } printf("success\n"); sleep(60); munmap(mmkva, getpagesize()); close(fd); return 0; }