linux无效内存访问,x86_64 Linux 3.0:无效的内存地址

如果启用了页面转换并且虚拟地址0处的内存不可访问(由于物理内存映射到虚拟地址空间的方式),在x86/64上,1 ... 4095将不可访问因为所有这些4096个地址都对应一页内存,并且它只能作为一个整体可用或不可用。永远不要在虚拟地址0映射内存是一个好主意。不映射它将有助于捕获许多空指针解引用。这里的CPU会在未映射的位置或要求比当前正在执行的代码更高权限的位置上生成页面错误(aka #PF)。

在64位模式下,CPU可能实现的虚拟地址位数少于(48+),而64位地址必须包含未实现的位中的全零或全1(值为0或1,必须与最重要的实现地址位的值相同,所有这些都可以解释为地址符号扩展)。这些地址称为规范。如果您尝试使用非规范地址读取或写入内存,则会出现一般性保护错误(AKA #GP)。

因此,根据操作系统(有效地,在其内存布局上)和实际的CPU,您可能会提出一系列“无效”内存地址。如果您尝试从用户模式应用程序读取/写入内核内存,您将获得#PF。如果您尝试读取/写入未映射的内存(例如,在地址0到4095),您将获得#PF。如果您尝试读取/写入非规范地址,您将获得#GP。

这是你要找的那种东西吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值