2017-02-19 9 views
0

objcopy -oバイナリを使用してelfファイルから作成した生のバイナリを作成しました。与えられたオフセットでそれを再配置することは可能ですか?私が探している効果は、--change-addressesオプションを使用してバイナリに変換するのと似ています。バイナリの再配置は可能ですか?

man obdjdumpから予め

答えて

0

にありがとうございました:

objcopyを(例えば、-Oバイナリ使用)をバイナリの出力ターゲットを使用して生のバイナリファイルを生成するために使用することができます。 objcopyが生のバイナリファイルを生成すると、入力オブジェクトファイルの内容のメモリダンプを本質的に
生成します。 すべてのシンボルと再配置情報は破棄されます。メモリダンプは、出力ファイルにコピーされた最下部のロードアドレスから開始します。

(私が強調)

ですから、異なる場所にロードされます複数のセクションをエクスポートしている場合を除き、その後、バイナリにあなたがプッシュしている単一のセクションをシフトしても効果はありません。

+0

私はあなたが何を意味するか分かりません。このコードは、実際の物理アドレス空間の組み込み環境で実行されることを意図しています。実際には単一のセクションを移動することが重要です。バイナリは、ロードされる特定の場所で動作するように準備されている必要があります。 – joseCM

+0

しかし、これは '-Oバイナリ'が生成するバイナリの種類ではありません。 "メモリダンプは、最下位セクションのロードアドレスから開始します"。したがって、セクションが1つしかない場合は、開始位置にかかわらず、開始は常にバイナリダンプの開始になります。 –

+0

もちろんです。しかし、リンカスクリプトでは、実際のVMAアドレスは、対象のアドレス範囲に指定されます。たとえば、グローバル変数の場合はアドレスXにあり、コードはそのアドレスを参照します。変数を参照するコード(現在はX + OFFSETにある)が正しいアドレスを参照するように変更されるように、バイナリを変更したいと思います。 – joseCM

関連する問題