15 int main (int argc, char *argv[])
17 int fd = open (argv[0], O_RDONLY);
22 const char *str = "a string you'll only find in the program";
30 if (fstat (fd, &sb) < 0)
42 #define MMAP_PROT1 PROT_READ | PROT_WRITE | PROT_EXEC
46 #define MMAP_FLAGS1 MAP_PRIVATE | MAP_ANONYMOUS
49 /* Get a page, any page. */
50 b = mmap (NULL, size, MMAP_PROT1, MMAP_FLAGS1, -1, 0);
54 /* Remember it, unmap it. */
56 if (munmap (b, size) != 0)
65 #define MMAP_PROT2 PROT_READ | PROT_EXEC
69 #define MMAP_FLAGS2 MAP_DENYWRITE | MAP_FIXED | MAP_PRIVATE
77 #define MMAP_TEST_BAD_ORIG \
78 (a == MAP_FAILED || memmem (a, size, str, strlen (str) + 1) == NULL)
80 #define MMAP_TEST_BAD MMAP_TEST_BAD_ORIG
83 /* Try mapping the now non-mapped page fixed. */
84 a = mmap (b, size, MMAP_PROT2, MMAP_FLAGS2, fd, 0);