ある形式のデバッグ シンボルを、GDB で使用できる別の形式に変換することを目的としたツールを作成しようとしています。これは退屈で潜在的に複雑なプロジェクトのように思えるので、どうやって取り組むべきか正確にはわかりません。
最初は、borland コンパイラから出力された Turbo Debug Symbol テーブル (TDS) を stabs や dwarf 形式のようなものに変換することを目指しています (私の研究では dwarf が好まれているようです)。しかし、理想的には、ツールを簡単に拡張できるように設計して、後で他の形式も変換できるようにしたいと考えています。たとえば、codeview4 またはおそらく pdb です。
これを作成する主な動機は次のとおりです。
- 相互運用性。外部デバッグ形式を gdb が動作する形式に変換できれば、gcc 以外の別のコンパイラからコンパイルされたバイナリでソースレベルのデバッグが可能になります。これは、gdb をバックエンドとして使用するフロントエンド デバッグ インターフェースも同様に機能することを意味します。
- 他のツールは存在しません。同様のツールをグーグルで検索しましたが、見つけた最も近いものはtds2dbgです。しかし、それは私が探しているものではありません。
現時点で取り組まなければならないこと:
- TDS デバッグ形式を理解できるデバッグ フック APIを既に持っています。これを使用して、変換元のソース形式から必要な情報を取得できます。
- このプロジェクトの範囲では、これを win32 環境で動作させることに主に関心があります。私があまり気にしていない他のプラットフォームとツール。
- 変換先の dwarf デバッグ形式。これは、私にはまったくなじみがありません。以前に MinGW のような gcc 移植コンパイラを使用し、dwarf 形式の gdb でそれらをデバッグしました。しかし、この形式が Windows でどのように実装されているかはわかりません。
最後に気になる点です。ドワーフ仕様のドキュメントを読んでいますが、それがどのように機能するかを本当に理解して理解するのに苦労しています。そこには非常に多くの詳細がありますが、同時に、ELFをネイティブに使用しないプラットフォーム上のオブジェクトファイルとイメージファイルにdwarfがどのように実装されるかについての詳細はありません-つまり、Windowsが使用するPE-COFF形式. ドキュメンテーションも非常に無味乾燥で、長い文章は理解しにくく、図やイラストはまばらです。私はlibDwarfと呼ばれる API に出会いました。これは、ドワーフの解釈からほとんどの解析作業を取り除くはずです。問題は、私はまだそれを構築しようとしていることであり、それがどのように機能するかはまだわかりません.
ビルドする必要があるものを完全に理解していないため、まだコードを書いていません。ドワーフは複雑なので、ドワーフをどのように扱うかが最大の課題になると思います。ウィンドウの下でドワーフがどのように機能するかについての情報をグーグルで検索しても、役立つものは何も見つかりませんでした。たとえば、PE 実行可能イメージ ファイル内に dwarf を含めるために必要な「グルー」コードに関する情報はありません。ドワーフセクションはどのように正確に配置されていますか? 各セクションのヘッダー情報はありますか? GDB は明らかに、「生の」ドワーフ デバッグ ファイルをそのまま使用するだけではありません。では、gdb は、デバッグ ファイルを操作できるようにするために、デバッグ ファイルがどのような形式であると想定しているのでしょうか。
私の質問は、どうすればそのようなプロジェクトを開始できるでしょうか? さらに重要なことは、どうしても問題に行き詰まってしまった場合、どこに助けを求めることができるかということです。