title: Why do virtual memory addresses for linux binaries start at 0x8048000?
body: <p>Disassembling an ELF binary on a Ubuntu x86 system I couldn't help but notice that the code(.text) section starts from the virtual address 0x8048000 and all lower memory addresses seem to be unused. </p>
  
  <p>This seems to be rather wasteful and all Google turns up is either <a href="http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.system/2006-02/msg00090.html" rel="noreferrer">folklore involving STACK_TOP</a> or protection against null-pointer dereferences. The latter case looks like it can be fixed by using a single page instead of leaving a 128MB gap. </p>
  
  <p>So my question is this - is there a definitive answer to why the layout has been fixed to these values or is it just an arbitrary choice?</p>