3

Is there a list of reserved memory addresses out there - a list of addresses that the memory of a user-space program could never be allocated to? I realize this is most likely per-OS or per-architecture, but I was hoping someone might know some of the more common OSes and Arches. I could only dig one up for a few versions of windows:

for windows NT,2k and XP that would be:

0x00000000 - 0x0000ffff -> lowest page is protected to simplify debugging

0x00001000 - 0x7ffeffff -> memory area for your application

0x7fff0000 - 0x7fffffff -> protected area to keep memory-functions from damaging the following part

0x80000000 - 0xffffffff -> memory where the system including drivers and so on is located

Anyone know about for Linux, or BSD (or anything else, for that matter)?

Community
  • 1
  • 1
Nate
  • 12,499
  • 5
  • 45
  • 60

1 Answers1

1

Linux is normally configured to own 0xC000000 to 0xFFFFFFFF by kernel. This can be changed (e.g. the infamous 4GB-4GB split that reserves none). glibc is usually loaded at 0xB000000.

Under Linux, 0x00000000 can be requested by a particular mmap() call unless blocked by a security sysctl (which turned out to be a bad idea to block).

Reguarding allocating NULL:

NULL is only explicitly allocatable so I'd assume the program that did it was prepared for the consequence of doing so. At least -fno-delete-null-pointer-checks is required to GCC for the affected code to function. I'm told this is to emulate old BSD behavior that mapped the zero page there.

Joshua
  • 40,822
  • 8
  • 72
  • 132
  • That confuses me a little - if NULL is allocatable, what does that do for all the programs that initialize to it? Do you know of any good resources that talk about this issue? – Nate Mar 15 '10 at 15:15