end(3)

конец программных сегментов · man3 · Русский

end(3) Library Functions Manual end(3)

etext, edata, end - конец программных сегментов

extern etext;
extern edata;
extern end;

Адреса этих символов соответствуют концам различных программных сегментов:

Первый адрес за концом сегмента текста (кода программы).
Первый адрес за концом сегмента инициализированных данных.
Первый адрес за концом сегмента неинициализированных данных (сегмента BSS).

Хотя эти символы уже давно присутствуют в большинстве систем UNIX, они не стандартизованы. Используйте осторожно.

Программа должна явно объявлять эти символы; они не определены в заголовочных файлах.

В некоторых системах имена этих символов начинаются с подчёркивания: _etext, _edata и _end. Эти символы также определены в программах, скомпонованных на Linux.

В начале выполнения программы, повреждение программы будет где-нибудь рядом c &end (возможно, в начале следующей страницы). Однако, поломка изменяет память как при выделении с помощью brk(2) или malloc(3)EN. Используйте 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 <azamat.hackimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

30 октября 2022 г. Linux man-pages 6.03