【问题标题】:Is ".exe" the only extension of executable program in Windows OS?“.exe”是Windows操作系统中可执行程序的唯一扩展名吗?
【发布时间】:2022-01-18 08:53:52
【问题描述】:

我发现我计算机上运行的每个进程在任务管理器上都有 .exe 扩展名。

有人说批处理文件(.bat)和字节码(可能是.class)也是可执行程序,但我认为它们只是由其他可执行程序运行的文件(.bat - cmd.exe,.class - JVM, .cpl - rundll32.exe) 根据我在任务管理器上看到的

“.exe”是 Windows 操作系统中可执行程序的唯一扩展名吗?

【问题讨论】:

  • 这完全取决于您如何定义“可执行程序”。如果您询问的是“真正的”/“本机”程序,它们是具有自己的入口点的直接可执行机器代码,由操作系统内核直接加载,那么不,.exe 文件并不孤单:还有更老的.com(DOS 风格)可执行文件,以及加载到其他程序中的程序(即.dll 文件)。例如,在 .NET 5 中,所有“exe”程序实际上都编译为由存根 .exe 加载的 .dll 文件。
  • 请注意:文件扩展名并不表示文件的格式。一个文件可以从“foo.exe”重命名为“foo.html”,它仍然是一个可执行文件
  • 碰巧,您是否正在编写一些代码来阻止打开不安全的文件扩展名?

标签: windows exe executable file-extension


【解决方案1】:

如果您正在谈论执行命令,那么%PATHEXT% 环境变量中的所有扩展都可以在不指定扩展的情况下运行。例如*.bat、*.vbs...都是“可执行”在这个意义上

> echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

如果是关于二进制可执行文件,那么 Windows 不关心可执行文件的扩展名。它只是检查格式,如果它是受支持的二进制格式,那么它将运行。现代 Windows 使用以 MZ 幻数开头的 PE 格式,因此如果您创建一个以 MZ 开头的 *.TXT 文件并在 cmd 中运行它,那么它实际上是 treated as an executable file。事实上,System32 文件夹中的许多文件,如 *.SCR、*.CPL... 也是 PE 文件,当我们双击它们时仍然可以运行。甚至现代 Windows 应用程序中的 *.COM 文件也是 PE 文件。 *.COM 扩展名仅用于与同一应用程序的另一个 *.EXE 区分开来,但优先运行,因为默认情况下 *.COM 在 %PATHEXT% 中放在 *.EXE 之前,如上所示:

Windows 10 (不是)甚至支持直接运行 Linux ELF 可执行文件,而且它们当然默认没有任何扩展名。由于 文件在VM 内部运行,而不是像 那样直接在Windows 内核下运行

根据 Windows 版本,它可能支持更多的可执行格式。完整列表是

除了原始 *.COM 文件外,它们也不依赖于扩展名

【讨论】:

  • 别忘了.msi。安装程序包里面可以有可执行代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多