遵循规范

尽管大多数UNIX系统上早已提供了这些符号,但它们尚未标准化。谨慎使用。

另外参见

objdump(1),readelf(1),sbrk(2),elf(5)

示例

运行时,以下程序将产生如下输出:

$ ./a.out
First address past:
    program text (etext)       0x8048568
    initialized data (edata)   0x804a01c
    uninitialized data (end)   0x804a024

Program source

#include <stdio.h>
#include <stdlib.h>

extern char etext, edata, end; /* The symbols must have some type,
                                   or "gcc -Wall" complains */

int
main(int argc, char *argv[])
{
    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);
}

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

备注

程序必须显式声明这些符号。它们没有在任何头文件中定义。

在某些系统上,这些符号的名称前面带有下划线,即:_etext,_edata和_end。这些符号也为在Linux上编译的程序定义。

在程序执行开始时,程序中断将在&end附近(也许在下一页的开始处)。但是,中断将随着通过brk(2)或malloc(3)分配内存而改变。使用参数为零的sbrk(2)查找程序中断的当前值。

END - Linux手册页

Linux程序员手册 第3部分
更新日期: 2020-06-09

语法

extern etext;
extern edata;
extern end;

名称

etext,edata,end-程序段的末尾

说明

这些符号的地址表示各个程序段的结尾:

etext
这是文本段(程序代码)末尾的第一个地址。
edata
这是初始化数据段末尾之后的第一个地址。
end
这是未初始化数据段(也称为BSS段)末尾的第一个地址。
日期:2019-08-20 18:00:09 来源:oir作者:oir