我一直在用一台运行 Windows XP 的旧电脑。这台电脑连接着一台 Biesse 机器,该机器由一个只能在 Windows XP 上运行的软件操作。
在这台电脑的 boot.ini 文件(位于 c: 目录)中,有一个/execute
开关。我认为这个/execute
命令是机器软件需要的,但我想有人能帮我解释一下。
完整的 boot.ini 文件是:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /execute /fastdetect
这/execute
没有在 Microsoft boot.ini 规范中列出,如链接中所示:https://learn.microsoft.com/en-us/troubleshoot/windows-server/performance/switch-options-for-boot-files
那么,/execute
Windows XP 的 boot.ini 文件中可能意味着什么呢?
它关闭了 DEP(数据执行保护),即使用NX 位进行内存执行保护。
在 32 位 WinXP 系统上,添加
/noexecute
支持 PAE 的 CPU 会激活 Windows 对 NX 位的支持,如果内存页面不应该存储可执行代码,则在硬件级别将其标记为不可执行。在 64 位 WinXP/2003 系统(适用于 Intel/AMD CPU)上情况正好相反,DEP 功能是 64 位模式下的基线,Windows 默认使用它,因此
/execute
选择退出该保护。/execute 选项在 32 位 XP 上似乎没有任何意义,并且没有任何选项
/noexecute
也会产生同样的效果。DEP 使得利用程序中的某些类型的错误(主要是:可能被诱骗打开故意格式错误的文件的 Web 浏览器/文档/图像查看器)在受害者系统上执行自定义代码变得更加困难 - CPU 不会愉快地执行攻击者提供的代码,程序将因 NX 违规而被迫崩溃。
如果在 NX 位广泛使用之前编写的程序动态生成机器代码(例如使用即时编译的 Java 运行时),并且忘记告诉操作系统这些页面应该标记为可执行文件(“如果它在我的 PC 上运行,为什么还要费心呢?”),则可能与它不兼容。
因此,Windows XP 最初仅对选择加入的程序强制执行 NX ,但用户可以将其切换为始终强制执行,除了少数选择退出的程序(
/noexecute=optout
)。至于
/fastdetect
- 它主要告诉 Windows 避免寻找串行端口鼠标和总线鼠标,前者可能需要一段时间才能检测(更不用说干扰串行端口上的非鼠标设备)而后者在 WinXP 时彻底过时了。