問題タブ [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 に答える
731 参照

c++ - コンパイラによって生成された無効な DWARF

警告: コンパイラによって生成された無効な DWARF: DIE 0x000629bb には、'/Code/test/Mac1.7to1.8Test/build/Mac1.7to1.8Test.build/Release/Mac1.7to1.8Test.build/Objects- に複数の AT_decl_line 属性があります。 normal/x86_64/OgreFramework.o'.

私はこれをXCode 3.2.6でC++プロジェクトを構築しています.Macの初心者として、 Dwarfについて聞いたことさえありません! この警告は何についてですか?

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

gcc - .outファイルからグローバル変数を抽出します

編集(更新された質問)

私は簡単なCプログラムを持っています:

main.c

bsp.c

(プログラムは何も役に立ちません...私の目標は、変数名を宣言されている場所とメモリアドレスを抽出することです

プログラムをコンパイルすると、a.outデバッグ情報を含むelfファイルであるファイルが取得されます。

会社の誰かが5年前に.netで、このすべての情報をa.outファイルから取得するプログラムを作成しました。これはコードが返すものです:

ここに画像の説明を入力してください

この小さなプログラムでは、それはうまく機能し、他の大規模なプロジェクトでも機能します。

そのコードは2000行の長さで、いくつかのバグがあり、.NETバージョン4をサポートしていません。そのため、私はそれを再作成しようとしています。


ですから、私の質問は、この問題を解決するためにどのようなアプローチを取るべきかわからないという意味で迷子になっています。これらは私が検討してきたオプションです:

  1. 最初の画像で示したプログラムのバグのあるコードを整理し、その情報を取得するために、プログラムが何を実行し、a.outファイルをどのように解析するかを確認してください。完全に理解したら、バージョン3および4をサポートしない理由を理解してください。

  2. 私は正規表現を作成しても大丈夫なので、次のようにしてa.outファイルでパターンを探してみてください。ここに画像の説明を入力してください これまでのところ、ファイルが1つしかないパターン(main.c)を見つけることができました。ただし、ファイルが複数ある場合は、さらに複雑になります。まだ試していません。多分それはそれほど複雑ではなく、パターンを見つけることが可能になるでしょう。

  3. Cygwinをインストールして、、、などのWindowsでLinuxコマンドを使用できるようにobjdumpnmますelfreadreadelf -w a.out必要な情報が得られるなど、これらのコマンドを使用するときは、コマンドを十分に試していません。私がこのアプローチにそれほど多くの時間を費やしていない理由にはいくつかの短所があります:

    • 短所:Windowsにcygwinをインストールするのに時間がかかります。このアプリケーションをお客様に提供する場合、お客様にインストールする必要はありません。たぶん、全部をインストールすることなく、コマンドobjdumpとelfreadをインストールする方法があるでしょう。

    • 長所:使用する適切なコマンドが見つかった場合、車輪の再発明を行わず、時間を節約できます。多分それは次のようなコマンドの結果を解析することの問題ですobjdump -w a.out


ここで解析するためにa.outファイルをダウンロードする場合は、です。


概要

.outファイルでグローバル変数を取得できるようになります。各変数のタイプ(int、char、..)、変数のメモリアドレス、および変数が宣言されているファイル(main.cまたはsomeOtherFile.c)についても知りたいと思います。cygwinを使用する必要がない場合は、展開がより簡単になりますので、よろしくお願いします。この質問は多くのことを求めているので、私はそれをもっと分割しようとしました:

おそらく他の質問を削除する必要があります。冗長でごめんなさい。

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

windows - デバッグ情報を表示するための Windows での objdump

.out ファイル内の変数のアドレスとメンバー名を取得する必要があります。基本的にgccを使用してLinuxでacプログラムをコンパイルしましたが、ファイルの情報を見たいと思います。Linuxには多くの例がありますが、Windowsで行う必要があります。

編集

cygwin をインストールしましたが、何らかの理由で objdump が機能しません:

ここに画像の説明を入力

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

cygwin - cygwin で objdump が見つからない

cygwin で objdump コマンドを使用したいと考えています。私は例外を受け取ります:

-bash: objdump: コマンドが見つかりません

cygwin が objdump を見つけられないのはなぜですか?

EDIT ---- http://cygwin.com/packages/で binutils を見ることができます 。binutils パッケージを見つけたら、それをクリックすると、ここに移動します。インストール方法を教えてください。そこに着いたらどうすればいいですか?

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

gcc - .out ファイル内のシンボルの場所を取得する

この質問は、elf ファイルのシンボル (変数、関数など) を取得する方法を説明するのに最適です。

シンボルができたので、それらがどの場所 (モジュール) にあるかを知りたいと思います

たとえば、ファイルで構成されるプログラムをコンパイルするとmain.csomeFile.hsomeFile.c. また、main.cプログラムにグローバル変数int Counter が含まれているとします。次に、変数Counterが main.c にあることをどのように確認できますか?

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

g++ - / usr / bin / ld:ドワーフエラー

nvccを使用して複雑なアプリケーションをコンパイルしようとしていますが、コンパイラをmpic++からg++に変更する必要があります。これは、次のエラーが発生しているためです。

ドワーフとは何ですか?このエラーはどういう意味ですか?

それを解決するためのヒントはありますか?私がここで見逃している有用な情報は何ですか?

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

linux - readelf -s は完全な変数名を出力しません

コンパイルされた C プログラム ファイルからグローバル シンボルを取得する必要があります。私が使用するのは、readelf -s filePath そのコマンドを使用するときに linux コマンドです。これが得られます。

ここに画像の説明を入力

変数名が正しく表示されないことを示すために、青い四角形を描画します。25 文字の後にトリムされます。フルネームを表示するにはどうすればよいですか?

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

windows - コンパイルされたプログラムで変数を見つけるためにパターンを理解する

コンパイルされたcプログラムからグローバル変数を抽出する必要があります。私が今していることは、その情報を取得するためにLinuxreadelfコマンドを使用することです。言い換えれば、私がするとき:

ここreadelf.exeからダウンロードできるプログラムでそれを行います。私はウィンドウを使用していて、それが私が必要とする唯一のコマンドだからです。Linuxでは、コンソールを開いて実行しますreadelf -w[i] myFile.out

とにかく、そのコマンドを実行すると、次のようになります。

その「ツリー」を使用して、すべてのグローバル変数とタイプを取得できます。たとえば、最初の変数NetBuf_ID_Ctrを見ると、ノードの型に関する情報を取得できることがわかります <0x86923>。そのノードはツリーのどこかにあります!実際に最初のノードであるものを見てください。開始するもので <1><86923>....、そのノードの内部を見ると、変数が4バイトのサイズのunsignedintであることがわかります。


今私の質問は、そのreadelfコマンドを使用すると ここに画像の説明を入力してください 、解析する必要のある192883行のテキストを取得することです。このツリーは、私が必要としているものよりも多くの情報を私に与えてくれます。16進エディタでファイルを調べると、次のように表示されます。

ここに画像の説明を入力してください

同じ変数を見つけることができ、そのNetBuf_ID_Ctr隣(強調表示)はアドレス<0x86923>です!

木の作り方を教えてくれる場所はインターネット上にありますか?コマンドreadelf.exeは、ツリーを作成するのに.1秒かかります。出力をStreamReaderに配置するため、非常に高速です。そのStreamReaderをメモリに配置して、非常に時間がかかる文字列に変換したい場合。


編集

要約すると、myFile.outからツリー(readelfの出力)がどのように構築されているかを知りたいと思います。そのパターンを理解することも、インターネット上のその方法を説明する場所もわかりません。

0 投票する
3 に答える
3218 参照

elf - Change sourcefiles listed in elf debug info

Basically I want to be able to change the path to the source file in debug dwarf section in a elf binary.

0 投票する
3 に答える
32061 参照

gdb - Dwarf エラー: コンパイル ユニット ヘッダーのバージョンが正しくありません (4 である必要があります。2 である必要があります)

共有オブジェクトが RedHat Linux でビルドされ、すべてのコードがデバッグを使用してコンパイルされている間、デバッガー (gdb) はシンボルの読み込みを拒否し、次のようなエラーを発行しました。

このエラーにより、どの関数でもトリガーするブレーク ポイントを取得できず、適切なスタック トレースも表示されませんでした。プロジェクト全体を再コンパイルしましたが、何も役に立ちませんでした。過去に、そのモジュールのデバッグに問題がなかったことは知っています。

この問題の原因は何ですか?