微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用gcc / g ++时抑制系统调用

我有一个在我的大学局域网的门户,人们可以上传代码到C / C ++的编程难题。 我想使门户安全,以便人们不能通过他们提交的代码进行系统调用。 可能有几个解决方法,但我想知道如果我可以简单地通过设置一些聪明的gcc标志来做到这一点。 libc在认情况下似乎包含<unistd.h> ,这似乎是声明系统调用的基本文件。 有没有一种方法可以告诉gcc / g ++在编译时忽略这个文件,这样在unistd.h中声明的任何函数都不能被访问?

你最喜欢的g ++选项是什么?

错误C2327:不是types名称,静态或枚举器

在哪里得到iostream.h

了解dynamic链接如何在UNIX上工作

链接对象与g ++时的问题

为什么chroot("/var/jail/empty"); setuid(65534); chroot("/var/jail/empty"); setuid(65534); 是不是够好(假设65534有明显的限制)?

限制对头文件的访问不会妨碍您访问libc函数:如果您链接到libc它们仍然可用 – 您将不会拥有原型(和宏); 但你可以自己复制它们。

而不是链接到libc也不会帮助:系统调用可以直接通过内联汇编程序(甚至涉及跳转到数据)。

总的来说,我认为这不是一个好的方法。 在一个完全自包含的虚拟沙箱中运行上传代码(通过QEMU或类似的东西,也许)可能是一个更好的方式去。

-D可以覆盖单个函数名称。 例如:

gcc file.c -Dchown -Dchdir

或者你可以自己设置包括后卫:

gcc file.c -D_UNISTD_H

然而,他们的效果可以很容易地通过智能提交者用#undef来恢复:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐