2016-04-19 20 views
1
私は、次のコードを追加した後にクラッシュを経験してきた

Androidのネイティブのlibc信号11(SIGSEGV)、コード2(SEGV_ACCERR)、障害addrの

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デバッグ:リビジョン: '0'

02-03 22:21:17.971 367 367 Fデバッグ:ABI:

02-03 22:21を 'アーム': 17.971 367 3 67 F DEBUG:PID:981、TID:981、名前: MediaServerの>>> /システム/ binに/ MediaServerの< < <

02-03 22:21:17.972 367 367 F DEBUG:信号11(SIGSEGV) 、コード2 (SEGV_ACCERR)、故障ADDR 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

02-03 22

becfabbc:21:17.976 367 367 F DEBUG:IP b6b0ec24 SP becfa958 LR b6b03849パソコンb6b03604 CPSR 80010030

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

02-03 22:21:17.980 367 367 Fデバッグ:バックトレース:

02-03 22:21:17.980 367 367 F DEBUG:#00 pc 0000e604 /system/lib/libutils.so(android :: RefBase :: w eakref_type :: incWeak(無効 のconst *)+ 11)

02-03 22:21:17.980 367 367 F DEBUG:#01 PC 0000e845 /system/lib/libutils.so(アンドロイド:: RefBase :: createWeak(無効のconst *) のconst + 6)

02-03 22:21:17.980 367 367 FのDEBUG:#02 PC 000060ad

02-03 22

/system/lib/libaudiopolicyservice.so: 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に/ MediaServerの

02-03 22:21:17.980 367 367 F DEBUG: /システム/ binに00001b8f#05 PC /メディアサーバ

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 /system/bin/mediaserver

02-03 22:21:18。088 367 367 F DEBUG:

02-03 22:21:18.088 367 367 F DEBUG:に書き込まトゥームストーン:行へのマッピングアドレスの後に /データ/墓石/ tombstone_01

、それを指し私の変更のライン。 SEGV_ACCERRは、マップされたオブジェクトに対する無効な権限を意味します。私はそれがアンドロイドmprotectによって引き起こされているかどうか疑問に思っていましたか?通常のクラッシュのようには見えません。 誰も同じ失敗を経験しましたか?どうもありがとう!

アップデート: システム全体をビルドしてフラッシュすると、クラッシュが起きないようです。&ブートイメージ。 アンドロイドのネイティブサービスを変更するには、常に完全なビルドが必要ですか?

デノン

答えて

0

結果: 私が全体のビルドを作成し、システム&ブートイメージをフラッシュ場合、クラッシュが起きていないようです。 しかし、実行時にクラスサイズを記録して検証するための保護メカニズムがあるかどうかは疑問でした。 .so libを置き換えても、バイナリアドレスマッピングはまだ更新されていないようです。

ありがとうございました!