programacion lenguaje historia hibrida entre ensamblador ejemplos diferencia dev codigo c++ assembly disassembly

lenguaje - ¿Cómo puedo ver el código ensamblador para un programa C++?



programacion en ensamblador (14)

¿Cómo puedo ver el código ensamblador para un programa C ++?

¿Cuáles son las herramientas populares para hacer esto?


Preguntar al compilador

Si está construyendo el programa usted mismo, puede pedirle a su compilador que emita la fuente de ensamblaje. Para la mayoría de los compiladores de UNIX, use el -S .

  • Si está utilizando el ensamblador GNU, compilar con -g -Wa,-alh le dará origen y ensamblaje entremezclado en stdout ( -Wa le pide al controlador del compilador que pase las opciones al ensamblador, -al activa el listado de ensamblaje, y -ah agrega "alto" -nivel fuente "listado):

    g++ -g -c -Wa,-alh foo.cc

  • Para Visual Studio, use /FAsc .

Eche un vistazo al binario

Si ha compilado binario,

Usa tu depurador

Los depuradores también podrían mostrarse de forma desastrosa.


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 plataformas Unix / Linux (incluido Cygwin) puede usar objdump --disassemble <executable> .


Cualquier depurador que esté utilizando debe tener una vista de conjunto (Visual Studio, Borland IDE, gdb, etc.). Si no está utilizando un depurador y simplemente desea ver qué ensamblaje se encuentra en un programa, puede usar un desensamblador o, alternativamente, ejecutar el programa y adjuntarlo con un depurador y realizar el volcado desde allí. Ver referencias a disassemblers para información sobre opciones.


En GCC / G ++, compile con -S . Eso generará un archivo something.s con el código de ensamblado.

Editar: si desea que la salida tenga la sintaxis Intel (que es IMO, mucho más legible y la mayoría de los tutoriales de ensamblaje lo usan), compile con -masm=intel .


En Visual Studio puede generar la lista de ensambladores para un proyecto de C ++.

Vaya a las propiedades del proyecto, luego a C ++ / Output Files y establezca la configuración de salida del ensamblador y la ubicación de la lista ASM en un nombre de archivo.


En un Intel Mac OS X 10.8 (Mountain Lion), la directiva -masm=intel no funcionaba. Sin embargo, si tienes instalado Xcode , debería haber instalado la herramienta llamada ''otool'':

otool code.o -tV

Debe proporcionar el código de objeto compilado como parámetro.



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.


Muchas personas ya dijeron cómo emitir código ensamblador con un compilador determinado. Otra solución es compilar un archivo de objeto y readelf con una herramienta como objdump , readelf (en Unix) o DUMPBIN ( link ) (en Windows). También puede volcar un archivo ejecutable, pero será más difícil leer el resultado.

Esto tiene la ventaja de funcionar de la misma manera con cualquier compilador.


Para gcc / g ++

gcc -save-temps -fverbose-asm prog.c

Esto generará progresiones con algunos comentarios sobre las variables utilizadas en cada línea asm:

movl $42, -24(%ebp) #, readme movl -16(%ebp), %eax # pid, pid movl %eax, 4(%esp) # pid, movl $.LC0, (%esp) #, call printf #


Si es un usuario de Eclipse, puede usar la vista Desensamblaje .

La vista Desarmado muestra el programa cargado como instrucciones del ensamblador mezcladas con el código fuente para comparación. La línea que se está ejecutando se indica con un marcador de flecha y se resalta en la vista. Puede realizar las siguientes tareas en la vista Desensamblaje:

  • Establecer puntos de interrupción al inicio 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
  • Salta a instrucciones específicas en el programa

También puedes 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 ;

  1. establecer un punto de interrupción
  2. ejecutar el programa hasta que se detenga en el punto de corte
  3. Haga clic con el botón derecho en el código fuente y seleccione "mostrar disasembly"