日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
OBJCOPY(1) GNU Development Tools OBJCOPY(1)
名称
objcopy - オブジェクトファイルのコピーと変換
書式
objcopy [-F bfdname|--target=bfdname]
[-I bfdname|--input-target=bfdname]
[-O bfdname|--output-target=bfdname]
[-B bfdarch|--binary-architecture=bfdarch]
[-S|--strip-all] [-g|--strip-debug]
[-K symbolname|--keep-symbol=symbolname]
[-N symbolname|--strip-symbol=symbolname]
[-G symbolname|--keep-global-symbol=symbolname]
[-L symbolname|--localize-symbol=symbolname]
[-W symbolname|--weaken-symbol=symbolname]
[-x|--discard-all] [-X|--discard-locals]
[-b byte|--byte=byte]
[-i interleave|--interleave=interleave]
[-j sectionname|--only-section=sectionname]
[-R sectionname|--remove-section=sectionname]
[-p|--preserve-dates]
[--debugging]
[--gap-fill=val] [--pad-to=address]
[--set-start=val] [--adjust-start=incr]
[--change-addresses=incr]
[--change-section-address section{=,+,-}val]
[--change-section-lma section{=,+,-}val]
[--change-section-vma section{=,+,-}val]
[--change-warnings] [--no-change-warnings]
[--set-section-flags section=flags]
[--add-section sectionname=filename]
[--rename-section oldname=newname[,flags]]
[--change-leading-char ] [--remove-leading-char]
[--srec-len=ival ] [--srec-forceS3]
[--redefine-sym old=new ]
[--weaken]
[--keep-symbols=filename]
[--strip-symbols=filename]
[--keep-global-symbols=filename]
[--localize-symbols=filename]
[--weaken-symbols=filename]
[--alt-machine-code=index]
[-v|--verbose]
[-V|--version]
[--help]
infile [outfile]
解説
GNU objcopy ユーティリティはあるオブジェクトファイルの内容を他へコピー
します。 objcopy はオブジェクトファイルの読み書きに GNU BFD ライブラ リ
を 使います。元のオブジェクトファイルと異なるフォーマットでコピー先のオ
ブジェクトファイルに書き込む事が可能です。 objcopy の厳密な挙動はコマン
ド ラ インの引数で制御します。 objcopy は、完全にリンクされたファイルな
ら、任意の 2 形式間でコピー可能であるはずですが、再配置可能オジェ ク ト
ファイルの任意の 2 形式間でのコピーは、期待通りに動作しないかもしれませ
ん。
objcopy は変換のために一時ファイルを作成して後でそれらを削除 し ま す。
objcopy は すべての変換作業で BFD を使います; つまり BFD が知っている
フォーマットはすべて知っている事になるので、明示的に指定しなくても大 部
分のフォーマットを認識する事が出来ます。
objcopy で出力先に srec を指定する (例えば -O srec を使う) ことで S レ
コードを生成できます。
objcopy で出力先に binary を指定する (例えば -O binary を使う) ことで生
のバイナリファイルを生成できます。 objcopy で生のバイナリファイルを生成
することは、本質的には入力のオブジェクトファイルの内容のメモリダンプ を
生 成 す ることになるでしょう。シンボルと再配置情報はすべて捨て去られま
す。メモリダンプは出力ファイルにコピーされる中で最も低位のセクション の
仮想アドレスから始まります。
S レコードや生のバイナリファイルを生成する場合は、 -S を使ってデバッグ
情報を含むセクションを削除するのが良いかもしれません。場合によっては -R
が、 バイナリファイルに必要無い情報を含むセクションを削除するのに有用で
しょう。
注 - objcopy は入力ファイルのエンディアンを変えられません。入力ファイル
にエンディアン性がある場合 (フォーマットによってはありません)、同じエン
ディアン性のファイルフォーマットかエンディアン性の無いファイル書式へ の
み、 objcopy はコピー可能となります。
オプション
infile
outfile
そ れ ぞれ入力と出力ファイルです。 outfile を指定しないと、 objcopy
は一時ファイルを作成してから そのファイル名を infile に付けかえてし
まいます。
-I bfdname
--input-target=bfdname
入力ファイルのオブジェクト形式を推測しようとするかわりに bfdname で
あるとして扱います。
-O bfdname
--output-target=bfdname
オブジェクト形式として bfdname を使って出力ファイルに書き込みます。
-F bfdname
--target=bfdname
入出力両方のオブジェクト形式が bfdname であるとします; つまり、入力
から出力へ無変換でデータを単純に転送するということです。
-B bfdarch
--binary-architecture=bfdarch
生のバイナリ入力ファイルをオブジェクトファイルへ変換する場合に有 用
で す。 この場合、出力アーキテクチャを bfdarch に設定可能です。入力
ファイルが既知の bfdarch を持つ場合、このオプションは無視されます。
こ の バ イナリデータは、変換処理によって作成された特殊シンボルを介
し、プログラムからアクセス可能となります。これらの シ ン ボ ル は、
_binary_objfile_start, _binary_objfile_end, _binary_objfile_size と
いう名前です。例えば、画像ファイルをオブジェクトファイルに変換 し、
コードからこれらのシンボルを使用することでアクセス可能となります。
-j sectionname
--only-section=sectionname
指 定したセクションのみ入力ファイルから出力ファイルへコピーし、他の
すべてのセクションを捨てます。このオプションは 2 回以上指定で き ま
す。 このオプションを不適切に使うと出力ファイルが利用できない物にな
るので注意して下さい。
-R sectionname
--remove-section=sectionname
sectionname で指定されたセクションをファイルから取り除きます。こ の
オプションは 2 回以上指定できます。このオプションを不適切に使うと出
力ファイルが利用できない物になるので注意して下さい。
-S
--strip-all
再配置とシンボルの情報を入力ファイルからコピーしません。
-g
--strip-debug
デバッグシンボルを入力ファイルからコピーしません。
--strip-unneeded
再配置処理に不要なシンボルをすべて取り除きます。
-K symbolname
--keep-symbol=symbolname
入力ファイルからシンボル symbolname だけをコピーします。こ の オ プ
ションは 2 回以上指定できます。
-N symbolname
--strip-symbol=symbolname
入 力ファイルからシンボル symbolname をコピーしません。このオプショ
ンは 2 回以上指定できます。
-G symbolname
--keep-global-symbol=symbolname
シンボル symbolname のみをグローバルにします。他のシンボル は す べ
て、 外部から参照できないようにファイル内ローカルにします。このオプ
ションは 2 回以上指定できます。
-L symbolname
--localize-symbol=symbolname
シンボル symbolname を、外部から参照できないようにファイル内ロー カ
ルにします。このオプションは 2 回以上指定できます。
-W symbolname
--weaken-symbol=symbolname
シンボル symbolname を weak にします。このオプションは 2 回以上指定
できます。
-x
--discard-all
入力ファイルからグローバルでないシンボルをコピーしません。
-X
--discard-locals
コンパイラが生成したローカルシンボルをコピーしません。 (それらは 通
常 L か . で始まります。)
-b byte
--byte=byte
入 力ファイルの各 byte 番めのバイトのみを取り出します (ヘッダデータ
には影響しません)。byte には 0 から interleave-1 の範囲の値を指定で
きます。 interleave は、-i または --interleave のオプションで指定す
るか、デフォルトの 4 です。このオプションは ROM に書き込む た め の
ファ イルを作成するために有用です。典型的には "srec" の出力指定と共
に使います。
-i interleave
--interleave=interleave
各 interleave バイト毎に 1 バイトだけをコピーします。どれをコピーす
る か は -b か --byte オプションで選びます。デフォルトは 4です。 -b
か --byte のどちらも指定されていない場合、 objcopy は本オプションを
無視します。
-p
--preserve-dates
出力ファイルのアクセス時刻と更新時刻を入力ファイルに合わせます。
--debugging
可 能であればデバッグ情報を変換します。特定のデバッグ情報しかサポー
トしておらず、変換処理は時間を要する可能性があるので、これはデ フォ
ルトではありません。
--gap-fill val
セ クション間のすきまを val で埋めます。この操作はセクションの load
address (LMA) に適用されます。低位アドレスのセクションのサイズを 増
やし、できた余分の空間を val で埋める事で実現しています。
--pad-to address
ロードアドレス address まで出力ファイルに詰め物をします。これは最後
のセクションのサイズを増やす事で行われます。できた余 分 の 空 間 は
--gap-fill で指定された値 (デフォルトは 0) で埋められます。
--set-start val
新しいファイルの開始アドレスを val に設定します。すべてのオブジェク
トファイル形式が開始アドレスの設定をサポートしているわけではあり ま
せん。
--change-start incr
--adjust-start incr
開始アドレスを、incr を加算する事で変更します。すべてのオブジェクト
ファイル形式が開始アドレスの設定をサポートしているわけではありま せ
ん。
--change-addresses incr
--adjust-vma incr
開 始 ア ドレスおよびすべてのセクションの VMA および LMA のアドレス
を、incr を加算する事で変更します。いくつかのオブジェクトファイル形
式 で は セクションのアドレスを任意の値に変更する事は許されていませ
ん。これはセクションを再配置するのではない事に注意して下さい; も し
プ ログラムがセクションが特定のアドレスにロードされる事を期待してお
り、そしてこのオプションがセクションを異なるアドレスにロードする よ
うに使われた場合は、プログラムは正常に動作しないかもしれません。
--change-section-address section{=,+,-}val
--adjust-section-vma section{=,+,-}val
指定された section の VMA および LMA アドレスを、設定または変更しま
す。= が指定された場合は、セクションのアドレスは val に設定さ れ ま
す。そうでなければ val がセクションのアドレスに加算または減算されま
す。上の --change-addresses に書かれているコメントも参照し て 下 さ
い。 入 力ファイルに section が存在しない場合は、 --no-change-warn-
ings が指定されていなければ警告が出力されます。
--change-section-lma section{=,+,-}val
指定された section の LMA アドレスを、設定または変更します。 LMA ア
ド レスは、プログラムロード時にセクションがロードされるメモリのアド
レスです。これは通常、プログラム実行時のセクションのアドレスであ る
VMA アドレスと同じですが、システムによっては、特に ROM にプログラム
が保持されるものにおいては、両者は異なります。 = が指定された 場 合
は、 セ クションのアドレスは val に設定されます。そうでなければ val
がセクションのアドレ ス に 加 算 ま た は 減 算 さ れ ま す。 上 の
--change-addresses に書かれているコメントも参照して下さい。入力ファ
イルに section が存在しない場合は、 --no-change-warnings が指定され
ていなければ警告が出力されます。
--change-section-vma section{=,+,-}val
指定された section の VMA アドレスを、設定または変更します。 VMA ア
ドレスは、プログラムが実行開始した後にセクションが置かれるアドレ ス
で す。 こ れは通常、メモリにロードされるセクションのアドレスである
LMA アドレスと同じですが、システムによっては、特に ROM にプログラム
が 保 持されるものにおいては、両者は異なります。 = が指定された場合
は、セクションのアドレスは val に設定されます。そうでなけれ ば val
が セ ク ショ ン の ア ド レ ス に 加 算 ま た は減算されます。上の
--change-addresses に書かれているコメントも参照して下さい。入力ファ
イルに section が存在しない場合は、 --no-change-warnings が指定され
ていなければ警告が出力されます。
--change-warnings
--adjust-warnings
--change-section-address, --change-section-lma, --change-sec-
tion-vma のいずれかが指定された場合、指定されたセクションが存在しな
いと警告が出力されます。これはデフォルトです。
--no-change-warnings
--no-adjust-warnings
--change-section-address, --adjust-section-lma, --adjust-sec-
tion-vma のいずれかが指定された場合、指定されたセクションが存在しな
くても警告を出力しません。
--set-section-flags section=flags
指定されたセクションのフラグを設定します。引数 flags はフラグ名をコ
ンマで区切った文字列です。認識するフラグ名は alloc, contents, load,
noload, readonly, code, data, rom, share, debug です。内容を持た な
い セクションに対して contents フラグを設定可能ですが、内容を持たな
いセクションに対して contents フラグをクリアすることは無意味で す。
単 にそのセクションを削除してください。すべてのフラグがすべてのオブ
ジェクトファイル形式で意味を持つとは限りません。
--add-section sectionname=filename
sectionname で指定された名前の新しいセクションをファイルのコピー 中
に 付け加えます。新しいセクションの内容はファイル filename から取り
込まれます。セクションのサイズはファイルのサイズになります。この オ
プ ションは任意の名前を持つセクションをサポートできるファイル形式で
のみ機能します。
--rename-section oldname=newname[,flags]
セクションの名前を oldname から newname へ変えます。この処理にお い
て、セクションフラグを flags に変えることもできます。リンカスクリプ
トを使ってリネームすることに対する利点は、出力がオブジェクトファ イ
ルのままであり、リンク済実行形式とはならないことです。
こ の オ プションが特に有用なのは、入力フォーマットがバイナリの時で
す。なぜなら、本オプションは .data セクションを常に作成するか ら で
す。例えば、バイナリデータを含む .rodata セクションを代りに作成した
い場合、次のコマンドラインで実現可能です:
objcopy -I binary -O <output_format> -B <architecture> \
--rename-section .data=.rodata,alloc,load,readonly,data,contents \
<input_binary_file> <output_object_file>
--change-leading-char
いくつかのオブジェクトファイル形式でシンボルの最初に特殊文字が使 わ
れ ています。もっとも一般的なのはアンダスコアで、しばしばコンパイラ
が各シンボルの前に付け加えます。このオプションは objcopy に、 オ ブ
ジェ クトファイル形式を変換する時に各シンボルの始まりの文字を変更す
るよう指示します。変換前後のオブジェクトファイル形式がシンボルの 始
ま りに同じ文字を使っている場合は、このオプションは何もしません。そ
うでなければ、このオプションで文字を付け加える、または文字を削除 す
る、または文字を変更する事が、適切に行われます。
--remove-leading-char
グ ローバルシンボルの最初の文字が、オブジェクトファイル形式で使われ
るシンボルの最初に付加される特殊文字だった場合は、その文字を取り 除
き ます。シンボルに前置される最も一般的な文字はアンダスコアです。こ
のオプションは前置されているアンダスコアをすべてのグローバルシン ボ
ル から取り除きます。これはシンボル名の取り決めが異なるファイル形式
のファイルを一緒にリンクしたい場合に有用です。これは --change-lead-
ing-char とは異なります。なぜならこのオプションでは適切であれば、出
力のオブジェクトファイル形式とは関係なく常にシンボル名を変更して し
まうからです。
--srec-len=ival
srec 出力でのみ意味があります。 S レコードの長さを val に設定しま
す。この長さには、アドレス、データ、CRC フィールドも含まれます。
--srec-forceS3
srec 出力でのみ意味があります。 S1/S2 レコードの生成を防ぎ、S3 レ
コードのみのフォーマットにします。
--redefine-sym old=new
シンボルの名前を old から new へ変更します。ソースが無い 2 つのもの
リンクしようとしていて、名前の衝突があるときに有用でしょう。
--weaken
ファイルのすべてのグローバルシンボルを weak に変更 し ま す。 こ れ
は、-R オプションをリンカに使用して、他のオブジェクトとリンクするオ
ブジェクトを作成するときに有用です。T このオプションは、オブジェ ク
ト ファイルフォーマットが weak シンボルをサポートするときのみ効果が
あります。
--keep-symbols=filename
ファイル filename で列挙されている各シンボルに対し、 --keep-symbol
オ プションを適用します。 filename は単に平坦なファイルであり、1 行
に 1 シンボルが記述されます。行コメントは、ハッシュ文字で開始 し ま
す。このオプションは 2 回以上指定できます。
--strip-symbols=filename
ファイル filename で列挙されている各シンボルに対し、 --strip-symbol
オプションを適用します。 filename は単に平坦なファイルであり、1 行
に 1 シンボルが記述されます。行コメントは、ハッシュ文字で開始しま
す。このオプションは 2 回以上指定できます。
--keep-global-symbols=filename
ファイル filename で 列 挙 さ れ て い る 各 シ ン ボ ル に 対 し、
--keep-global-symbol オプションを適用します。 filename は単に平坦な
ファイルであり、1 行に 1 シンボルが記述されます。行コメントは、ハッ
シュ文字で開始します。このオプションは 2 回以上指定できます。
--localize-symbols=filename
ファ イ ル filename で 列挙されている各シンボルに対し、 --local-
ize-symbol オプションを適用します。 filename は単に平坦なファイルで
あり、1 行に 1 シンボルが記述されます。行コメントは、ハッシュ文字で
開始します。このオプションは 2 回以上指定できます。
--weaken-symbols=filename
ファイル filename で列挙されている各シンボルに対し、 --weaken-sym-
bol オプションを適用します。 filename は単に平坦なファイルであり、1
行に 1 シンボルが記述されます。行コメントは、ハッシュ文字で開始しま
す。このオプションは 2 回以上指定できます。
--alt-machine-code=index
出 力アーキテクチャが別のマシンコードを持つ場合、デフォルトのコード
の代りに index 番目のコードを使用します。あるマシンに公式なコードが
割 り当てられており、ツールチェーンが新規コードを採用するが、他のア
プリケーションは元のコードが使われることに依存している場合、有用 と
なります。
-V
--version
objcopy のバージョン番号を表示して終了します。
-v
--verbose
出 力を冗長にします: 変更されたすべてのオブジェクトファイルをリスト
します。アーカイブの場合は "objcopy -V" でアーカイブのメンバがす べ
てリストされます。
--help
objcopy のオプションのサマリを表示して終了します。
関連項目
ld(1), objdump(1), Info の binutils の項。
COPYRIGHT
Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts. A copy of the license is included in the section entitled "GNU
Free Documentation License".
日本語訳
野首 寛高(hnokubi@yyy.or.jp): FreeBSD 用に翻訳
3rd Berkeley Distribution 2002-08-05 OBJCOPY(1)