java - 如何检查 C++ 源代码中是否有任何系统/shell 调用?

标签 java c++ linux bash

我正在尝试开发一个框架来编译和执行(主要是随机的)C++ 和 Java 包。

但是,考虑到它们的随机性,我想在执行之前检查任何 linux 系统调用的源代码(或可执行文件——预执行)。如果有这样的系统调用,我不想执行程序。

可以安全地假设这些包不需要进行任何系统调用来实现它们的功能目的(它们不是复杂的包)。

编辑:bash 命令/脚本是最简单的,但任何答案都可以。

最佳答案

简而言之,您无法可靠地检测所有恶意系统调用(通过对源代码的静态分析);了解 halting problemRice theorem ... 顺便说一句 MELT会比 grep 稍微好一点因为它适用于 GCC gimple 表示。

想想(在 Linux 上)

  • dlopen(3) -ing libc (或主要可执行文件)然后 dlsym -ing "system"获取指向 system 的指针功能
  • 了解libc布局和版本,然后计算system通过向 malloc 的地址添加一些已知的偏移量来获取的地址
  • 使用一些 JIT 库,例如只有标题 GNU lightning
  • 编码system的等价物与 forkexecve ....
  • 等....

当然,您可能会信任您的用户(我不会为 Web 应用程序这样做)。如果您信任您的所有用户并且只想检测错误,您可以过滤掉其中的一些

你需要一些容器,例如docker

关于java - 如何检查 C++ 源代码中是否有任何系统/shell 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352557/

相关文章:

Java Akka - 如何为 PriorityMailbox 编写 Comparator<Envelope>?

java - 如果我可以用另一种方式初始化实例变量,为什么还要使用构造函数

java - 捕获并记录响应正文

c++ - 防止堆上的未对齐数据

python - 在启动时运行 Python 脚本以记录 Linux 中的鼠标和键盘事件

linux - 有没有办法将 kptr_restrict 设置为 0?

java - 更改文件中的最后一位数字

c++ - 封装二维数组与普通版本——访问速度

c++ - 具有比较器功能和自定义参数的模板

linux - 如何修复此 libgcrypt 交叉编译错误?