提问人:RobertS supports Monica Cellio 提问时间:1/20/2020 最后编辑:RobertS supports Monica Cellio 更新时间:6/23/2023 访问量:25548
在可执行程序的上下文中,“二进制文件”和“可执行文件”之间的区别在哪里?
Where is the difference between "binaries" and "executables" in the context of an executable program?
问:
我经常看到术语“二进制”和“可执行文件”似乎可以互换用于同一事物。
这不是两个术语来描述完全相同的事情吗?编译过程后的可执行输出程序,我可以在终端上运行吗?
加强我的假设的是,这两件事应该是相同的,在应用程序的安装文件夹中提供一个文件夹(“bin”作为“二进制文件”的缩写)是一种常见的做法,用于存储可执行文件,用户可以在其中运行。bin
我已经阅读了 ndisasm 手册中提到的二进制文件和可执行文件有什么区别的问题和答案? 但问题和他们的答案更侧重于 Clang 和 ndisasm 各自的环境。
我也在软件工程论坛上阅读了 https://softwareengineering.stackexchange.com/questions/121224/what-are-binaries 的问题和答案,但这里也没有可执行文件和二进制文件之间的区别;只有“二进制”一词通常可以指:
但是,在计算中,二进制是指:
[来源:https://softwareengineering.stackexchange.com/a/121235/349225]
其中,在编译过程的输出程序的上下文中,二进制文件被称为与可执行文件相同,以及:
二进制一词用作一组文件,这些文件是在编译在机器上运行的目标代码后生成的。(以及 Java/.NET 的虚拟机/运行时)
[来源:https://softwareengineering.stackexchange.com/a/121234/349225 ]
它被提及的地方。
- 在可执行程序的上下文中,“二进制文件”和“可执行文件”之间有什么区别?
- 区别在哪里?
答:
可执行文件是可以执行的文件;您可以通过将文件本身的名称写入命令在命令行上运行它。在 Unix 系统上,还必须设置文件的“可执行”标志。在 Windows 上,文件的扩展名必须是一组固定的可执行文件扩展名之一,包括 ..exe
二进制文件只是二进制(即非文本)格式的文件。二进制格式意味着不应出于特定于平台的原因(例如,将换行符从 to )转换为文件的内容。\n
\r\n
二进制文件不一定是可执行的,例如,编译为或形成的库是二进制文件,但不是可执行文件。编译为或形成的 Java 程序不是可执行文件,但可以使用命令而不是命令来运行。.dll
.so
.class
.jar
java -jar program.jar
./program.jar
可执行文件不一定是二进制的,例如,通过编写 shebang 行并设置文件的可执行标志,可以使文本形式的 Python 脚本在 Unix 系统上可执行。#!/usr/bin/python3
它有助于理解此处“二进制”一词的上下文。它起源于编译器,编译器获取程序的(基于文本的)源代码,并将该源代码转换为二进制的可剪裁形式,而不是基于文本的形式。因此,在编译器的上下文中,“文本”和“源代码”是等价的,“二进制”和“可执行文件”也是等价的。另一方面,解释器不区分源代码和可执行代码。
随着时间的流逝,使用中间表示(例如Java JVM使用)肯定会变得更加复杂。Net 的 CLI 或 Python 字节码。
评论
.dll
.so
GetBinaryType(filename)
这取决于定义。所有文件都包含二进制代码,“工作”定义如下:
二进制或文本文件
文件的二进制代码对文本进行编码:文本文件
文件的二进制代码不对文本进行编码:二进制文件
可执行或不可执行文件
可执行文件:可执行文件
无法执行的文件:不可执行的文件
因此,二进制文件和可执行文件是正交属性,即任何文件都可以以独立的方式具有它们,也可以不具有它们。一些例子:
- 二进制可执行文件:Windows中的.exe文件,MacOS中的.app文件(不是单个文件,而是捆绑包)等。
- 文本可执行文件:Python 脚本、bash 脚本(需要相应的 interprenters)等
- 二进制不可执行文件:PDF 文件、音频文件等
- 不可执行的文本:C++ 源代码、Markdown 文件等
这是很久以前就不再有意义的计算怪癖之一,但到那时已经在技术术语中得到了巩固。
编译语言一直具有文本的、人类可读的、不可执行的形式,它被编译成二进制的、非人类可读的、可执行的形式。
在解释型语言广泛使用之前,在二进制媒体文件格式被常规使用之前,可以理解为什么“二进制”会成为“二进制可执行编译器输出”的简写,以及为什么包含这些文件的目录被称为“bin”。
此外,可以理解为什么像 shell 或 python 脚本这样的可执行文本文件(尤其是当它们位于 bin 文件夹中时)有时被称为“二进制文件”。
TL;DR:“二进制”可以表示“不是文本文件”或“可执行文件”,或两者兼而有之。你必须使用上下文线索来整理混乱。
评论
binaries
并且是具有一些重叠的不同集合。二进制文件是可执行文件。perl 脚本也可以是可执行文件,但不是二进制文件,mp3 文件是二进制文件,但不是可执行文件。executables
ls