¿Cómo puedo ver el código de ensamblaje para un programa C ++?
¿Cuáles son las herramientas populares para hacer esto?
¿Cómo puedo ver el código de ensamblaje para un programa C ++?
¿Cuáles son las herramientas populares para hacer esto?
Respuestas:
Si está compilando el programa usted mismo, puede pedirle a su compilador que emita una fuente de ensamblaje. Para la mayoría de los compiladores de UNIX, use el -S
conmutador.
Si está utilizando el ensamblador GNU, compilar con -g -Wa,-alh
dará origen y ensamblaje entremezclados en stdout ( -Wa
solicita al controlador del compilador que pase opciones al ensamblador, -al
activa el listado de ensamblaje y -ah
agrega el listado de "fuente de alto nivel"):
g++ -g -c -Wa,-alh foo.cc
Para Visual Studio, use /FAsc
.
Si ha compilado binario,
objdump -d a.out
en UNIX (también funciona para cygwin),dumpbin /DISASM foo.exe
en WindowsLos depuradores también podrían mostrarse de manera desastrosa.
disas
comando en GDB,En GCC / G ++, compile con -S
. Eso generará un something.s
archivo con el código de ensamblaje.
Editar: si desea que la salida esté en sintaxis Intel (que es IMO, mucho más legible, y la mayoría de los tutoriales de ensamblaje la usan), compile con -masm=intel
.
-fverbose-asm
opción
En Visual Studio ;
Este sitio actualmente funciona para mí (2017): https://godbolt.org/
Mucha gente ya dijo cómo emitir código de ensamblaje con un compilador determinado. Otra solución es compilar un archivo de objeto y volcarlo con una herramienta como objdump , readelf (en Unix) o DUMPBIN ( enlace ) (en Windows). También puede volcar un ejecutable, pero será más difícil leer el resultado.
Esto tiene la ventaja de trabajar de la misma manera con cualquier compilador.
Cualquier depurador que esté utilizando debe tener una vista de ensamblaje (Visual Studio, Borland IDE, gdb, etc.). Si no está utilizando un depurador y simplemente quiere ver qué ensamblado está en un programa, puede usar un desensamblador o, alternativamente, ejecutar el programa y adjuntarlo con un depurador y hacer el volcado desde allí. Consulte las referencias a desensambladores para obtener información sobre las opciones.
Como alguien más mencionó, el depurador de su plataforma es un buen punto de partida. Para el martillo neumático de todos los depuradores y desensambladores, eche un vistazo a IDA Pro.
En las plataformas Unix / Linux (incluido Cygwin) puede usar objdump --disassemble <executable>
.
La mayoría de los compiladores tienen una opción para generar una lista de ensamblaje. Por ejemplo, con VisualStudio puede usar algo como:
cl.exe /FAfile.asm file.c
Sin embargo, para una mejor legibilidad, la mayoría de los depuradores ofrecerán una vista que intercala el desensamblaje con la fuente original, para que pueda comparar su código con la salida del compilador línea por línea.
PE Explorer Desmontador para archivos PE de 32 bits. IDA para otros.
También puede probar este sitio: http://assembly.ynh.io/
Allí, puede pegar su código C o C ++ y presionar un botón azul para ver la versión equivalente del ensamblaje.
En Visual Studio puede generar la lista de ensambladores para un proyecto C ++.
Vaya a las propiedades del proyecto, luego a C ++ / Archivos de salida y establezca la configuración de Salida del ensamblador y la ubicación de la lista ASM a un nombre de archivo.
Si es usuario de Eclipse, puede usar la vista Desmontaje .
La vista Desmontaje muestra el programa cargado como instrucciones de ensamblador mezcladas con el código fuente para la comparación. La línea que se está ejecutando actualmente se indica mediante un marcador de flecha y se resalta en la vista. Puede realizar las siguientes tareas en la vista Desmontaje:
- Establecer puntos de interrupción al comienzo de cualquier instrucción de ensamblador
- Habilitar y deshabilitar puntos de interrupción y establecer sus propiedades
- Siga las instrucciones de desmontaje de su programa
- Ir a instrucciones específicas en el programa
Alt +8