gpt4 book ai didi

x86 - x86 上的加载溢出最高地址

转载 作者:行者123 更新时间:2023-12-01 23:44:27 25 4
gpt4 key购买 nike

当未对齐的加载溢出 x86 上的最顶层地址时会发生什么?例如,在 32 位 x86 处理器上加载地址 0xfffffffe 处的 4 字节整数时会发生什么情况?当然,最顶层的页面(0xfffff000-0xfffffff)被映射到一些物理内存并且该页面是可读/可写的,当前加载的程序在操作系统内核中环0。为简单起见,您可以假设在 0xfffffffc 加载 4 字节是合法的。

这样的加载会产生页面错误吗?

最佳答案

由于段中的限制检查,它会产生一般保护 (#GP) 错误。通常情况下,使用 DS 段寄存器访问数据时,处理器会检查段限制。 DS段寄存器默认的段限制是[0,0xffffffff]。

每当尝试访问段中的以下地址时,处理器都会引发一般保护异常:

  • 偏移量大于有效限制的字节
  • 偏移量大于 (effective-limit – 1) 的单词
  • 偏移量大于 (effective-limit – 3) 的双字
  • 偏移量大于(有效限制 – 7)的四字

根据英特尔 x86 规范,“显式未对齐”访问(无论它们是否位于地址空间的边缘)也可能导致 AVX、FME、VEX 或 SSE 指令的一般保护错误。

有趣的是,最低地址和最高地址并不是地址空间中可能发生这种情况的唯一边界。更多边界出现在 x86_64 地址空间中,其中有一个 sparse / unaddressable space。在你的处理器不能使用的中间(因为这样处理器制造商可以减少许多处理器内部所需的位数——毕竟,还没有人使用完整的 64 位地址空间)。

关于x86 - x86 上的加载溢出最高地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29980340/

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