当我调试一个C项目时,我可以看到它编译到的所有汇编代码。我想知道它是什么汇编语言。它是NASM还是MASM还是别的?如果我使用内联汇编,我是否可以使用其他汇编语言?C代码在Visual Studio中编译成什么汇编语言?
8
A
回答
6
它编译的代码不是程序集,而是直接的机器代码,至少在链接时优化之后。您在调试时看到的是正在执行的机器代码的即时反汇编。因此,它没有额外的结构,比如标签,宏等,这样您就可以在高级汇编程序中找到它们,因为这些额外的信息在生成机器码时丢失了(或者更确切地说,从不存在) 。
如果您的意思是语法,Visual Studio会在Intel syntax中显示汇编指令,这与ATT语法不同,这是GCC和GNU汇编程序的默认语法。
事实上,它也可能是胡言乱语。如果你不对齐(x86指令是可变长度的),或者不包含可执行代码而是数据的区域,反汇编器将试图理解数据,产生不意味着随机汇编指令,这并不意味着任何东西。
这实际上很常见;参见例如此图像:
add byte ptr [rax], al
是字节00 00
,这显然并不代表实际的可执行代码的企图拆卸。
2
MSVC可以编译x86,x86_64,ARM和Itanium的二进制文件。所以这取决于你的目标和项目设置
2
对于X86或X86-X64,Visual Studio包括32位代码的ML.EXE(MASM 6.00和更高版本被重命名为ML.EXE)和64位的ML64.EXE码。在VS项目中,您可以右键单击文件名,然后属性,...输出文件,...程序集列表...。汇编列表的命令行选项是/ Fa。尽管只调用了汇编代码清单,但它生成汇编代码。
相关问题
- 1. 编译C++在Visual Studio在汇编
- 2. AVR汇编语言代码
- 3. 汇编&C - 翻译C'S代码汇编
- 4. 内联汇编代码无法在Visual C++ 2010 Express中编译
- 5. 汇编语言 - sarq在代码中做了什么?
- 6. Visual Studio,Intel Visual Fortran和Visual C/C++混合语言编译
- 7. cmp在汇编语言中做什么
- 8. 将伪代码翻译成MIPS汇编语言
- 9. G ++编译Visual Studio代码
- 10. Visual Studio代码 - SCSS编译
- 11. 如何在Visual Studio 2010中从C++源代码生成汇编代码
- 12. 为什么我的Visual Studio 2013是C++代码编译
- 13. 汇编语言中的简单代码
- 14. nasm汇编语言中的$是什么?
- 15. 为什么此代码无法在Visual Studio 2010中编译?
- 16. 编译器在这个汇编代码中做了什么?
- 17. 编译C代码到MIPS汇编
- 18. Visual Studio 2010像Visual Studio 6一样在C++中编译内联汇编?
- 19. 汇编语言?
- 20. 在Visual C++ Express中编译C代码
- 21. C语言中:在编译
- 22. 反编译汇编代码
- 23. .NET汇编语言
- 24. 这是写入什么汇编语言?
- 25. Visual Studio代码支持用C#编写的语言服务器
- 26. 来自visual studio的反汇编代码
- 27. 从英特尔汇编语言手动编写C代码?
- 28. 什么将汇编语言转换为机器代码
- 29. 汇编语言代码问题
- 30. 汇编语言符号操作代码
VS将C和C++直接编译为机器码,而不是程序集。你可能会得到一个汇编语言列表,但我不知道那些命令(在gcc中,你可以使用-S选项)。 –
@JohnBode为什么gcc不能直接编译成机器码? –
通常它会;您必须使用命令行选项才能执行其他操作。 –