Знаете ли вы, что...
2014-10-13 23:35Стартовый адрес программы в большинстве современных 32-битных операционных систем (Windows, Linux, BSD) равен 0x0400000? Понятно, что не ноль: чтобы обращение по нулевому указателю давало ошибку. Но почему именно 4 мегабайта? Этому есть вполне логичное объяснение.
В 64-битных системах другой начальный адрес, а именно 0x100000000 (4 гигабайта).
В 64-битных системах другой начальный адрес, а именно 0x100000000 (4 гигабайта).

no subject
Date: 2014-10-31 06:53 (UTC)$ objdump -x /bin/bash /bin/bash: file format elf32-i386 /bin/bash architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x080604a8 Program Header: PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2 filesz 0x00000120 memsz 0x00000120 flags r-x INTERP off 0x00000154 vaddr 0x08048154 paddr 0x08048154 align 2**0 filesz 0x00000013 memsz 0x00000013 flags r-- LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 filesz 0x000db884 memsz 0x000db884 flags r-x LOAD off 0x000dbf04 vaddr 0x08124f04 paddr 0x08124f04 align 2**12 filesz 0x00004870 memsz 0x00009840 flags rw- DYNAMIC off 0x000dbf18 vaddr 0x08124f18 paddr 0x08124f18 align 2**2 filesz 0x000000d8 memsz 0x000000d8 flags rw- NOTE off 0x00000168 vaddr 0x08048168 paddr 0x08048168 align 2**2 filesz 0x00000044 memsz 0x00000044 flags r-- EH_FRAME off 0x000c35f8 vaddr 0x0810b5f8 paddr 0x0810b5f8 align 2**2 filesz 0x00003d24 memsz 0x00003d24 flags r-- STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2 filesz 0x00000000 memsz 0x00000000 flags rw- RELRO off 0x000dbf04 vaddr 0x08124f04 paddr 0x08124f04 align 2**0 filesz 0x000000fc memsz 0x000000fc flags r-- ...Так что вот, не всякий Linux начинает с четырёх гигабайт.