如果所有带有“.exe”文件扩展名的 Windows 文件都被视为“应用程序”,那么 NTOSKRNL.exe(Windows 内核)是否也是“应用程序”?或者这只是一个例外?那么 Unix 和 Linux 内核又如何呢?
答案1
可执行文件是一种文件类型,与配置文件(.ini)、图标文件(.ico)、动态加载库(.dll)、音频文件、视频文件、文本文件、word文档文件等类似。在DOS和Windows中,文件扩展名.exe用来标记具有可执行二进制指令(操作系统能够识别的特定格式)的文件。
应用软件(不是文件)是最终用户使用的软件(如指向 webopedia 的评论中所述),其中可能包括一个或多个可执行文件、配置文件、数据文件(内部数据)、图标文件、dll 文件(或 unix 的 .so)、音频/视频文件等。我们不能将 winword.exe 放在闪存驱动器中并称之为应用软件,因为如果没有其他支持文件,它甚至无法运行。但 winword.exe 是一个可执行文件。
问题中提到的 NTOSKRNL.exe 只是一个可执行文件(具有适合操作系统打开并作为单个程序运行的格式)。它不是应用软件,因为它是用于操作系统内部操作的(因此称为系统软件)。
答案2
这是一个语义问题。
根据网络百科:
应用程序是为最终用户设计的程序或程序组。应用软件可分为两大类:系统软件和应用软件。系统软件由与计算机进行最基础交互的低级程序组成。这包括操作系统、编译器和管理计算机资源的实用程序。
相比之下,应用软件(也称为最终用户程序)包括数据库程序、文字处理器和电子表格。形象地说,应用软件位于系统软件之上,因为如果没有操作系统和系统实用程序,它就无法运行。
因此,按照这个定义,Windows 内核是一个系统软件应用程序. 而像 Microsoft Word 这样的程序被认为应用程序软件。但是,我不知道有谁使用这些术语。人们称它们为程序或应用程序。
答案3
不是。操作系统由内核和系统库组成,提供应用程序使用的 API(应用程序编程接口)。
因此,内核当然是可执行文件,但不是应用程序。这是一个语义上的争论,但“应用程序”一词在 TLA(三个字母的缩写)中是正确的——因此争论非常清楚。
进一步假设您在 Windows 上运行 Java,它提供了自己的 API。Java 虚拟机和运行时是一个 Windows 应用程序;它本身托管 Java 应用程序。但 Java VM/运行时永远不会被视为 Java 应用程序。
答案4
我认为,这有点像口语表达,而不是技术表达。如果按照大多数人对应用程序的称呼,它通常是指在计算机上执行某项操作的东西。有趣的是,尝试在 NIST(美国国家标准与技术研究所)上找到标准定义,有各种定义:https://csrc.nist.gov/glossary/term/application。以下是最相关的:
通过计算机收集、保存、处理和呈现数据的系统。术语“应用程序”通常用于指代可执行的软件组件。术语“应用程序”和“软件应用程序”通常同义使用。
和
为满足特定需求而实施的硬件/软件系统。在此上下文中,应用程序包含一个系统,用于满足与最终用户身份验证或识别相关的部分需求,以便最终用户的标识符可用于促进最终用户与系统的交互。
所以,关于你的问题,每个人都会给你不同的答案。如果美国标准协会对此有 4 种定义,每种定义都对你能或不能考虑申请的内容有着完全不同的含义,那么就没有法定人数。
对我来说,我认为一般口语用法是,操作系统是允许您运行应用程序的东西。操作系统的另一个常见定义是直接操纵硬件的东西。但即使是这个定义也不再完全有意义了。我想我们都同意 Windows 是一个操作系统,对吧?嗯……它不再控制硬件,现在由 Hyper-V 层控制,即 1 型虚拟机管理程序。那么呃 - Hyper-V 1 型是操作系统还是 Windows?或者两者的结合是操作系统?你可能 (?) 争论其中一个。
所以直接回答你 - 肯定不是,或者绝对不是,内核不是应用程序。哦,另一个有效的答案是“有点”。
使情况变得复杂的另一件事是我们甚至无法真正很好地定义内核。NTOSKRNL.exe 并不是我们大多数安全研究人员所认为的“内核”。Windows 内核涵盖各种文件和内容。比如 lsass.exe - 它控制用户访问,当然这是内核的一部分,没有它 Windows 就无法工作(关闭服务看看哈哈)。那么 kernel.exe 呢?那肯定是内核吧?哦……不……这是 HID.sys 的什么——HID 系统的硬件接口。它直接与硬件进行交互(再次忽略 Hyper-V 还是不忽略?)。哦,等等,kernel32.dll - 那到底是什么??我还可以继续列举大概 30 个主要文件。这就是为什么我们安全研究人员会嘲笑 Windows 的混乱,并不是说它不是一个伟大的操作系统——它的成功不言而喻。但它绝对是一个混乱的局面(哦,现在我们有 UWP 应用程序 - 有一个内核组件也可以与 Hyper-V 交互)。
所以总而言之,你永远不会得到一个一致的答案,我的意思是,答案直接表明你的问题已经做出了错误的假设,ntoskrnl 肯定不是“windows 内核”,但你所得到的是 - 没有一致的答案。对我来说,内核就是让我能够运行我编写的东西的东西。有很多灰色地带。