c++ - 二进制文件和操作系统

标签 c++ windows linux macos binary

我目前正在学习 C++,有一些(基本的)东西我并不真正了解,而且我在不同的搜索引擎上找不到任何有用的东西。

  • 所有操作系统的可执行文件 (Windows/Linux/Mac) 都有不同的“二进制格式”——有什么区别?我的意思是它们都是二进制的,但有什么(除了所有操作系统 API 之外)真正不同的吗?

  • (Windows) 这是一个愚蠢的问题 - 但那里的所有应用程序真的只是二进制的(我的意思是只有 0 和 1)吗?它们以何种格式存储? (因为您在所有文本编辑器中都看不到 0 和 1,但主要是不可显示的字符)

最好的问候, 喇嘛

最佳答案

Windows (PE)、Linux (ELF)、OS/X 等 (MACH-O) 的可执行文件格式往往旨在解决常见问题,因此它们都具有共同的特征。然而,每个平台指定不同的标准,因此即使平台使用相同类型的 CPU,文件也无法跨平台兼容。

可执行文件格式不仅用于可执行文件,还包括库,这些库也包含代码但从不由用户直接运行 - 仅加载到内存以满足直接可执行二进制文件的需要。

可执行文件格式的共同特点:

  • 一个或多个可执行代码块
  • 一个或多个只读数据 block ,例如文本和数字
  • 一个或多个读/写数据 block
  • 有关在应用程序运行时将这些 block 放置在内存中何处的说明
  • 说明还需要加载哪些库(也是“可执行文件格式”),以及它们如何连接(链接)到该可执行文件。
  • 一个或多个表将代码和数据位置映射到描述它们的字符串或 ID,对于链接和调试很有用。

将此类格式与更基本的格式进行比较很有趣,例如古老的 DOS .com 文件,它简单地描述了 64K 的各种“东西”,以便在下一个可用位置加载,并且具有上面列出的一些功能。

从这个意义上说,二进制用于将它们与以文本格式编写的“源”文件进行比较。二进制格式只是说它们以非文本方式编码,与二进制的 0 和 1 意义无关。

关于c++ - 二进制文件和操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037741/

相关文章:

windows - Windows 上的 Git fetch 在开始之前等待

node.js - 没有嵌套 node_modules 的 NPM 安装包

c++ - 使用 CMake 和 MinGW 在 Windows 上使用 Boost 1.68.0 编译 C++

python - buildozer 版本需要支持 AAB(Android App Bundle)的 python-for-android 版本

c - 笔记本电池状态?

python - 用于在服务器上存储 Openssl 密码的安全选项(Linux、Python、CherryPy)

c++ - 如何在QTabWidget Qt中展开标签页

c++ - 将 `auto` 关键字与 STL 迭代器一起使用

c++ - constexpr 变量的初始化

c++ - 代码块 - 混合 c 和 c++ 文件