我对所有这些低级的东西、汇编语言都比较陌生。我想了解更多细节。为什么 Linux 和 Windows 汇编语言之间存在差异?
据我了解,当我编译 C 代码时,操作系统并不会真正产生纯机器或汇编代码,它会产生依赖于操作系统的二进制代码。但为什么呢?
例如,当我使用 x86 系统时,CPU 只理解 x86 ASM,我对吗?那么为什么我们不编写纯 x86 汇编代码,为什么基于操作系统会有不同的汇编变体?如果我们编写纯 ASM 或操作系统生成纯 ASM,那么操作系统之间不会存在二进制兼容性问题吗?
我真的很想知道他们背后的所有原因。任何详细的答案、文章、书籍都会很棒。谢谢。
最佳答案
没有区别。如果处理器相同,则汇编代码相同。在 Windows 上编译的 x86 代码与 Linux 上的 x86 代码二进制兼容。编译器不会生成依赖于操作系统的二进制代码,但它可能会以不同的格式打包代码(例如 PE 与 ELF)。
不同之处在于使用的库。为了使用操作系统的东西(例如 I/O),您必须链接操作系统的库。不出所料,Windows 系统库在 Linux 机器上不可用(当然除非你有 Wine),反之亦然。
关于assembly - 为什么像 Windows、Linux 这样的汇编语言之间存在差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4605341/