簡體   English   中英

在 Android 中從 SDK 28 遷移到 SDK 29 后,我的應用程序崩潰並面臨:信號 11 (SIGSEGV)、代碼 2 (SEGV_ACCERR)、Android studio 3.4.1 中的錯誤

[英]After migrating from SDK 28 to SDK 29 in Android my app crashed and facing : signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), error in Android studio 3.4.1

我只在 OnePlus、Samsung、Poco F1 和 Android OS 版本 10 中遇到這個問題。

它適用於搭載 Android 10 的像素設備。

請在下面找到錯誤日志


Build fingerprint: 'Xiaomi/beryllium/beryllium:10/QKQ1.190828.002/V11.0.6.0.QEJMIXM:user/release-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2020-03-16 18:10:34+0530
pid: 2594, tid: 2737, name: JavaBridge  >>> com.mymobile<<<
uid: 10362
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7188e089db
Cause: execute-only (no-read) memory access error; likely due to data in .text.
    x0  0000000000000100  x1  000000705d3f2fb0  x2  0000000000000000  x3  0000000000000008
    x4  00000000000000e2  x5  000000705d3fbd60  x6  000000705d3fbd60  x7  707265676e69662e
    x8  0000007188e089d4  x9  0000000000000000  x10 0000000000000007  x11 0000000000000000
    x12 0000000000000000  x13 0000000000000001  x14 000000705d3f2f58  x15 000000705d3f4bcc
    x16 00000060a530d558  x17 0000007188e0ae20  x18 000000001ba3a243  x19 000000705d3f7038
    x20 0000000000000001  x21 000000705d3f4188  x22 000000705d3f6f1c  x23 0000000000000002
    x24 0000000000000002  x25 0000007081ea45b0  x26 000000710786b8b0  x27 0000000000000005
    x28 0000000000000001  x29 000000705d3f6f90
    sp  000000705d3f31e0  lr  000000708c9058d8  pc  000000708c9063d8

backtrace:
      #00 pc 00000000000053d8  /data/app/com.mymobile-_0ls0Aom7N8BP86o4bZVYQ==/lib/arm64/libag3.so (BuildId: 25ee893fb2620c6009ca1a6ef581e24e27c00a36)
      #01 pc 000000000000c2c4  /data/app/com.mymobile-_0ls0Aom7N8BP86o4bZVYQ==/lib/arm64/libag3.so (BuildId: 25ee893fb2620c6009ca1a6ef581e24e27c00a36)
      #02 pc 000000000002b0d4  /data/app/com.mymobile-_0ls0Aom7N8BP86o4bZVYQ==/lib/arm64/libag3.so (Java_com_apiguard3_signals_NdkManager_collectSignal+196) (BuildId: 25ee893fb2620c6009ca1a6ef581e24e27c00a36)
      #03 pc 00000000000b90fc  /data/app/com.mymobile-_0ls0Aom7N8BP86o4bZVYQ==/oat/arm64/base.odex (art_jni_trampoline+236)
      #04 pc 0000000000136334  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #05 pc 0000000000144fec  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+244) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #06 pc 00000000002e27cc  /apex/com.android.runtime/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+384) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #07 pc 00000000002dda2c  /apex/com.android.runtime/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+892) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #08 pc 00000000005a20b0  /apex/com.android.runtime/lib64/libart.so (MterpInvokeDirect+424) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #09 pc 0000000000130914  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #10 pc 0000000000de4afa  /data/app/com.mymobile-_0ls0Aom7N8BP86o4bZVYQ==/oat/arm64/base.vdex (com.apiguard3.signals.NdkManager.b0414ДДДД0414+20)
      #11 pc 00000000002b3ae0  /apex/com.android.runtime/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEbb.llvm.17460956533834400288+240) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #12 pc 00000000005912f0  /apex/com.android.runtime/lib64/libart.so (artQuickToInterpreterBridge+1032) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #13 pc 000000000013f468  /apex/com.android.runtime/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #14 pc 0000000000136334  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 2bc2e11d57f839316bf2a42bbfdf943a)
      #15 pc 0000000000144fec  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JVal

任何人都可以幫助解決這個問題提前謝謝

此崩潰的根本原因是由 Android 10 的行為更改引起的。請參閱以下頁面以了解問題: https: //developer.android.com/about/versions/10/behavior-changes-all https:/ /developer.android.com/about/versions/10/behavior-changes-all

總而言之,問題是:從 Android 10 開始,系統二進制文件和庫的可執行段被映射到僅執行(不可讀取)的內存中,作為一種針對代碼重用攻擊的強化技術。 如果您的應用程序對標記為僅執行的內存段執行讀取操作——無論是來自錯誤、漏洞還是有意的內存檢查——系統都會向您的應用程序發送 SIGSEGV 信號。

作為解決方法,它說調用“mprotect”來執行發生崩潰的方法。 可以參考這里了解如何調用這個方法: https : //man7.org/linux/man-pages/man2/mprotect.2.html

我會說實現這個解決方法非常煩人,因為它添加了額外的系統調用並且根本不方便。但是我沒有看到更好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM