繁体   English   中英

C代码在Visual Studio中编译成哪种汇编语言?

[英]What assembly language does C code compile into in Visual Studio?

当我调试一个C项目时,我可以看到它编译成的所有汇编代码。 我想知道它是什么汇编语言。 是NASM还是MASM还是其他什么? 如果我使用内联汇编,我是否可以使用其他汇编语言?

它编译的代码不是汇编,而是直接的机器代码,至少在链接时优化之后。 您在调试时看到的是正在执行的机器代码的即时反汇编 因此,它没有额外的结构,例如标签,宏等,以便您可以在高级汇编程序中找到它,因为在生成机器代码时,这些额外信息会丢失(或者更确切地说,从不存在) 。

如果您指的是语法,Visual Studio将以英特尔语法显示汇编指令,这与AT&T语法不同,后者是GCC和GNU汇编程序的默认语法。

事实上,它也可能是胡言乱语。 如果jmp不对齐(x86指令是可变长度的),或者是一个不包含可执行代码的区域,而是数据,反汇编程序将尝试理解数据,产生随机汇编指令并不意味着任何东西。

这实际上很常见; 看这个图像:

在此输入图像描述

add byte ptr [rax], al是尝试的字节00 00反汇编,这显然不代表实际的可执行代码。

MSVC可以编译x86,x86_64,ARM和Itanium的二进制文件。 所以这取决于您的目标和项目设置

对于X86或X86-X64,Visual Studio包括用于32位代码的ML.EXE(MASM 6.00及更高版本重命名为ML.EXE)和用于64位代码的ML64.EXE。 在VS项目中,您可以右键单击文件名,然后单击属性,...输出文件,...程序集列表.... 汇编列表的命令行选项是/ Fa。 虽然称为仅汇编列表,但它会生成汇编代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM