問題タブ [dwarf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1746 参照

windows - Windows での pahole (dwarves パッケージから) の使用

Windows システムで dwarves Linux パッケージ/ツールを簡単に構成/インストールする方法はありますか? Windows システムで実行される自動化スクリプトで pahole コマンドを使用する必要があります。

私は Linux システムにあまり詳しくありませんが、Ubuntu Linux を実行しているシステムで pahole コマンドを動作させることができました。このパッケージを Linux から Windows に移植する方法がわかりません。

アドバイスをよろしくお願いします。

0 投票する
1 に答える
950 参照

windows - VC++ Express 2010 で libdwarf をコンパイルすると、デモ アプリケーションを実行できませんでした

コンパイルlibdwarflibelf成功し、いくつかの警告が表示されました。デモ アプリケーションのコンパイルも成功しましたsimplereaderが、elf ファイルの処理に失敗しました。次の場合は常に失敗します。

ライブラリの下のinput.clibelfあります。

2012 年の最新のlibdwarfソース コードとhttp://directory.fsf.org/wiki/Libelflibelfを使用しています。

どうすれば修正できますか?この移植を行ったことがあり、自分の作品を喜んで共有してくれる人がいれば、大歓迎です。

ありがとうございました。

0 投票する
1 に答える
1984 参照

c - 経験豊富な DWARF パーサー/ユーザーはいますか? DIE の属性タイプ オフセットを取得する必要がある

そのため、libdwarf を使用してプログラムの DWARF ファイルを解析しようとしています (この目的のために C に固執する必要があります)。具体的には、各 DIE から DW_AT_type タグを取得しようとしています。それらのほとんど(すべてかどうかはわかりません)はオフセットです。これらのタグの値を取得するための便利な関数を見つけようとしています。

例:

<2>< 286>
DW_AT_type <156>

ここで必要なのは、その特定の DIE の type 属性の 156 オフセット値です。

APIによって提供されるこれを行う機能があるかどうか知っていますか?

注: 私は C に固執する必要があるため、python ライブラリや dwarfdumped ファイルの解析はお勧めしません。特定の機能を探しているだけですが、ここ数日間試してみましたが、ドキュメントには見つかりません。

0 投票する
1 に答える
1105 参照

calling-convention - DWARF情報から呼び出し規約を取得する

DWARF情報から呼び出し規約に関する情報を取得しようとしています。具体的には、関数に引数を渡すために使用されるレジスタ/スタックの場所を取得したいと思います。私の問題は、DWARFダンプからいくつかのケースで間違った情報を取得していることです。私が使用している例は、次の「Cコード」です。

次のコマンドを使用して、この例をコンパイルします。

次のコマンドを使用してドワーフダンプを取得すると、次のようになります。

この関数について次の情報を取得しています。

DW_AT_locationエントリを見ると、フレームベースからいくらかオフセットされています。これは、それらがメモリ引数であることを意味しますが、実際の呼び出し規約「fastcall」は、それらをレジスタに渡すことを強制します。生成されたオブジェクトファイルの逆アセンブリを見ると、それらがレジスタから関数のエントリポイントのスタック位置にコピーされていることがわかります。ドワーフダンプから(または他の方法を使用して)引数が最初に呼び出しで渡される場所を知る方法はありますか?

ありがとう、

0 投票する
1 に答える
1046 参照

c++ - DWARF 情報では、DW_OP レジスタとは正確には何を意味していますか?

情報を解析し、DWARFその情報を使用して、ピン ツールを使用してプログラムからローカル変数を取得しようとしています。ステロイドのように使用するようなものpinです。GDBただし、ローカル変数と割り当てられたレジスタ用に持っているレジスタが何を意味するのかを理解するのに苦労しています。

例えば、

変数 mts からデータを取得するには、レジスタに 44 を追加する必要があることを理解しています。問題は、どのレジスタについて話しているのか正確にわからないことです。これをどのように解釈すればよいでしょうか。オンラインで何も見つかりませんでした。

別の例は などDW_OP_fbregですDW_OP_breg5

x86コンテキストでどのレジスタについて話しているか知っている人はいますか? 彼らはebpまたはespについて話しているのですか?ありがとう。

0 投票する
2 に答える
360 参照

c++ - インストルメンテーション ルーチン (ピン) を使用して間違った ebp を取得していますか、それともここに何かが欠けていますか?

これが取引です。私はピンツールと接続しているプロセスからのドワーフ情報を使用してデバッガーに取り組んでいます。Pin は、既に実行されているプロセス用のインストルメンテーション ツールを作成できるフレームワークです。プロセスにアタッチし、そこから DWARF 情報を解析します。

明らかに、ピンを使用すると、プログラムにアタッチする正確な瞬間にレジスタを取得できます。ebpesp、およびを取得できeipます。しかし、スタックからの情報は、DWARF 情報からの情報と一致しません。

例えば:

Pin はebp次のことを教えてくれます。bfe0abe8これはレジスタの実際のアドレスであり、レジスタ内の値ではないと思います。

スタックに移動すると、次のようになります。

さらに、スタックの一番下が実際には何なのかわからないので、その一部だけを示しています。

DWARF情報に行くと、これは現在スタックの一番上にある関数であり、どのebpが指している必要があります:

スタック上に表示されるローカル変数がこの関数内にあるため、これを知っています。これらのローカル変数は次のとおりです。

DWARF (および this: How to see variables stored on the stack with GDB ) によると、この関数の ebp は現在の ebp + 8 である必要があることを知っています (DWORD を使用しているため、+2 である必要があります)。そして、-24 から 8 を引いて、ebp-16 (実際には ebp-4) にする必要があります。紙の上ではこれは機能するはずですが、スタックに移動すると多くの問題が発生します。

  • ピンが私に戻ってきた現在のebpのアドレスがスタックの一番上近くにあることすらわかりません。
  • それが現在のebpであり、そのピンが実際にレジスタのアドレスではなく値を返していると仮定するとbfe0abb9、そのレジスタから4を減算すると、スタックの理解として、私はtibの値を取得しません。下がるのではなく上がる。そして、jos() を取得しようとしてダウンしたとしても、ebp-28+8 = ebp -20 = ebp -5間違いなくjos を取得することはありません000000a

ここで何か不足していますか?スタックやレジスタ、または DWARF 情報について間違った理解をしていますか? それとも、Pin が私をだまして間違った情報を提供しているのでしょうか?

助言がありますか?

0 投票する
2 に答える
1569 参照

gcc - dtrace: スクリプトのコンパイルに失敗しました プリプロセッサが見つかりません

このスクリプトをオラクルからテストして、Ubuntu 10.04 でアクティブな NFS クライアントを取得しようとしていますが、実行できません。

それを実現するために、まずこれらの指示に従ってdtrace をインストールしました。これは私が正確にやったことです:

ただし、コンパイル時に次の警告が表示されます。

と をインストールlibdw-devしましbinutils-devたが、makefile を見ると、 を探しているようで、libdwarf.solibdwのシステムでは という名前になっていlibdw.soます。

これを回避するために、でシンボリックリンクを作成しln -s /usr/lib/libdw.so /usr/lib/libdwarf.soます。その後、コンパイルは失敗します。

では、元に戻しましょう。シンボリックリンクを削除し、再度コンパイルして実行make installmake load、すべてがうまくいくことを願っています。そして、すべてがうまくいくようです。

しかし、その後、上記のスクリプトを実行しようとすると失敗します。

何が起こっているのかわかりません。念のため、gccをインストールしました。

0 投票する
2 に答える
7419 参照

debugging - Objdump/GCC - BFD: Dwarf エラー: 破損した行番号セクション

objdump を使用してアセンブリ コード (ソース コードと混合) を生成しようとすると、

次のエラーが表示されます。

生成された出力アセンブリは、ソース コードと混在していません。誰かがこれが何を意味するのかを明確にすることができますか? とにかくこれを修正する方法はありますか?

0 投票する
1 に答える
446 参照

debugging - Valgrindの新しいツール、dwarf2またはdwarf3の情報を読む

私はvalgrindの新しいツールを開発しています。このツールでは、開始アドレスとグローバル配列のサイズを取得するために、ある時点でドワーフのデバッグ情報を読み取りたいと考えています。

この情報がdwarf3デバッグ情報の.debug_infoセクションに含まれていることを知っています。

derictory / valgrind / coregrind / m_debuginfoには、57行目にfuncがあるヘッダーファイルpriv_readdwarf3.hがあります。

しかし、私はこの関数の使い方を理解できません。

助けていただければ幸いです。よろしくお願いします。

0 投票する
1 に答える
1096 参照

c - elfファイルをdwarfからstabs形式に変換するにはどうすればよいですか?

ELFデバッグファイルを用意します。

このファイルはDWARF形式を使用しています。

どうすればそれをスタブ形式に変換できますか?

これを行うのに役立つ可能性のあるツールや方法はありますか?

ありがとうございました。