【发布时间】:2014-06-30 07:29:53
【问题描述】:
是否有可能以某种方式更改 Linux 中另一个进程的内存映射?相反,即只能通过在进程本身调用mmap的代码来控制它。
我问的原因是因为我希望能够使用非常自定义的内存映射构建一个进程,并且无法使用共享库甚至 vDSO,我看不到任何方法在进程本身内部执行此操作,基本上不涉及编写我自己的libc 来处理系统调用等。 (即使我要静态链接libc,它不会尝试使用vDSO吗?)
【问题讨论】:
-
我怀疑 ptrace 可以实现这一点,但我不知道细节。
-
@nneonneo:如果是这样,那么
ptrace手册页肯定没有说清楚。 :) -
最愚蠢(但足够)的方法之一是使用
ptrace暂停目标,修补接下来的几条指令以包含对mmap的所需调用,然后恢复它。处理完mmap后,您取消修补目标并恢复指令指针。这是邪恶的,但它会起作用(this page 提供了类似技术的详细信息)。 -
当然,但是我认为只编写我自己的 libc 会更容易和更清晰。 :)
-
实际上您可能想编写自己的程序解释器 (
ld.so)。该程序在实际目标之前运行,并负责将所有内容链接到位(包括为所有共享库依赖项分配内存映射)
标签: linux process mmap virtual-memory