main_stack.c 샘플 프로그램은 이 동작을 보여 줍니다. 그것은 현재 스택 프레임을 포함하는 페이지의 맵핑을 해제 할 수 있습니다, 결국 매핑되지 않은 페이지에 액세스 하는 munmap의 ret 명령으로 이어지는, 커널 스택 을 확장 하 고 0으로 반환 하는 기능: 물론 이 특정 한 악용 의 길 보인다 스택 쿠키 검사 및 null 페이지를 어떤 식으로든 매핑할 수 없음을 포함하여 여러 가지 이유로 쓸모가 없으며 예제로 사용됩니다. 이 동작을 활용하는 일반적인 방법을 생각해 볼 수는 없지만 몇 가지 응용 프로그램 별 가능성을 열 수 있습니다: POSIX는 시스템이 항상 개체의 끝에 있는 부분 페이지를 채우지 말고 해당 시스템이 어떤 부분 페이지를 작성하지 않을 것이라고 지정합니다. 객체의 끝을 넘어 수정. Linux에서 개체가 끝난 후 이러한 부분 페이지에 데이터를 작성하면 파일이 닫혀 매핑되지 않은 후에도 데이터가 페이지 캐시에 남아 있으며 데이터가 파일 자체에 기록되지 않더라도 후속 매핑은 수정된 콘텐츠를 볼 수 있습니다. 경우에 따라 이 문제는 msync(2)를 호출하여 맵 해제가 수행되기 전에 해결할 수 있습니다. 그러나 tmpfs에서는 작동하지 않습니다(예: shm_overview(7)에 설명된 POSIX 공유 메모리 인터페이스를 사용하는 경우). 이러한 누수는 가장 현실적으로 두 개의 누수, 청크의 절대 주소 및 대상의 절대 주소에서 비롯됩니다. munmap은 부분 매핑 해제를 지원하므로 필요한 경우 매핑의 한 페이지를 칠 수도 있습니다. sys/stat.h POSIX 헤더의 mmap()을 사용하여 읽기(쓰지 않음)를 위해 파일을 매핑하려고 합니다.

인터넷에서 간단한 베어 예제를 찾을 수 없습니다. 아래의 모든 것은 이 원시적인 것을 기반으로 하지만, 간결하게 하기 위해, 부패와 후속 자유를 모방하는 대신 문맵을 직접 사용하십시오. mmap() 및 munmap() 함수는 sys/mman.h 라이브러리에서 제공합니다. 그래서 사용하려면 아래와 같이 포함시켜야합니다. ptmalloc이 mmapped 청크를 사용할 때 정렬 요구 사항을 처리하는 방법을 주의하는 것이 중요합니다. mmap은 페이지 정렬 영역을 반환하도록 보장되지만 사용자는 memalign 및 친구와 glibc에서 더 큰 정렬을 요청할 수 있습니다. 이 경우 _int_malloc을 통해 최악의 경우 패딩이 있는 할당을 가져와 요청된 크기의 청크를 필요한 정렬 경계에서 조각하고 사용자에게 반환할 수 있습니다. 이는 할당의 시작과 끝에 바이트가 낭비됨을 의미할 수 있으므로 선행 및 후행 공간은 무료로 반환됩니다. 그러나 _int_malloc이 mmapped 청크로 반환되면 mmapped 영역에 정렬된 청크의 오프셋이 헤더의 prev_size 필드에 저장됩니다.

이렇게 하면 청크에서 호출할 때 매핑된 영역의 시작을 자유롭게 찾을 수 있으며(아래 참조) 부분적으로 매핑을 해제할 수 없는 플랫폼(추측만)에 대한 지원을 유지하고 비용이 많이 드는 munmap 호출을 피할 수 있습니다. munmap 함수는 mmap 함수에 의해 이전에 파일에 매핑된 메모리 영역의 일부 또는 전부의 매핑을 종료하는 데 사용됩니다.