2010-04-25 114 views
18

有没有一种简单的方法(如免费程序),可以将c/C++代码转换为x86程序集?我知道任何c编译器都做一些非常类似的事情,我可以编译c代码,然后反汇编complied可执行文件,但这有点矫枉过正,我只想转换几行代码。简单的方法将c代码转换为x86程序集?

有谁知道一些程序可以做到这一点?

编辑:我知道海湾合作委员会编译器这样做,但它是在AT & T语法,我正在寻找英特尔语法(不知道它是否被称为英特尔语法)。 T语法对我来说看起来有点像胡言乱语,一些命令以相反的顺序使用操作数,而不是我习惯的方式,它会变得非常混乱。

+8

编译器正是这么做的。您的编译器将提供一个向您显示汇编器输出的选项。也许你可能会考虑阅读它的手册?我知道这是周末,但真的...... – 2010-04-25 18:19:52

+0

周末漫长的我在哪里:-) – 2010-04-26 19:01:19

回答

11

海湾合作委员会可以使用-S开关,但它会在& t语法中令人厌恶的丑陋。

+17

但你可以添加'-masm = intel'开关 – 2010-04-26 19:01:47

+1

使用'clang -S -mllvm --x86 -asm- Mac OS X上的syntax = intel' – 2014-08-10 07:14:44

13

如果在命令行上传递-S选项,gcc将生成程序集。

Microsoft Visual C++将与/FAs选项一样。

+0

ms visual C++是否也使用at&t语法或Intel语法? – Bob 2010-04-25 18:26:33

+2

@Bob:VC++发出漂亮的Intel语法程序集。 – 2010-04-25 18:29:59

+1

@Bob:你也可以通过gcc来生成Intel语法程序集:http://stackoverflow.com/questions/199966/how-do-you-use-gcc-to-generate-assembly-code-in- Intel的语法 – 2010-04-25 18:42:19

3

您的编译器已经按照您的说法进行了操作,并且最有可能在组装前停止。

对于GCC,添加-S标志。

gcc -S x.c 
cat x.s 

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

7

lcc编译器是一个多平台交叉编译器。你可以得到它的

lcc -S -Wf-target=x86/win32 foo.c 

产生Intel语法的汇编代码我从lcc找到汇编代码显著更容易比gcc吐出nowawadays阅读。

0

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

42

GCC使用下面的命令行可以输出Intel语法组件:

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

在VC下面的命令可以用于列出的汇编代码。

cl/FAs a。ç

0

通知 每一个建筑都有自己独特的名字,甚至建立不同 现在,当你知道所涉及的堆栈使用ASM挥发性 将b的完美解决方案