2010-03-15 7 views
3

예약 된 메모리 주소 목록이 있습니까? 사용자 공간 프로그램의 메모리가 절대로 할당 될 수없는 주소 목록? 이것이 OS 당 또는 아키텍처 당 가능성이 가장 높다는 것을 알았지 만, 누군가가 좀 더 일반적인 OS와 아치를 알기를 바랬습니다. 난 단지 윈도우의 몇 가지 버전을 발굴 할 수 :예약 된 메모리 주소?

윈도우 NT, 2K 및 XP이 될 것이라고 :

을 0x00000000 - 0x0000ffff -> 가장 낮은 페이지가 디버깅

을 단순화하기 위해 보호 0x00001000 - 0x7ffeffff - 당신의 응용 프로그램> 메모리 영역

0x7fff0000 - 0x7fffffff -> 다음 부분

을 0x80에게 손상 메모리 기능을 유지하기 위해 보호 지역 000000 - 0xffffffff를 - 그래서 드라이버를 포함하고 시스템이 (그 문제에 대한, 또는 다른 것)

누구나 리눅스에 대해 알고, 또는 BSD에 위치해> 메모리?

답변

1

Linux는 일반적으로 커널에 의해 0xC000000에서 0xFFFFFFFF까지 소유하도록 구성됩니다. 변경할 수 있습니다 (예 : 악명 높은 4GB-4GB 분할로 예약하지 않음). glibc는 일반적으로 0xB000000에로드됩니다.

Linux에서 0x00000000은 보안 sysctl에 의해 차단되지 않는 한 특정 mmap() 호출로 요청할 수 있습니다 (차단하는 것이 좋지 않음).

할당 단계의 NULL을 Reguarding :

NULL 그래서 난이 그렇게의 결과를 위해 준비 하였다했던 프로그램을 가정 거라고 명시 적으로 할당 가능합니다. 영향을받는 코드가 작동하려면 적어도 -fno-delete-null-pointer-checks이 GCC에 필요합니다. 나는 거기에 제로 페이지를 매핑 한 오래된 BSD 동작을 모방하는 것이라고 들었다.

+0

나를 조금 혼란스럽게합니다. NULL을 할당 할 수 있다면 초기화하는 모든 프로그램에서 무엇을합니까? 이 문제에 관해 이야기하는 훌륭한 자료를 알고 있습니까? – Nate

+0

얼마나 매력적입니까! – Nate