【NE现场】
Build fingerprint: 'Xiaomi/gemini/gemini:7.0/NRD90M/7.3.30:user/release-keys' ABI: 'arm64' pid: 6226, tid: 6226, name: ls >>> ls <<< signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- x0 0000000000000000 x1 0000000000001852 x2 0000000000000006 x3 0000000000000008 x4 ffffffffffffffff x5 0000000000000000 x6 0000008000808080 x7 2c33351f656e1f63 x8 0000000000000083 x9 ffffffffffffffdf x10 0000000000000000 x11 0000000000000001 x12 ffffffffffffffff x13 0000000000000000 x14 0000000000000000 x15 000477224f38d06c x16 0000007fefbd0be0 x17 0000007fefbd0aaf x18 00000000ffffffff x19 0000007f9e471b40 x20 0000000000000006 x21 0000007f9e471a98 x22 0000000000000002 x23 0000000000000004 x24 0000000000000000 x25 0000007fefbd1840 x26 0000007fefbd1860 x27 0000007f9e46d348 x28 0000007f9e46d258 x29 0000007fefbd16b0 x30 0000007f9e433408 sp 0000007fefbd1690 pc 0000007f9e433f50 pstate 0000000060000000 fpsr 00000000 fpcr 00000000 backtrace: #00 pc 0000000000073f50 /system/bin/linker64 (__dl_tgkill+8) #01 pc 0000000000073404 /system/bin/linker64 (__dl_pthread_kill+64) #02 pc 0000000000066ef4 /system/bin/linker64 (__dl_raise+24) #03 pc 00000000000648c8 /system/bin/linker64 (__dl_abort+52) #04 pc 0000000000066a7c /system/bin/linker64 (_dl__libc_fatal+104) #05 pc 000000000000fc98 /system/bin/linker64 (_dlZL29_linker_init_post_relocationR19KernelArgumentBlocky+3668) #06 pc 000000000000eda4 /system/bin/linker64 (_dl__linker_init+528) #07 pc 0000000000006c78 /system/bin/linker64 (_start+4)
主要表现为ls、sh、chmod、cat、getprop、app_process等系统bin高概率FC。
【问题分析】
coredump调用栈如下:
(gdb) bt #0 __dl_tgkill () at bionic/libc/arch-arm64/syscalls/tgkill.S:9 #1 0x0000007f8dcc6408 in pthread_kill (t=<optimized out>, sig=6) at bionic/libc/bionic/pthread_kill.cpp:45 #2 0x0000007f8dcb9ef8 in raise (sig=8315) at bionic/libc/bionic/raise.cpp:34 #3 0x0000007f8dcb78cc in abort () at bionic/libc/bionic/abort.cpp:47 #4 0x0000007f8dcb9a80 in __libc_fatal (format=0x0) at bionic/libc/bionic/libc_logging.cpp:678 #5 0x0000007f8dc62c9c in __linker_init_post_relocation (args=..., linker_base=<optimized out>) at bionic/linker/linker.cpp:4270 #6 0x0000007f8dc61da8 in __linker_init (raw_args=<optimized out>) at bionic/linker/linker.cpp:4481 #7 0x0000007f8dc59c7c in __dl__start () at bionic/linker/arch/arm64/begin.S:33
关键点就是#5处:
@bionic/linker/linker.cpp static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW(Addr) linker_base) {...if (!si->prelink_image()) {__libc_fatal("CANNOT LINK EXECUTABLE "%s": %s", args.argv[0], linker_get_error_buffer());}
看起来是prelink_image()的时候出错了,具体错误得看__libc_fatal的第三个参数linker_get_error_buffer():
@bionic/linker/linker.cpp char* linker_get_error_buffer() {return &__linker_dl_err_buf[0]; }
错误值放在__linker_dl_err_buf这个buffer中,用gdb查看这个值:
(gdb) p __linker_dl_err_buf$10 = ""/system/lib/libc.so" is 32-bit instead of 64-bit 00-bit", '