問題タブ [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.
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について聞いたことさえありません! この警告は何についてですか?
gcc - .outファイルからグローバル変数を抽出します
編集(更新された質問)
私は簡単なCプログラムを持っています:
main.c
bsp.c
(プログラムは何も役に立ちません...私の目標は、変数名を宣言されている場所とメモリアドレスを抽出することです)
プログラムをコンパイルすると、a.out
デバッグ情報を含むelfファイルであるファイルが取得されます。
会社の誰かが5年前に.netで、このすべての情報をa.outファイルから取得するプログラムを作成しました。これはコードが返すものです:
この小さなプログラムでは、それはうまく機能し、他の大規模なプロジェクトでも機能します。
そのコードは2000行の長さで、いくつかのバグがあり、.NETバージョン4をサポートしていません。そのため、私はそれを再作成しようとしています。
ですから、私の質問は、この問題を解決するためにどのようなアプローチを取るべきかわからないという意味で迷子になっています。これらは私が検討してきたオプションです:
最初の画像で示したプログラムのバグのあるコードを整理し、その情報を取得するために、プログラムが何を実行し、a.outファイルをどのように解析するかを確認してください。完全に理解したら、バージョン3および4をサポートしない理由を理解してください。
私は正規表現を作成しても大丈夫なので、次のようにしてa.outファイルでパターンを探してみてください。
これまでのところ、ファイルが1つしかないパターン(main.c)を見つけることができました。ただし、ファイルが複数ある場合は、さらに複雑になります。まだ試していません。多分それはそれほど複雑ではなく、パターンを見つけることが可能になるでしょう。
Cygwinをインストールして、、、などのWindowsでLinuxコマンドを使用できるように
objdump
しnm
ますelfread
。readelf -w a.out
必要な情報が得られるなど、これらのコマンドを使用するときは、コマンドを十分に試していません。私がこのアプローチにそれほど多くの時間を費やしていない理由にはいくつかの短所があります:短所:Windowsにcygwinをインストールするのに時間がかかります。このアプリケーションをお客様に提供する場合、お客様にインストールする必要はありません。たぶん、全部をインストールすることなく、コマンドobjdumpとelfreadをインストールする方法があるでしょう。
長所:使用する適切なコマンドが見つかった場合、車輪の再発明を行わず、時間を節約できます。多分それは次のようなコマンドの結果を解析することの問題です
objdump -w a.out
ここで解析するためにa.outファイルをダウンロードする場合は、です。
概要
.outファイルでグローバル変数を取得できるようになります。各変数のタイプ(int、char、..)、変数のメモリアドレス、および変数が宣言されているファイル(main.cまたはsomeOtherFile.c)についても知りたいと思います。cygwinを使用する必要がない場合は、展開がより簡単になりますので、よろしくお願いします。この質問は多くのことを求めているので、私はそれをもっと分割しようとしました:
おそらく他の質問を削除する必要があります。冗長でごめんなさい。
windows - デバッグ情報を表示するための Windows での objdump
.out ファイル内の変数のアドレスとメンバー名を取得する必要があります。基本的にgccを使用してLinuxでacプログラムをコンパイルしましたが、ファイルの情報を見たいと思います。Linuxには多くの例がありますが、Windowsで行う必要があります。
編集
cygwin をインストールしましたが、何らかの理由で objdump が機能しません:
cygwin - cygwin で objdump が見つからない
cygwin で objdump コマンドを使用したいと考えています。私は例外を受け取ります:
-bash: objdump: コマンドが見つかりません
cygwin が objdump を見つけられないのはなぜですか?
EDIT ---- http://cygwin.com/packages/で binutils を見ることができます 。binutils パッケージを見つけたら、それをクリックすると、ここに移動します。インストール方法を教えてください。そこに着いたらどうすればいいですか?
gcc - .out ファイル内のシンボルの場所を取得する
この質問は、elf ファイルのシンボル (変数、関数など) を取得する方法を説明するのに最適です。
シンボルができたので、それらがどの場所 (モジュール) にあるかを知りたいと思います。
たとえば、ファイルで構成されるプログラムをコンパイルするとmain.c
、someFile.h
とsomeFile.c
. また、main.c
プログラムにグローバル変数int Counter が含まれているとします。次に、変数Counterが main.c にあることをどのように確認できますか?
g++ - / usr / bin / ld:ドワーフエラー
nvccを使用して複雑なアプリケーションをコンパイルしようとしていますが、コンパイラをmpic++からg++に変更する必要があります。これは、次のエラーが発生しているためです。
ドワーフとは何ですか?このエラーはどういう意味ですか?
それを解決するためのヒントはありますか?私がここで見逃している有用な情報は何ですか?
linux - readelf -s は完全な変数名を出力しません
コンパイルされた C プログラム ファイルからグローバル シンボルを取得する必要があります。私が使用するのは、readelf -s filePath
そのコマンドを使用するときに linux コマンドです。これが得られます。
変数名が正しく表示されないことを示すために、青い四角形を描画します。25 文字の後にトリムされます。フルネームを表示するにはどうすればよいですか?
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の出力)がどのように構築されているかを知りたいと思います。そのパターンを理解することも、インターネット上のその方法を説明する場所もわかりません。
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.
gdb - Dwarf エラー: コンパイル ユニット ヘッダーのバージョンが正しくありません (4 である必要があります。2 である必要があります)
共有オブジェクトが RedHat Linux でビルドされ、すべてのコードがデバッグを使用してコンパイルされている間、デバッガー (gdb) はシンボルの読み込みを拒否し、次のようなエラーを発行しました。
このエラーにより、どの関数でもトリガーするブレーク ポイントを取得できず、適切なスタック トレースも表示されませんでした。プロジェクト全体を再コンパイルしましたが、何も役に立ちませんでした。過去に、そのモジュールのデバッグに問題がなかったことは知っています。
この問題の原因は何ですか?