DF-5694 / aslr2.c
#include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <sys/resource.h> int main(void){ struct rlimit rl; getrlimit(RLIMIT_DATA, &rl); printf("RLIMIT_DATA cur=%llu max=%llu\n", (unsigned long long)rl.rlim_cur, (unsigned long long)rl.rlim_max); unsigned long long lo=~0ULL, hi=0; for (int i=0;i<20000;i++){ void *p = mmap(NULL, 4096, PROT_READ, MAP_ANON, -1, 0); if (p==MAP_FAILED) break; unsigned long long a=(unsigned long long)p; if(a<lo)lo=a; if(a>hi)hi=a; if(i<10) printf(" addr[%d]=0x%llx\n", i, a); munmap(p,4096); } printf("lo=0x%llx hi=0x%llx span_bytes=%llu (%.2f GB)\n", lo, hi, hi-lo, (double)(hi-lo)/1e9); return 0; } |