如何查看 C++ 程序的汇编代码?

有哪些流行的工具可以做到这一点?

有帮助吗?

解决方案

要求编译器

如果你正在建立的程序自己,你可以问问你的编译器发组源。对于大多数UNIX编译器的使用 -S 开关。

  • 如果您使用的GNU汇编,汇编有 -g -Wa,-alh 将给混源和大会stdout(-Wa 要求编译器驱动程序通过选项,汇编的 -al 开会的, -ah 增加了"高级源"清单):

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

  • Visual Studio,使用 /FAsc.

窥视到的二进制

如果你已经编制了二进制

用你的调试器

调试器还可显示disassebly.

  • 使用 disas 命令在库,
  • 拆卸窗口 视觉上的工作室窗口。

其他提示

在GCC / G ++,编译-S。这将输出与汇编代码something.s文件。

修改:如果要输出到在Intel语法(这是IMO,更可读,并且最组件教程使用它),编译-masm=intel

在Visual Studio;

  1. 设置一个断点
  2. 运行程序,直到它停止在断点
  3. 右击的源代码和选择"显示编译"

有关的gcc /克++

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

这将产生在每一个ASM线用在变量的一些评论prog.s:

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

此站点当前为我工作(2017): https://godbolt.org/

很多人已经告诉过如何使用给定的编译器发出汇编代码。另一种解决方案是编译一个目标文件并使用诸如此类的工具转储它 对象转储, 雷德尔夫 (在 Unix 上)或 DUMPBIN(关联)(在 Windows 上)。您还可以转储可执行文件,但读取输出会更加困难。

这样做的优点是可以与任何编译器以相同的方式工作。

无论调试器您使用的应当具有的组装图(Visual Studio中,Borland的IDE,GDB,等等)。如果不使用调试器,你只是想看到的是一个什么样的程序组件,您可以使用反汇编或替代,运行程序和附加到它与调试器,并从那里做转储。看到分解器参考等选项的信息。

至于别人提到的,你的平台的调试器是一个很好的起点。对于所有调试器和反汇编的手提钻,看看 IDA Pro中。

在Unix / Linux平台(包括Cygwin的),可以使用objdump --disassemble <executable>

大多数编译器有一个选项,输出的组件列表。例如。与VisualStudio中,你可以使用这样的:

cl.exe /FAfile.asm file.c

有关最佳可读性不过,大多数调试器将提供交织与原始源的反汇编的视图,这样你就可以通过行的编译器的输出线比较你的代码。

PE资源管理器拆装的32位PE文件。 IDA为他人。

您也可以尝试这个网站: http://assembly.ynh.io/

有,可以粘贴C或C ++代码,然后按一个蓝色按钮来查看组件等效的版本。

在Visual Studio中可以生成汇编为一个C ++项目列表。

转到项目属性,然后以C ++ /输出文件,并设置汇编输出设定和ASM列表位置到一个文件名。

在英特尔的Mac OS X 10.8(山狮)的-masm=intel指令没有工作。但是,如果您有 的安装Xcode中,应该已经安装了名为“otool”的工具:

otool code.o -tV

您必须提供编译的目标代码作为参数。

如果你们食用户,可以使用 拆卸看.

拆卸图显示了加载的程序作为汇编 说明的混合与源代码作比较。当前 执行线路箭头指示的标记,并强调在 图。你可以做以下任务在拆卸查看:

  • 设断点在开始任何汇编指令
  • 启用和禁用断点和它们的设定它们的性质
  • 步骤,通过拆卸指令的程序
  • 跳到具体说明的程序
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top