当前位置:  技术问答>linux和unix

关于内存访问问题, 可能发错区了原先。这里也发一个同样给分。

    来源: 互联网  发布时间:2016-10-21

    本文导语:  同一个内存为什么我可以读但是不能写,如何判断内存的读写权限。 (gdb) x 0x407f4594 0x407f4594: 0x00000000 (gdb) set *(unsigned int*)0x407f4594 = 0x00000000 Cannot access memory at address 0x407f4594 代码中遇到的问题,是有一个core...

同一个内存为什么我可以读但是不能写,如何判断内存的读写权限。
(gdb) x 0x407f4594
0x407f4594: 0x00000000
(gdb) set *(unsigned int*)0x407f4594 = 0x00000000
Cannot access memory at address 0x407f4594

代码中遇到的问题,是有一个core的产生,
异常的时候有2个寄存器:  
r4: 40df4534 r5: 407f6964 (还有 arg0/r26:7f7f8a28, r20:ffff没有太大用处)

异常的代码是下边的第四行,
Program terminated with signal 11, Segmentation fault.
1, 0xc6ecbcd0 : ldh 0xa(%r5),%r20
2, 0xc6ecbcd4 : shladd,l %r20,1,%r20,%ret0
3,0xc6ecbcd8 : add,l %r3,%r22,%r4
4,0xc6ecbcdc : ldw 8(%r4),%r26

问题:为什么方位r4有问题,我认为谢r26肯定没有问题。怀疑是由于内存40df4534不能访问。
但是为什么第一行就可以呢(r5和r4的内存不远呀)

注: r5的内存
(gdb) x 0x407f6964
0x407f6964: 0x00000000
(gdb) set *(unsigned int*)0x407f6964 = 0x0
Cannot access memory at address 0x407f6964

|
该回复于2010-12-03 11:48:29被版主删除

|
该回复于2010-12-02 13:14:09被版主删除

|
不会开发 看多少遍 都不会

|
有些内存是只读的,比如char *p="abcd"; 就不能p[0]=0
对arm不太熟,可能是叫rodata(Read Only)段吧,这个段可能会离正常的全局变量(data或bss)不远。
r4: 40df4534 r5: 407f6964 相差6M,不算很近了。

内存不外乎堆、栈、全局区、常量区,LZ可以试试在这几个区各找一个变量看看地址,就大致能看出来内存分布了。

|
有工具可以看可执行文件的分段情况,x86的是readelf,arm的可能是arm-linux-readelf吧
readelf -S a.out 或者
readelf -a a.out

|

|
这种问题我觉得楼主你不要在判断内存读写权限上下功夫,应该是你程序出错访问的不该访问的内存,简而言之你的程序跑会了,或者被踩了内存。如果要查询内存的访问权限,在内存表pgd,pud等里面有,我记得是最后一张表的低几位用来标识访问权限。

|

学习了!

    
 
 

您可能感兴趣的文章:

  • linux www服务器 负责不高,但是内存以耗尽 可能原因及解决办法
  • segmentation fault 有没有可能是是因为内存申请失败?
  • 希望将多个字符串(例如2个),该“字符串”可能含有‘',按顺序保存到一段分配的内存中
  • 内存映射设备后,就可以直接访问设备的片内内存 了(比如显卡的显存)?
  • 请问同一块内存,在uboot下访问和在krnl下访问,地址是否一样?
  • 不同用户user之间如何访问共享内存?
  • 进程同时访问两个大共享内存,会失败?
  • 如果访问共享内存
  • CGI程序无法访问本机某个程序创建的共享内存〔求教〕
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • linux驱动中嵌入ARM汇编访问内存的问题
  • 在内核里如何访问这段内存?
  • 优化的内存访问 TCMalloc
  • LINUX下如何访问硬件内存地址
  • 程序访问内存非法退出,调试core时,却发现#0 0x00000000 in ?? () ,奶奶的,已经加了调试信息了
  • php出现内存位置访问无效错误问题解决方法
  • 读过内核进来~~访问虚拟内存的方法!
  • 访问内存错误的问题。请高手帮我找下原因。。
  • linux程序里内存访问错误
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • sql server 在32位机器上使用AWE访问4GB以上内存的方法
  • Qt采样程序中的内存访问出错(s3c2410)
  • linux下多进程访问共享内存队列同步的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 get_allocator():返回vector的内存分配器
  • 我的机器内存128 ,安装redhat9 后,可用内存很少了,如何节省内存呢?
  • C++ Vectors 成员 capacity():返回vector所能容纳的元素数量(在不重新分配内存的情况下)
  • 奇闻:Apache+Apache JServ 1.1.1+1G内存居然报内存不够,那位高友知道参数设置,把俺的1G内存都利用起来,感激不尽啊
  • mysql iis7站长之家
  • 怎样读取指定内存地址处指定长度的内存数据???(
  • C/C++内存池实现介绍及基本要求
  • 【操作系统虚拟内存和物理内存疑惑】
  • linux下free命令显示的内存使用情况分析
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • c/c++内存堆分配和栈分配理解
  • Solaris下如何获得物理内存和虚拟内存的大小?
  • Ubuntu查看内存,进程相关命令介绍
  • 程序需要共享内存相当大,但是系统的内存有限
  • Linux 共享内存介绍及实现代码
  • 关于大于2G内存的使用.....按32位编译的进程怎么使用大于2G的内存?
  • Linux内存文件系统(ramdisk)的三种实现方式
  • redhat9内存使用率高达73%,怎么查看内存具体使用情况
  • Microsoft IE MSHTML内存破坏远程代码执行漏洞
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • Microsoft Internet Explorer内存破坏漏洞(CNVD-2013-13096)
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3