vak: (Улыбка)
[personal profile] vak
Стартовый адрес программы в большинстве современных 32-битных операционных систем (Windows, Linux, BSD) равен 0x0400000? Понятно, что не ноль: чтобы обращение по нулевому указателю давало ошибку. Но почему именно 4 мегабайта? Этому есть вполне логичное объяснение.

В 64-битных системах другой начальный адрес, а именно 0x100000000 (4 гигабайта).

Date: 2014-10-14 08:48 (UTC)
From: [identity profile] ibnteo.livejournal.com
Это потому, что первые 512 байт (01000) использовались для нужд процессора, адреса прерываний, стек возвратов и т.п. Некоторые программы загружались с адреса 0760, чтобы подменить адрес возврата в стеке на стартовый адрес программы (на самом деле нужно было его подменить по адресу 0766), то есть, были автозапускаемыми.