OBJCOPY
Section: GNU Development Tools (1)
Updated: 2004-04-09
索引
jman
索引
名称
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]
[-w|--wildcard]
[-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]
[--redefine-syms=filename]
[--weaken]
[--keep-symbols=filename]
[--strip-symbols=filename]
[--keep-global-symbols=filename]
[--localize-symbols=filename]
[--weaken-symbols=filename]
[--alt-machine-code=index]
[--prefix-symbols=string]
[--prefix-sections=string]
[--prefix-alloc-sections=string]
[--add-gnu-debuglink=path-to-file]
[--only-keep-debug]
[--writable-text]
[--readonly-text]
[--pure]
[--impure]
[-v|--verbose]
[-V|--version]
[--help] [--info]
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 は入力ファイルのエンディアンを変えられません。
入力ファイルにエンディアン性がある場合 (フォーマットによっては
エンディアン性がないものがあります)、
同じエンディアン性のファイルフォーマットか
エンディアン性の無いファイル書式 (例: srec) へのみ、
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 回以上指定できます。
- -w
-
- --wildcard
-
他のコマンド行オプションの中で使用される symbolname で、
正規表現の使用を許可します。
疑問符 (?)、アスタリスク (*)、バックスラッシュ (\)、角括弧 ([])
演算子をシンボル名の中のどこででも使用可能にします。
シンボル名の最初の文字が感嘆符 (!) である場合、そのスイッチの意味が
そのシンボルに対しては逆になります。
例えば、
-w -W !foo -W fo*
により、objcopy は ``foo'' を除き、``fo'' で始まるすべてのシンボルを
weak にします。
- -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-warnings が指定されていなければ警告が出力されます。
- --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-section-vma のいずれかが指定された場合、
指定されたセクションが存在しないと警告が出力されます。
これはデフォルトです。
- --no-change-warnings
-
- --no-adjust-warnings
-
--change-section-address,
--adjust-section-lma,
--adjust-section-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-leading-char とは異なります。
なぜならこのオプションでは適切であれば、
出力のオブジェクトファイル形式とは関係なく
常にシンボル名を変更してしまうからです。
- --srec-len=ival
-
srec 出力でのみ意味があります。
S レコードの長さを val に設定します。
この長さには、アドレス、データ、CRC フィールドも含まれます。
- --srec-forceS3
-
srec 出力でのみ意味があります。
S1/S2 レコードの生成を防ぎ、S3 レコードのみのフォーマットにします。
- --redefine-sym old=new
-
シンボルの名前を old から new へ変更します。
ソースが無い 2 つのものリンクしようとしていて、
名前の衝突があるときに有用でしょう。
- --redefine-syms=filename
-
ファイル filename にリストされたシンボルの組 "old new"
のそれぞれに対し、--redefine-sym を適用します。
filename は単なるフラットファイルであり、シンボルの組 1 つにつき
1 行を占めます。
ハッシュ文字によりコメント行を置くことができます。
このオプションは複数回指定することができます。
- --weaken
-
ファイルのすべてのグローバルシンボルを weak に変更します。
これは、-R オプションをリンカに使用して、
他のオブジェクトとリンクするオブジェクトを作成するときに有用です。
このオプションは、オブジェクトファイルフォーマットが
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 で列挙されている各シンボルに対し、
--localize-symbol オプションを適用します。
filename は単に平坦なファイルであり、1 行に 1 シンボルが記述されます。
行コメントは、ハッシュ文字で開始します。
このオプションは 2 回以上指定できます。
- --weaken-symbols=filename
-
ファイル filename で列挙されている各シンボルに対し、
--weaken-symbol オプションを適用します。
filename は単に平坦なファイルであり、1 行に 1 シンボルが記述されます。
行コメントは、ハッシュ文字で開始します。
このオプションは 2 回以上指定できます。
- --alt-machine-code=index
-
出力アーキテクチャが別のマシンコードを持つ場合、
デフォルトのコードの代りに index 番目のコードを使用します。
あるマシンに公式なコードが割り当てられており、
ツールチェーンが新規コードを採用するが、
他のアプリケーションは元のコードが使われることに依存している場合、
有用となります。
- --writable-text
-
出力ファイルに書き込み可能の印を付けます。
このオプションはすべてのファイル形式に対して意味があるわけでは
ありません。
- --readonly-text
-
出力ファイルに書き込み禁止の印を付けます。
このオプションはすべてのファイル形式に対して意味があるわけでは
ありません。
- --pure
-
出力ファイルにデマンドページの印を付けます。
このオプションはすべてのファイル形式に対して意味があるわけでは
ありません。
- --impure
-
出力ファイルに impure の印を付けます。
このオプションはすべてのファイル形式に対して意味があるわけでは
ありません。
- --prefix-symbols=string
-
出力ファイルのシンボルすべてに string を前置します。
- --prefix-sections=string
-
出力ファイルのセクションすべてに string を前置します。
- --prefix-alloc-sections=string
-
出力ファイル中の割り当てられたセクションすべての名前すべてに
string を前置します。
- --add-gnu-debuglink=path-to-file
-
path-to-file への参照を含む .gnu_debuglink セクションを
生成し、出力ファイルに追加します。
- --only-keep-debug
-
ファイルをストリップします。
すなわち、--strip-debug
により除去される任意のセクションを削除し、デバッグ用
セクションを残します。
この意図は、このオプションと --add-gnu-debuglink とを
組み合わせて使用し、2 パートの実行可能ファイルを生成することに
あります。
1 番目はストリップされたバイナリで、RAM と
配布ファイルにおいてより少ない空間を占めるようになり、
2 番目はデバッグ情報ファイルで、デバッグ機能が要求される場合にのみ
必要となるものです。
これらのファイルの生成のための推奨手順は次のようになります。
-
- 1.<実行可能形式を普通どおりにリンクする。ここでは、その名前を>
-
"foo" とする...
- 1.<objcopy --only-keep-debug foo foo.dbg を実行し>
-
デバッグ情報を含むファイルを生成する。
- 1.<objcopy --strip-debug foo を実行し>
-
ストリップされた実行可能形式を生成する。
- 1.<objcopy --add-gnu-debuglink=foo.dbg fooを実行し>
-
デバッグ情報へのリンクをストリップ済の実行可能形式に付加する。
-
注意: デバッグ情報ファイルのための拡張子の ".dbg"
は、任意のものを選択できます。
また、"--only-keep-debug" のステップをやるか
やらないかも選択次第です。代わりに次のように行なうこともできます。
- 1.<実行可能形式を普通どおりリンクする>
-
- 1.<foo を foo.full にコピーする>
-
- 1.<objcopy --strip-debug fooを実行する>
-
- 1.<objcopy --add-gnu-debuglink=foo.full foo を実行する>
-
-
すなわち、 --add-gnu-debuglink が指すファイルは
完全な情報を持つ実行可能形式でも構いません。
--only-keep-debug
スイッチを使い生成したファイルでなくても構いません。
- -V
-
- --version
-
objcopy
のバージョン番号を表示して終了します。
- -v
-
- --verbose
-
出力を冗長にします: 変更されたすべてのオブジェクトファイルをリストします。
アーカイブの場合は "objcopy -V" でアーカイブのメンバがすべて
リストされます。
- --help
-
objcopy
のオプションのサマリを表示して終了します。
- --info
-
利用可能なアーキテクチャとオブジェクト形式すべてのリストを表示します。
索引
関連項目
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 用に翻訳
索引
Index
- 名称
-
- 書式
-
- 解説
-
- オプション
-
- 関連項目
-
- COPYRIGHT
-
- 日本語訳
-
Time: 07:06:14 GMT, January 12, 2009