2012-10-09 79 views
7

Al usar Visual Studio 2010/2012, uno puede compilar un archivo fuente en C++ con el interruptor /FAs para generar el resultado del ensamblado del código resultante. Pero el archivo asm generado contiene todos los símbolos en su forma desfigurada.¿Cómo exigir nombres en la salida del ensamblador de Visual Studio?

¿Hay algún cambio u otra forma inteligente de hacer que Visual Studio genere símbolos sin símbolos en su lugar? Sé que uno podría alimentar manualmente el archivo asm a través del undname.exe, pero un cambio sería mucho más conveniente que un evento personalizado de post-construcción.

+0

Eso no está disponible. –

+0

¿qué tal extern C? – NoSenseEtAl

Respuesta

0

Si todos sus símbolos son compatibles con la "C" externa, podría envolver todo su código en el archivo fuente C++ en un bloque externo "C" para forzar que todos los símbolos se emitan en estilo C no desactivado en lugar de tener C++ nombre mangling aplicado.

El proyecto de Microsoft Research http://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29 proporciona ganchos en la cadena de herramientas y podría permitir la manipulación directa de cómo se forman los nombres de los símbolos, pero lamentablemente su última versión pública fue para VS 2008 y no parece haber sido productizado para su inclusión en ya sea VS 2010 o VS 2012.

+0

Desafortunadamente, muchos de mis símbolos no son compatibles con 'extern' C "'. – Bloops

1

No es posible hacerlo, debido a la naturaleza de la salida de/FA. FA genera un código de ensamblaje válido. Los símbolos que se necesitan para expresar una función de C++ sin marcar no son nombres de etiquetas válidos en el ensamblaje x86 de Microsoft. Tampoco hay una buena notación para espacios de nombres anónimos.

Cualquier salida que maneja esos casos no sería compilable utilizando un ensamblador. Si creó un ensamblador que manejara dichos nombres, necesitaría saber a quién corresponde aplicar las reglas de manipulación para ensamblarlo. Esto derrota el propósito principal de salida de ensamblaje (para ver EXACTAMENTE lo que está sucediendo).

Cuestiones relacionadas