windows - 如何在内存/CPU 时间有限的 Windows 下运行程序?

标签 windows

开始于 this question ,跟进 this question现在导致了现在的那个。 :)

任务如下:制作一个 Windows 程序,该程序将在有限的环境中运行另一个程序。另一个程序是不可信任的,所以它必须为黑客代码做好准备。更具体地说:

  • 将可用内存限制为 X MB(作为参数给出);
  • 将可用执行时间限制为 X 毫秒(作为参数给出)。请注意,这是内核时间 + 用户时间,而不是空闲时间。另一方面,也必须限制空闲时间,这样程序就不能无限地Sleep()
  • 在程序终止时尽可能准确地报告它实际花费的 CPU 时间。毫秒会很好,厘秒是可以接受的,小于那个就不好了。 CPU 周期将是理想的。
  • 如果程序崩溃,报告有关崩溃的一些信息(越多越好,但不要过度使用堆栈跟踪等)。
  • 最好捕获程序的所有输出并报告;
  • 该程序应该只使用当前目录,加上一些来自 SYSTEM32 的强制性 .DLL(如 kernel.dll、user32.dll 等)。尽可能限制对其他任何内容的访问。不需要访问注册表和网络之类的东西(除非强制性 .DLL 需要它)。访问越少越好。

这是计算奥林匹克竞赛支持软件所需要的。该程序将在中央服务器上运行参与者提交的内容,因此您几乎可以期待那里的任何东西。崩溃将是家常便饭,一些黑客攻击也在意料之中。

那么 - 您将如何制作这样的程序?你会用什么?在前面的主题(见上文)中,很明显作为调试器附加是一个坏主意,尽管也许我太笨拙了。

最佳答案

您几乎可以构建与 IIS 相同的进程模型 - 有趣!我会使用与 IIS 相同的工具,它对黑客攻击相对稳健,并且旨在将您的系统划分为许多并发作业。

您可以使用 Win32 Jobs为内存、CPU、线程设置配额,您可以为不同的进程设置安全上下文,从而限制对文件系统的访问。

为了监控,我会查看 WMI .

对于挂起或崩溃时的堆栈跟踪,我使用了 ADPlus再次来自微软。

要捕获控制台输出,请查看创建 Child Process with Redirected Input Output.

关于安全限制,创建一个低权限用户帐户并以该用户身份运行作业/进程。

关于windows - 如何在内存/CPU 时间有限的 Windows 下运行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532301/

相关文章:

linux - git clone - 从 Windows 命令行运行时权限正常,但从 Cygwin 运行则不行

c++ - 无法为进程中的所有线程安装 Hook

Python检索Windows服务信息

c# - 无法将文件路径作为命令行参数传递,其中路径包含空格?

python - NamedTemporaryFile 在 Windows 上有什么用?

windows - 错误 1334。在 Data1.cab 中找不到文件

windows - 用于演示目的的 'read-only' 、 'non-removable' 应用程序安装日期的存储位置

c++ - 如何在 VCL 应用程序中处理已发布、已注册的 Windows 消息?

windows - 类共享警告不允许我使用 visualVM 在本地 (Windows) 进行分析

c - 在不按回车键的情况下读入命令提示符输入