How can I see the assembly code for a C++ program?
In GCC/G++, compile with -S
. That will output a something.s
file with the assembly code.
Edit: If you want the output to be in Intel syntax (which is IMO, much more readable, and most assembly tutorials use it), compile with -masm=intel
.
In Visual Studio;
- set a breakpoint
- run the program until it stops at the breakpoint
- rightclick on the sourcecode and pick "show dissasembly"
For gcc/g++
gcc -save-temps -fverbose-asm prog.c
This will generate prog.s with some comments on variables used in every asm line:
movl $42, -24(%ebp) #, readme
movl -16(%ebp), %eax # pid, pid
movl %eax, 4(%esp) # pid,
movl $.LC0, (%esp) #,
call printf #
Ask the compiler
If you are building the program yourself, you can ask your compiler to emit assembly source. For most UNIX compilers use the -S
switch.
If you are using the GNU assembler, compiling with
-g -Wa,-alh
will give intermixed source and assembly on stdout (-Wa
asks compiler driver to pass options to assembler,-al
turns on assembly listing, and-ah
adds "high-level source" listing):g++ -g -c -Wa,-alh foo.cc
For Visual Studio, use
/FAsc
.
Peek into a binary
If you have a compiled binary,
- use
objdump -d a.out
on UNIX (also works for cygwin), dumpbin /DISASM foo.exe
on Windows.
Use your debugger
Debuggers could also show disassembly.
- Use
disas
command in GDB.
Useset disassembly-flavor intel
if you prefer Intel syntax. - or the disassembly window of Visual Studio on Windows.