将c代码转换为x86程序集的简便方法?

时间:2010-04-25 18:16:44

标签: c compiler-construction programming-languages assembly x86

是否有一种简单的方法(如免费程序)可以将c / c ++代码转换为x86程序集?

我知道任何c编译器都做了类似的事情,我可以编译c代码,然后反汇编编译的可执行文件,但这有点过分,我想要的只是转换几行代码。

是否有人知道某些程序可以做到这一点?

编辑:我知道GCC编译器会这样做,但它是AT& T语法,我正在寻找英特尔语法(不确定它是否称为英特尔语法)。 AT& T语法对我来说有点像胡言乱语,有些命令以相反的顺序使用操作数,而不是我习惯的方式,它可能会让人感到困惑。

9 个答案:

答案 0 :(得分:44)

GCC可以使用以下命令行输出Intel语法汇编:

gcc -S input.c -o output.asm -masm=intel

答案 1 :(得分:13)

如果在命令行中传递-S选项,

gcc将生成程序集。

Microsoft Visual C ++将对/FAs选项执行相同的操作。

答案 2 :(得分:12)

Gcc可以使用-S开关来实现,但是在语法方面会很难看。

答案 3 :(得分:7)

lcc编译器是一个多平台交叉编译器。您可以通过

来生成英特尔语法汇编代码
lcc -S -Wf-target=x86/win32 foo.c

我发现来自lcc的汇编代码比gcc现在吐出的内容更容易阅读。

答案 4 :(得分:3)

您的编译器已按照您的说法进行操作,并且很可能在组装之前可以选择停止。

对于GCC,添加-S标志。

gcc -S x.c
cat x.s

修改:如果您的计划很短,可以使用https://gcc.godbolt.org/上的在线服务。

答案 5 :(得分:1)

如果您使用gcc作为编译器,则可以使用-S选项进行编译以生成汇编代码。见http://www.delorie.com/djgpp/v2faq/faq8_20.html

答案 6 :(得分:0)

许多人指出大多数编译器都会这样做。如果您不喜欢语法,那么awk或sed的一些工作应该能够翻译。或者,如果没有一个程序可以为你编写那个已经写过的地方,我会感到惊讶。

答案 7 :(得分:0)

在VC ++中,可以使用以下命令列出汇编代码。

  

cl / FAs a.c

答案 8 :(得分:0)

通知 每个架构都有自己独特的名称,甚至构建不同 现在,当您使用 asm volatile 了解所涉及的堆栈时 将是一个完美的解决方案