.so里面crash掉了,日志有这样的:

01-05 08:01:00.215: I/DEBUG(86): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-05 08:01:00.215: I/DEBUG(86): Build fingerprint: 'alps/eidolon15_gb2/eidolon15_gb2:2.3.6/GRK39F/1346656059:eng/test-keys'
01-05 08:01:00.215: I/DEBUG(86): pid: 15641, tid: 15641 >>> cookbook.chapter2 <<<
01-05 08:01:00.215: I/DEBUG(86): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
01-05 08:01:00.215: I/DEBUG(86): r0 00000027 r1 deadbaad r2 a0000000 r3 00000000
01-05 08:01:00.215: I/DEBUG(86): r4 00000001 r5 bed7a844 r6 bed7a970 r7 429a2c9c
01-05 08:01:00.215: I/DEBUG(86): r8 bed7a8a0 r9 429a2c94 10 0000ae70 fp bed7a89c
01-05 08:01:00.215: I/DEBUG(86): ip afd496e8 sp bed7a830 lr afd1c081 pc afd187ce cpsr 20000030
01-05 08:01:00.258: I/DEBUG(86): #00 pc 000187ce /system/lib/libc.so
01-05 08:01:00.258: I/DEBUG(86): #01 pc 0001f7d4 /system/lib/libc.so
01-05 08:01:00.258: I/DEBUG(86): #02 pc 00000e8c /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.259: I/DEBUG(86): #03 pc 0000e874 /system/lib/libdvm.so
01-05 08:01:00.259: I/DEBUG(86): #04 pc 0003e49a /system/lib/libdvm.so
01-05 08:01:00.259: I/DEBUG(86): #05 pc 000439a2 /system/lib/libdvm.so
01-05 08:01:00.260: I/DEBUG(86): #06 pc 0001f8dc /system/lib/libdvm.so
01-05 08:01:00.260: I/DEBUG(86): code around pc:
01-05 08:01:00.260: I/DEBUG(86): afd187ac 4623b16c 2c006824 e028d1fb b13368db
01-05 08:01:00.260: I/DEBUG(86): afd187bc c064f8df 44fc2401 4000f8cc 49124798
01-05 08:01:00.260: I/DEBUG(86): afd187cc 70082027 f7f22500 2106ef46 e882f7f4
01-05 08:01:00.260: I/DEBUG(86): afd187dc 2006a901 f04f460a 95015380 95029303
01-05 08:01:00.260: I/DEBUG(86): afd187ec ec08f7f3 462aa905 f7f32002 f7f2ec14
01-05 08:01:00.260: I/DEBUG(86): code around lr:
01-05 08:01:00.261: I/DEBUG(86): afd1c060 41f0e92d 4a0d4b0c 4680447b 2600589c
01-05 08:01:00.261: I/DEBUG(86): afd1c070 686768a5 f9b5e006 b113300c 47c04628
01-05 08:01:00.261: I/DEBUG(86): afd1c080 35544306 37fff117 6824d5f5 d1ef2c00
01-05 08:01:00.261: I/DEBUG(86): afd1c090 e8bd4630 bf0081f0 000284b8 ffffff8c
01-05 08:01:00.261: I/DEBUG(86): afd1c0a0 fb01b570 b086f602 9004460c a804a901
01-05 08:01:00.262: I/DEBUG(86): stack:
01-05 08:01:00.262: I/DEBUG(86): bed7a7f0 afd456ec
01-05 08:01:00.262: I/DEBUG(86): bed7a7f4 000a39a8
01-05 08:01:00.262: I/DEBUG(86): bed7a7f8 00000015
01-05 08:01:00.262: I/DEBUG(86): bed7a7fc afd1b149 /system/lib/libc.so
01-05 08:01:00.262: I/DEBUG(86): bed7a800 afd45794
01-05 08:01:00.262: I/DEBUG(86): bed7a804 afd45740
01-05 08:01:00.262: I/DEBUG(86): bed7a808 00000000
01-05 08:01:00.262: I/DEBUG(86): bed7a80c afd1c081 /system/lib/libc.so
01-05 08:01:00.262: I/DEBUG(86): bed7a810 00000001
01-05 08:01:00.263: I/DEBUG(86): bed7a814 bed7a844
01-05 08:01:00.263: I/DEBUG(86): bed7a818 bed7a970
01-05 08:01:00.263: I/DEBUG(86): bed7a81c 429a2c9c
01-05 08:01:00.263: I/DEBUG(86): bed7a820 bed7a8a0
01-05 08:01:00.263: I/DEBUG(86): bed7a824 afd1b3a3 /system/lib/libc.so
01-05 08:01:00.263: I/DEBUG(86): bed7a828 df002777
01-05 08:01:00.263: I/DEBUG(86): bed7a82c e3a070ad
01-05 08:01:00.264: I/DEBUG(86): #00 bed7a830 429a2c94
01-05 08:01:00.264: I/DEBUG(86): bed7a834 0000ae70
01-05 08:01:00.264: I/DEBUG(86): bed7a838 bed7a89c
01-05 08:01:00.264: I/DEBUG(86): bed7a83c afd1b6c9 /system/lib/libc.so
01-05 08:01:00.264: I/DEBUG(86): bed7a840 afd45740
01-05 08:01:00.264: I/DEBUG(86): bed7a844 fffffbdf
01-05 08:01:00.264: I/DEBUG(86): bed7a848 afd1f7d5 /system/lib/libc.so
01-05 08:01:00.265: I/DEBUG(86): bed7a84c afd3dc80 /system/lib/libc.so
01-05 08:01:00.265: I/DEBUG(86): bed7a850 82b02338 /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.265: I/DEBUG(86): bed7a854 afd1f7d9 /system/lib/libc.so
01-05 08:01:00.265: I/DEBUG(86): #01 bed7a858 00000021
01-05 08:01:00.265: I/DEBUG(86): bed7a85c 82b02350 /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.266: I/DEBUG(86): bed7a860 82b02350 /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.266: I/DEBUG(86): bed7a864 bed7a8c0
01-05 08:01:00.266: I/DEBUG(86): bed7a868 00000004
01-05 08:01:00.266: I/DEBUG(86): bed7a86c 82b00e90 /data/data/cookbook.chapter2/lib/libmyFirstLib.so

完全看不懂啊。。。

网上说,临死前的PC指针call stack是这样的

#00 pc 000187ce /system/lib/libc.so
#01 pc 0001f7d4 /system/lib/libc.so
#02 pc 00000e8c /data/data/cookbook.chapter2/lib/libmyFirstLib.so
#03 pc 0000e874 /system/lib/libdvm.so
#04 pc 0003e49a /system/lib/libdvm.so
#05 pc 000439a2 /system/lib/libdvm.so
#06 pc 0001f8dc /system/lib/libdvm.so

好吧,使用IDA反编译这些库,然后看pc的地址,是在libmyFirstLib.so里面出问题了,找到对应地址的代码00000e8c。可以找到相应的函数名。

如下:

android stack-trace分析_第1张图片

00000e8c就在这个函数里面。好吧,这很简单,不是重点。这个信息量会不会太小了,没关系

trace里面有这样的stack信息:

01-05 08:01:00.265: I/DEBUG(86): bed7a850 82b02338 /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.265: I/DEBUG(86): bed7a854 afd1f7d9 /system/lib/libc.so
01-05 08:01:00.265: I/DEBUG(86): #01 bed7a858 00000021
01-05 08:01:00.265: I/DEBUG(86): bed7a85c 82b02350 /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.266: I/DEBUG(86): bed7a860 82b02350 /data/data/cookbook.chapter2/lib/libmyFirstLib.so
01-05 08:01:00.266: I/DEBUG(86): bed7a864 bed7a8c0
01-05 08:01:00.266: I/DEBUG(86): bed7a868 00000004
01-05 08:01:00.266: I/DEBUG(86): bed7a86c 82b00e90 /data/data/cookbook.chapter2/lib/libmyFirstLib.so

libmyFirstLib.so对应的还有0x82b02350这种地址呢,该怎么阅读呢。。。。我们知道动态库在内存中的加载地址是不固定的,ida反编译的时候默认是以0x00000000为起始加载地址的。显然,0x82b02350这种地址是虚拟地址,怎么搞。好吧,我们应该找出这个程序里的libmyFirstLib.so被加载到哪里了。

>adb shell

#ps

....

app_41 16275 89 111880 17800 ffffffff afd0c7f8 S cookbook.chapter2

....

#先找出我们的程序的进程ID为16275。

# cat /proc/16275/maps

有这样的输出

android stack-trace分析_第2张图片

可以看到libmyFirstLib.so的加载地址是82b00000-82b03000。r-xp是什么意思?我猜可能是只读的代码段吧,rw-p可能是数据段吧。这个先不管。

0x82b02350这种地址就可以解析了,用0x82b02350 - 0x82b00000 = 0x2350。这就是ida里面的偏移地址了。可以用ndk-gdb里面的x命令看一下内存里的值和IDA里面的值一样不一样,有时间验证一下。我猜是这样的^_^

更多相关文章

  1. Android开发相关工具等资源快速查找地址
  2. XAMARIN Android获取WIFIMAC地址的方法
  3. android 中listview滑动加载的简单demo
  4. Android在WebView加载数据时展示loading的Dialog
  5. Android开发中获取本机Mac地址和IP地址的方法
  6. android 加载sd卡的图片
  7. android studio加载so包问题
  8. Android实现滑动加载数据的方法

随机推荐

  1. 使用BroadcastReceiver实现QQ没网时提示
  2. Android应用分类和安全Domain
  3. Android gradle配置详解
  4. android翻译
  5. Android(安卓)Paint
  6. Android的UI主线程和子线程
  7. Android 4.4 音量调节流程分析(一)
  8. Android 中几个重要的View
  9. Linux下搭建Android开发环境及Android真
  10. android中实现view的更新UI有两组方法的