Исторически, было много несовместимых расширений оригинала mail
commnad. Mail
прибыл из BSD и взял имя Mail
вместо mail
потому что это было поставлено вместе с несовместимым mail
программа. Позже та же история произошла с mailx
. Для получения дополнительной информации считайте рецензию проекта Семейной реликвии на различных версиях mail
. Дистрибутивы Linux по-разному обеспечили один или несколько почтовых утилит под различными именами.
Для мобильности, даже между установками того же дистрибутива Linux иногда, Вы не можете полагаться mail
. mailx
команда стандартизирована (не со всеми опциями, которые могли бы существовать в конкретной системе).
Если Вы хотите утилиту, которая всегда ведет себя таким же образом, если она присутствует, и Вы не возражаете против этого, она часто не устанавливается по умолчанию, можно использовать mutt
.
Следующее является действительно хорошей ссылкой: http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/. Это содержит библиографию в конце множества различных ссылок на разных уровнях. Если Вы хотите знать каждую окровавленную деталь, можно перейти прямо к источнику: http://www.akkadia.org/drepper/dsohowto.pdf. (Ulrich Drepper записал Linux динамического компоновщика.)
Можно получить действительно хороший обзор всех разделов в исполняемом файле путем выполнения команды как "objdump-h myexe" или "readelf-S myexe".
Раздел .interp содержит название динамического загрузчика, который будет использоваться для динамичного соединения символов в этом объекте. Раздел .dynamic является дистилляцией заголовка программы, который отформатирован, чтобы быть легким для динамического загрузчика читать. (Таким образом, это имеет указатели на все другие разделы.)
.got (Глобальная Таблица Смещения) и .plt (Таблица Связи Процедуры) являются двумя основными структурами, которыми управляет динамический компоновщик. .got является косвенной таблицей для переменных, и .plt является косвенной таблицей для функций. Каждый исполняемый файл или библиотека (которые называют "общими объектами") имеют свой собственный .got и .plt, и это таблицы символов, на которые ссылается тот общий объект, которые на самом деле содержатся в некотором другом общем объекте.
.dynsyn содержит всю информацию о символах в Вашем общем объекте (и те Вы определяете и внешние, на которые необходимо сослаться.) .dynsyn не содержит имена действительного символа. Они содержатся в .dynstr, и .dynsyn имеет указатели в .dynstr. .gnu.hash является хеш-таблицей, используемой для быстрого поиска символов по имени. Это также содержит только указатели (указатели в .dynstr и указатели, используемые для того, чтобы сделать цепочки блока.)
Когда Ваш общий объект разыменовывает некоторый символ "нечто", динамический компоновщик должен пойти посмотреть "нечто" во всех динамических объектах, против которых Вы связаны выяснить, какой содержит "нечто", которое Вы ищете (и затем что относительный адрес "нечто" в том общем объекте.) Динамический компоновщик делает это путем поиска .gnu.hash раздела всех связанных общих объектов (или .hash разделяют для старых общих объектов, которые не имеют раздела .gnu.hash.), После того как это находит корректный адрес в связанном общем объекте, это помещает его в .got или .plt Вашего общего объекта.