|
|
1
3
并非所有malloc实现都基于sbrk(),例如 GNU mmalloc 。 This doc 如果需要自定义实现,也可能有用。 +两个简单的malloc实现 here |
|
|
2
2
对于malloc和free,您的程序只需要定义自己的版本。我见过的大多数libc实现(包括glibc、klibc和dietlibc)都会很乐意使用内存分配器例程。因此,在进入seccomp模式之前,使用mmap或sbrk分配一大块内存,然后从这个块中进行malloc/free分配。 memmgr 是一个简单的堆分配器,可以很容易地适应固定缓冲区之外的分配。 seccomp的真正问题是,它允许的一组系统调用(读、写、退出和sigreturn)根本不足以运行或多或少链接的程序 任何 libc在那里。例如:
这些电话之所以有必要,通常有充分的理由。例如,当从stdin读取输入时,dietlibc使用ioctl检查stdin是否为tty,以便清除stdout。如果输出是行缓冲的,则这是确保在读取交互式输入之前提示可见的标准行为。 因此,我得出的结论是,最初的seccomp模式或多或少是无用的。然而,模式2(也称为“过滤模式”)更有用,因为它允许您将特定的系统调用列入白名单。我有一个 proof of concept 在我的github页面上,它以seccomp模式2运行程序,但允许它们使用printf和scanf,以及使用malloc/free分配内存。 |
|
|
3
1
seccompsandbox 以下为:
Chromium's seccomp Sandbox 有关于它如何工作的更多细节。 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
MysteryMoose · GCC下故意忽略初始化器警告中的过量元素 1 年前 |
|
|
Ken P · 如何利用[*]printf格式类型规范警告? 2 年前 |
|
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 2 年前 |
|
|
adversarr · 全局变量何时导出到可执行文件? 2 年前 |