-6

我想编写一个具有以下功能的 C/C++ 程序:

  1. 将二进制可执行 C 程序作为子进程运行。
  2. 观察子进程的内存使用情况,当子进程过度使用内存时可以终止子进程,比如超过 100MB。
  3. 当子进程运行了给定时间(例如 1 秒)时,我可以终止它。
  4. 让它远离任何 linux 内核函数,这意味着当子进程请求不属于标准 C 库的函数时,我可以阻止它并终止该进程。

关于如何实现这些的任何想法?或者你可以给我一个提示,我可以自己找出来!谢谢!

4

1 回答 1

4

首先,你应该有一些基本的 Linux 编程知识,所以请仔细阅读Advanced Linux Programming。研究一些简单 shell 的源代码,如sash,并使用strace(1)(例如在现有命令上)来猜测使用了哪些系统调用。

然后你可能想使用setrlimit(2)ptrace(2)系统调用。

你写:

让它远离任何 linux 内核函数,这意味着当子进程请求不属于标准 C 库的函数时,我可以阻止它并终止该进程。

我不确定这有什么意义。任何 Linux 程序(除了无意义的永不终止while(true);循环)都在执行一些syscalls,特别是write(2)一些输出(请参阅syscalls(2)以获取它们的列表)。系统调用是应用程序要求内核做某事的手段(因此系统调用以受控方式使用 linux 内核函数)

请注意,程序可以在不使用 GlibC 的情况下进行系统调用。还有其他的 libc 实现,例如MUSL-Libc

您可能还对LD_PRELOAD 技巧感兴趣。

/proc/文件系统肯定是有用的。阅读proc(5)

于 2013-07-29T08:06:04.480 回答