是否有一种简单的方法(例如免费程序)可以将 c/c++ 代码转换为 x86 程序集?
我知道任何 C 编译器都会做一些非常相似的事情,我可以只编译 C 代码,然后反汇编编译后的可执行文件,但这有点矫枉过正,我想要的只是转换几行代码。
有人知道有什么程序可以做到这一点吗?
编辑:我知道 GCC 编译器会这样做,但它是 AT&T 语法,我正在寻找 Intel 语法(不确定它是否被称为 intel 语法)。 AT&T 语法对我来说看起来有点像乱码,有些命令以相反的顺序使用操作数,而不是我习惯的方式,这可能会让人非常困惑。
GCC 可以使用以下命令行输出 Intel 语法汇编:
gcc -S input.c -o output.asm -masm=intel
Gcc 可以使用 -S 开关来做到这一点,但它的 at&t 语法会非常丑陋。
-S
选项,gcc 将生成程序集。
Microsoft Visual C++ 将使用
/FAs
选项执行相同操作。
lcc
编译器是一个多平台交叉编译器。 你可以通过让它生成Intel语法汇编代码
lcc -S -Wf-target=x86/win32 foo.c
我发现
lcc
中的汇编代码比现在 gcc
吐出的汇编代码更容易阅读。
您的编译器已经按照您的说明执行此操作,并且很可能可以选择在汇编之前停止。
对于 GCC,添加
-S
标志。
gcc -S x.c
cat x.s
编辑:如果您的程序很短,您可以使用在线服务https://gcc.godbolt.org/。
如果您使用 gcc 作为编译器,则可以使用 -S 选项进行编译以生成汇编代码。 请参阅 http://www.delorie.com/djgpp/v2faq/faq8_20.html
正如许多人指出的那样,大多数编译器都会这样做。如果您不喜欢语法,使用 awk 或 sed 进行一些工作应该可以翻译。或者,如果没有一个程序可以为你做这件事,我会感到惊讶已经在某处编写了。
在 VC++ 中可以使用以下命令列出汇编代码。
cl /FAs a.c
通知 每个建筑都有自己独特的名称,甚至建造方式也不同 现在当你知道使用 asm volatile 涉及的堆栈时 将是完美的解决方案