当我调试一个C项目时,我可以看到它编译成的所有汇编代码。我想知道它是什么汇编语言。是 NASM 还是 MASM 还是其他?如果我使用内联汇编,我是否可以使用其他一些汇编语言?
最佳答案
它编译成的代码不是汇编代码,而是直接的机器代码,至少在链接时优化之后是这样。您在调试时看到的是当前正在执行的机器代码的即时反汇编。因此,它没有额外的结构,例如标签、宏等,您希望在高级汇编程序中找到这些结构,因为在生成机器代码时,这些额外信息会丢失(或者更准确地说,永远不会出现) .
如果您指的是语法,Visual Studio 会在 Intel syntax 中显示程序集指令,这与 AT&T 语法不同,后者是 GCC 和 GNU 汇编程序的默认语法。
其实也有可能是乱码。如果您 jmp
不对齐(x86 指令是可变长度的),或者到一个不包含可执行代码但包含数据的区域,反汇编器将尝试理解数据,产生随机没有任何意义的汇编指令。
这实际上很常见;例如看这张图片:
add byte ptr [rax], al
是对字节00 00
的尝试反汇编,显然不代表实际的可执行代码。
关于c - C代码在Visual Studio中编译成什么汇编语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028855/