一、前言

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‘ 报错解决思路相关推荐

  1. Appinum:在使用安卓模拟器定位页面元素时启动uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: c

    在使用安卓模拟器定位页面元素时启动uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: com.andro ...

  2. 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 ...

  3. memcpy的F libc : FORTIFY: memcpy: prevented异常分析处理

    在调试中遇到: 崩溃信息: --------- beginning of crash F libc    : FORTIFY: memcpy: prevented 4294967295-byte wr ...

  4. 如何解决uiaotomator定位工具报错

    在使用uiaotomator工具定位元素过程中,经常会弹出报错,截图失败,导致无法定位元素,当遇到该问题时,解决办法如下: 方法一:拔掉手机usb连接,重新连接手机 方法二:adb杀掉手机服务,重起服 ...

  5. [ScyllaHide] 04 ScyllaHide配置报错原因定位

    [ScyllaHide] 文章列表-看雪地址: 00 简单介绍和使用 01 项目概览 02 InjectorCLI源码分析 03 PEB相关反调试 04 ScyllaHide配置报错原因定位 05 S ...

  6. Android使用addr2line定位native崩溃堆栈

    出现问题 Android在开发native层代码是时很容易报 signal 11 (SIGSEGV) 错误,这种问题单看报错日志是很难定位到问题的.比如如下错误是我在开发过程中遇到的,Android ...

  7. App自动化元素定位不到?别慌,3大工具帮你解决

    在日常的android app自动化测试工作当中,很多朋友在元素定位时,会遇到以下类似的报错: 然后会来问,这是啥情况? 一般情况下,都会送上以下亲切的关怀: 1)adb能识别到设备吗? 2)设备有被 ...

  8. linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置

    一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...

  9. linux线程超过1024报错,Linux定位c++程序运行异常的经历《实操》

    对于c++程序来说,以segment fault为代表的程序异常行为千奇百怪,没有一套比较丰富的工具集去对付他们,在处理实际问题时就会显得捉襟见肘.本文列举几种程序异常的定位方法. 子线程创建不出来 ...

最新文章

  1. 中科院在2017年高被引科学家遴选中表现优异
  2. Android复习16【材料设计新特性:fragment、RecyclerView】
  3. Spark-submit提交任务到集群
  4. [转] Mysql命令基础
  5. java数组交集_java数组的交集和并集
  6. mysql排序行号_mysql 取得行号后再排序
  7. Java设计模式之四 ----- 适配器模式和桥接模式
  8. MAC 设计师必备的设计绘图软件 推荐与下载
  9. Android开发——项目实例(一)迷你背单词软件
  10. 【html】网页常用分享代码大全(前端必备)
  11. 怎么把手机便签图片上的文字转换成可以编辑的文字?
  12. Boundary Regularized Convolutional Neural Network for Layer Parsing of Breast Anatomy in ABUS
  13. Tmux常用命令小结(超全够用)
  14. (step4.2.3)hdu 1242(Rescue——BFS)
  15. tta 文件格式简述
  16. c语言大作业打印课程表,课程表(c语言)
  17. java中如何导出excel_java中如何导出excel表格
  18. 5款尽情歌唱的免费卡拉OK电脑软件
  19. 视频教程-思科CCNP专题系列13:IP多播协议-思科认证
  20. 经验:《王者荣耀》技术总监分享背后技术

热门文章

  1. 教师公开课教学课件PPT模板
  2. oracle 之 Undo Retention
  3. CAD自学笔记21条,零基础学CAD可以看看
  4. 微信公众号(八)——关注时自动回复(文字 图片)
  5. Windows 批量添加删除路由资源性能优化
  6. 基于微信小程序的童装(服装)商城的设计与实现
  7. 一个男人,给他女朋友的男朋友的一封信
  8. Plonky msm的改进版Yao算法
  9. H3C路由器配置忘记密码恢复
  10. html截取一部分作为图片,怎么截取文档的一部分