C / C ++代码的等效asm代码

时间:2010-07-01 05:51:54

标签: c++ c assembly ubuntu

  

可能重复:
  How do you get assembler output from C/C++ source in gcc?

你好!

我有一个C和C ++源代码,我想在汇编代码中看到。如何为这些生成等效的asm代码?我应该使用什么工具?或者是否已经可以使用gcc编译器等工具?然后我应该执行什么命令?我更喜欢Linux之上的工具,尤其是Ubuntu。

提前致谢!

5 个答案:

答案 0 :(得分:12)

gcc -S x.c

这应该产生gcc认为等同于你的代码的程序集。但要注意,优化器可以做一些非常棘手的事情,这些事情很难看出在功能上等同于你的代码。特别是在c ++中,优化器非常依赖于内联和类似的东西。

来自gcc手册页:

  

-S

     

编译阶段后停止   正确;不要组装。输出是   以汇编代码文件的形式   对于每个非汇编程序输入文件   指定。默认情况下,汇编程序   源文件的文件名由   替换后缀.c,.i等,   与.s。

     

输入不需要的文件   编译被忽略。

答案 1 :(得分:3)

对于gcc,请使用-S开关。您将获得具有.s扩展名的文件,您可以在其中看到生成的汇编代码。

答案 2 :(得分:3)

我将采用中间路由,已经在一个容量中回答了这个问题(假设你已经安装了gcc -S ubuntu软件包,那就是使用gcc。但问题已经被问到several times

答案 3 :(得分:0)

gcc -S生成您可能感兴趣的源代码(对于gas汇编程序)。但请记住,特别是对于C ++,您可以发现许多有趣的代码确实是链接的标准库,运行时间...根据语言而言。您可以反汇编最终代码(例如,只需使用objdump),您可以在其中查看启动代码和链接器添加的其他代码(当然,由于动态绑定,您将看不到代码比方说,C标准库,因为它没有嵌入,除非你用静态链接创建你的最终可执行文件,当可行时,即lib的“静态”版本必须存在)

因此,您获得的不是C / C ++源代码的独立等效代码。这种翻译很难,特别是因为asm是一种非常“基本”的语言,所以为了能够翻译它“1-1”你需要很多代码,当然“翻译”将取决于系统(例如,最后的自制输出例程必须使用OS提供的API /系统调用)...基本上你必须在需要时重写C / C ++库和运行时(对于C ++)......

翻译成其他语言,例如从C ++到另一种OO语言,可能更简单,但它不是你感兴趣的。

答案 4 :(得分:-1)

这是一个将C转换为asm

的简单项目

http://www.codeproject.com/KB/cpp/KhanC2ASM.aspx

这是另一个

http://www.hex-rays.com/idapro/

你可以通过谷歌搜索找到许多反汇编程序。