問題タブ [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.
windows - Windows での pahole (dwarves パッケージから) の使用
Windows システムで dwarves Linux パッケージ/ツールを簡単に構成/インストールする方法はありますか? Windows システムで実行される自動化スクリプトで pahole コマンドを使用する必要があります。
私は Linux システムにあまり詳しくありませんが、Ubuntu Linux を実行しているシステムで pahole コマンドを動作させることができました。このパッケージを Linux から Windows に移植する方法がわかりません。
アドバイスをよろしくお願いします。
windows - VC++ Express 2010 で libdwarf をコンパイルすると、デモ アプリケーションを実行できませんでした
コンパイルlibdwarf
にlibelf
成功し、いくつかの警告が表示されました。デモ アプリケーションのコンパイルも成功しましたsimplereader
が、elf ファイルの処理に失敗しました。次の場合は常に失敗します。
ライブラリの下のinput.cにlibelf
あります。
2012 年の最新のlibdwarf
ソース コードとhttp://directory.fsf.org/wiki/Libelflibelf
を使用しています。
どうすれば修正できますか?この移植を行ったことがあり、自分の作品を喜んで共有してくれる人がいれば、大歓迎です。
ありがとうございました。
c - 経験豊富な DWARF パーサー/ユーザーはいますか? DIE の属性タイプ オフセットを取得する必要がある
そのため、libdwarf を使用してプログラムの DWARF ファイルを解析しようとしています (この目的のために C に固執する必要があります)。具体的には、各 DIE から DW_AT_type タグを取得しようとしています。それらのほとんど(すべてかどうかはわかりません)はオフセットです。これらのタグの値を取得するための便利な関数を見つけようとしています。
例:
<2>< 286>
DW_AT_type <156>
ここで必要なのは、その特定の DIE の type 属性の 156 オフセット値です。
APIによって提供されるこれを行う機能があるかどうか知っていますか?
注: 私は C に固執する必要があるため、python ライブラリや dwarfdumped ファイルの解析はお勧めしません。特定の機能を探しているだけですが、ここ数日間試してみましたが、ドキュメントには見つかりません。
calling-convention - DWARF情報から呼び出し規約を取得する
DWARF情報から呼び出し規約に関する情報を取得しようとしています。具体的には、関数に引数を渡すために使用されるレジスタ/スタックの場所を取得したいと思います。私の問題は、DWARFダンプからいくつかのケースで間違った情報を取得していることです。私が使用している例は、次の「Cコード」です。
次のコマンドを使用して、この例をコンパイルします。
次のコマンドを使用してドワーフダンプを取得すると、次のようになります。
この関数について次の情報を取得しています。
DW_AT_locationエントリを見ると、フレームベースからいくらかオフセットされています。これは、それらがメモリ引数であることを意味しますが、実際の呼び出し規約「fastcall」は、それらをレジスタに渡すことを強制します。生成されたオブジェクトファイルの逆アセンブリを見ると、それらがレジスタから関数のエントリポイントのスタック位置にコピーされていることがわかります。ドワーフダンプから(または他の方法を使用して)引数が最初に呼び出しで渡される場所を知る方法はありますか?
ありがとう、
c++ - DWARF 情報では、DW_OP レジスタとは正確には何を意味していますか?
情報を解析し、DWARF
その情報を使用して、ピン ツールを使用してプログラムからローカル変数を取得しようとしています。ステロイドのように使用するようなものpin
です。GDB
ただし、ローカル変数と割り当てられたレジスタ用に持っているレジスタが何を意味するのかを理解するのに苦労しています。
例えば、
変数 mts からデータを取得するには、レジスタに 44 を追加する必要があることを理解しています。問題は、どのレジスタについて話しているのか正確にわからないことです。これをどのように解釈すればよいでしょうか。オンラインで何も見つかりませんでした。
別の例は などDW_OP_fbreg
ですDW_OP_breg5
。
x86
コンテキストでどのレジスタについて話しているか知っている人はいますか? 彼らはebpまたはespについて話しているのですか?ありがとう。
c++ - インストルメンテーション ルーチン (ピン) を使用して間違った ebp を取得していますか、それともここに何かが欠けていますか?
これが取引です。私はピンツールと接続しているプロセスからのドワーフ情報を使用してデバッガーに取り組んでいます。Pin は、既に実行されているプロセス用のインストルメンテーション ツールを作成できるフレームワークです。プロセスにアタッチし、そこから DWARF 情報を解析します。
明らかに、ピンを使用すると、プログラムにアタッチする正確な瞬間にレジスタを取得できます。ebp
、esp
、およびを取得でき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 が私をだまして間違った情報を提供しているのでしょうか?
助言がありますか?
gcc - dtrace: スクリプトのコンパイルに失敗しました プリプロセッサが見つかりません
このスクリプトをオラクルからテストして、Ubuntu 10.04 でアクティブな NFS クライアントを取得しようとしていますが、実行できません。
それを実現するために、まずこれらの指示に従ってdtrace をインストールしました。これは私が正確にやったことです:
ただし、コンパイル時に次の警告が表示されます。
と をインストールlibdw-dev
しましbinutils-dev
たが、makefile を見ると、 を探しているようで、libdwarf.so
私libdw
のシステムでは という名前になっていlibdw.so
ます。
これを回避するために、でシンボリックリンクを作成しln -s /usr/lib/libdw.so /usr/lib/libdwarf.so
ます。その後、コンパイルは失敗します。
では、元に戻しましょう。シンボリックリンクを削除し、再度コンパイルして実行make install
しmake load
、すべてがうまくいくことを願っています。そして、すべてがうまくいくようです。
しかし、その後、上記のスクリプトを実行しようとすると失敗します。
何が起こっているのかわかりません。念のため、gccをインストールしました。
debugging - Objdump/GCC - BFD: Dwarf エラー: 破損した行番号セクション
objdump を使用してアセンブリ コード (ソース コードと混合) を生成しようとすると、
次のエラーが表示されます。
生成された出力アセンブリは、ソース コードと混在していません。誰かがこれが何を意味するのかを明確にすることができますか? とにかくこれを修正する方法はありますか?
debugging - Valgrindの新しいツール、dwarf2またはdwarf3の情報を読む
私はvalgrindの新しいツールを開発しています。このツールでは、開始アドレスとグローバル配列のサイズを取得するために、ある時点でドワーフのデバッグ情報を読み取りたいと考えています。
この情報がdwarf3デバッグ情報の.debug_infoセクションに含まれていることを知っています。
derictory / valgrind / coregrind / m_debuginfoには、57行目にfuncがあるヘッダーファイルpriv_readdwarf3.hがあります。
しかし、私はこの関数の使い方を理解できません。
助けていただければ幸いです。よろしくお願いします。
c - elfファイルをdwarfからstabs形式に変換するにはどうすればよいですか?
ELFデバッグファイルを用意します。
このファイルはDWARF形式を使用しています。
どうすればそれをスタブ形式に変換できますか?
これを行うのに役立つ可能性のあるツールや方法はありますか?
ありがとうございました。