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

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

Date: 2014-10-14 07:28 (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
А в MSDOS стартовый адрес (относительно начала сегмента) .com-программы был 0x100

Date: 2014-10-14 07:58 (UTC)
From: [identity profile] b00ter.livejournal.com
ЕМНИП, это было из-за заголовка EXE-файла.

Date: 2014-10-14 08:14 (UTC)
From: [identity profile] ircicq.livejournal.com
у .COM не было заголовка.
этот формат - наследие CP/M

Date: 2014-10-14 08:22 (UTC)
From: [identity profile] b00ter.livejournal.com
У EXE он был. :)

Date: 2014-10-14 08:47 (UTC)
From: [identity profile] archaicos.livejournal.com
У DOS'овского .EXE нет ограничения подобного тому, что есть у .COM.

Date: 2014-10-14 08:17 (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Не надо путать заголовок EXE-файлв. который в файле и оставался, и Program Segment Prefix. Это разные вещи. У .com-файлов, кстати никакого заголовка не было. Просто кусок машинного кода, который загружается в память как есть, без всякой настройки адресов, и получает выполнение.

Date: 2014-10-14 08:24 (UTC)
From: [identity profile] b00ter.livejournal.com
М-м-м, тогда какой смысл смещать точку начала исполнения у беззаголовочного шмата кода?

Date: 2014-10-14 08:31 (UTC)
From: [identity profile] ircicq.livejournal.com
первые 256 байт имели служебное назначение, блок PSP
там хранилась командная строка, таблица открытых файлов ....

Date: 2014-10-14 08:34 (UTC)
From: [identity profile] b00ter.livejournal.com
Да, уже ткнули носом, спасибо. Я так понял, длина заголовка EXE - это просто "счастливое совпадение".

Date: 2014-10-14 08:38 (UTC)
From: [identity profile] dimorlus.livejournal.com
Длина у заголовка exe - любая, часть заголовка - это relocation table.

Date: 2014-10-14 08:43 (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Потому что операционной системе надо положить куда-нибдуь полезную информацию, которая должна быть доступна куску кода - таблицу файловых дескрипторов, командную строку указатель на environment,

Date: 2014-10-14 18:41 (UTC)
From: [identity profile] sagarasousuke.livejournal.com
не-не-не, Дэвид Блейн! заголовок EXE с информацией о сегментах и настройке адресов при загрузке это одно, а PSP процесса с контекстом (в т.ч. банальными "опциями командной строки" что передаются при запуске - верхние 128 байт PSP) - совсем иное.

Date: 2014-10-14 18:38 (UTC)
From: [identity profile] sagarasousuke.livejournal.com
...и всякий уважающий себя резидент норовил откусить излишек PSP и переехать :)))