首页前端开发HTMLJellybean上relro引起的 SEGV

Jellybean上relro引起的 SEGV

时间2024-01-25 12:20:44发布访客分类HTML浏览497
导读:收集整理的这篇文章主要介绍了html5教程-Jellybean上relro引起的 SEGV_ACCERR段错误问题,觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝...
收集整理的这篇文章主要介绍了html5教程-Jellybean上relro引起的 SEGV_ACCERR段错误问题,觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

在JB上,有时候会发现,以前在ICS上跑的好好的程序,在JB上一运行,就发生 SEGV_ACCERR 问题,比如上一篇文章说到的,HAL模块的HMI中修改dso会造成段错误。

出错时的debuggerd输出,大约有如下信息:

[htML] www.2cto.COM
fault addr 3cde4bf4 
3cde2000-3cde5000 r--p 00050000 b3:01 595        /System/lib/libwilhelm.so 
 
0x3cde4bf4 IObject_ITf> :       0x3cdbf5ac      0x3cdbf3b4      0x3cdbed64      0x3cdbF1d4 
0x3cde4c04 IObject_Itf+16> :    0x3cdbeca8      0x3cdbf150      0x3cdbf8a0      0x3cdbec54 
0x3cde4c14 IObject_Itf+32> :    0x3cdbec00      0x3cdbebac 
这里可以看到,linker将这一段地址map成只读的了,但代码是想要写它,这就造成访问错误而死掉。

为何ICS上是好好的,但到JB上就不行了呢?

从错误的现象和maps来看,这应该是jellybean对linker有了新的改动导致的。到bionic上查看一下linker的更新LOG:

[html] 
$ git log linker/linker.c 

找到如下的更新信息:

[html] 
commit 9ec0f03a0d0b17bbb94ac0b9fef6add28a133c3a 
Author: 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: 
      * https://www.akkadia.org/drepPEr/nonselsec.pDF (section 6) 
      * https://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都给去掉。

 

 

在JB上,有时候会发现,以前在ICS上跑的好好的程序,在JB上一运行,就发生 SEGV_ACCERR 问题,比如上一篇文章说到的,HAL模块的HMI中修改dso会造成段错误。

出错时的debuggerd输出,大约有如下信息:

[html] www.2cto.com
fault addr 3cde4bf4 
3cde2000-3cde5000 r--p 00050000 b3:01 595        /system/lib/libwilhelm.so 
 
0x3cde4bf4 IObject_Itf> :       0x3cdbf5ac      0x3cdbf3b4      0x3cdbed64      0x3cdbf1d4 
0x3cde4c04 IObject_Itf+16> :    0x3cdbeca8      0x3cdbf150      0x3cdbf8a0      0x3cdbec54 
0x3cde4c14 IObject_Itf+32> :    0x3cdbec00      0x3cdbebac 
这里可以看到,linker将这一段地址map成只读的了,但代码是想要写它,这就造成访问错误而死掉。

为何ICS上是好好的,但到JB上就不行了呢?

从错误的现象和maps来看,这应该是jellybean对linker有了新的改动导致的。到bionic上查看一下linker的更新log:

[html] 
$ git log linker/linker.c 

找到如下的更新信息:

[html] 
commit 9ec0f03a0d0b17bbb94ac0b9fef6add28a133c3a 
Author: 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: 
      * https://www.akkadia.org/drepper/nonselsec.pdf (section 6) 
      * https://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都给去掉。

 

 

觉得可用,就经常来吧! 欢迎评论哦! html5教程,巧夺天工,精雕玉琢。小宝典献丑了!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

constdivHTMLletMappost-format-gallerythis

若转载请注明出处: Jellybean上relro引起的 SEGV
本文地址: https://pptw.com/jishu/586506.html
纯css画出的图形――html5 利用传感器实现微信的摇一摇功能

游客 回复需填写必要信息