代码之家  ›  专栏  ›  技术社区  ›  ngoozeff

在访问特定地址时是否可能强制访问冲突?

  •  4
  • ngoozeff  · 技术社区  · 15 年前

    有没有可能在Windows中保护一个小的、任意的区域(数组开头和结尾的16字节),从而导致访问冲突?语言是C++。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Mark Wilkins    15 年前

    我相信在x86体系结构中,将内存标记为受保护的最精细的粒度是一个页面(我认为是4K)。您可以设置数组,使开始或结束跨越页面边界(并保护该页面)。但要使两端都跨越这样的边界,当然需要非常特定的数组长度。

    Here is 如何设置保护页的示例。

        2
  •  1
  •   Borealid    15 年前

    __attribute__((aligned (PAGESIZE))) mprotect 保护 ,但也仅限于一页内存。

    不可能用更精细的粒度保护事物的原因是,内存访问是由硬件而不是软件完成的。如果 每一次内存访问

        3
  •  1
  •   MSalters    15 年前

    不是直接的。最接近的方法是在这些缓冲区上设置一个数据断点。然而,x86总共有4个这样的断点,它们最多8个字节。此外,您需要在环0(内核模式)中设置它们。

        4
  •  0
  •   user195488 user195488    15 年前