私が従うプロセスBaking Pi – オペレーティングシステムの開発。彼らはその中に別のセクションを作りました.init
。
それでは、(単にではなく)セクションをいくらでも生成でき、.data, .bss, .text
どこにでもコードとデータ(noで初期化)を入れることができますか?
それでは、祭りの目的は何ですか?
ベストアンサー1
初期研究
一見すると、答えは「いいえ」のようです。 ELF仕様では、次の部分のみを許可します。
C32/kernel/bin/.process.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000333 00000000 00000000 00000040 2**4
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000050 00000000 00000000 00000380 2**5
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 000003d0 2**2
ALLOC
3 .note 00000014 00000000 00000000 000003d0 2**0
CONTENTS, READONLY
4 .stab 000020e8 00000000 00000000 000003e4 2**2
CONTENTS, RELOC, READONLY, DEBUGGING
5 .stabstr 00008f17 00000000 00000000 000024cc 2**0
CONTENTS, READONLY, DEBUGGING
6 .rodata 000001e4 00000000 00000000 0000b400 2**5
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .comment 00000023 00000000 00000000 0000b5e4 2**0
CONTENTS, READONLY
ウィキペディアなど、他のソースでも最も基本的な部分名のみが表示されるため、これらの名前が許可されていると考えられます。さらなる検索により、次の2つのセクションが明らかになりました。
.fini
このセクションには、プロセス終了コードを容易にするための実行可能なガイドラインが含まれています。つまり、プログラムが正常に終了すると、システムはこのコードスニペットを実行する準備をします。
。内部に
このセクションには、プロセス初期化コードに貢献する実行可能なガイドラインが含まれています。つまり、プログラムが実行を開始すると、システムはデフォルトのプログラムエントリポイント(Cプログラムではmainと呼ばれる)の前にこのセクションのコードを実行するように配置します。
.init
一部は.fini
特別な用途に使用されます。このセクションに機能が配置されると、.init
システムは基本機能の前にその機能を実行します。また、このセクションに配置されている機能は、.fini
基本機能が返された後にシステムによって実行されます。コンパイラはこの機能を利用して、C ++でグローバルコンストラクタとデストラクタを実装します。
源泉:http://l4u-00.jinr.ru/usoft/WWW/www_debian.org/Documentation/elf/node3.html
しかし、そう、あなたはどんな部分でも持つことができます。
しかし、ありがとう。@プログラマー実際の状況を教えてください。ELF仕様v1.2、1-16ページに次の段落があります。
ドット(.)が接頭辞で付けられたセクション名はシステム用に予約されていますが、既存の意味が満たされている場合は、アプリケーションでこれらのセクションを使用できます。アプリケーションは、システム部分との競合を避けるためにプレフィックスなしで名前を使用できます。オブジェクトファイル形式を使用すると、上記のリストにない部分を定義できます。オブジェクトファイルには、同じ名前の複数の部分があります。
したがって、プログラムがどの部分を使用したいかによって、すべてが変わるようです。