我想询问以下问题。显然我不期望任何实际解决方案,但我很感激任何开发者对此的看法:
理论上是否可能有一个程序打开其他程序(为了论证,让我们假设它打开.exe文件),并确定特定可执行文件在执行时(具有固定的输入和机器状态)是否进行国际象棋游戏(除了其他任务之外)。
“下国际象棋”是指具有国际象棋AI引擎的黑白相间的棋盘和棋子的某种表示形式,并应用后续的移动。
这样的理论“国际象棋检测程序”可以包含虚拟机或PC模拟器或其他内容,以实际模拟扫描的可执行文件(如果需要)。我们可以假设它在具有相同RAM的任意快速计算机上运行。
关于停机问题,我可以这样解决:
在虚拟机中加载程序,该程序具有N位(硬盘和内存空间和CPU寄存器总共)。这个虚拟机最多可以假定2 ^ N个不同状态。
逐步在VM中执行程序。每一步之后,检查它是否停止。 如果是:问题已解决(结果:是,它停止)。 如果不是:获取虚拟机的当前状态,并查看此状态是否存在于我们已经遇到的状态列表中。如果是:问题已解决(结果:不会停止)。如果没有:将此状态添加到列表中并继续。
由于最多可能出现2 ^ N种不同状态,因此此算法将在有限时间内确定程序是否停止。
关于扫描的可执行文件或其运行的虚拟机的(无)限制性似乎存在一些歧义。让我们假设要扫描的可执行文件最多为1 GB(这应该足够,因为大多数国际象棋程序要小得多),它们应该在具有10 GB RAM的PC(或VM)上运行。
我们的理论国际象棋检测器程序可以使用任意数量的RAM。
理论上是否可能有一个程序打开其他程序(为了论证,让我们假设它打开.exe文件),并确定特定可执行文件在执行时(具有固定的输入和机器状态)是否进行国际象棋游戏(除了其他任务之外)。
“下国际象棋”是指具有国际象棋AI引擎的黑白相间的棋盘和棋子的某种表示形式,并应用后续的移动。
这样的理论“国际象棋检测程序”可以包含虚拟机或PC模拟器或其他内容,以实际模拟扫描的可执行文件(如果需要)。我们可以假设它在具有相同RAM的任意快速计算机上运行。
关于停机问题,我可以这样解决:
在虚拟机中加载程序,该程序具有N位(硬盘和内存空间和CPU寄存器总共)。这个虚拟机最多可以假定2 ^ N个不同状态。
逐步在VM中执行程序。每一步之后,检查它是否停止。 如果是:问题已解决(结果:是,它停止)。 如果不是:获取虚拟机的当前状态,并查看此状态是否存在于我们已经遇到的状态列表中。如果是:问题已解决(结果:不会停止)。如果没有:将此状态添加到列表中并继续。
由于最多可能出现2 ^ N种不同状态,因此此算法将在有限时间内确定程序是否停止。
关于扫描的可执行文件或其运行的虚拟机的(无)限制性似乎存在一些歧义。让我们假设要扫描的可执行文件最多为1 GB(这应该足够,因为大多数国际象棋程序要小得多),它们应该在具有10 GB RAM的PC(或VM)上运行。
我们的理论国际象棋检测器程序可以使用任意数量的RAM。