2009-04-03 3 views
5

のアドレスを決定する:仮想アドレスを使用していない組み込みシステム用:プログラムでこれは私が今してに実行するような状況であるCOFF/ELF/DWARF実行与えられたC/C++変数

、私が持っていますデバッグ情報を含むCまたはC++コードからコンパイルされた実行可能ファイル。それは通常COFFまたはELF/DWARF(私はそれらの2つの混在した)形式です。

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

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


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

誰もEclipse CDT ELFパーサーを使用していますか?

は(Eclipseベース)

TIののCode Composer 4本を使用しているようだ(のjavadoc PGSのいずれかのhttp://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.htmlを参照)、そのドキュメントは多分私はそれを使用することができますここで私が把握できる場合のように思えます私の問題を解決する。

答えて

2

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

デバッグプロトコルを実装し、ターゲットと通信するプログラムでもGDB Remote Serial Protocolを実装し、gdbと通信するためのTCPソケットを提供できます。

配置はこの

GDB < --gdbプロトコルようなものになるだろう - >のjava-PROG < --yourデバッグプロトコル - >あなたのターゲットを想定し、全体のことを実行するには

をターゲットすでに

    1. 実行のjava-PROGあなたのプログラムの実行gdb your-executableを実行し、Java-PROG

      に接続されます

      (GDB)値を読み取るためにGDBを確認して下さい遠隔127.0.0.1:port

    2. 標的

      これは、翻訳され

    .baz [7]

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

  • 1

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

    +0

    残念ながら、GPLは問題にはなりませんが、このアイデアに感謝します。 –

    +0

    私はそれがまだ私が使っているどんな実装に対してもテストするのに非常に便利だと思います。 –

    関連する問題