mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
#define _GNU_SOURCE 1
|
|
#include <sys/mman.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
int main(void)
|
|
{
|
|
/* first find free segment of 40K, then unmap it */
|
|
void *initial_area = mmap((void *)0x10000000, 40960, PROT_READ|PROT_WRITE,
|
|
MAP_ANONYMOUS|MAP_PRIVATE,0,0);
|
|
|
|
if (initial_area == MAP_FAILED)
|
|
perror ("initial area");
|
|
printf("initial_area= %p\n", initial_area);
|
|
if (munmap(initial_area, 40960) != 0)
|
|
perror ("munmap initial_area");
|
|
|
|
/* remap the same segment, but with 4K size */
|
|
void *area = mmap(initial_area, 4096, PROT_READ|PROT_WRITE,
|
|
MAP_ANONYMOUS|MAP_PRIVATE,0,0);
|
|
if (area == MAP_FAILED)
|
|
perror ("area");
|
|
if (area != initial_area)
|
|
printf("FAILED : was expecting to get back the initial_area\n");
|
|
printf("area= %p\n", area);
|
|
strcpy(area, "Hello World");
|
|
|
|
/* extend it to 40K */
|
|
void *a2 = mremap(area, 4096, 40960, 0);
|
|
if (a2 == MAP_FAILED) {
|
|
perror("mremap");
|
|
}
|
|
if (a2 != initial_area)
|
|
printf("FAILED : was expecting to get back the same area increased\n");
|
|
printf("increased area= %p\n", a2);
|
|
printf("%s\n", (char *)a2);
|
|
return 0;
|
|
}
|