2017-05-21 7 views
1

ELFでobjdumpを実行して、特定の関数や変数のアドレスやサイズを取得する必要があります。objcopyは、後で実行する操作のために別の形式に変換します。特に最初の部分では、の結果に対して行われた操作のいくつかは複雑なので、私はそれを実行するために小さなC++アプリケーションを作成しました。それは動作しますが、現在はgccのobjdumpobjdopyのパラメータには直接systemコールが含まれています。objdumpとobjcopyをc/C++ライブラリとして

私はこのアプローチが気に入らない理由がいくつかあります。主なものは、PC上でそれらを持っているユーザーに依存する必要があるか、自分の実行可能ファイルで配布し、それを一種の動的ライブラリではなく、実行可能ファイルの形式で、どちらも好きではありません。

私の質問は、同じ操作を行うために(できれば静的に)リンクできる(gcc?)ライブラリの形式ですか?私はむしろgccと密接に関係していると思っています。特にgccとの互換性については、入力ファイルとして同じ出力を与えています。

+0

解決しようとしている実際のプロブレンは何ですか? *なぜ*あなたはこれをやりたいのですか? –

+0

基本的に 'objdump/objcpy'の部分を書き直したいのですか?次に、[libbfd](ftp://ftp.gnu.org/old-gnu/Manuals/bfd-2.9.1/html_mono/bfd.html) – kaylum

+0

@JesperJuhlを見てみよう。議論には関係ないが、あなたが尋ねたように、私は答えてくれると思う。これは、アプリケーションを起動(またはデバッグ)する前にいくつかの初期ステップを実行する必要がある埋め込み(ベアメタル)プロジェクトに取り組んでいるためです。特に、メインMCUに接続されている外部メモリにバイナリの一部をロードする必要があります。これは、MCUのRAM内に一時的に配置されたローダーによって最も簡単に実行できます。しかし、(内部メモリと外部メモリの両方に)ターゲットアプリケーションをロードするPCは、ローダー関数の位置を知る必要があります。したがって、 'objdump'。 –

答えて

3

これらのobj *ツールはすべてBFD libraryに基づいています。 objdumpがどのようにそのことを行い、それをコピーするかを見るならば、あなた自身のコードで同じことをすることができるはずです。

もう1つのことは、objdumpとフレンドから自分のプログラムにコードをコピーすることです。それはオープンソースであり、あなたはそれを行うことができます。あなた自身が必要とするのは、あなた自身のプログラムをGPLにすることだけです.BFDライブラリを使うにはどうしても必要です。

2

プログラムobjdumpとobjcopyはgccの一部ではなく、binutilsの一部です。言い換えれば、libbfdとlibopcodesもbinutilsの一部であり、それらには使用できる関数が含まれています。

+0

ありがとう、私はそれらを見てみましょう。 –

関連する問題