LINUX.ORG.RU

[ELF][нуб] откуда берётся стартовый адрес?

 ,


0

0

dear all,

прочитал статью «Как запускается функция main() в Linux» http://gazette.lrn.ru/lg84/kim.html

так и не понял, откуда берёться адрес запуска программы? Что вообще за адрес? Адрес где? У каждого бинарника он свой (уникальный)?

помогите вкурить.


У бинарей, собранных одинаковыми компиляторами, он как правило одинаковый, просто константа.

Booster ★★
()

> У каждого бинарника он свой (уникальный)?

Конечно уникальный. Представь, если бы все бинарники в системе грузились по одному адресу - нихрена бы не работало.

Поэтому gcc присваивает каждому бинарнику свой адрес, а берет он свободные адреса с http://www.kernel.org/pic-db.aspx

anonymous
()
Ответ на: комментарий от anonymous

>Конечно уникальный. Представь, если бы все бинарники в системе грузились по одному адресу - нихрена бы не работало.
Повеселил.

Booster ★★
()
Ответ на: комментарий от anonymous

Фак, у них база лежит, а мне Qt собрать надо! Есть пара лишних адресов?

yirk ★★★
()

>У каждого бинарника он свой (уникальный)?

В большинстве ОС - стандартный.

Вообще задаётся при линковке, но в большинстве случаев всё настроено по умолчанию.

А ничего страшного не происходит из-за так называемой виртуальной памяти — адресное пространство разное у каждого потока.

vkos ★★
()

В ДОС/Видавс, насколько помню, в хедере бинарника есть поле указывающее точку входа.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

>Тут значит так же
Ну а как же, загрука без парсинга релоков быстрее.

Booster ★★
()

Адресс берется из заголовка ELf исполняемой программы (Entry point address:).

   readelf -Da <binary> | less 

Много чего инетересного увидите :)

Впринципе адресс может быть любой. Загрузчик программ (ld-linux.so.* в линукс) читает информацию из заголовка ELF.

irishka
()
Ответ на: комментарий от anonymous

Все бы работало нормально. Стартовый адрес программы (в PM) - это виртуальный адрес. Вы путате с физическим адресным пространством. Ничего не маешает загружать все программы по одному адресу (виртуальному).

irishka
()
Ответ на: комментарий от irishka

да! спасибо! уже догнал. :)

rha
() автор топика
Ответ на: комментарий от irishka

Ну, хоть кто-то не понял иронии.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.