Emp*_*ian 163
如果您自己构建程序,可以让编译器发出汇编源代码.对于大多数UNIX编译器,请使用该-S
开关.
如果您正在使用GNU汇编程序,编译-g -Wa,-alh
将在stdout上提供混合源和程序集(-Wa
要求编译器驱动程序将选项传递给汇编程序,-al
打开程序集列表,并-ah
添加"高级源"列表):
g++ -g -c -Wa,-alh foo.cc
对于Visual Studio,请使用/FAsc
.
如果你有编译二进制,
objdump -d a.out
在UNIX上使用(也适用于cygwin),dumpbin /DISASM foo.exe
在Windows上.调试器也可以显示为disassebly.
disas
在GDB中使用命令,Zif*_*fre 35
在GCC/G ++中,编译-S
.这将输出something.s
带汇编代码的文件.
编辑:如果您希望输出采用英特尔语法(这是IMO,更具可读性,并且大多数汇编教程都使用它),请编译-masm=intel
.
osg*_*sgx 13
对于gcc/g ++
gcc -save-temps -fverbose-asm prog.c
Run Code Online (Sandbox Code Playgroud)
这将生成prog.s,并对每个asm行中使用的变量进行一些注释:
movl $42, -24(%ebp) #, readme
movl -16(%ebp), %eax # pid, pid
movl %eax, 4(%esp) # pid,
movl $.LC0, (%esp) #,
call printf #
Run Code Online (Sandbox Code Playgroud)
大多数编译器都可以选择输出汇编列表.例如,使用VisualStudio,您可以使用以下内容:
cl.exe /FAfile.asm file.c
Run Code Online (Sandbox Code Playgroud)
但是为了获得最佳可读性,大多数调试器将提供一个将反汇编与原始源交错的视图,因此您可以逐行比较代码和编译器的输出.