使用addr2line 定位 FORTIFY: vsprintf: prevented write past end of buffer‘ 报错解决思路
一、前言
C/C++平时用的不多,写段代码就错误百出,最近写了一段文件读取的。运行的时候直接so挂掉了。网上百度了一下 FORTIFY: vsprintf: prevented write past end of buffer
报错一般是由于传入的参数的问题。这里像下面的这样的so崩溃的堆栈打印 怎么去定位分析呢。这里介绍一个实用的工具 addr2line
--------- beginning of crash
05-21 14:36:18.879 4405 4434 F libc : FORTIFY: vsprintf: prevented write past end of buffer
05-21 14:36:18.879 4405 4434 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 4434 (Thread-8)
05-21 14:36:18.880 1714 1714 W : debuggerd: handling request: pid=4405 uid=10038 gid=10038 tid=4434
05-21 14:36:18.959 4466 4466 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-21 14:36:18.960 4466 4466 F DEBUG : Build fingerprint: 'PAX/tulip_pax/tulip-pax:7.1.1/NMF26X/20220520:userdebug/release-keys'
05-21 14:36:18.960 4466 4466 F DEBUG : Revision: '0'
05-21 14:36:18.960 4466 4466 F DEBUG : ABI: 'arm64'
05-21 14:36:18.960 4466 4466 F DEBUG : pid: 4405, tid: 4434, name: Thread-8 >>> com.example.myapplication <<<
05-21 14:36:18.960 4466 4466 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
05-21 14:36:18.967 4466 4466 F DEBUG : Abort message: 'FORTIFY: vsprintf: prevented write past end of buffer'
05-21 14:36:18.967 4466 4466 F DEBUG : x0 0000000000000000 x1 0000000000001152 x2 0000000000000006 x3 0000000000000008
05-21 14:36:18.967 4466 4466 F DEBUG : x4 0000000000000000 x5 0000000000000000 x6 0000000000808080 x7 0000000000000030
05-21 14:36:18.967 4466 4466 F DEBUG : x8 0000000000000083 x9 ffffffffffffffdf x10 0000000000000000 x11 0000000000000001
05-21 14:36:18.967 4466 4466 F DEBUG : x12 ffffffffffffffff x13 0000000000000000 x14 0000000000000000 x15 0034680550cd3842
05-21 14:36:18.967 4466 4466 F DEBUG : x16 00000072e9897ee0 x17 00000072e98412e4 x18 00000000ffffffff x19 00000072cf2954f8
05-21 14:36:18.967 4466 4466 F DEBUG : x20 0000000000000006 x21 00000072cf295450 x22 0000000000000009 x23 00000072e1eb2139
05-21 14:36:18.967 4466 4466 F DEBUG : x24 00000072e788d0e0 x25 00000072e1eb214a x26 00000072d4dde853 x27 6be61a7d50c6d729
05-21 14:36:18.967 4466 4466 F DEBUG : x28 00000072e78130b0 x29 00000072cf2939f0 x30 00000072e983e78c
05-21 14:36:18.967 4466 4466 F DEBUG : sp 00000072cf2939d0 pc 00000072e98412ec pstate 0000000060000000
05-21 14:36:18.975 4466 4466 F DEBUG :
05-21 14:36:18.975 4466 4466 F DEBUG : backtrace:
05-21 14:36:18.975 4466 4466 F DEBUG : #00 pc 000000000006b2ec /system/lib64/libc.so (tgkill+8)
05-21 14:36:18.975 4466 4466 F DEBUG : #01 pc 0000000000068788 /system/lib64/libc.so (pthread_kill+64)
05-21 14:36:18.975 4466 4466 F DEBUG : #02 pc 0000000000023ce8 /system/lib64/libc.so (raise+24)
05-21 14:36:18.975 4466 4466 F DEBUG : #03 pc 000000000001c76c /system/lib64/libc.so (abort+52)
05-21 14:36:18.975 4466 4466 F DEBUG : #04 pc 0000000000020cf4 /system/lib64/libc.so (__libc_fatal+104)
05-21 14:36:18.975 4466 4466 F DEBUG : #05 pc 0000000000020c88 /system/lib64/libc.so (__fortify_chk_fail+52)
05-21 14:36:18.975 4466 4466 F DEBUG : #06 pc 00000000000743cc /system/lib64/libc.so (__sprintf_chk+192)
05-21 14:36:18.975 4466 4466 F DEBUG : #07 pc 000000000004cc3c /system/lib64/libpaxapijni.so (readExternalLogtoFile+972)
05-21 14:36:18.975 4466 4466 F DEBUG : #08 pc 0000000000036968 /system/lib64/libpaxapijni.so (Java_pax_util_OsPaxApi_getAppLogs+188)
05-21 14:36:18.975 4466 4466 F DEBUG : #09 pc 0000000000799b50 /data/app/com.example.myapplication-1/oat/arm64/base.odex (offset 0x733000)
二、初步分析:定位报错的代码位置
这里我们可以看到报错的方法是libpaxapijni.so
文件里面的 readExternalLogtoFile
方法,这个readExternalLogtoFile
是我写的一个读写文件的方法。libc.so (__sprintf_chk+192)
这里我预感是sprintf
这个方法出的错。下面用add2line
方法具体定位一下。
05-21 14:36:18.975 4466 4466 F DEBUG : #06 pc 00000000000743cc /system/lib64/libc.so (__sprintf_chk+192)
05-21 14:36:18.975 4466 4466 F DEBUG : #07 pc 000000000004cc3c /system/lib64/libpaxapijni.so (readExternalLogtoFile+972)
三、add2line定位具体报错的行数
1、首选查找报错的so在 out下面的路径 ,我这是out/target/product/tulip-pax/symbols/system/lib64/libpaxapijni.so
注意要用symbols 下的 lib64位的。
songzhihao@ubuntu:~/im30-project/android$ find out/ -name libpaxapijni.so
out/target/product/tulip-pax/symbols/system/lib/libpaxapijni.so
out/target/product/tulip-pax/symbols/system/lib64/libpaxapijni.so
out/target/product/tulip-pax/obj_arm/lib/libpaxapijni.so
2、查看 报错的行地址数,上面的报错log里面可以看到 #07 pc 000000000004cc3c /system/lib64/libpaxapijni.so (readExternalLogtoFile+972)
报错地方地址是000000000004cc3c
3、在Android代码根目录下执行命令
addr2line -f -e out/target/product/tulip-pax/symbols/system/lib64/libpaxapijni.so 000000000004cc3c
执行结果很明显了,151行然后去看看哪一行哪里的问题吧,我这是
sprintf(networkLogFile,"%s/%s",NETWORK_LOG_DIR,ptr->d_name);
networkLogFile 数组的长度是48,但是拷贝进去的字符超过48了,所以报错,改大数组的长度就OK了,掌握了方法还是非常简单的。
readNetworkLogFile
/proc/self/cwd/paxdroid/external/paxdroid-log/external_log.c:151
四、写在最后如果对你有帮助的话点个赞粉一个吧。
使用addr2line 定位 FORTIFY: vsprintf: prevented write past end of buffer‘ 报错解决思路相关推荐
- Appinum:在使用安卓模拟器定位页面元素时启动uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: c
在使用安卓模拟器定位页面元素时启动uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: com.andro ...
- java 报错 定位,问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT...
用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: User ...
- memcpy的F libc : FORTIFY: memcpy: prevented异常分析处理
在调试中遇到: 崩溃信息: --------- beginning of crash F libc : FORTIFY: memcpy: prevented 4294967295-byte wr ...
- 如何解决uiaotomator定位工具报错
在使用uiaotomator工具定位元素过程中,经常会弹出报错,截图失败,导致无法定位元素,当遇到该问题时,解决办法如下: 方法一:拔掉手机usb连接,重新连接手机 方法二:adb杀掉手机服务,重起服 ...
- [ScyllaHide] 04 ScyllaHide配置报错原因定位
[ScyllaHide] 文章列表-看雪地址: 00 简单介绍和使用 01 项目概览 02 InjectorCLI源码分析 03 PEB相关反调试 04 ScyllaHide配置报错原因定位 05 S ...
- Android使用addr2line定位native崩溃堆栈
出现问题 Android在开发native层代码是时很容易报 signal 11 (SIGSEGV) 错误,这种问题单看报错日志是很难定位到问题的.比如如下错误是我在开发过程中遇到的,Android ...
- App自动化元素定位不到?别慌,3大工具帮你解决
在日常的android app自动化测试工作当中,很多朋友在元素定位时,会遇到以下类似的报错: 然后会来问,这是啥情况? 一般情况下,都会送上以下亲切的关怀: 1)adb能识别到设备吗? 2)设备有被 ...
- linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置
一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...
- linux线程超过1024报错,Linux定位c++程序运行异常的经历《实操》
对于c++程序来说,以segment fault为代表的程序异常行为千奇百怪,没有一套比较丰富的工具集去对付他们,在处理实际问题时就会显得捉襟见肘.本文列举几种程序异常的定位方法. 子线程创建不出来 ...
最新文章
- 中科院在2017年高被引科学家遴选中表现优异
- Android复习16【材料设计新特性:fragment、RecyclerView】
- Spark-submit提交任务到集群
- [转] Mysql命令基础
- java数组交集_java数组的交集和并集
- mysql排序行号_mysql 取得行号后再排序
- Java设计模式之四 ----- 适配器模式和桥接模式
- MAC 设计师必备的设计绘图软件 推荐与下载
- Android开发——项目实例(一)迷你背单词软件
- 【html】网页常用分享代码大全(前端必备)
- 怎么把手机便签图片上的文字转换成可以编辑的文字?
- Boundary Regularized Convolutional Neural Network for Layer Parsing of Breast Anatomy in ABUS
- Tmux常用命令小结(超全够用)
- (step4.2.3)hdu 1242(Rescue——BFS)
- tta 文件格式简述
- c语言大作业打印课程表,课程表(c语言)
- java中如何导出excel_java中如何导出excel表格
- 5款尽情歌唱的免费卡拉OK电脑软件
- 视频教程-思科CCNP专题系列13:IP多播协议-思科认证
- 经验:《王者荣耀》技术总监分享背后技术