【发布时间】:2021-11-29 17:35:07
【问题描述】:
我曾想过编写一个程序集存根来调用带有页面地址的mprotect,但是我需要在进程的同一地址空间中运行这个存根,我不知道该怎么做。还有其他方法吗?
【问题讨论】:
-
您可以拦截内核中的页面错误并更改正在运行的进程的 pte 页位。非常难,非常危险。风险自负。
-
ptrace可以对另一个进程的内存进行操作 不必 mprotect。例如ptrace(PTRACE_POKETEXT)。你也可以使用 ptrace 在另一个进程中运行类似 mprotect 的代码,但是当你使用像print foo()这样的 GDB 命令时,GDB 会这样做,其中 foo 是被调试程序中的一个函数。
标签: linux memory linux-kernel x86-64 paging