etext, edata, end - конец
программных
сегментов
extern etext;
extern edata;
extern end;
Адреса
этих
символов
соответствуют
концам
различных
программных
сегментов:
- etext
- Первый
адрес за
концом
сегмента
текста
(кода
программы).
- edata
- Первый
адрес за
концом
сегмента
инициализированных
данных.
- end
- Первый
адрес за
концом
сегмента
неинициализированных
данных
(сегмента
BSS).
Хотя эти
символы
уже давно
присутствуют
в
большинстве
систем UNIX,
они не
стандартизованы.
Используйте
осторожно.
Программа
должна
явно
объявлять
эти
символы;
они не
определены
в
заголовочных
файлах.
В
некоторых
системах
имена этих
символов
начинаются
с
подчёркивания:
_etext,
_edata и
_end. Эти
символы
также
определены
в
программах,
скомпонованных
на Linux.
В начале
выполнения
программы,
повреждение
программы
будет
где-нибудь
рядом c
&end
(возможно, в
начале
следующей
страницы).
Однако,
поломка
изменяет
память как
при
выделении
с помощью
brk(2) или
malloc(3).
Используйте
sbrk(2) с
аргументом
0 для поиска
текущего
значения
поломки
программы.
Нижеследующая
программа
выдает
такие
результаты:
$ ./a.out
First address past:
program text (etext) 0x8048568
initialized data (edata) 0x804a01c
uninitialized data (end) 0x804a024
#include <stdio.h>
#include <stdlib.h>
extern char etext, edata, end; /* Символы должны иметь какой-то тип,
иначе предупреждения от «gcc -Wall» */
int
main(void)
{
printf("First address past:\n");
printf(" program text (etext) %10p\n", &etext);
printf(" initialized data (edata) %10p\n", &edata);
printf(" uninitialized data (end) %10p\n", &end);
exit(EXIT_SUCCESS);
}
objdump(1),
readelf(1),
sbrk(2),
elf(5)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Yuri Kozlov
<
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]