gpt4 book ai didi

linux - 写保护的虚拟页面,捕捉写

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:38 24 4
gpt4 key购买 nike

是否有一种方法可以捕获对写保护页面的写入?

我计划做一个类似 self 的对象系统,您可以在其中复制对象以实例化它。 (因为与其他对象相比,这听起来简单紧凑)显然,为此目的创建的对象应该以某种方式写保护。我已经看到有一种方法可以在 ELF 的程序头中标记写保护的内容。 (RE、RWE、RW 标志)

这是否提供写保护?我记得它应该引发段错误,这是真的吗?如何捕捉到写保护页面的写入。这是实现我想要的东西的好方法吗?还有更好的方法吗?

最佳答案

是的,您可以使用 mprotect .

是的,写入 protected 内存会引发段错误。您可以安装处理程序,例如在 C++ 中:

std::signal(SIGSEGV, my_segv_handler_func);

虽然您必须添加很多额外的管理工具才能使其正常工作,但这是一种实现您所想的合理方式。例如,这种写检测是在硬件中完成的,在 x86 架构上,您的页面大小为 4k。因此,您可以一次保护 4k,在 4k 边界上对齐——而不是通用的“从地址 X 开始到 N 字节”。我相信你要么必须

  1. 将对象映射到页面这样你就可以确定是否写一个页面就是写一个特定的 protected 对象,或
  2. 滚动你自己的 malloc,总是 在 4k 边界上分配,这将迫使您使用 最小分配 block 大小为 4k

我不知道是否有更好的方法,但听起来很有趣。 :)

关于linux - 写保护的虚拟页面,捕捉写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com