__stack_chk_fail问题分析

news2025/8/2 2:25:27

一、问题

进程收到SIGABRT信号异常退出,异常调用栈显示__stack_chk_fail

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Pico/A7H10/PICOA7H10:10/5.5.0/smartcm.1676912090:userdebug/dev-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2023-02-23 10:39:19+0800
pid: 933, ppid: -1, tid: 5800, name: pvrmanager  >>> /system/bin/stationservice <<<
uid: 0
signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: 'stack corruption detected (-fstack-protector)'
    x0  0000000000000000  x1  00000000000016a8  x2  0000000000000006  x3  000000731f60b4f0
    x4  0000000000808080  x5  0000000000808080  x6  0000000000808080  x7  0000000000000030
    x8  00000000000000f0  x9  9c790c62d7456e2d  x10 0000000000000001  x11 0000000000000000
    x12 fffffff0ffffffdf  x13 000002bd7a90a09e  x14 0031c42fbe3a7800  x15 0000000034155555
    x16 00000073a2b9fb38  x17 00000073a2b77d40  x18 000000731ea16000  x19 00000000000003a5
    x20 00000000000016a8  x21 00000000ffffffff  x22 00000073a47d949a  x23 00000000000003fb
    x24 000000731f60be20  x25 00000073a47d9000  x26 000000731f60b5b0  x27 00000000000003fc
    x28 00000000000003fc  x29 000000731f60b590
    sp  000000731f60b4d0  lr  00000073a2b295bc  pc  00000073a2b295e8

backtrace:
      #00 pc 00000000000895e8  /apex/com.android.runtime/lib64/bionic/libc.so (abort+160) (BuildId: 02b3bc38eb77bdc99f28c0fc3f17de65)
      #01 pc 00000000000d7168  /apex/com.android.runtime/lib64/bionic/libc.so (__stack_chk_fail+20) (BuildId: 02b3bc38eb77bdc99f28c0fc3f17de65)
      #02 pc 0000000000037844  /system/lib64/libstationopticsservice.so (pvr::StationService::StationLogPrint(char*, int)+500) (BuildId: 9943b2f8208bbfbec5bb6dacaab00482)
      #03 pc 00000000000375a8  /system/lib64/libstationopticsservice.so (pvr::MCULogProcess::MCULogProcessFunc()+168) (BuildId: 9943b2f8208bbfbec5bb6dacaab00482)
      #04 pc 0000000000048b44  /system/lib64/libstationopticsservice.so (_ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN3pvr13MCULogProcessEFvvEPS8_EEEEEPvSD_+60) (BuildId: 9943b2f8208bbfbec5bb6dacaab00482)
      #05 pc 00000000000ecce4  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: 02b3bc38eb77bdc99f28c0fc3f17de65)
      #06 pc 000000000008b064  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 02b3bc38eb77bdc99f28c0fc3f17de65)

二、分析

原因分析: __stack_chk_fail说明发生了缓冲区溢出,canary被破坏。这说明代码设置GCC编译选项fstack-protector,开启了栈保护机制canary,canary存放位置如下,如果func1函数中有越界操作,很可能会修改到canary,stack_chk_fail检测canary就会失败

反汇编后找到对应函数的汇编代码,定位到+500处

00000000000395f8 <_ZN3pvr14StationService15StationLogPrintEPci@@Base>:
   395f8:    a9ba6ffc     stp    x28, x27, [sp,#-96]!
   395fc:    a90167fa     stp    x26, x25, [sp,#16]
   39600:    a9025ff8     stp    x24, x23, [sp,#32]
   39604:    a90357f6     stp    x22, x21, [sp,#48]
   39608:    a9044ff4     stp    x20, x19, [sp,#64]
   3960c:    a9057bfd     stp    x29, x30, [sp,#80]
   39610:    910143fd     add    x29, sp, #0x50
   39614:    d11043ff     sub    sp, sp, #0x410
   39618:    d53bd058     mrs    x24, tpidr_el0
   3961c:    f9401708     ldr    x8, [x24,#40]
   39620:    b00001f9     adrp    x25, 76000 <configServiceClient@@Base>
   39624:    2a0203f4     mov    w20, w2
   39628:    aa0103f5     mov    x21, x1
   3962c:    f81a03a8     stur    x8, [x29,#-96]
   39630:    b944a336     ldr    w22, [x25,#1184]
   39634:    0b0202c8     add    w8, w22, w2
   39638:    7110051f     cmp    w8, #0x401
   3963c:    540001ab     b.lt    39670 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x78>
   39640:    b00001e0     adrp    x0, 76000 <configServiceClient@@Base>
   39644:    91027800     add    x0, x0, #0x9e
   39648:    321603e2     orr    w2, wzr, #0x400
   3964c:    2a1f03e1     mov    w1, wzr
   39650:    9400cafc     bl    6c240 <memset@plt>
   39654:    b0ffff80     adrp    x0, 2a000 <gyroLSB@@Base-0x3e4c>
   39658:    91102000     add    x0, x0, #0x408
   3965c:    2a1603e1     mov    w1, w22
   39660:    2a1403e2     mov    w2, w20
   39664:    9400cacf     bl    6c1a0 <_Z8pr_debugPKcz@plt>
   39668:    2a1f03f6     mov    w22, wzr
   3966c:    b904a33f     str    wzr, [x25,#1184]
   39670:    b00001f3     adrp    x19, 76000 <configServiceClient@@Base>
   39674:    91027a73     add    x19, x19, #0x9e
   39678:    8b36c260     add    x0, x19, w22, sxtw
   3967c:    93407e82     sxtw    x2, w20
   39680:    aa1503e1     mov    x1, x21
   39684:    9400cb6f     bl    6c440 <memcpy@plt>
   39688:    b944a328     ldr    w8, [x25,#1184]
   3968c:    910003e0     mov    x0, sp
   39690:    321603e2     orr    w2, wzr, #0x400
   39694:    2a1f03e1     mov    w1, wzr
   39698:    0b14011c     add    w28, w8, w20
   3969c:    b904a33c     str    w28, [x25,#1184]
   396a0:    910003fa     mov    x26, sp
   396a4:    9400cae7     bl    6c240 <memset@plt>
   396a8:    7100079f     cmp    w28, #0x1
   396ac:    5400088b     b.lt    397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>
   396b0:    90ffff94     adrp    x20, 29000 <gyroLSB@@Base-0x4e4c>
   396b4:    f0ffff75     adrp    x21, 28000 <gyroLSB@@Base-0x5e4c>
   396b8:    aa1f03e8     mov    x8, xzr
   396bc:    aa1f03fb     mov    x27, xzr
   396c0:    91062294     add    x20, x20, #0x188
   396c4:    9108deb5     add    x21, x21, #0x237
   396c8:    aa1303f6     mov    x22, x19
   396cc:    8b1b0269     add    x9, x19, x27
   396d0:    3940012a     ldrb    w10, [x9]
   396d4:    7100295f     cmp    w10, #0xa
   396d8:    54000040     b.eq    396e0 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0xe8>
   396dc:    3500038a     cbnz    w10, 3974c <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x154>
   396e0:    cb160137     sub    x23, x9, x22
   396e4:    f10006ff     cmp    x23, #0x1
   396e8:    5400030b     b.lt    39748 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x150>
   396ec:    910003e0     mov    x0, sp
   396f0:    321603e2     orr    w2, wzr, #0x400
   396f4:    2a1f03e1     mov    w1, wzr
   396f8:    9400cad2     bl    6c240 <memset@plt>
   396fc:    910003e0     mov    x0, sp
   39700:    321603e1     orr    w1, wzr, #0x400
   39704:    321603e2     orr    w2, wzr, #0x400
   39708:    aa1403e3     mov    x3, x20
   3970c:    aa1503e4     mov    x4, x21
   39710:    940007d4     bl    3b660 <_ZN3pvr14StationService23set_camerafps_to_configE12camera_fps_t@@Base+0x114>
   39714:    93407c08     sxtw    x8, w0
   39718:    8b0802fc     add    x28, x23, x8
   3971c:    f110039f     cmp    x28, #0x400
   39720:    540004ec     b.gt    397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>
   39724:    8b080340     add    x0, x26, x8
   39728:    aa1603e1     mov    x1, x22
   3972c:    aa1703e2     mov    x2, x23
   39730:    9400cb44     bl    6c440 <memcpy@plt>
   39734:    910003e1     mov    x1, sp
   39738:    aa1403e0     mov    x0, x20
   3973c:    383ccb5f     strb    wzr, [x26,w28,sxtw]
   39740:    9400cb44     bl    6c450 <_ZN3pvr9pr_keylogEPKcz@plt>
   39744:    b944a33c     ldr    w28, [x25,#1184]
   39748:    91000768     add    x8, x27, #0x1
   3974c:    9100077b     add    x27, x27, #0x1
   39750:    93407f89     sxtw    x9, w28
   39754:    eb09037f     cmp    x27, x9
   39758:    8b080276     add    x22, x19, x8
   3975c:    54fffb8b     b.lt    396cc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0xd4>
   39760:    b40002e8     cbz    x8, 397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>
   39764:    eb09011f     cmp    x8, x9
   39768:    540001ea     b.ge    397a4 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1ac>
   3976c:    4b080388     sub    w8, w28, w8
   39770:    93407d02     sxtw    x2, w8
   39774:    321603e3     orr    w3, wzr, #0x400
   39778:    aa1303e0     mov    x0, x19
   3977c:    aa1603e1     mov    x1, x22
   39780:    b904a328     str    w8, [x25,#1184]
   39784:    321603f4     orr    w20, wzr, #0x400
   39788:    9400cb36     bl    6c460 <__memcpy_chk@plt>
   3978c:    b984a328     ldrsw    x8, [x25,#1184]
   39790:    2a1f03e1     mov    w1, wzr
   39794:    8b080260     add    x0, x19, x8
   39798:    cb080282     sub    x2, x20, x8
   3979c:    9400caa9     bl    6c240 <memset@plt>
   397a0:    14000007     b    397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>
   397a4:    b00001e0     adrp    x0, 76000 <configServiceClient@@Base>
   397a8:    91027800     add    x0, x0, #0x9e
   397ac:    321603e2     orr    w2, wzr, #0x400
   397b0:    2a1f03e1     mov    w1, wzr
   397b4:    9400caa3     bl    6c240 <memset@plt>
   397b8:    b904a33f     str    wzr, [x25,#1184]
   397bc:    f9401708     ldr    x8, [x24,#40]
   397c0:    f85a03a9     ldur    x9, [x29,#-96]
   397c4:    eb09011f     cmp    x8, x9
   397c8:    54000121     b.ne    397ec <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1f4>
   397cc:    911043ff     add    sp, sp, #0x410
   397d0:    a9457bfd     ldp    x29, x30, [sp,#80]
   397d4:    a9444ff4     ldp    x20, x19, [sp,#64]
   397d8:    a94357f6     ldp    x22, x21, [sp,#48]
   397dc:    a9425ff8     ldp    x24, x23, [sp,#32]
   397e0:    a94167fa     ldp    x26, x25, [sp,#16]
   397e4:    a8c66ffc     ldp    x28, x27, [sp],#96
   397e8:    d65f03c0     ret
   397ec:    9400ca75     bl    6c1c0 <__stack_chk_fail@plt>

确实是__stack_chk_fail执行出现了问题

397ec: 9400ca75 bl 6c1c0 <__stack_chk_fail@plt>

再说一下,canary破坏很大可能是memset memcpy越界修改造成的,而且是栈中的变量,如下static概率就比较小,因为static变量不在栈中,所以,大概率是tmp这个数组

void StationService::StationLogPrint(char *buf, int len) {
#define STTAG "STLOG"
#define BUF_MAX_LEN 1024
    static char stlog[BUF_MAX_LEN] = {0};
    static int stlen = 0;
    station_debug_info_t buffer;
    memset(&buffer, 0, sizeof(buffer));
    buffer.type = (perf_test_t)STATION_LOG_INFO;

    if (stlen + len > BUF_MAX_LEN) {
        memset(stlog, 0, BUF_MAX_LEN);
        pr_debug("STLOG: stlen:%d, len:%d, err, drop!", stlen, len);
        stlen = 0;
    }
    memcpy(stlog + stlen, buf ,len);
    stlen += len;

    char tmp[BUF_MAX_LEN] = {0};
    char *p1 = stlog;
    char *p2 = p1;

    for (int i = 0; i < stlen; i++) {
        if ('\n' == *(stlog + i) || '\0' == *(stlog + i)) {
            p2 = stlog + i;
            if ((p2 - p1) > 0) {
                memset(tmp, 0, sizeof(tmp));
                int l = snprintf(tmp, sizeof(tmp), "%s", STTAG);
                if (l + (p2 - p1) > BUF_MAX_LEN) {
                    return;
                }
                // pr_err("01%s, l:%d, len:%d, stlen:%d, (p2 - p1):%d", __FUNCTION__, l, len, stlen, (p2 - p1));
                memcpy(tmp + l, p1, (p2 - p1));
                l += p2 - p1;
                tmp[l] = '\0';
                pr_keylog("%s", tmp);
            }
            p1 = p2 + 1;
        }
    }
    if (p1 == stlog) {
        return;
    }
    if (p1 - stlog >= stlen) {
        memset(stlog, 0, sizeof(stlog));
        stlen = 0;
    } else {
        stlen -= p1 - stlog;
        memcpy(stlog, p1, stlen);
        memset(stlog + stlen, 0, sizeof(stlog) - stlen);
    }
}

所以大概率问题出现在32行的memcpy,p2-p1可能越界了,因为tmp与stlog大小一样,tmp在开头加了一断字符,p2-p1+l

很有可能大于BUF_MAX_LEN,造成越界访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS Code下载安装教程

VS Code下载安装使用教程 目录VS Code下载安装使用教程一、下载二、安装三、使用教程3.1 VS Code中的第一个页面HelloWorld.html3.2 VS Code插件安装3.2.1 安装中文界面3.2.3 安装 Open in Browser插件3.2.4 安装Auto Rename Tag插件注意&#xff1a;3.3 code .命令&#xff0c…

EasyNLP集成K-Global Pointer算法,支持中文信息抽取

作者&#xff1a;周纪咏、汪诚愚、严俊冰、黄俊 导读 信息抽取的三大任务是命名实体识别、关系抽取、事件抽取。命名实体识别是指识别文本中具有特定意义的实体&#xff0c;包括人名、地名、机构名、专有名词等&#xff1b;关系抽取是指识别文本中实体之间的关系&#xff1b;…

代码随想录算法训练营第十天 | 理论基础、232.用栈实现队列、225. 用队列实现栈

打卡第10天&#xff0c;今天学习栈和队列 今日任务 理论基础232.用栈实现队列 用队列实现栈 理论基础 栈&#xff1a;先进后出 队列&#xff1a;先进先出 栈和队列是STL&#xff08;C标准库&#xff09;里面的两个数据结构 在 SGI STL 中&#xff0c;栈和队列的底层实现 栈…

Android使用FrameLayout+RecyclerView实现悬浮置顶封装功能

一、实际开发效果图默认效果:滚动后的效果:二、效果实现方式CoordinatorLayout AppBarLayout RecyclerView(适用于简单的悬浮View不超过一屏的情况&#xff0c;头部固定&#xff0c;数据简单)FrameLayout RecyclerView(适用于复杂的多条目布局&#xff0c;且悬浮条目位置受后…

移动硬盘无法识别?恢复硬盘,问题已解决

移动硬盘和U盘比较&#xff0c;它的体积是比较大的&#xff0c;但是相应的存储位置就会大点。它作为可移动设备&#xff0c;对于存储大型的数据&#xff0c;还是非常方便的。 有时候用户会发现移动硬盘出现一些问题&#xff0c;移动硬盘与电脑连接后&#xff0c;在电脑桌面右下…

java自定义注解实现数据字典映射

一 &#xff1a;前言 在我们开发过程中&#xff0c;我们从前端页面接收的数据字典一般都是key&#xff08;大多数为数字&#xff09;&#xff0c;但我们在页面显示的时候&#xff0c;想用其value值。如果我们每使用一次就要去写一些重复的代码去查询&#xff0c;这样会使我们的…

SharePoint Online CDN简介

前言 可能很多人并不了解CDN这个概念&#xff0c;不过作为Web从业人员着实不该&#xff0c;CDN就是内容分发网络&#xff0c;说白了就是第三方帮你托管静态资源&#xff0c;你可以在全球任何位置快速访问到对应的节点的资源。 正文 我们提到的SharePoint CDN&#xff0c;其实更…

高精度加减乘除

高精度加法 对于给定的两个特别大的数我们用两个字符串来接收 s1和s2。 例如&#xff1a;对于两个数 56215455和95425453&#xff0c;即 s1 "56215455" &#xff0c; s2 "95425453"。 对于这两个数&#xff0c;分别用两个列表 a和b来接收(例如&#x…

LeetCode-78. 子集

题目来源 78. 子集 题目思路 其实子集也是一种组合问题&#xff0c;因为它的集合是无序的&#xff0c;子集{1,2} 和 子集{2,1}是一样的。 那么既然是无序&#xff0c;取过的元素不会重复取&#xff0c;写回溯算法的时候&#xff0c;for就要从startIndex开始&#xff0c;而在这…

华为OD机试题,用 Java 解【比赛评分】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

开源单点登录MaxKey和JeeSite 单点登录集成指南

1. JeeSite介绍 JeeSite 隶属于济南卓源软件有限公司&#xff0c;是一个 Java 快速开发平台&#xff0c; 基于经典技术组合&#xff08;Spring Boot、Shiro、MyBatis、BeetlBootstrap or TSVue3&#xff09;在线代码生成工具&#xff0c; 支持 Spring Cloud 架构&#xff0c;分…

MYSQL 索引失效的十个场景(一)

一、查询条件包含or&#xff0c;可能导致索引失效 新建一个student表&#xff0c;它有一个普通索引userId&#xff0c;结构如下&#xff1a; CREATE TABLE student (id varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,name varchar(50) COLLATE utf8mb4_unicode_ci DEFAUL…

移动端适配的理解和各种方案解析(详解)

前言&#xff1a;最近在弄移动端项目&#xff0c;记录一下移动端的应用方案。对各个方案的解决理解。 目录 1.什么是移动端适配 2.理解视口viewport 2.1PC端的视口 2.2移动端的视口 2.2.0 PC端的网页在移动端显示的问题 2.2.1 布局视口 2.2.2 视觉视口 (visual viewport) …

一看就懂的Semaphore源码解析,诸佬们快来看看吧

前言&#xff1a;一位朋友问到了我Semaphore类相关的知识&#xff0c;简单看了一下源码复习了一下&#xff0c;写下本篇文章做一个回顾。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们&#x1f609;&#x1f609;。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x…

华为OD机试题,用 Java 解【航天器】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

CSCode 配置一条龙 CPP/CC

下载 官⽹下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 下载太慢&#xff0c;推荐⽂章&#xff1a;解决VsCode下载慢问题_wang13679201813的博客-CSDN博客_vscode下载慢 安装 无脑下一步 推荐插件 免配置&#xff1a; 1. Remote - SSH - 远程…

Exception has occurred: ModuleNotFoundErrorNo module named ‘urllib3‘【已解决】

问题描述 实际上只是想要测试一下torch是否安装成功&#xff0c;输出相应版本。谁知道就报错了。 Exception has occurred: ModuleNotFoundError No module named urllib3 解决方案 &#xff08;1&#xff09;使用pip或者conda卸载urllib3 pip uninstall urllib3conda unin…

离散无记忆与有记忆信源的序列熵

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;information-theory】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 信息论 也可获取。 文章目录离散无记忆信源的…

以高能低碳技术融入PC全生命周期,英特尔联合业界推出绿色商用电脑

双碳既是关系到地球上每个人的大话题&#xff0c;也是IT系统和产品降本增效的重要手段。 英特尔将高能低碳新理念融入从PC定义设计到回收循环的全生命周期 4 大关键环节&#xff0c;值得参考。 碳达峰、碳中和这个“双碳”的话题貌似与技术开发者个人距离很远。其实&#xff0c…

骨传导耳机是怎么传声的,选择骨传导耳机的时候需要注意什么?

​骨传导耳机之所以能够成为当下最火的耳机&#xff0c;骨传导技术将声音转化为震动感&#xff0c;通过骨头进行传播&#xff0c;不会堵塞耳朵&#xff0c;就不会影响到周围环境音。这种技术也让骨传导耳机比传统入耳式耳机更安全&#xff0c;无需入耳式设计&#xff0c;避免了…