Jellybean上relro引起的 SEGV_ACCERR段错误问题
来源:互联网 发布:001420南方300大数据 编辑:程序博客网 时间:2024/05/16 10:04
在JB上,有时候会发现,以前在ICS上跑的好好的程序,在JB上一运行,就发生 SEGV_ACCERR 问题,比如上一篇文章说到的,HAL模块的HMI中修改dso会造成段错误。
出错时的debuggerd输出,大约有如下信息:
fault addr 3cde4bf43cde2000-3cde5000 r--p 00050000 b3:01 595 /system/lib/libwilhelm.so0x3cde4bf4 <IObject_Itf>: 0x3cdbf5ac 0x3cdbf3b4 0x3cdbed64 0x3cdbf1d40x3cde4c04 <IObject_Itf+16>: 0x3cdbeca8 0x3cdbf150 0x3cdbf8a0 0x3cdbec540x3cde4c14 <IObject_Itf+32>: 0x3cdbec00 0x3cdbebac
这里可以看到,linker将这一段地址map成只读的了,但代码是想要写它,这就造成访问错误而死掉。
为何ICS上是好好的,但到JB上就不行了呢?
从错误的现象和maps来看,这应该是jellybean对linker有了新的改动导致的。到bionic上查看一下linker的更新log:
$ git log linker/linker.c
找到如下的更新信息:
commit 9ec0f03a0d0b17bbb94ac0b9fef6add28a133c3aAuthor: Nick Kralevich <nnk@google.com>Date: Tue Feb 28 10:40:00 2012 -0800 Add relro support Add support for PT_GNU_RELRO. This allows the static linker to indicate that certain regions of memory should be marked as "read-only" after dynamic linking is complete. See: * http://www.akkadia.org/drepper/nonselsec.pdf (section 6) * http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html Note that this change has no effect on Android right now, because we don't compile our code with relro enabled. Change-Id: I6541f8775367e8558b4388f7d105b1ae6e8f046b
正是google加入了relro的支持,导致了这些问题(google说没影响,实际上还是看到了)。具体原因这里有说明,主要是安全性考量。可以看下链接中的文章的详细说明。
解决方法也很简单,一是将它revert掉就好了,或者是修改源代码,将要修改的const全局变量的const都给去掉。
- Jellybean上relro引起的 SEGV_ACCERR段错误问题
- Jellybean上relro引起的 SEGV_ACCERR段错误问题
- 一个指针引起的段错误
- 字节未对齐引起的段错误
- sscanf 函数引起的段错误
- 函数栈溢出引起的段错误segmentation fault
- 函数栈溢出引起的段错误segmentation fault
- ERROR:C++ 字符指针引起的段错误
- oracle增加表字段时,加""引起的小问题
- 一个因为顺序问题引起的错误!
- jdk版本问题引起的错误
- Xcode 证书问题引起的错误详解
- linux上文件格式引起的问题
- Fedora 和 Ubuntu 上的段错误
- 编译 JellyBean 的时候遇到的问题
- linux下cp覆盖原so文件时引起的段错误原因确定
- OPENSSL引起的错误
- strlen引起的错误
- 软件测试
- 如何在windows下使用git及github仓库管理项目
- 学历代表过去、能力代表现在、学习力代表未来
- IOS下计算日期时间间隔
- c语言每日一练5
- Jellybean上relro引起的 SEGV_ACCERR段错误问题
- C# 画圆,写字
- Java中的10个调试技巧
- Qt正则表达式
- 关于多分类器融合算法
- JAVA在ACM中的几点应用
- java中&和&&的区别
- Pager类
- ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现