Android调试的必杀技——反汇编
2010-10-14 06:16:00 来源:本站整理I/DEBUG ( 1417): 3056502c 00000000
I/DEBUG ( 1417): 30565030 00000000
I/DEBUG ( 1417): 30565034 00000000
I/DEBUG ( 1417): 30565038 00000000
I/DEBUG ( 1417): 3056503c 00000000
I/DEBUG ( 1417): 30565040 00000000
W/SyncManager( 1434): Updating for new accounts...
通过这个log信息我们可以看到libc.so崩溃了,再研究堆栈发现是libsqilte.so引起的,那么具体是哪一个函数崩溃了呢?这里面没有信息。另外内核加载动态库是动态加载的,就算我们反汇编出来libc.so和libsqlite.so,符号表也没有办法和log中地址对应上,除非我们能知道内核加载libc.so和libsqlite.so的基地址,这样我们就可以通过偏移找到相应的函数了。很幸运,Android确实规定了系统中的大部分库的内核加载地址。文件的位置在build/core下,有对应平台的map文件,比如:Arm平台文件名叫做prelink-linux- arm.map,Mips平台叫做prelink-linux-mips.map。我是在Mips平台出的问题,所以应该用prelink-linux- mips.map文件来定位。文件内容如下:
# 0x7F100000 - 0x7FFF0000 Thread 0 stack
# 0x7F000000 - 0x7F0FFFFF Linker
# 0x70000000 - 0x7EFFFFFF Prelinked System Libraries
# 0x60000000 - 0x6FFFFFFF Prelinked App Libraries
# 0x50000000 - 0x5FFFFFFF Non-prelinked Libraries
# 0x40000000 - 0x4FFFFFFF mmap'd stuff
# 0x10000000 - 0x3FFFFFFF Thread Stacks
# 0x00080000 - 0x0FFFFFFF .text / .data / heap
# core system libraries
libdl.so 0x7EFF0000
libc.so 0x7EF00000
libstdc++.so 0x7EEF0000
libm.so 0x7EE90000
liblog.so 0x7EE80000
libcutils.so 0x7EE00000
libthread_db.so 0x7ED80000
libz.so 0x7ED00000
libevent.so 0x7EC80000
libssl.so 0x7EC00000
libcrypto.so 0x7EA00000
libffi.so 0x7E980000
libsysutils.so 0x7E900000
# bluetooth
liba2dp.so 0x7E780000
audio.so 0x7E700000
input.so 0x7E680000
更多精彩
赞助商链接