c++ - MS Visual Studio 2010 cómo usar el archivo generado por.asm
visual-studio-2010 assembly (3)
Me gustaría preguntar sobre algo que estoy pensando probar con Visual Studio 2010.
Estoy generando un archivo .asm del archivo.cpp estableciendo la opción en "Salida del ensamblador" en las propiedades del proyecto -> C / C ++ -> Archivos de salida (/ FAs).
Mi pregunta es, ¿cómo puedo en el próximo paso usar ese archivo .asm generado para volver a vincularlo sin usar más el archivo .cpp, en caso de que quiera hacer algunas modificaciones dentro del archivo .asm y luego volver a vincular manteniendo las modificaciones que hice en el nivel de ensamblaje.
Sería muy útil si pudiera proporcionar los pasos exactos, incluida la configuración correcta que pueda necesitarse en las propiedades del proyecto.
Aquí hay un tutorial http://www.cs.virginia.edu/~evans/cs216/guides/vsasm.html
Hice esto recientemente. Aquí hay una repetición de la respuesta que di aquí compile-assembly-output-generated-by-vc . Resulta que todavía puedes hacer esto en el modo de 32 bits en MSVC2012, pero creo que el modo de 64 bits es inútil.
Para el modo de 32 bits, esto es lo que haces.
Cree un proyecto vacío y un archivo fuente Source.cpp
#include <stdio.h>
int main() {
printf("hello world/n");
return 0;
}
- Haga clic derecho en su proyecto y seleccione "Build Customization" y
seleccione masm como se describe aquí http://www.masm32.com/board/index.php?topic=9231.0 - En C ++ / OutputFiles seleccione Assembly Output / FA
- Complile en modo de liberación de modo de 32 bits
- Cargue el archivo Source.asm en MSVC para que pueda verlo. No funcionará aún. Algunos cambios son todavía necesarios.
- En C ++ / Optimization, desactive la optimización de todo el programa (quita
/GL
). Esto agrega la líneaINCLUDELIB MSVCRT
- En el Enlazador / Avanzado, establece la última opción "La imagen tiene
/SAFESEH:NO
excepción segura" en No (/SAFESEH:NO
) - Ahora debería tener un archivo Source.asm que hará lo mismo que el archivo Source.cpp. Copie Source.cpp desde el directorio de Release al mismo directorio que Source.cpp (para que no se elimine al compilar / limpiar).
- Agregue Source.asm (como un archivo existente) a los archivos de origen y elimine Source.cpp de la compilación.
- Reconstruya y debería ver "Hello World" sin tener que cambiar ninguna línea de ensamblaje a mano.
Lo he usado para funciones más complicadas. Normalmente lo hago en un módulo separado y uso extern "C"
en el nombre de la función para eliminar el cambio de nombre de C ++.
Simplemente arrastre los archivos .obj al proyecto (árbol del Explorador de soluciones): cómo incluir archivos .obj en el proyecto