Manpages

名 前

etext, edata, end − プ ロ グ ラ ム セ グ メ ン ト の 終 わ り

書 式

extern etext;
extern
edata;
extern
end;

説 明

こ れ ら の シ ン ボ ル の ア ド レ ス は 各 種 の プ ロ グ ラ ム セ グ メ ン ト の 終 わ り を 示 す 。

etext テ キ ス ト セ グ メ ン ト

(プ ロ グ ラ ム の コ ー ド ) の 末 尾 の 次 の ア ド レ ス 。

edata 初 期 化 さ れ た デ ー タ の

セ グ メ ン ト の 末 尾 の 次 の ア ド レ ス 。

end 初 期 化 さ れ て い な い デ ー タ の セ グ メ ン ト

(BSS セ グ メ ン ト と も 言 わ れ

る ) の 末 尾 の 次 の ア ド レ ス 。

準 拠

こ れ ら の シ ン ボ ル は 長 年 ほ と ん ど の UNIX シ ス テ ム で 提 供 さ れ て い る が 、 標 準 化 さ れ て は い な い 。 注 意 し て 使 う こ と 。

注 意

プ ロ グ ラ ム で は こ れ ら の シ ン ボ ル は 明 示 的 に 宣 言 し な け れ ば な ら な い 。 こ れ ら は ど の ヘ ッ ダ ー フ ァ イ ル で も 定 義 さ れ て い な い 。 い く つ か の シ ス テ ム で は 、 こ れ ら の シ ン ボ ル の 名 前 は 前 に ア ン ダ ー ス コ ア が 付 い て い て 、 _etext, _edata, _end と な っ て い る 。 Linux で コ ン パ イ ル さ れ た プ ロ グ ラ ム で は 、 こ れ ら の シ ン ボ ル で も 定 義 さ れ る 。 プ ロ グ ラ ム の 実 行 開 始 時 に 、 プ ロ グ ラ ム ブ レ ー ク は &end の 近 く の ど こ か (お そ ら く 次 の ペ ー ジ の 先 頭 ) に な る 。 し か し な が ら 、 brk(2)malloc(3) で メ モ リ ー が 割 り 当 て ら れ る に 連 れ て 、 プ ロ グ ラ ム ブ レ ー ク は 変 化 し て い く 。 引 き 数 に 0 を 指 定 し て sbrk(2) を 呼 び 出 す こ と で 、 プ ロ グ ラ ム ブ レ ー ク の 現 在 値 を 知 る こ と が で き る 。

下 記 の プ ロ グ ラ ム を 実 行 す る と 、 次 の よ う な 出 力 が 得 ら れ る 。

$ ./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; /* 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); }

関 連 項 目

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

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。