LD_PRELOAD堆栈和数据段内存分配

4


你好,

我正在编写一个Linux模块(基于GitHub项目“Ccontrol”),用于创建缓存划分(又称页面着色)以减轻时序侧信道攻击(例如防止Prime+Probe等攻击)。

我使用了LD_PRELOAD系统环境变量来覆盖所有的malloc()calloc()free()调用,并将它们替换为支持颜色的函数调用。

现在我正在寻找一种方法来对栈和数据段进行着色。

分配新进程内存的系统调用/库是什么?
是否有一种方法可以使用LD_PRELOAD或任何其他方法来覆盖此调用(而不需要重新编译内核)?

感谢您所有人的帮助。
Gal

1个回答

1
有两个内存分配系统调用:sbrk,它可以扩展(连续的)堆段以及mmap,它用于将单独的匿名内存段映射到调用进程的地址空间中。
但你无法在任何地方都使用LD_PRELOAD来覆盖这些系统调用。只有当你覆盖的代码通过DSO导出的libc包装器进行这些调用时,你才能做到这一点。这意味着您将无法覆盖直接系统调用和通过未导出的包装器(DSO-internal (__attribute__((visibility("hidden"))))进行的系统调用,大多数libc实现都会使用这种方式。您也无法覆盖动态链接器所做的系统调用。
如果你需要一个稳健的方式来覆盖这些调用,你需要借助ptrace或修改内核。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接