オブジェクトファイルにいくつのセクションを作成できますか?

オブジェクトファイルにいくつのセクションを作成できますか?

私が従うプロセス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

源泉:http://wiki.osdev.org/ELF

ウィキペディアなど、他のソースでも最も基本的な部分名のみが表示されるため、これらの名前が許可されていると考えられます。さらなる検索により、次の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ページに次の段落があります。

ドット(.)が接頭辞で付けられたセクション名はシステム用に予約されていますが、既存の意味が満たされている場合は、アプリケーションでこれらのセクションを使用できます。アプリケーションは、システム部分との競合を避けるためにプレフィックスなしで名前を使用できます。オブジェクトファイル形式を使用すると、上記のリストにない部分を定義できます。オブジェクトファイルには、同じ名前の複数の部分があります。

したがって、プログラムがどの部分を使用したいかによって、すべてが変わるようです。

おすすめ記事