問題タブ [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.
elf - objdump を使用して 1 つの関数を逆アセンブルする方法は?
システムにバイナリがインストールされており、特定の関数の逆アセンブルを確認したいと考えています。を使用することをお勧めしobjdump
ますが、他の解決策も受け入れられます。
この質問から、境界アドレスさえわかれば、コードの一部を逆アセンブルできる可能性があることがわかりました。この回答から、分割されたデバッグ シンボルを 1 つのファイルに戻す方法を学びました。
しかし、その単一のファイルを操作し、すべてのコードを逆アセンブルしても (つまり、開始アドレスまたは停止アドレスはなく、単純な-d
パラメーターを にobjdump
)、そのシンボルはどこにも表示されません。問題の関数が静的である限り、これは理にかなっているため、エクスポートされません。それにもかかわらず、valgrind
関数名を報告するため、どこかに保存する必要があります。
デバッグ セクションの詳細を見ると、その名前が.debug_str
セクションに記載されていますが、これをアドレス範囲に変換できるツールがわかりません。
compiler-construction - LLVM と dwarf のデバッグ情報
LLVM の最適化中に DWARF のデバッグ情報を保持しようとしています。質問は、LLVM のすべての命令のデバッグ情報を何らかの方法で挿入できますか? LLVM は、すべての最適化パスを実行するときにこれらの情報を保持し、DWARF 注釈付きの LLVM 最適化 IR をダンプしますか?
これが機能する場合、バックエンド (もちろんこれらのデバッグ情報をサポートする) に、ソース コードでデバッグ可能な (多かれ少なかれ最適化により) 最終的なエンド コードを生成させることができると思いますが、正しいですか?
c - clang からより詳細な行/列のデバッグ情報を取得するにはどうすればよいですか?
私は、かなり複雑な静的分析と他のプログラムの動的トレースを行うソフトウェアを作成しています。.debug_line
このプログラムは、 DWARF セクションからの行/列情報を含む、多くの静的 DWARF 情報を使用してトレースを支援します。このプログラムが必要な精度を持つためには、DWARF デバッグ情報に取り込まれる、きめ細かく正確な行番号と列番号の情報が必要です。I を使用すると、オプションを一緒にclang
使用して行と列の情報を強制的に入力できます。-g -Xclang -dwarf-column-info
ただし、clang が十分に細かい列情報を生成しない場合があります。1 つの特定のインスタンスは forfor
ループです。次のサンプルプログラムを取り上げます。これを と呼びますsource01.c
。
次のようにコンパイルできます。
実行可能ファイルを生成しますa.out
。次にdwarfdump
、行/列の情報がどのように取り込まれたかを調べるために使用します。
この.debug_line
セクションを見ると、この実行可能ファイルのデバッグ情報に含まれるすべての行/列のペアが表示されます。
ご覧のとおり、 に対応するペア (5,10) と に対応するint i=0;
ペア (5,27) があり++i
ます。ただし、 に対応するペア (5,19) もあると予想 (および必要) しますが、存在しi < 10
ません。実行可能ファイルの命令を で検査し、objdump
実際に比較に対応する命令があることを確認しましたi < 10
(したがって、単純に「最適化されていない」わけではありません)。
なぜclangがこの情報を入力しないのかについての直感はありますか? または、clang
よりきめ細かい列情報を強制的に生成する方法はありますか? clang
生成されるAST にはclang
、それ自体とソース コードの行および列との間のマッピングが非常にきめ細かく設定されているため、この機能が必要と思われます。
ありがとうございました。
dwarf - dwarf/dwarf2 は、固定サイズの配列を受け入れる関数のサイズ情報の取得を容易にしますか?
次の関数定義を含む C モジュールを想定します。
ソースファイルをgcc -gでコンパイルした際に得られるdwarf情報(結果の.o-fileに埋め込まれている)から、パラメータ'a'の実配列サイズ情報'6'を抽出することは可能でしょうか?
オブジェクト ファイルに 'readelf -wi' を適用して dwarf 情報を取得しましたが、固定配列サイズを導出するための情報が見つかりません。
mach-o - dsym ファイルの構造は?
アプリのビルド時に生成される dsym ファイルの構造は何ですか。DWARF デバッグ情報が含まれていることは知っていますが、dsym ファイルとは何ですか。その中のDWARF情報を読みたい。
デバッグ セクションのみを含む単なる Mach-O バイナリ ファイルですか? pyelftool
ELF ファイルのデバッグ セクションで DWARF 情報を読み取る のような DWARF 解析ツールに渡すにはどうすればよいですか。
dsym ファイルのセクションを印刷するために使用objdump -h
します (.dsym ファイルはパッケージです。パッケージ内のバイナリ ファイルを参照するだけです)。
c++ - 遠隔地でテストするためのデバッグ情報のサイズを最小限に抑える
C++ プロジェクトのデバッグ情報をリモートの場所に転送してテストする方法を作成しようとしています。現在の開発サイクルでは、コードに小さな変更を加えると、バイナリ全体 (サイズは 100 MB で、ほとんどがデバッグ情報) を転送する必要があります。
現在、これに対処するための私のアプローチは、-gsplit-dwarf を使用してオブジェクト ファイルからデバッグ情報を分割し (デバッグ情報なしのサイズは私の接続で管理可能です)、現在実行中のビルドのコピーに対してデバッグ ファイルを比較することです。リモートボックス。
目的は、プロジェクトのデバッグ ファイル用の一連のパッチを用意して、新しいコードをリモート ロケーションでデバッグできるようにすることです。リモートの場所とローカル マシン間の接続は低速であるため、パッチのサイズを最小限に抑えることが最も重要ですが、ツールの実行時間とのバランスを取る必要もあります。可能性のある解決策として bsdiff と xdelta を調べたところ、xdetla は高速ですが大きすぎ、bsdiff はサイズの点で完璧ですが、実行時間とメモリ要件が希望よりも少し高いという難問に遭遇しました。
不足しているツールやアプローチはありますか、それとも間違った方法で進んでいますか? おそらくbsdiffとxdeltaに代わるものはありますか? gbdserver のようなツールは、実際のデバッグに関するいくつかの要件のために、この状況では機能しないことを私は知っています。bsdiff を変更すると、パフォーマンスが向上しますか? 実際、私が使用しているアプローチが適切である場合、ビルドのコピーをリモート マシンに保持して比較するための良い方法は何でしょうか。