Объяснение для того, чтобы заставить сегмент текста пространства пользователя запуститься в 0x8048000

Этот отрывок используется для распечатывания имени хоста системы с синим фоном и зеленым шрифтом.

Для окраски оболочки Вы используете escape-последовательности особого цвета.

\e[ запускает цветовую схему, 32; выберет основной цвет к зеленому, 44 выберет цвет фона к синему и m закончит его.

$(command) создает новую оболочку, выполняет команду и возвращает результат (не возвращаемое значение).

hostname возвращает имя хоста существующей системы.

\e[m сбросит окраску вывода.

Из страницы справочника эха:

   -n     do not output the trailing newline
   -e     enable interpretation of backslash escapes

По моему скромному мнению, Ваш отрывок мог быть упрощен до echo -e "\e[32;44m $(hostname) \e[m";

См. главу 6.1 Цвета ПРАКТИЧЕСКОГО РУКОВОДСТВА Подсказки Bash для получения дополнительной информации.

5
26.06.2012, 02:09
1 ответ

Я признаю, что следующее не является большим ответом, но я полагаю, что значение 0x8048000 хранится в Спецификации ELF. См. рисунки A.4, A.5 и A.6 в том документе. System V ABI Intel 386 Architecture Supplement также стандартизирует на 0x8048000. Посмотрите страницу 3-22, Figue 3-25. 0x804800 предписан как низкий адрес стопки адреса сегмента текста / высокий адрес стека. И это странно в и себя, поскольку стеки обычно устанавливаются в высоких адресах пространства памяти процесса, и Linux не является никаким исключением.

Можно получить компоновщика GNU ld настраивать исполняемый файл ELF так, чтобы ядро отобразило его в на несколько более низкий или несколько более высокий адрес. Метод, чтобы сделать это варьируется от версии до версии GCC и ld, так страницы справочника чтения тщательно. Это имело бы тенденцию указывать, что 0x8048000 не происходит из некоторого требования к оборудованию, а скорее из других соображений.

3
27.01.2020, 20:41

Теги

Похожие вопросы