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]
[ --strip-unneeded-symbol= symbolname]
[ -G symbolname| --keep-global-symbol= symbolname]
[ --localize-hidden]
[ -L symbolname| --localize-symbol= symbolname]
[ --globalize-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]
[ --reverse-bytes= num]
[ --srec-len= ival] [ --srec-forceS3]
[ --redefine-sym old= new]
[ --redefine-syms= filename]
[ --weaken]
[ --keep-symbols= filename]
[ --strip-symbols= filename]
[ --strip-unneeded-symbols= filename]
[ --keep-global-symbols= filename]
[ --localize-symbols= filename]
[ --globalize-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]
[ --keep-file-symbols]
[ --only-keep-debug]
[ --extract-symbol]
[ --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 に記述されたすべての形式にアクセスすることができ、したがって、ほとんどの形式を明白に伝えなくても認識することができます。
(例えば、 -O srec を使用して) srec の出力ターゲットを使用することによって S レコードを生成するために objcopy を使用することできます。
(例えば、 -O binary を使用して) binary の出力ターゲットを使用することによって生のバイナリファイルを生成するために objcopy を使用することできます。 objcopy が生のバイナリファイルを生成するとき、本質的に入力オブジェクトファイルの内容のメモリダンプを生成します。すべてのシンボルと再配置情報は、捨てられます。メモリダンプは、出力ファイルにコピーされる中で最も低いセクションのロードアドレスで始まります。
S レコードまたは生のバイナリファイルを生成するとき、デバッグ情報を含むセクションを削除するために -S を使用することは役に立ちます。ある場合には、 -R は、バイナリファイルに必要とされない情報を含むセクションを削除するために役に立ちます。
注--- objcopy は、入力ファイルのエンディアンを変更することはできません。入力形式にエンディアンがあるなら (ある形式にはありません)、 objcopy は、同じエンディアンがあるか、またはエンディアンがないファイル形式 (例えば、 srec) のみに入力をコピーできます。 (しかしながら、 --reverse-bytes option を参照してください。)
オプション
- 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 回以上与えることができます。
- --strip-unneeded-symbol= symbolname
- 再配置に必要でないなら、ソースファイルからシンボル symbolname をコピーしません。このオプションは、2 回以上与えることができます。
- -G symbolname
- --keep-global-symbol= symbolname
- シンボル symbolname のみをグローバルに保持します。他のすべてのシンボルが外部的に目に見えないように、ファイルでローカルにします。このオプションは、2 回以上与えることができます。
- --localize-hidden
- ELF オブジェクトで、ローカルとして隠された、または内部で目に見えるシンボルをすべてマークします。このオプションは、 -L のようなシンボル特有のローカル化されたオプションで適用されます。
- -L symbolname
- --localize-symbol= symbolname
- シンボル symbolname が外部的に目に見えないように、ファイルでローカルにします。このオプションは、2 回以上与えることができます。
- -W symbolname
- --weaken-symbol= symbolname
- シンボル symbolname を weak (弱い) にします。このオプションは、2 回以上与えることができます。
- --globalize-symbol= symbolname
- シンボルが定義されるファイルの外側で目に見えることができるようにシンボル symbolname にグローバルなスコープを与えます。このオプションは、2 回以上与えることができます。
- -w
- --wildcard
-
他のコマンド行オプションで使用される
symbolname で正規表現を可能にします。疑問符 (?)、アスタリスク (*)、バックスラッシュ ((\) と角括弧 ([]) 演算子をシンボル名のどこでも使用することができます。シンボル名の最初の文字が感嘆符 (!) であるなら、スイッチの意味は、そのシンボルの逆にされます。例えば:
-w -W !foo -W fo*
- -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 に保持されるところでは、2 つは、異なっている場合があります。 = が使用されるなら、セクションアドレスは、 val に設定されます。そうでなければ、 val は、セクションアドレスに追加されるか、または、引かれます。上記の --change-addresses の下のコメントを参照してください。 section が入力ファイルに存在しな場合で、 --no-change-warnings が使用されていないなら、警告が、出力されます。
- --change-section-vma section {=,+,-} val
- 指定された section の VMA アドレスを設定するか、または変更します。 VMA アドレスは、いったんプログラムが実行し始めると、セクションが位置するアドレスです。通常、これは、セクションがメモリにロードされるアドレスである LMA アドレスと同じですが、いくつかのシステムでは、特に、プログラムが ROM に保持されるところでは、2 つは、異なっている場合があります。 = が使用されるなら、セクションアドレスは、 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 に変更します。これには、出力がオブジェクトファイルのままであるので名前の変更を実行するリンカのスクリプトを使用する利点があり、リンクされた実行形式になりません。
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
- いくつかのオブジェクトファイル形式では、シンボルの始めに特殊文字が使用されています。上記の最も一般的な文字は、コンパイラが、しばしばあらゆるシンボルの前に追加する、下線 (underscore) です。このオプションは、オブジェクトファイル形式を変換するとき、あらゆるシンボルの先導する文字を変更するように objcopy に伝えます。オブジェクトファイル形式が同じ先導する文字を使用するなら、このオプションは、効果がありません。そうでなければ、必要に応じて、文字を追加するか、文字を削除するか、または文字を変更します。
- --remove-leading-char
- グローバルシンボルの最初の文字がオブジェクトファイル形式によって使用される特別な先導する文字であるなら、その文字を削除します。最も一般的な先導する文字は、下線 (underscore) です。このオプションは、すべてのグローバルシンボルから先導する文字を削除します。利用者がシンボル名のために異なった規約で異なったファイル形式のオブジェクトを互いにリンクしたいなら、これは、役に立つかもしれません。出力ファイルのオブジェクトファイル形式にかかわらず、適切なときに、常にシンボル名を変更するので、これは、 --change-leading-char と異なっています、
- --reverse-bytes= num
-
出力の内容でセクションのバイトを逆にします。セクションの長さは、スワッピングが行われることができるために与えられた値によって均等に分割可能でなければなりません。インタリービングが実行される前に、逆にすることが行われます。
- --srec-len= ival
- srec 出力に対してのみ意味があります。生成される S レコードの最大の長さを ival に設定します。この長さは、アドレス、データと 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 つのシンボルの組がある、ただのフラットなファイルです。行のコメントは、ハッシュ文字 (#) で先導されます。このオプションは、2 回以上与えることができます。
- --weaken
- ファイル中のすべてのグローバルシンボルを weak (弱い) に変更します。 -R オプションをリンカに使用して、他のオブジェクトとリンクされるオブジェクトを構築するとき、これは、役に立つかもしれません。このオプションは、weak (弱い) シンボルをサポートするオブジェクトファイル形式を使用するときのみ、効果があります。
- --keep-symbols= filename
- ファイル filename にリストされた各シンボルに --keep-symbol オプションを適用します。 filename は、1 行ごとに 1 つのシンボルの組がある、ただのフラットなファイルです。行のコメントは、ハッシュ文字 (#) で先導されます。このオプションは、2 回以上与えることができます。
- --strip-symbols= filename
- ファイル filename にリストされた各シンボルに --strip-symbol オプションを適用します。 filename は、1 行ごとに 1 つのシンボルの組がある、ただのフラットなファイルです。行のコメントは、ハッシュ文字 (#) で先導されます。このオプションは、2 回以上与えることができます。
- --strip-unneeded-symbols= filename
- ファイル filename にリストされた各シンボルに --strip-unneeded-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 回以上与えることができます。
- --globalize-symbols= filename
- ファイル filename にリストされた各シンボルに --globalize-symbol オプションを適用します。 filename は、1 行毎に 1 つのシンボルがある単にフラットなファイルです。行のコメントは、ハッシュ文字 (#) によって先導されます。このオプションは、2 回以上与えることができます。
- --weaken-symbols= filename
- ファイル filename にリストされた各シンボルに --weaken-symbol オプションを適用します。 filename は、1 行ごとに 1 つのシンボルの組がある、ただのフラットなファイルです。行のコメントは、ハッシュ文字 (#) で先導されます。このオプションは、2 回以上与えることができます。
- --alt-machine-code= index
- 出力アーキテクチャに代替のマシンコードがあるなら、デフォルトのコード代わりに index 番目のコードを使用します。マシンに公式のコードが割り当てられ、ツールチェーンが、新しいコードを採用しているけれども、他のアプリケーションが、まだ使用される元のコードに依存している場合に、これは、役に立ちます。 ELF ベースのアーキテクチャに関して、 index の代替が存在していないなら、値は、ELF ヘッダの e_machine フールドに格納される絶対値の数として扱われます。
- --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 セクションを作成し、それを出力ファイルに追加します。
- --keep-file-symbols
- ファイルをストリップするとき、おそらく --strip-debug または --strip-unneeded によって、別のやり方でストリップされる、ソースファイル名を指定するあらゆるシンボルをそのままとします。
- --only-keep-debug
-
--strip-debug によってストリップされない任意のセクションの内容を移動して、デバッグセクションをそのまま残して、ファイルをストリップします。 ELF ファイルでは、これは、出力ですべてのノートセクションを保存します。訳注: ストリップについては、strip (1) を参照。
- 1.<いつもの通り実行形式をリンクする。次のように呼ばれると仮定し>
- "foo"次...
- 1.<"objcopy --only-keep-debug foo foo.dbg"を実行し>
- デバッグ情報を含むファイルを作成する。
- 1.<次を作成するために "objcopy --strip-debug foo"を実行する>
- ストリップされた実行形式。
- 1.<"objcopy --add-gnu-debuglink=foo.dbg foo"を実行する>
- ストリップされた実行形式にデバッグ情報へのリンクを追加する。
- 1.<いつもの通り実行形式をリンクする。>
- 1.<"foo"を "foo.full"にコピーする>
- 1.<"objcopy --strip-debug foo"を実行する>
- 1.<"objcopy --add-gnu-debuglink=foo.full foo"を実行する>
- --extract-symbol
- ファイルのセクションフラグとシンボルを保存しますが、すべてのセクションデータを削除します。特に、オプションは、次の通りです:
- *<あらゆるセクションの仮想とロードアドレスを 0 に設定します;>
- *<すべてのセクションの内容を削除します;>
- *<あらゆるセクションのサイズを 0 に設定します;そして>
- *<ファイルの開始アドレスを 0 に設定します.>
- -V
- --version
- objcopy のバージョン番号を表示します。
- -v
- --verbose
- 次の冗長な出力を行います: 変更されたすべてのオブジェクトファイルをリストします。アーカイブの場合に、 objcopy -V は、アーカイブのすべてのメンバをリストします。
- --help
- objcopy のオプションの概要を表示します。
- --info
- すべてのアーキテクチャを示すリストと利用可能なオブジェクト形式を表示します。
- @ file
-
file からコマンドラインのオプションを読み込みます。読み込まれたオプションは、オリジナルの @
file オプションの場所に代わって挿入されます。
file が存在しないか、または読み込むことができないなら、オプションは、文字通りに扱われ、取り除かれません。
関連項目
ld(1), objdump(1) と binutils のための Info エントリ。COPYRIGHT
Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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".
2010-10-30 | binutils-2.17.50 |