Android原生libc信号11(SIGSEGV),代码2(SEGV_ACCERR),故障地址

时间:2016-04-19 05:54:54

标签: android c++ debugging

我在添加以下代码后遇到了崩溃:

class AudioPolicyService :
    public BinderService<AudioPolicyService>,
    public BnAudioPolicyService,
    public IBinder::DeathRecipient
{
    friend class BinderService<AudioPolicyService>;

//[....]
    class TestingClz : public virtual RefBase {
        public:
            TestingClz (String8 name, const wp<AudioPolicyService>& service){}
            virtual TestingClz() {}
    };

    sp<TestingClz> mTestingClz;
} // End of class AudioPolicyService

//[....]

void AudioPolicyService::onFirstRef()
{
...
TestingClz = new TestingClz(String8("test"), this);
}

我遇到了崩溃:

  

02-03 22:21:17.971 367 367 F DEBUG:修订:&#39; 0&#39;

     

02-03 22:21:17.971 367 367 F DEBUG:ABI:&#39; arm&#39;

     

02-03 22:21:17.971 367 367 F DEBUG:pid:981,tid:981,姓名:   mediaserver&gt;&gt;&gt; / system / bin / mediaserver&lt;&lt;&lt;

     

02-03 22:21:17.972 367 367 F DEBUG:信号11(SIGSEGV),代码2   (SEGV_ACCERR),故障地址0xb6e594d8

     

02-03 22:21:17.976 367 367 F DEBUG:r0 b6e594d8 r1   becfa970 r2 00000000 r3 b6e4d812

     

02-03 22:21:17.976 367 367 F DEBUG:r4 b5fd6a1c r5   becfa970 r6 becfa96c r7 b5fd69d4

     

02-03 22:21:17.976 367 367 F DEBUG:r8 becfa968 r9   b6ad8e2d sl 00000000 fp becfabbc

     

02-03 22:21:17.976 367 367 F DEBUG:ip b6b0ec24 sp   becfa958 lr b6b03849 pc b6b03604 cpsr 80010030

     

02-03 22:21:17.980 367 367 F DEBUG:

     

02-03 22:21:17.980 367 367 F DEBUG:backtrace:

     

02-03 22:21:17.980 367 367 F DEBUG:#00 pc 0000e604   /system/lib/libutils.so(android :: RefBase :: weakref_type :: incWeak(void)   常量*)+ 11)

     

02-03 22:21:17.980 367 367 F DEBUG:#01 pc 0000e845   /system/lib/libutils.so(android :: RefBase :: createWeak(void const *)   常量+ 6)

     

02-03 22:21:17.980 367 367 F DEBUG:#02 pc 000060ad   /system/lib/libaudiopolicyservice.so

     

02-03 22:21:17.980 367 367 F DEBUG:#03 pc 0000620b   /system/lib/libaudiopolicyservice.so

     

02-03 22:21:17.980 367 367 F DEBUG:#04 pc 0000232d   /系统/ bin中/媒体服务器

     

02-03 22:21:17.980 367 367 F DEBUG:#05 pc 00001b8f   /系统/ bin中/媒体服务器

     

02-03 22:21:17.981 367 367 F DEBUG:#06 pc 00017359   /system/lib/libc.so(__libc_init + 44)

     

02-03 22:21:17.981 367 367 F DEBUG:#07 pc 00001e0c   /系统/ bin中/媒体服务器

     

02-03 22:21:18.088 367 367 F DEBUG:

     

02-03 22:21:18.088 367 367 F DEBUG:Tombstone写给:   /数据/墓碑/ tombstone_01

将地址映射到行后,它指向我的更改行。 SEGV_ACCERR表示映射对象的无效权限。我想知道它是否是由android mprotect引起的?因为它看起来不像是正常的崩溃。 有没有人经历过同样的失败?非常感谢!

更新: 好吧,如果我进行整个构建并刷新系统和启动图像,似乎不会发生崩溃。 那么,为了改变Android原生服务,我们总是需要一个完整的构建?

天龙

1 个答案:

答案 0 :(得分:0)

结果: 如果我进行整个构建并闪存系统和启动映像,似乎崩溃不会发生。 但是,我仍然想知道是否有一些保护机制来记录和验证运行时的类大小。即使我们替换.so lib。似乎二进制地址映射仍未更新。

感谢您提供更多信息!