x86_64体系结构上的Linux 3.0上的进程具有64位虚拟地址空间.

很明显,在该地址空间中,保证0是无效的内存地址[请参见下面的定义],因为该地址用于指示NULL指针.

保证哪些其他64位数字(如果有)永远都不是有效的内存地址,为什么?

例如,1可以是有效地址吗?那2 ^ 64-1呢?

定义:您是什么意思“保证是无效的内存地址”?

void deref_and_assign(uint64_t i)

{

char* p = (char*) i;

*p = 42;

}

就此问题而言,保证无效的内存引用意味着函数deref_and_assign将始终引发SIGSEGV.

解决方法:

在x86 / 64上,如果启用了页面转换并且无法访问虚拟地址0处的内存(由于将物理内存映射到虚拟地址空间的方式),则1 … 4095也将无法访问,因为所有这些4096地址对应于一个内存页面,它只能在整体上可用或不可用.最好不要在虚拟地址0处映射内存.不进行映射将有助于捕获许多NULL指针取消引用.此处的CPU将在未映射的位置或需要比当前执行的代码更高特权的位置上生成页面错误(aka #PF).

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

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

您在找那种东西吗?

标签:x86-64,gcc,linux

来源: https://codeday.me/bug/20191201/2083706.html

linux无效内存访问,x86_64 Linux 3.0:无效的内存地址相关推荐

  1. Linux系统实现访问localhost(127.0.0.1)浏览WWW网站目录

    Linux系统实现访问localhost(127.0.0.1)浏览WWW网站目录 Linux系统上安装完apache2后,访问localhost(127.0.0.1)发现是apache的页面: 想要访 ...

  2. Linux如何访问mmio空间,一文读懂Linux下如何访问I/O端口和I/O内存

    虽然访问I/O端口非常简单,但是检测哪些I/O端口已经分配给I/O设备可能就不这么简单了,对基于ISA总线的系统来说更是如此.通常,I/O设备驱动程序为了探测硬件设备,需要盲目地向某一I/O端口写入数 ...

  3. linux限制目录访问权限,linux用户的访问权限限制的方法都有哪些

    如果你不希望自己的文件被人读取,又或者只是不想某个特定的用户读取修改文件,限制访问权限是最好的处理方法,下面小编就给大家介绍下Linux下限制用户访问权限的方法,一起来学习下吧. 现在需要限定某个用户 ...

  4. linux 多域名访问数据库,Linux下虚拟域名的实现

    目前Linux操作系统十分火爆,所以很多朋友希望了解一下Linux下虚拟域名的实现过程.下面就基于目前比较流行的RedHat来讨论一下. 一.DNS服务器的设置 我们知道互联网网是基于TCP/IP协议 ...

  5. linux限制组访问权限,linux用户和组管理以及文件权限访问控制ACL策略

    01.通配符 文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件. 通配符采用特定的符号,表示特定的含义,此符号称为元 meta 字符. 常见的通配符如下: * 匹配零个或多个字符,但不匹配 ...

  6. linux查看分区访问权限,linux查看分区是否开启acl权限

    1.为什么需要ACL权限 ACL的全称是 Access Control List (访问控制列表) .对于文件或者目录,都有相应的操作权限 r(read 读),w(write 写),x(execute ...

  7. linux记录端口访问日志,Linux日志管理

    一.日志管理 日志:一个文件,记录当前系统.用户.程序的工作状态 1.目录位置 (1)系统.用户.RPM(YUM)安装:/var/log/目录下 (2)源码安装:安装目录下,log目录 (3)anac ...

  8. linux boa服务器访问 404,Linux上boa服务器的配置和使用

    只是在完成系统实验模型的时候需要用到一个简易的web服务程序,便在网上找到了一篇写的不错的boa配置教程,保存下来,以备所需:) 一.下载Boa源码 下载地址: , 或者: boa-0.94.13.t ...

  9. linux查看目录访问权限,Linux文件访问权限

    一.设置用户ID和设置组ID 1.实际用户ID和实际组ID标识当前登录的用户. 2.有效用户ID,有效组ID以及附加组ID决定了我们的文件访问权限. 3.通常,有效用户ID等于实际用户ID,有效组ID ...

最新文章

  1. 最萌算法学习来啦,看不懂才怪!| 码书
  2. hotelling t2 matlab,pca主成份分析方法
  3. bat循环执行带参数_wxappUnpacker的bingo.bat脚本逐行解读
  4. 三菱plc字高八位和低八位_Switch好搭档,八位堂手柄上手体验
  5. 萌新的Python练习实例100例(五)输入三个整数x,y,z,请把这三个数由小到大输出。
  6. Unity通过键盘按键控制小球移动
  7. Oracle常用诊断事件清单
  8. BM模式匹配算法原理(图解)
  9. photoshop 插件_Photoshop的柔光
  10. [经验栈]C#与是德科技信号发生器(Keysight RF Signal Generators)N9310A通信操作
  11. 33个职场进阶资源网站汇总
  12. 【Verilog基础】数字电路-逻辑式化简公式(附吸收律推导过程)
  13. java 去掉pdf文字_Java 解除PDF文档保护密码
  14. 编程数学读书笔记 -- 第二章逻辑
  15. 小程序实现轮播图跳转页面和小程序
  16. [STM32]DAC全解分析
  17. KCon 2017兵器谱招募 亮出你的安全神兵
  18. ORCL数据字典(10级学员 张家玮整理)
  19. C++求数组中和为定值的组合
  20. rebol []的相关函数

热门文章

  1. 如何处理ESXi Hang机
  2. 甲醛、苯、甲苯、二甲苯对人体健康的危害
  3. shapefile中环状多边形处理问题
  4. C语言——冒泡排序法
  5. 信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币
  6. 常用技巧 —— 位运算
  7. 整数奇偶排序(信息学奥赛一本通-T1181)
  8. 奇数单增序列(信息学奥赛一本通-T1177)
  9. 信息学奥赛C++语言: 输出最大值
  10. 60 SD配置-科目分配-分配总帐科目