编译具有有限库访问权限的程序

标签 c linux gcc compilation

我想用 gcc 和 glibc(或任何其他 c 库)编译 C 程序 但我想限制程序访问某些功能 例如,如果程序使用套接字或信号处理函数,则不应编译。

知道我该怎么做吗?

顺便说一句,我想在一个简单的编程竞赛评委身上使用它

谢谢

最佳答案

您无法可靠限制对某些功能的访问,因为积极主动的开发人员总是找到解决方法。例如,他可以使用 dlsym 在运行时查找某些函数的地址,或者使用 asm 代码调用某些系统调用(或使用缓冲区溢出技术)或假设特定版本libc 二进制文件并计算一些函数指针(例如,通过使用内置偏移量偏移某些合法 libc 函数(如 printf)的地址) ,或将一些文字字符串(包含合适的机器操作码)转换为函数指针等,等等......

但是,您可能会考虑自定义编译器(例如,如果使用最近的 GCC 进行编译,请使用 MELT 扩展对其进行自定义)以检测常见情况(但不是全部)。这可能意味着开发此类编译器定制需要花费数周的时间。

您还可以链接到特制的 libc、使用 LD_PRELOADptrace 等。

要可靠地禁止某些行为,您应该在某个虚拟容器内运行。

PS。 Statically (可靠且可靠)检测到某些源代码永远不会调用给定的一组函数是 undecidable ,因为相当于 halting problem .

关于编译具有有限库访问权限的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731599/

相关文章:

python - 树莓派 GUI 上的 QT 创建者

c - 使用 tidy 库时出现 "undefined reference"错误,尤其是 "tidy.h"

c++ - CMakeLists.txt :30 (project): No CMAKE_C_COMPILER could be found 处的 CMake 错误

c++ - 如何获得基于 c 函数的差异?

c - Windows 编译 v8 时出现 pkg-config 错误

linux -/proc/meminfo 中的条目

c - 使用 toupper() 时遇到段错误

c++ - 有没有类似conio.h的库?

c - FUSE 文件系统操作

linux - 在 linux 中安装 java 问题