如何查看C ++程序的汇编代码?
有哪些流行的工具可以做到这一点?
如何查看C ++程序的汇编代码?
有哪些流行的工具可以做到这一点?
Answers:
如果您自己构建程序,则可以要求编译器发出汇编源。对于大多数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上。调试器也可能显示混乱。
disas
在GDB中使用命令,在GCC / G ++中,使用进行编译-S
。这将输出something.s
带有汇编代码的文件。
编辑:如果您希望输出采用Intel语法(IMO,这是IMO,更具可读性,并且大多数汇编教程都使用它),请使用进行编译-masm=intel
。
-fverbose-asm
选项
在Visual Studio中 ;
该网站目前为我工作(2017):https : //godbolt.org/
无论使用哪种调试器,都应具有汇编视图(Visual Studio,Borland IDE,gdb等)。如果您不使用调试器,而只想查看程序中的程序集,则可以使用反汇编器,或者运行该程序,并使用调试器将其附加并从那里进行转储。有关选项的信息,请参见反汇编程序的参考。
正如其他人提到的,平台的调试器是一个很好的起点。对于所有调试器和反汇编器的手提凿岩机,请查看IDA Pro。
在Unix / Linux平台(包括Cygwin)上,可以使用objdump --disassemble <executable>
。
PE Explorer 32位PE文件的反汇编程序。其他人的IDA。
您也可以尝试以下网站:http : //assembly.ynh.io/
在这里,您可以粘贴C或C ++代码,然后按蓝色按钮查看程序集的等效版本。
在Visual Studio中,您可以为C ++项目生成汇编程序列表。
转到项目属性,然后转到C ++ /输出文件,并将汇编程序输出设置和ASM列表位置设置为文件名。
如果您是Eclipse用户,则可以使用Disassembly视图。
“反汇编”视图将加载的程序显示为与源代码混合的汇编程序指令,以进行比较。当前执行的行由箭头标记指示,并在视图中突出显示。您可以在“反汇编”视图中执行以下任务:
- 在任何汇编程序指令的开头设置断点
- 启用和禁用断点及其设置属性
- 逐步执行程序的反汇编指令
- 跳至程序中的特定说明
Alt +8