[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

/Documentation/kernel/elf-notes.html



伊藤誠@札幌市北区です。
netbsd@re.soum.co.jp で、今話題に出てる

/Documentation/kernel/elf-notes.html
です。

以前やってみて放置したままの奴なので、
ちょっと古いです。用語についても、
本人は内容および言語(英語/Cとも)を知らないでやってるので、
積極的な手直し(もしくは全面改定)を、よろしく。(^^;

PS.
>link to Japanese pages: evbsh3, mmeye

mmeye もだったんですね。(思いつき&非検証バレバレ。笑)
# 翻訳実績 1ページ分取り損ねた...(爆笑)

------- /Documentation/kernel/elf-notes.html -------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

<html>
<head>
<!-- Copyright (c) 1998, 1999, 2000
	The NetBSD Foundation, Inc.  ALL RIGHTS RESERVED. -->
<link rev="made" href="mailto:www@JP.NetBSD.ORG">
<title>Vendor-specific ELF Note Elements</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">

<table><tr><td>
<a href="../../Misc/daemon-copy.html">
<img align="middle" src="../../images/BSD-daemon.jpg" border=0
width=146 height=129 alt="BSD daemon"></a>
</td><td align=center>
<h1>NetBSD ドキュメンテーション:</h1>
<h1>ベンダー特有の ELF 記号要素(Note Elements)</h1>
</td></tr></table>
<p>

さまざまな オペレーティングシステム ベンダー が
異なるシステムコールインターフェイスを要求する ELF バイナリー
を出荷しています。

 オペレーティングシステムが ELF プログラムが実行できるかどうか、
 どうやって実行するか(例えば どの OS エミュレーションを使うのか)を
 正しく 決定する 手助けのために、
いくつかのオペレーティングシステムのベンダー は
 ELF バイナリーの PT_NOTE セクションに ベンダー特有の記号要素 (note elements) 
を付け始めました。

<p>
このページ は
 バイナリーの PT_NOTE セクションで オペレーティングシステムの識別のために使わ
れている
 ベンダー特有の 記号要素 についての知識の宝庫に
しようと思います。 それ には、次の情報が含まれています:

<ul>
<li><a href="#note-format">ELF 記号要素 のフォーマット</a>
<li><a href="#note-names">知られている ELF 記号名</a>
<li><a href="#note-contents">ベンダー特有の ELF 記号</a>
<li><a href="#note-creation">ELF PT_NOTE セクションの作成</a>
</ul>

<p>

もし、あなたのオペレーティングシステムが
 ベンダー特有記号要素
をバイナリーのマークに使っていて、ここの一覧に載っていないなら、
<a href="mailto:cgd@netbsd.org">Chris Demetriou</a> まで、
その記号の情報をメールしてください。(訳注:たぶん英文で)

<h2><a name="note-format"> ELF Note Element のフォーマット</a></h2>

全ての ELF Note Element は同じ基本構造を持っていて:

<pre>
	Name Size	4 bytes (整数)
	Desc Size	4 bytes (整数)
	Type		4 bytes (たいてい整数として解釈されます)
	Name		可変長, 4 byte 境界で詰め物をされた
	Desc		可変長, 4 byte 境界で詰め物をされた
</pre>

<p>
Name , Desc 各フィールドの(詰め物を除いた)サイズの決定をする 
Name Size , Desc Size 各フィールドは
 整数型 ( byte 順 はバイナリーの ELF ヘッダーに指定されています)です。

<p>
Name field は ベンダー が記号のフォーマットに基づいて 指定します。
一般的に、 ベンダーはプロジェクトや会社名に関連した名前を使います。

例えば、 GNU Project その名前に "GNU" を使います。

ELF Note Name は、note の意味を解釈しようという時混乱するといけないので、
どの 2つの ベンダー も同じ物を使わないようにするべきです。

<p>
Type フィールド はベンダー特有ですが、記号の特定において、
たいてい整数型として扱われます。

<p>
Desc フィールド は ベンダー特有で、 たいてい記号の型に依存するデータが含まれ
ています。

<h2><a name="note-names">知られている ELF 記号 名</a></h2>

下記は ELF Note Names で使われている事が知られている文字列と
それを使っている組織です。
  Names の 語長 が 4 の倍数で無いものは 詰め物で埋められますが、
与えられた長さだけを調べるようにするべきです。

<pre>
    Note Name 文字列                組織
    ----------------            ------------
    "NetBSD\0"                  <a href="#note-contents-netbsd">The NetBSD 
Project</a>
    0x4e 0x65 0x74 0x42 0x53 0x44 0x00 (語長:7)

    "GNU\0"                     <a href="#note-contents-gnu">The GNU 
Project</a>
    0x47 0x4e 0x55 0x00 (語長:4)
</pre>


<h2><a name="note-contents">ベンダー特有 ELF 記号</a></h2>

この節にはベンダー PT_NOTE セクションで使っている 
 ベンダーによって、 split up分離しているELF 記号のフォーマットに関する情報
が含まれています。

<dl>

<dt><b><a name="note-contents-netbsd">The NetBSD Project</a></b>
<dd>
 NetBSD には2つの ベンダー 特有 の ELF 記号があって、
OS バージョン記号とエミュレーション Name 記号です。

前者は、どの OS バージョンの native バイナリーかを示すのに使われ、
 native バイナリーを識別するのにも使えます。

後者は、実行時にどのエミュレーションコードセットを使えば良いかを示す名前と共
に、
バイナリーを (native と 非-native の)マークするのに使われます。

<p>
 NetBSD OS バージョン 記号 のフォーマットは:

<pre>
    Name Size:          7
    Desc Size:          4
    Type:               4-byte 整数  0x01 という値が入っている
    Name:               "NetBSD\0" (8 byte に合わせて詰め物がされています)
    Desc:               4-byte 整数 NetBSD OS バージョン定数が入っている
</pre>

<p>
 NetBSD エミュレーション Name 記号 のフォーマットは:

<pre>
    Name Size:          7
    Desc Size:          variable
    Type:               4-byte 整数 0x02 という値が入っている
    Name:               "NetBSD\0" (8 byte に合わせて詰め物がされています)
    Desc:               バイナリーを実行するのに使うエミュレーションを名づけ
た
                        NUL-terminated 文字列
                        (次の4バイト境界まで詰め物された)
</pre>

<dt><b><a name="note-contents-gnu">The GNU Project</a></b>
<dd>
 glibc 2.1 以降では、 GNU project は 
 GNU オペレーティングシステム とどのバージョンのシステムで構築されたバイナ
リーか
を示すのに、単一の ELF Note を使い、
  そのフォーマットは:

<pre>
    Name Size:          4
    Desc Size:          4
    Type:               4-byte 整数 0x01 という値が入っている
    Name:               "GNU\0"
    Desc:               4-byte 整数 OS/version (下記参照のこと)
</pre>

 OS/version 値 はこのようにエンコードされていて:

<pre>
    0xAAMMmmss

    AA = ABI (0 = Linux, 1 = Mach/Hurd)
    MM = ABI major バージョン番号
    mm = ABI minor バージョン番号
    ss = ABI micro バージョン番号
</pre>

例えば、 OS/version が 0x01020304 というのは
 Mach/Hurd システムの ABI バージョン 2.3.4 が必要なバイナリーだと言うことを示
します。

</dl>

<h2><a name="note-creation">ELF PT_NOTE セクションの作成</a></h2>

バイナリーを作るために、 GNU binutils 2.8 かそれ以降を使っていれば、
最終版のオブジェクトファイルに PT_NOTE セクション を生成することができます。

 PT_NOTE セクションを作るには、
 オブジェクトファイルの一つに
 ".note" 文字列と "allocate" 属性セットを持つ文字列を伴うセクションをつくりま
す 
 (システムにとって、デフォルトで PT_NOTE エントリーを生成時、 
 これは実行時開始コードの一般的なものです)。

そのセクションで作られた ELF Note は、正確に配置されます。

最終的なリンクが終わったとき、
 ".note" 文字列 name をもつ全セクションと
 "allocate" とマークされた全セクションは、
最終オブジェクトファイルにおいて、
 PT_NOTE セクション内に配置されるでしょう。

<p>
   GNU アセンブラー の例では、最終リンク時に PT_NOTE セクション を作る入力物
は:

<pre>
    .section ".note.ident", "a"
    .p2align 2
    .long 5                 # name サイズ (詰め物含まず)
    .long 8                 # desc サイズ (詰め物含まず)
    .long 0x01234567        # type
    .ascii "NaMe\0\0\0\0"   # name (4 byte 境界で詰め物をされた)
    .long 0x76543210        # desc (4 byte 境界で詰め物をされた)
    .long 0x89abcdef
</pre>

<p>
この例では ".note.ident" と呼ばれ、 "allocate" とマークされた、
(最終リンク時に PT_NOTE セクション と変わる)
1つの note を含むセクションを作るでしょう。

 この note は type が 0x012345678,(訳注9桁???)、  name が "NaMe\0" で、
 desc 値は、2つの 4-byte 整数、0x76543210 と 0x89abcdef です。
<p>

<hr>
<a href="">Up to <em>NetBSD ドキュメンテーション: Kernel</em></a>
<hr>

<table width="100%"><tr><td>
  <table><tr><td>
    <a href="../../"><img
        src="../../images/NetBSD-banner.gif" border="0"
        width="91" height="42" alt=""></a>
  </td><td>
    <a href="../../"><img
        src="../../images/empty.gif" border="0"
        width="1" height="1" alt="NetBSD ">ホームページ</a>
  </td></tr></table>
</td><td>
  <table><tr><td>
    <a href="../../Documentation/"><img
        src="../../images/NetBSD-banner.gif" border="0"
        width="91" height="42" alt=""></a>
  </td><td> 
    <a href="../../Documentation/"><img
        src="../../images/empty.gif" border="0"
        width="1" height="1" alt="NetBSD ">ドキュメンテーションのトップ</a>
  </td></tr></table>
</td></tr></table>

<hr>
<address>
  <small>
  <a href="../../Misc/feedback.html">(Contact us)</a>
  $NetBSD: elf-notes.html,v 1.6 2000/09/19 11:33:05 dent Exp $<br>
  <a href="../../Misc/disclaimer.html">Copyright &copy;
    1998, 1999, 2000
    The NetBSD Foundation, Inc.  ALL RIGHTS RESERVED.</a>
  </small>
</address>

</body>
</html>

----
ITOU Makoto  aaa44850@pop01.odn.ne.jp