Используя Visual Studio 2010/2012, можно скомпилировать исходный файл c ++ с помощью /FAs
Переключить, чтобы сгенерировать вывод сборки из полученного кода. Но сгенерированный asm-файл содержит все символы в их искаженном виде.
Есть ли переключатель или другой умный способ заставить Visual Studio вместо этого генерировать неупорядоченные символы? Я знаю, что можно вручную передать файл ASM через undname.exe
но переключение будет гораздо удобнее, чем настраиваемое событие после сборки.
Это невозможно сделать из-за характера вывода / FA. FA выводит действительный код сборки. Символы, которые необходимы для выражения функции C ++ без разбора, просто не являются допустимыми именами меток в сборке Microsoft x86. Также нет хороших обозначений для анонимных пространств имен.
Любой вывод, который обрабатывает эти случаи, не будет компилироваться с использованием ассемблера. Если бы вы создали ассемблер, который обрабатывал такие имена, ему нужно было бы знать, чьи правила искажения имен следует применять для его сборки. Это побеждает основную цель вывода сборки (чтобы ТОЧНО увидеть, что происходит).
Если все ваши символы совместимы с extern «C», вы можете обернуть весь свой код в исходный файл C ++ в блок extern «C», чтобы заставить все символы передаваться в нерасширенном стиле C вместо применения манипулирования именами C ++ ,
Исследовательский проект Microsoft http://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29 предоставляет хуки в инструментарий, и это может позволить прямое манипулирование тем, как формируются имена символов, но, к сожалению, его последний публичный выпуск был для VS 2008, и, похоже, он не был создан для включения в VS 2010 или VS 2012.