Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了带有二进制编译的/ system / bin / linker中的Segfault for Android大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为 Android构建 Kona并且遇到了一些问题.我为Kona制作的补丁可用于 here.

首先,我试图避免使用Ndk-build,因此编辑了makefile以支持Android.其中的细节对这个问题(或有趣)并不特别有用,所以我会跳过它们.

基本上,源文件的编译方式如下:

arm-linux-androideabi-clang -g -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-Strict-aliasing -O3    -c -o src/ks.o src/ks.c
...
arm-linux-androideabi-clang -g -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-Strict-aliasing -O3  src/0.o src/c.o src/getline.o src/getline_android.o src/mt.o src/p.o src/r.o src/k.o src/kc.o src/kx.o src/kg.o src/km.o src/kn.o src/ko.o src/ks.o src/v.o src/va.o src/vc.o src/vd.o src/vf.o src/vg.o src/vq.o src/main.o -o k -Wl,--gc-sections -Wl,-z,nocopyreloc -lgcc -no-canonical-prefixes -Wl,--no-undefined -Wl,noexecstack -Wl,relro -Wl,Now -mthumb -lc -lm -ldl

我根据我看到的ndk-build使用了这些标志.然后我运行了以下内容

ryan@DevPC-LX:~/stuff/kdroid$adb remount
remount succeeded
ryan@DevPC-LX:~/stuff/kdroid$adb push ./k /system/bin/k
3201 KB/s (724928 bytes in 0.221s)
ryan@DevPC-LX:~/stuff/kdroid$

现在,尝试运行二进制文件只是段错误

ryan@DevPC-LX:~/stuff/kdroid$adb sHell
# k
[1] + Stopped (signal)        k
# 
[1]   Segmentation fault      k
#

这是开始变得奇怪的地方.如果我尝试使用gdb,我得到这个:

ryan@DevPC-LX:~/stuff/kdroid$adb sHell
# gdbserver :5039 /system/bin/k
Process /system/bin/k created; pid = 297
Listening on port 5039

在另一个sHell窗口中:

ryan@DevPC-LX:~/stuff/kdroid$arm-linux-androideabi-gdb
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation,Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and @R_450_9066@tribute it.
There is NO WARRANTY,to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android".
For bug reporTing instructions,please see:
<http://source.android.com/source/report-bugs.html>.
/home/ryan/.gdbinit:1: Error in sourced command file:
No symbol table is loaded.  Use the "file" command.
(gdb) symbol-file k
Reading symbols from /media/ryan/stuff/kdroid/k...done.
(gdb) target remote :5039
Remote debugging using :5039
0xb0001000 in ?? ()
(gdb) conTinue
ConTinuing.
CAnnot access memory at address 0x0

Program received signal SIGSEGV,Segmentation fault.
0xb0004d36 in ?? ()
(gdb) bt
#0  0xb0004d36 in ?? ()
#1  0xb0005278 in ?? ()
#2  0xb0005278 in ?? ()
BACktrace stopped: prevIoUs frame identical to this frame (corrupt stack?)
(gdb)

ndk-stack给了我这个:

********** Crash dump: **********
Build fingerprint: 'generic/sdk/generic:2.3.3/GRI34/101070:eng/test-keys'
pid: 297,tid: 297  >>> /system/bin/k <<<
signal 11 (SIGSEGV),code 1 (SEGV_MAPERR),fault addr 0003cabc
Stack frame #00  pc b0004d36  /system/bin/linker: Unable to open symbol file k/linker. Error (20): Not a directory

所以…@L_801_17@器似乎崩溃了.如果我将/ system / bin / linker拉入当前目录,那么我得到:

********** Crash dump: **********
Build fingerprint: 'generic/sdk/generic:2.3.3/GRI34/101070:eng/test-keys'
pid: 291,tid: 291  >>> k <<<
signal 11 (SIGSEGV),fault addr 0003cabc
Stack frame #00  pc b0004d36  /system/bin/linker: RoutIne BFD:  ./linker: warning: sh_link not set for section `.ARm.exidx'
??
??:0
Crash dump is completed

这一切都非常令人困惑.

我完全不知道此时的错误是什么.我的意思是,我觉得我的编译器命令有问题,但我不知道是什么.

编辑:我的编译器命令肯定有问题.如果我构建这个程序:

int main() { return 0; }

使用Ndk-build和我之前发布的命令行标志,版本没有ndk-build段错误.

解决方法

弄清楚了!是Clang!出于某种原因,它导致了段错误.我仍然不知道为什么……但问题仍然基本解决了.

大佬总结

以上是大佬教程为你收集整理的带有二进制编译的/ system / bin / linker中的Segfault for Android全部内容,希望文章能够帮你解决带有二进制编译的/ system / bin / linker中的Segfault for Android所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。