いくつかのC++テンプレート関数のインスタンス化を含むC++オブジェクトファイルがあります。問題のオブジェクトファイルは、テンプレートパラメータのいくつかの異なる組み合わせに対して同じ関数をインスタンス化します。私は問題をデバッグしようとしているし、テンプレート関数の特定のインスタンス化の逆アセンブリを見たい(つまり、私は調べたい関数のテンプレートパラメータを知っている)。私は通常objdump
を使ってオブジェクトファイルを逆アセンブルしますが、(少なくともデフォルトでは)C++の関数名を取り除くことはできません。これを行う方法はありますか?オブジェクトファイルはgcc 4.6.1を使用して作成されました。C++テンプレート関数の名前をun-mangleでobjdumpできますか?
14
A
答えて
13
c++filt
までパイプ?先頭にアンダースコアが付いているかどうかに応じて、-n
にする必要があります。
8
objdump -C
Jason Rのようにコメントしています。
man objdump
は言う:
デコード(復号化し)低レベルのシンボル名をユーザレベルの名前に。システムが先頭に付ける最初のアンダースコアを削除するだけでなく、これによりC++の関数名も読みやすくなります。コンパイラごとに異なるマングリングスタイルがあります。オプションのデアンギュリングスタイル引数を使用して、コンパイラに適したデアントラリングスタイルを選択できます。
operator new[]
上とobjdump -CSr
呼び出しの出力例:-C
なし
char *sn = new char[4];
10: bf 04 00 00 00 mov $0x4,%edi
15: e8 00 00 00 00 callq 1a <main+0x1a>
16: R_X86_64_PC32 operator new[](unsigned long)-0x4
それはマングルされた名前_Znam
を示すだろう。
nm
にもそのオプションがあります。
関連する問題
- 1. テンプレート関数の名前ルックアップルール
- 2. Python Djangoテンプレートはモデル関数から名前を取得できません
- 3. 名前空間の関数テンプレートのオーバーロード
- 4. 関数名前空間の関数を値で定義できますか?
- 5. C++のテンプレート関数名を持つ可変テンプレート11
- 6. std名前空間でC関数を使うべきでしょうか?
- 7. opencv名前空間とc、C++関数
- 8. 関数式で匿名関数に名前を付けますか?
- 9. c#Microsoft名前空間の名前はどこで検索できますか?
- 10. C++では、関数名の前にチルダ "〜"は何を表していますか?
- 11. 同じ関数を2つの名前で定義できますか?
- 12. Elixirの名前付き匿名関数
- 13. Rubyで関数を名前で渡す
- 14. なぜVisual C++でテンプレート関数のテンプレートが無効です
- 15. (名前付き)関数は、呼び出された名前を調べることができますか?
- 16. テンプレート内のC++の名前解決サブクラスサブクラス
- 17. 既存の関数を他の関数と同じ名前でラップすることはできますか?
- 18. PowerPointテンプレートからllayoutの名前のリストを抽出できますか?
- 19. C++関数ポインター名前のない関数を持つ配列
- 20. main関数に入る前に、C++で何かを印刷できますか?
- 21. 他のディレクトリでC関数のC関数を宣言できますか?
- 22. 呼び出し関数の名前にプログラムでアクセスできますか?
- 23. C++でのテンプレート関数のオーバーロード
- 24. C++ライブラリ名前空間とC linux関数との間の名前の衝突
- 25. C++継承時に関数の引数の名前を変更しますか?
- 26. cppファイルの匿名の名前空間の中にテンプレート関数を持つのは適切ですか?
- 27. AWSラムダ関数の名前を変更することはできますか?
- 28. シェフ:変数からテンプレート '名前'を入力しますか?
- 29. mutate_atと名前付き匿名関数
- 30. C++テンプレートのネストされた名前指定子で私を助けることができますか?
そのように見えます。私も 'objdump'の' -C'オプションを見つけました。少なくとも私のアプリケーションではうまくいくようです。 –
@JasonRさらに良い。歴史的に、 'nm ++'のようなオプションと変種名がありましたが、ヒットしてしまいました。そして、私はすべてを配管するという習慣に慣れました。 – smparkes
@JasonR、これを投稿していただきありがとうございます。私の 'objdump'(' --help'では表示されていません)では、 '-C'は文書化されていませんでしたが、それでも機能しました。 –