也许其中最困难的部分是找到一种具有现有交叉编译器平台的编程语言,该平台将在您的服务器运行的任何操作系统上编译 .exe 文件。如果您的服务器运行 Windows,这并不难。这里的问题是我们不确定您正在运行哪个操作系统。不用猜测,似乎以 VB 的形式存在解决方案(但不幸的是)。您的服务器永远不必修改源代码。您的代码可能类似于:
Module mainModule
Sub Main()
Console.WriteLine("Hello " & Name & ". Press enter to exit.")
Console.ReadLine()
End Sub
End Module
为了编译它,服务器可以调用 Microsoft VB 编译器或 Mono VB 编译器作为 shell 命令,使用/define:
开关来定义 Name。确保在将名称放入命令之前对其进行清理!确保它不包含任何命令行可能会不受欢迎地解释的字符,例如管道字符、换行符和引号。
单声道命令:vbnc filename.vb /define:Name=\"Fred\" /out:Fred.exe
微软命令:vbc filename.vb /define:Name=\"Fred\" /out:Fred.exe
如果您的服务器碰巧运行 Windows,那么您可以调用 Microsoft C++ 编译器来实现与 C 代码相同的效果。这也好不了多少。也许,如果取得了一些成功,您可能能够cl.exe
从 Windows 环境复制到 Linux(或其他非 Windows)环境,并使用 WINE 运行它。如果是这样的话,我更喜欢那个选项。您的源代码可能如下所示:
#include <stdio.h>
int main(void) {
puts("Hello " NAME ". Press enter to exit");
getchar();
}
...并且该命令看起来像:wine cl.exe filename.c /DNAME="Fred" /out:Fred.exe
,具有防止恶意用户劫持您的系统所必需的相同预防措施。