我目前正在学习C ++,还有一些我不太了解的基本内容,以及我在不同搜索引擎上找不到任何有用的内容。
因为所有操作系统的可执行程序(Windows / Linux / Mac)都有不同的“二进制格式” - 有什么区别?我的意思是它们都是二进制的,但是除了所有的OS API之外还有什么真的不同吗?
(Windows)这是一个愚蠢的问题 - 但是所有的应用程序都只是二进制(我的意思是0和1)?它们以哪种格式存储? (因为在所有文本编辑器中都没有看到0和1,但主要是不可显示的字符)
祝你好运, 喇嘛
答案 0 :(得分:7)
Windows / Linux的可执行文件的不同之处在于:
应用程序是数据和机器语言操作码,塞进文件中。可执行文件中的大多数字节不包含文本,因此可以包含0到255之间的值,即所有可能的值。人们会说这是二进制的。一个字节中有8位,因此每个字节可以说包含8个二进制数字,其中一些是0和1。
答案 1 :(得分:7)
Windows(PE),Linux(ELF),OS / X等(MACH-O)的可执行文件格式往往旨在解决常见问题,因此它们都具有共同的功能。但是,每个平台都指定了不同的标准,因此即使平台使用相同类型的CPU,这些文件也不会跨平台兼容。
可执行文件格式不仅用于可执行文件,还用于包含代码但从不直接由用户运行的库 - 仅加载到内存中以满足直接可执行二进制文件的需要。
可执行文件格式的共同特征:
将这些格式与更基本的格式进行比较很有意思,例如古老的DOS .com
文件,它简单地描述了要在下一个可用位置加载的64K各种“东西”,并且具有很少的功能上面列出的。
这种意义上的二进制用于将它们与以文本格式编写的“源”文件进行比较。二进制格式只是说它们是以非文本方式编码的,并不真正与0和1二进制意义相关。
答案 2 :(得分:4)
当你了解它时,计算机中的每个文件都是“二进制”的,因为它在磁盘上存储为1和0的序列(甚至是文本文件)。在文本编辑器中打开文件时,它会根据各种编码规则将这些字符分组为字符。现在,如果文件实际上是一个文本文件,这将为您提供可读文本。但是,如果文件不是,文本编辑器将忠实地尝试和解码比特流,但很可能最终会有很多不可显示的字符,因为这些字节实际上不是字符的编码形式,而是CPU指令
至于你的问题的另一部分,关于“二进制格式”:有多种格式可以列出可执行文件的各个部分,例如ELF或Windows DLL / EXE格式。这些都准确地指定了文件在文件中的各个部分的位置(即元数据所在的位置,符号表所在的位置,入口点所在的位置,静态数据和资源所在的位置等)
答案 3 :(得分:2)