¿Cómo puedo ver el código de ensamblaje para un programa C ++?
¿Cuáles son las herramientas populares para hacer esto?
c++
assembly
disassembly
Friki
fuente
fuente
Alt +8
Respuestas:
Pregúntale al compilador
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
.Echa un vistazo a lo binario
Si ha compilado binario,
objdump -d a.out
en UNIX (también funciona para cygwin),dumpbin /DISASM foo.exe
en WindowsUsa tu depurador
Los depuradores también podrían mostrarse de manera desastrosa.
disas
comando en GDB,fuente
En GCC / G ++, compile con
-S
. Eso generará unsomething.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
.fuente
-fverbose-asm
opciónEn Visual Studio ;
fuente
Para gcc / g ++
Esto generará prog.s con algunos comentarios sobre las variables utilizadas en cada línea asm:
fuente
Este sitio actualmente funciona para mí (2017): https://godbolt.org/
fuente
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.
fuente
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.
fuente
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>
.fuente
La mayoría de los compiladores tienen una opción para generar una lista de ensamblaje. Por ejemplo, con VisualStudio puede usar algo como:
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.
fuente
PE Explorer Desmontador para archivos PE de 32 bits. IDA para otros.
fuente
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.
fuente
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.
fuente
En un Intel Mac OS X 10.8 (Mountain Lion) la
-masm=intel
directiva no funcionó. Sin embargo, si tiene instalado Xcode , debería haber instalado la herramienta llamada 'otool':Debe proporcionar el código objeto compilado como parámetro.
fuente
Si es usuario de Eclipse, puede usar la vista Desmontaje .
fuente