2012-10-09 4 views
7

Mit Visual Studio 2010/2012 kann eine C++ - Quelldatei mit dem Schalter /FAs kompiliert werden, um die Assembly-Ausgabe des resultierenden Codes zu generieren. Die generierte asm-Datei enthält jedoch alle Symbole in ihrer verfälschten Form.Wie können Sie Namen in Visual Studio Assembler-Ausgabe abmelden?

Gibt es einen Schalter oder eine andere intelligente Methode, Visual Studio stattdessen dazu zu bringen, nicht gemanagte Symbole zu generieren? Ich weiß, dass man die asm-Datei über undname.exe manuell füttern konnte, aber ein Schalter wäre viel bequemer als ein benutzerdefiniertes Post-Build-Ereignis.

+0

Das ist nicht verfügbar. –

+0

was ist mit externem C? – NoSenseEtAl

Antwort

0

Wenn alle Ihre Symbole mit externem "C" kompatibel sind, dann könnten Sie Ihren gesamten Code in die C++ - Quelldatei in einem externen "C" -Block schreiben, um zu erzwingen, dass alle Symbole im nicht gemanagten C-Stil ausgegeben werden C++ Name Mangling angewendet. Das Microsoft Research-Projekt http://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29 bietet Hooks in der Toolchain und es könnte eine direkte Manipulation der Symbolnamen ermöglichen, aber leider war die letzte öffentliche Version für VS 2008 und es scheint nicht für die Aufnahme in entweder VS 2010 oder VS 2012.

+0

Leider sind viele meiner Symbole nicht mit 'extern" C "kompatibel. – Bloops

1

Dies ist aufgrund der Art der Ausgabe von/FA nicht möglich. FA gibt gültigen Assemblercode aus. Die Symbole, die man braucht, um eine C++ - Funktion zu entmagnetisieren, sind einfach keine gültigen Markennamen in der x86-Assembly von Microsoft. Es gibt auch keine gute Notation für anonyme Namespaces.

Jede Ausgabe, die diese Fälle behandelt, wäre nicht mit einem Assembler kompilierbar. Wenn Sie einen Assembler erstellen, der solche Namen behandelt, müsste er wissen, wessen Namen Mangeln Regeln gelten, um ihn zu assemblieren. Dies verhindert den Hauptzweck der Ausgabe von Assembly (um GENAU zu sehen, was gerade passiert).