[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 ©
1998, 1999, 2000
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.</a>
</small>
</address>
</body>
</html>
----
ITOU Makoto aaa44850@pop01.odn.ne.jp