5

これは私が時々遭遇する状況です:

仮想アドレッシングを使用しない組み込みシステムの場合、C または C++ コードからデバッグ情報を含めてコンパイルされた実行可能ファイルがあります。通常、COFF または ELF/DWARF (これら 2 つを混同しています) 形式です。

実行時に、PC で、名前が指定された変数のアドレスを特定したいと考えています。(例:「foo.bar [7] .baz」)これにより、組み込みシステムで変数の値を読み書きできます(この質問の範囲を超えるデバッグプロトコルが与えられます)。明らかに、スタックベースまたはヒープベースの変数は静的アドレスを持っていないため、アウトです。

TI の 2800 シリーズ DSP 用に TI のコンパイラから COFF ファイルを解析するために、C++ でこれを行う前に、これを行ったことがあります。1 つまたは 2 つの他のプロセッサの実行可能ファイルで同じ問題に直面しているため、このようなことを行う Java ライブラリが既に存在するかどうか疑問に思っていました。


更新: (2009 年 11 月 18 日) 有望な手がかりです!

Eclipse CDT ELF パーサーを使用した人はいますか?

( http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.htmlを参照) javadoc pgs の

TI の Code Composer 4 (Eclipse ベース) はこれを使用しているようです。そのため、ドキュメントがどこにあるかがわかれば、それを使用して問題を解決できるようです。

4

2 に答える 2

2

gdb はターゲット CPU をサポートしていますか?

はいの場合、デバッグ プロトコルを実装してターゲットと通信するプログラムは、GDB リモート シリアル プロトコルも実装し、gdb が通信するための TCP ソケットを提供できます。

アレンジはこんな感じになります

gdb <--gdb プロトコル--> java-prog <--デバッグ プロトコル--> ターゲット

ターゲットがすでにプログラムを実行していると仮定して、すべてを実行するには

  1. java-prog を実行する
  2. gdb your-executablejava-prog を実行して接続する

    (gdb) ターゲット リモート 127.0.0.1:ポート

  3. gdb に値の読み取りを依頼する

    (gdb) p foo.bar[7].baz

これは、TCP 経由で java-prog に送信される gdb パケットに変換されます。java-prog は、gdb プロトコルとカスタム デバッグ プロトコルの間の変換を行う必要があります。

于 2009-04-03T17:19:49.953 に答える
1

プラットフォーム用にコンパイルされたGNU binutilsへの JNI インターフェイスを構築できます。ただし、GPL がソフトウェアのライセンスと競合する場合、これは実行可能な解決策ではありません。

于 2009-04-04T16:59:10.663 に答える