#include #include #include #include #include #include #include int main(int argc, char * argv[]) { int virt_size, fd; void *addr; addr = NULL; virt_size = 0x18000000; addr = mmap(addr, virt_size, (PROT_READ|PROT_WRITE), (MAP_NORESERVE|MAP_PRIVATE|MAP_ANON), -1, 0); if (addr == MAP_FAILED) { perror("mapping VM scratch space"); return -1; } fd = open("/proc/self/exe", O_RDONLY); if (fd < 0) { perror("open self"); return -1; } #ifdef PRE_TOUCH memset(addr, -1, sysconf(_SC_PAGESIZE)); #endif if (read(fd, addr, sysconf(_SC_PAGESIZE)) < 0) { perror("read"); close(fd); return -1; } close(fd); return 0; }