#include #include #include #include #include static char input[] = "Hello world\n"; int main() { size_t pgsz; uintptr_t addr; void *p; char *src; pgsz = getpagesize(); printf("%zu\n", pgsz); addr = 0x7fffffff; printf("pagesize = %jx\n", (uintmax_t)addr); addr &= ~(pgsz - 1); printf("hint = %jx\n", (uintmax_t)addr); p = (void *)addr; p = mmap(p, 2 * pgsz, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED, -1, 0); if (p == MAP_FAILED) err(1, "mmap"); printf("mapping = %p..%p\n", p, (char *)p + 2 * pgsz - 1); src = (char *)p + pgsz - 4; printf("source = %p\n", src); memcpy(src, input, sizeof(input)); printf("input %s", src); printf("strlen = %zu\n", strlen(src)); printf("strnlen = %zu\n", strnlen(src, pgsz)); return 0; }