Linux 사용자 공간 메모리 매핑에 대한 표준이 있습니까?

Linux 사용자 공간 메모리 매핑에 대한 표준이 있습니까?

여러 프로세스 간에 공유되는 메모리 매핑된 파일을 사용할 프로젝트를 생각 중입니다. 모든 프로세스에서 매핑된 영역의 포인터 값을 사용할 수 있으려면* 매핑되었는지 확인해야 합니다. to Each 각 프로세스의 기본 주소는 동일합니다. 물론 MAP_FIXEDto 태그를 사용하여 이 작업을 수행하는 것은 그 자체로 쉽지만 mmap()어떤 주소를 선택해야 하는지가 문제입니다.

코드가 실행되기 시작하면 실행 파일과 해당 코드에서 사용하는 공유 라이브러리가 이미 메모리 위치에 매핑되어 있는 상황이 발생합니다. 이 주소의 대략적인 범위를 미리 알 수 있습니까? 많은 커널에서 기본적으로 ASLR이 켜져 있기 때문에 이 문제는 오늘날 특히 중요합니다. 나는 경험적으로 주 실행 파일에 대한 일부 느슨한 주소 범위와 공유 라이브러리에 대한 것으로 보이는 다른 범위가 있는 것으로 보았지만 실제로는 잘 정의되어 있습니까? 물론, 표준 문서가 있으면 좋겠지만 문제의 프로젝트는 실제로 혼자서만 실행할 수 있기 때문에 느슨한 디자인 철학도 좋을 것입니다.

기존 매핑이 어디에서 끝날지 미리 알 수 있는 방법이 실제로 없다면, 유용한 주소 범위에 대한 내 추측이 잘못된 것으로 판명될 경우를 대비해 적어도 우아하게 실패할 수 있는 방법이 있습니까? 일반적으로 mmap이전의 기존 매핑은 새로 요청된 매핑으로 자동으로 덮어쓰여집니다. 나는 그것이 무엇이든 포함하면 실패 O_EXCL하는 유사한 플래그를 원한다고 생각 mmap하지만 이 효과나 유사한 것을 찾을 수 없습니다. 나는 /proc/self/maps내가 의도한 매핑과 겹치는 것이 있는지 분석하고 확인할 수 있다고 생각했지만 으으으.

* 응, 나도 알아할 수 있다매핑된 영역에서 상대 포인터를 사용하지만 여러 가지 이유로 그렇게 하고 싶지 않습니다.

관련 정보