我正在尝试开发一个框架来编译和执行(主要是随机的)C++ 和 Java 包。
但是,考虑到它们的随机性,我想在执行之前检查任何 linux 系统调用的源代码(或可执行文件——预执行)。如果有这样的系统调用,我不想执行程序。
可以安全地假设这些包不需要进行任何系统调用来实现它们的功能目的(它们不是复杂的包)。
编辑:bash 命令/脚本是最简单的,但任何答案都可以。
最佳答案
简而言之,您无法可靠地检测所有恶意系统调用(通过对源代码的静态分析);了解 halting problem和 Rice theorem ... 顺便说一句 MELT会比 grep
稍微好一点因为它适用于 GCC gimple 表示。
想想(在 Linux 上)
- dlopen(3) -ing
libc
(或主要可执行文件)然后dlsym
-ing"system"
获取指向system
的指针功能 - 了解
libc
布局和版本,然后计算system
通过向malloc
的地址添加一些已知的偏移量来获取的地址 - 使用一些 JIT 库,例如只有标题 GNU lightning
- 编码
system
的等价物与fork
和execve
.... - 等....
当然,您可能会信任您的用户(我不会为 Web 应用程序这样做)。如果您信任您的所有用户并且只想检测错误,您可以过滤掉其中的一些。
你需要一些容器,例如docker
关于java - 如何检查 C++ 源代码中是否有任何系统/shell 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352557/