编译C ++代码时是否可以禁用system calls?如果是的话,我该怎么做?
并稍微扩展这个问题。我希望程序不能与操作系统交互,除了文件读写。有可能这样做吗?
编辑:由于无法与操作系统交互,我的意思是无法在操作系统中进行任何更改,例如创建,编辑或删除某些内容。我主要担心的是系统调用,几乎在所有情况下都是有害的。这是用于评分程序,我将在其中运行其他人代码。程序通常会解决各种算法问题,因此不需要非常高级的功能。基本(或多或少)STL用法和经典代码。没有外部库(如Boost或类似的东西)或多个文件。
答案 0 :(得分:3)
是的,这当然是可能的。
查看geordi的源代码,看看它是如何做到的。 Geordi是一个IRC机器人,它在大多数系统调用被禁用的环境下编译,链接和运行C ++代码。
答案 1 :(得分:1)
#define system NO_SYSTEM_CALL
如果你可以使用宏来为编译目的生成错误。
答案 2 :(得分:1)
您可以使用以下任意组合:
system
的虚拟函数创建自己的库,并将其与学生代码链接(假设您控制构建步骤)-Dsystem=
调用编译器(尽管学生可以#undef
)答案 3 :(得分:0)
程序总是可以在* nix下租用系统调用。然而,您可以查看SELinux,Apparmor,GRsec这是内核安全措施,可以阻止某些应用程序的系统调用。