Skip to content

Instantly share code, notes, and snippets.

@ryo
Created August 4, 2020 19:07
Show Gist options
  • Save ryo/72f174ff4edd609ae4827c4816774fec to your computer and use it in GitHub Desktop.
Save ryo/72f174ff4edd609ae4827c4816774fec to your computer and use it in GitHub Desktop.
% uname -ap
NetBSD subq 9.99.69 NetBSD 9.99.69 (GENERIC.SUBQ) #37: Sun Jul 5 02:54:58 JST 2020 ryo@subq:/usr/src/sys/arch/amd64/compile/GENERIC.SUBQ amd64 x86_64
% cat mmaptest.c
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
char path_procmap[128];
static void
procmap(void)
{
int fd;
ssize_t r;
char buf[1024 * 8];
if (path_procmap[0] == '\0') {
snprintf(path_procmap, sizeof(path_procmap), "/proc/%d/map", getpid());
}
fd = open(path_procmap, O_RDONLY);
if (fd < 0)
errx(1, "open: %s", path_procmap);
printf("[%s]\n", path_procmap);
do {
r = read(fd, buf, sizeof(buf));
if (r > 0)
fwrite(buf, r, 1, stdout);
} while (r == sizeof(buf));
printf("\n");
close(fd);
}
int
main()
{
void *p, *result;
int i;
p = (void *)0x400000LL;
for (;;) {
procmap();
printf("do mmap(%p,,,,,)\n", p);
result = mmap(p, getpagesize(), PROT_NONE, MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS, 0xffffffff, 0);
if (result == MAP_FAILED)
err(1, "mmap");
printf("mmap(%p,,,,,) -> %p\n\n", p, result);
}
return 0;
}
% cc mmaptest.c
% ./a.out
[/proc/3041/map]
0x400000 0x402000 r-x r-x COW NC 1 0 0
0x601000 0x602000 rw- rw- COW NNC 1 0 0
0x7f7ff6e00000 0x7f7ff6e10000 rw- rw- COW NNC 1 0 0
0x7f7ff6e10000 0x7f7ff6fb0000 rw- rw- COW NC 1 0 0
0x7f7ff6fb0000 0x7f7ff6fc0000 rw- rw- COW NNC 1 0 0
0x7f7ff6fc0000 0x7f7ff7200000 rw- rw- COW NC 1 0 0
0x7f7ff7200000 0x7f7ff7210000 rw- rw- COW NNC 1 0 0
0x7f7ff7210000 0x7f7ff7400000 rw- rw- COW NC 1 0 0
0x7f7ff7400000 0x7f7ff75d5000 r-x r-x COW NC 1 0 0
0x7f7ff75d5000 0x7f7ff77d4000 --- r-x COW NC 1 0 0
0x7f7ff77d4000 0x7f7ff77e0000 r-- rw- COW NNC 1 0 0
0x7f7ff77e0000 0x7f7ff77e6000 rw- rw- COW NNC 1 0 0
0x7f7ff77e6000 0x7f7ff7800000 rw- rw- COW NNC 1 0 0
0x7f7ff7800000 0x7f7ff78f0000 rw- rw- COW NC 1 0 0
0x7f7ff78f0000 0x7f7ff7900000 rw- rw- COW NNC 1 0 0
0x7f7ff7900000 0x7f7ff79f0000 rw- rw- COW NC 1 0 0
0x7f7ff79f0000 0x7f7ff7a08000 rw- rw- COW NNC 1 0 0
0x7f7ff7c00000 0x7f7ff7c0f000 r-x r-x COW NC 1 0 0
0x7f7ff7c0f000 0x7f7ff7e0f000 --- --- COW NC 1 0 0
0x7f7ff7e0f000 0x7f7ff7e10000 rw- rw- COW NNC 1 0 0
0x7f7ff7e10000 0x7f7ff7e11000 rw- rw- COW NNC 1 0 0
0x7f7ff7ee3000 0x7f7ff7eff000 rw- rw- COW NNC 1 0 0
0x7f7ff7eff000 0x7f7ff8fff000 --- --- COW NC 1 0 0
0x7f7ff8fff000 0x7f7fffff0000 rw- rw- COW NC 1 0 0
0x7f7fffff0000 0x7f7ffffff000 rw- rw- COW NNC 1 0 0
do mmap(0x400000,,,,,)
mmap(0x400000,,,,,) -> 0x3ff000
[/proc/3041/map]
0x3ff000 0x400000 --- --- COW NC 1 0 0
0x400000 0x402000 r-x r-x COW NC 1 0 0
0x601000 0x602000 rw- rw- COW NNC 1 0 0
0x7f7ff6e00000 0x7f7ff6e10000 rw- rw- COW NNC 1 0 0
0x7f7ff6e10000 0x7f7ff6fb0000 rw- rw- COW NC 1 0 0
0x7f7ff6fb0000 0x7f7ff6fc0000 rw- rw- COW NNC 1 0 0
0x7f7ff6fc0000 0x7f7ff7200000 rw- rw- COW NC 1 0 0
0x7f7ff7200000 0x7f7ff7210000 rw- rw- COW NNC 1 0 0
0x7f7ff7210000 0x7f7ff7400000 rw- rw- COW NC 1 0 0
0x7f7ff7400000 0x7f7ff75d5000 r-x r-x COW NC 1 0 0
0x7f7ff75d5000 0x7f7ff77d4000 --- r-x COW NC 1 0 0
0x7f7ff77d4000 0x7f7ff77e0000 r-- rw- COW NNC 1 0 0
0x7f7ff77e0000 0x7f7ff77e6000 rw- rw- COW NNC 1 0 0
0x7f7ff77e6000 0x7f7ff7800000 rw- rw- COW NNC 1 0 0
0x7f7ff7800000 0x7f7ff78f0000 rw- rw- COW NC 1 0 0
0x7f7ff78f0000 0x7f7ff7900000 rw- rw- COW NNC 1 0 0
0x7f7ff7900000 0x7f7ff79f0000 rw- rw- COW NC 1 0 0
0x7f7ff79f0000 0x7f7ff7a08000 rw- rw- COW NNC 1 0 0
0x7f7ff7c00000 0x7f7ff7c0f000 r-x r-x COW NC 1 0 0
0x7f7ff7c0f000 0x7f7ff7e0f000 --- --- COW NC 1 0 0
0x7f7ff7e0f000 0x7f7ff7e10000 rw- rw- COW NNC 1 0 0
0x7f7ff7e10000 0x7f7ff7e11000 rw- rw- COW NNC 1 0 0
0x7f7ff7ee3000 0x7f7ff7eff000 rw- rw- COW NNC 1 0 0
0x7f7ff7eff000 0x7f7ff8fff000 --- --- COW NC 1 0 0
0x7f7ff8fff000 0x7f7fffff0000 rw- rw- COW NC 1 0 0
0x7f7fffff0000 0x7f7ffffff000 rw- rw- COW NNC 1 0 0
do mmap(0x400000,,,,,)
a.out: mmap: Cannot allocate memory
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment