查看so文件的方法列表 及不同compileSdkVersion 的区别

使用下面的命令可以查看so文件的方法列表:

nm -D  /path/to/libxxx.so

stdlib.h 的实现在libc.so 中,

在 android ndk 提供的标准库中, android-16 中的stdlib.h 中的abs(..) 方法是 inline 的, 而在 android-23 中的stdlib.h 的 abs(..) 不是inline 的, 所以在不同编译条件下产生的so 文件中的方法列表是不一样的;

在 android-23 条件下编译的so 拿到 android-16 的系统去用会发生crash ,因为android-16 下的libc.so 中不存在 abs(..) 方法。

例如:

在使用 compileSdkVersion = 16 的条件下编译的so:

         U AAssetManager_fromJava
         U AAssetManager_open
0000d014 D ALGORITHM_RSA
0000b068 R DECRYPT_MODE
00002d7c T JNI_OnLoad
00002e9c T JNI_OnUnload
000029a0 T Java_com_thestore_core_security_NativeBridge_base64Decode
0000b06c R MAX_DECRYPT_BLOCK
0000705c T MD5_File
00008c70 T _Unwind_Backtrace
00008188 T _Unwind_Complete
0000818c T _Unwind_DeleteException
00008c4c T _Unwind_ForcedUnwind
0000802c T _Unwind_GetCFA
00009114 T _Unwind_GetDataRelBase
000090f8 T _Unwind_GetLanguageSpecificData
000090e8 T _Unwind_GetRegionStart
0000911c T _Unwind_GetTextRelBase
00008be0 T _Unwind_RaiseException
00008c04 T _Unwind_Resume
00008c28 T _Unwind_Resume_or_Rethrow
000081a4 T _Unwind_VRS_Get
00008780 T _Unwind_VRS_Pop
00008228 T _Unwind_VRS_Set
00008c70 T ___Unwind_Backtrace
00008c4c T ___Unwind_ForcedUnwind
00008be0 T ___Unwind_RaiseException
00008c04 T ___Unwind_Resume
00008c28 T ___Unwind_Resume_or_Rethrow
         U __aeabi_memclr
         U __aeabi_memclr4
         U __aeabi_memcpy
00008768 T __aeabi_unwind_cpp_pr0
00008770 W __aeabi_unwind_cpp_pr1
00008778 W __aeabi_unwind_cpp_pr2
         U __android_log_print
0000d05c A __bss_start
         U __cxa_atexit
00000000 w __cxa_begin_cleanup
00000000 w __cxa_call_unexpected
         U __cxa_finalize
00000000 w __cxa_type_match
000082b0 T __gnu_Unwind_Backtrace
00000000 w __gnu_Unwind_Find_exidx
000080d8 T __gnu_Unwind_ForcedUnwind
00008034 T __gnu_Unwind_RaiseException
00008b00 T __gnu_Unwind_Restore_VFP
00008b10 T __gnu_Unwind_Restore_VFP_D
00008b20 T __gnu_Unwind_Restore_VFP_D_16_to_31
00008bb8 T __gnu_Unwind_Restore_WMMXC
00008b30 T __gnu_Unwind_Restore_WMMXD
000080f4 T __gnu_Unwind_Resume
00008168 T __gnu_Unwind_Resume_or_Rethrow
00008b08 T __gnu_Unwind_Save_VFP
00008b18 T __gnu_Unwind_Save_VFP_D
00008b28 T __gnu_Unwind_Save_VFP_D_16_to_31
00008bcc T __gnu_Unwind_Save_WMMXC
00008b74 T __gnu_Unwind_Save_WMMXD
00008d20 T __gnu_unwind_execute
000090a8 T __gnu_unwind_frame
00008aec T __restore_core_regs
         U __stack_chk_fail
         U __stack_chk_guard
0000d05c A _edata
0000d094 A _end
         U abort
00007828 T base64_decode

...

在使用compileSdkVersion = 23 的条件下编译的so:

         U AAssetManager_fromJava
         U AAssetManager_open
0000d014 D ALGORITHM_RSA
0000b04c R DECRYPT_MODE
00002dac T JNI_OnLoad
00002ecc T JNI_OnUnload
000029d0 T Java_com_thestore_core_security_NativeBridge_base64Decode
0000b050 R MAX_DECRYPT_BLOCK
00007048 T MD5_File
00008c5c T _Unwind_Backtrace
00008174 T _Unwind_Complete
00008178 T _Unwind_DeleteException
00008c38 T _Unwind_ForcedUnwind
00008018 T _Unwind_GetCFA
00009100 T _Unwind_GetDataRelBase
000090e4 T _Unwind_GetLanguageSpecificData
000090d4 T _Unwind_GetRegionStart
00009108 T _Unwind_GetTextRelBase
00008bcc T _Unwind_RaiseException
00008bf0 T _Unwind_Resume
00008c14 T _Unwind_Resume_or_Rethrow
00008190 T _Unwind_VRS_Get
0000876c T _Unwind_VRS_Pop
00008214 T _Unwind_VRS_Set
00008c5c T ___Unwind_Backtrace
00008c38 T ___Unwind_ForcedUnwind
00008bcc T ___Unwind_RaiseException
00008bf0 T ___Unwind_Resume
00008c14 T ___Unwind_Resume_or_Rethrow
         U __aeabi_memclr
         U __aeabi_memclr4
         U __aeabi_memcpy
00008754 T __aeabi_unwind_cpp_pr0
0000875c W __aeabi_unwind_cpp_pr1
00008764 W __aeabi_unwind_cpp_pr2
         U __android_log_print
0000d05c A __bss_start
         U __cxa_atexit
00000000 w __cxa_begin_cleanup
00000000 w __cxa_call_unexpected
         U __cxa_finalize
00000000 w __cxa_type_match
0000829c T __gnu_Unwind_Backtrace
00000000 w __gnu_Unwind_Find_exidx
000080c4 T __gnu_Unwind_ForcedUnwind
00008020 T __gnu_Unwind_RaiseException
00008aec T __gnu_Unwind_Restore_VFP
00008afc T __gnu_Unwind_Restore_VFP_D
00008b0c T __gnu_Unwind_Restore_VFP_D_16_to_31
00008ba4 T __gnu_Unwind_Restore_WMMXC
00008b1c T __gnu_Unwind_Restore_WMMXD
000080e0 T __gnu_Unwind_Resume
00008154 T __gnu_Unwind_Resume_or_Rethrow
00008af4 T __gnu_Unwind_Save_VFP
00008b04 T __gnu_Unwind_Save_VFP_D
00008b14 T __gnu_Unwind_Save_VFP_D_16_to_31
00008bb8 T __gnu_Unwind_Save_WMMXC
00008b60 T __gnu_Unwind_Save_WMMXD
00008d0c T __gnu_unwind_execute
00009094 T __gnu_unwind_frame
00008ad8 T __restore_core_regs
         U __stack_chk_fail
         U __stack_chk_guard
0000d05c A _edata
0000d094 A _end
         U abort
         U abs
00007814 T base64_decode

...
       

转载于:https://my.oschina.net/u/255456/blog/700396

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值