2012-10-09 13 views
7

Visual Studio 2010/2012を使用して、/FAsスイッチを使用してC++ソースファイルをコンパイルして、結果のコードのアセンブリ出力を生成することができます。しかし、生成されたasmファイルには、すべてのシンボルが変更された形式で含まれています。Visual Studioのアセンブラ出力で名前をデマングルする方法は?

代わりに、ビジュアル・スタジオで無記号が生成されるようなスイッチやスマートな方法はありますか?私は手動でasmファイルをundname.exeを通してフィードすることができますが、スイッチはカスタムポストビルドイベントよりもはるかに便利であることがわかります。

+0

これは利用できません。 –

+0

extern Cについてはどうですか? – NoSenseEtAl

答えて

0

すべてのシンボルがextern "C"と互換性がある場合、extern "C"ブロック内のすべてのシンボルをC++ソースファイルにラップすると、すべてのシンボルが、 C++ネームマングリングが適用されました。

Microsoft Researchプロジェクトhttp://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29は、ツールチェーンにフックを提供し、シンボル名の形成方法を直接操作することができますが、残念ながら最後の一般公開はVS 2008向けであり、 VS 2010またはVS 2012のいずれかです。

+0

残念ながら、私のシンボルの多くは 'extern" C "'と互換性がありません。 – Bloops

1

/FAの出力の性質上、これを行うことはできません。 FAは有効なアセンブリコードを出力します。 unmangledのC++関数を表現するために必要なシンボルは、Microsoftのx86アセンブリでは有効なラベル名ではありません。匿名の名前空間には表記法もありません。

これらのケースを処理した出力は、アセンブラを使用してコンパイルできません。そのような名前を扱ったアセンブラを作ったなら、それを組み立てるためにどの名前の規則を適用するのかを知る必要があります。これはアセンブリを出力することの主な目的を打ち消します(何が起こっているかを正確に見るために)。

関連する問題