将c代码转换为x86汇编的简单方法?

问题描述 投票:0回答:9

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

我知道任何 C 编译器都会做一些非常相似的事情,我可以只编译 C 代码,然后反汇编编译后的可执行文件,但这有点矫枉过正,我想要的只是转换几行代码。

有人知道有什么程序可以做到这一点吗?

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

c assembly x86
9个回答
46
投票

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

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

14
投票

Gcc 可以使用 -S 开关来做到这一点,但它的 at&t 语法会非常丑陋。


13
投票
如果您在命令行上传递

-S

 选项,
gcc 将生成程序集。

Microsoft Visual C++ 将使用

/FAs
选项执行相同操作。


7
投票

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

让它生成Intel语法汇编代码
lcc -S -Wf-target=x86/win32 foo.c

我发现

lcc
中的汇编代码比现在
gcc
吐出的汇编代码更容易阅读。


4
投票

您的编译器已经按照您的说明执行此操作,并且很可能可以选择在汇编之前停止。

对于 GCC,添加

-S
标志。

gcc -S x.c
cat x.s

编辑:如果您的程序很短,您可以使用在线服务https://gcc.godbolt.org/


1
投票

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


0
投票

正如许多人指出的那样,大多数编译器都会这样做。如果您不喜欢语法,使用 awk 或 sed 进行一些工作应该可以翻译。或者,如果没有一个程序可以为你做这件事,我会感到惊讶已经在某处编写了。


0
投票

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

cl /FAs a.c


0
投票

通知 每个建筑都有自己独特的名称,甚至建造方式也不同 现在当你知道使用 asm volatile 涉及的堆栈时 将是完美的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.