当前位置: 首页 > news >正文

__stack_chk_fail问题分析

一、问题

进程收到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  000000731f60b4f0x4  0000000000808080  x5  0000000000808080  x6  0000000000808080  x7  0000000000000030x8  00000000000000f0  x9  9c790c62d7456e2d  x10 0000000000000001  x11 0000000000000000x12 fffffff0ffffffdf  x13 000002bd7a90a09e  x14 0031c42fbe3a7800  x15 0000000034155555x16 00000073a2b9fb38  x17 00000073a2b77d40  x18 000000731ea16000  x19 00000000000003a5x20 00000000000016a8  x21 00000000ffffffff  x22 00000073a47d949a  x23 00000000000003fbx24 000000731f60be20  x25 00000073a47d9000  x26 000000731f60b5b0  x27 00000000000003fcx28 00000000000003fc  x29 000000731f60b590sp  000000731f60b4d0  lr  00000073a2b295bc  pc  00000073a2b295e8backtrace:#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, #0x5039614:    d11043ff     sub    sp, sp, #0x41039618:    d53bd058     mrs    x24, tpidr_el03961c:    f9401708     ldr    x8, [x24,#40]39620:    b00001f9     adrp    x25, 76000 <configServiceClient@@Base>39624:    2a0203f4     mov    w20, w239628:    aa0103f5     mov    x21, x13962c:    f81a03a8     stur    x8, [x29,#-96]39630:    b944a336     ldr    w22, [x25,#1184]39634:    0b0202c8     add    w8, w22, w239638:    7110051f     cmp    w8, #0x4013963c:    540001ab     b.lt    39670 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x78>39640:    b00001e0     adrp    x0, 76000 <configServiceClient@@Base>39644:    91027800     add    x0, x0, #0x9e39648:    321603e2     orr    w2, wzr, #0x4003964c:    2a1f03e1     mov    w1, wzr39650:    9400cafc     bl    6c240 <memset@plt>39654:    b0ffff80     adrp    x0, 2a000 <gyroLSB@@Base-0x3e4c>39658:    91102000     add    x0, x0, #0x4083965c:    2a1603e1     mov    w1, w2239660:    2a1403e2     mov    w2, w2039664:    9400cacf     bl    6c1a0 <_Z8pr_debugPKcz@plt>39668:    2a1f03f6     mov    w22, wzr3966c:    b904a33f     str    wzr, [x25,#1184]39670:    b00001f3     adrp    x19, 76000 <configServiceClient@@Base>39674:    91027a73     add    x19, x19, #0x9e39678:    8b36c260     add    x0, x19, w22, sxtw3967c:    93407e82     sxtw    x2, w2039680:    aa1503e1     mov    x1, x2139684:    9400cb6f     bl    6c440 <memcpy@plt>39688:    b944a328     ldr    w8, [x25,#1184]3968c:    910003e0     mov    x0, sp39690:    321603e2     orr    w2, wzr, #0x40039694:    2a1f03e1     mov    w1, wzr39698:    0b14011c     add    w28, w8, w203969c:    b904a33c     str    w28, [x25,#1184]396a0:    910003fa     mov    x26, sp396a4:    9400cae7     bl    6c240 <memset@plt>396a8:    7100079f     cmp    w28, #0x1396ac:    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, xzr396bc:    aa1f03fb     mov    x27, xzr396c0:    91062294     add    x20, x20, #0x188396c4:    9108deb5     add    x21, x21, #0x237396c8:    aa1303f6     mov    x22, x19396cc:    8b1b0269     add    x9, x19, x27396d0:    3940012a     ldrb    w10, [x9]396d4:    7100295f     cmp    w10, #0xa396d8:    54000040     b.eq    396e0 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0xe8>396dc:    3500038a     cbnz    w10, 3974c <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x154>396e0:    cb160137     sub    x23, x9, x22396e4:    f10006ff     cmp    x23, #0x1396e8:    5400030b     b.lt    39748 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x150>396ec:    910003e0     mov    x0, sp396f0:    321603e2     orr    w2, wzr, #0x400396f4:    2a1f03e1     mov    w1, wzr396f8:    9400cad2     bl    6c240 <memset@plt>396fc:    910003e0     mov    x0, sp39700:    321603e1     orr    w1, wzr, #0x40039704:    321603e2     orr    w2, wzr, #0x40039708:    aa1403e3     mov    x3, x203970c:    aa1503e4     mov    x4, x2139710:    940007d4     bl    3b660 <_ZN3pvr14StationService23set_camerafps_to_configE12camera_fps_t@@Base+0x114>39714:    93407c08     sxtw    x8, w039718:    8b0802fc     add    x28, x23, x83971c:    f110039f     cmp    x28, #0x40039720:    540004ec     b.gt    397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>39724:    8b080340     add    x0, x26, x839728:    aa1603e1     mov    x1, x223972c:    aa1703e2     mov    x2, x2339730:    9400cb44     bl    6c440 <memcpy@plt>39734:    910003e1     mov    x1, sp39738:    aa1403e0     mov    x0, x203973c:    383ccb5f     strb    wzr, [x26,w28,sxtw]39740:    9400cb44     bl    6c450 <_ZN3pvr9pr_keylogEPKcz@plt>39744:    b944a33c     ldr    w28, [x25,#1184]39748:    91000768     add    x8, x27, #0x13974c:    9100077b     add    x27, x27, #0x139750:    93407f89     sxtw    x9, w2839754:    eb09037f     cmp    x27, x939758:    8b080276     add    x22, x19, x83975c:    54fffb8b     b.lt    396cc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0xd4>39760:    b40002e8     cbz    x8, 397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>39764:    eb09011f     cmp    x8, x939768:    540001ea     b.ge    397a4 <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1ac>3976c:    4b080388     sub    w8, w28, w839770:    93407d02     sxtw    x2, w839774:    321603e3     orr    w3, wzr, #0x40039778:    aa1303e0     mov    x0, x193977c:    aa1603e1     mov    x1, x2239780:    b904a328     str    w8, [x25,#1184]39784:    321603f4     orr    w20, wzr, #0x40039788:    9400cb36     bl    6c460 <__memcpy_chk@plt>3978c:    b984a328     ldrsw    x8, [x25,#1184]39790:    2a1f03e1     mov    w1, wzr39794:    8b080260     add    x0, x19, x839798:    cb080282     sub    x2, x20, x83979c:    9400caa9     bl    6c240 <memset@plt>397a0:    14000007     b    397bc <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1c4>397a4:    b00001e0     adrp    x0, 76000 <configServiceClient@@Base>397a8:    91027800     add    x0, x0, #0x9e397ac:    321603e2     orr    w2, wzr, #0x400397b0:    2a1f03e1     mov    w1, wzr397b4:    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, x9397c8:    54000121     b.ne    397ec <_ZN3pvr14StationService15StationLogPrintEPci@@Base+0x1f4>397cc:    911043ff     add    sp, sp, #0x410397d0:    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],#96397e8:    d65f03c0     ret397ec:    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 1024static 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,造成越界访问。

相关文章:

__stack_chk_fail问题分析

一、问题进程收到SIGABRT信号异常退出&#xff0c;异常调用栈显示__stack_chk_fail*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: Pico/A7H10/PICOA7H10:10/5.5.0/smartcm.1676912090:userdebug/dev-keys Revision: 0 ABI: arm64 Times…...

linux 查看当前系统用户

1.查看当前登录账号(whoami) whoami ---------------------- root2.查看当前账号信息(id) id --------------------------- uid0(root) gid0(root) groups0(root)3.查看/etc/passwd文件 可以看到每行记录对应着一个用户信息&#xff0c;每条记录 共7段 用 冒号: 拼接&#xf…...

AI算法创新赛-人车目标检测竞赛总结05

队伍&#xff1a;AI0000043 1. 算法方案 由于赛题同时要求速度和精度&#xff0c;所以我们优先考虑小模型&#xff0c;在保证模型速度的同时通过模型调优稳 定提升模型精度。此外&#xff0c;由于图片分辨率比较大&#xff0c;且数据集中小目标占比高&#xff0c;我们计划使用…...

CSS 浮动【快速掌握知识点】

目录 前言 一、设置浮动属性 二、确定浮动元素的宽度 三、清除浮动 总结&#xff1a; 前言 CSS浮动是一种布局技术&#xff0c;它允许元素浮动到其父元素的左侧或右侧&#xff0c;从而腾出空间给其他元素。 一、设置浮动属性 使用CSS float属性将元素设置为浮动。例如&…...

在做自动化测试前需要知道的

什么是自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…...

机器人学习的坚持与收获-2023

所有的机会都需要自己努力去争取&#xff0c;毕竟天会下雨下雪&#xff0c;但是不会掉馅饼。之前写过关于毕业生的一些博文。机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果&#xff08;暂缓通过&#xff09;机器人工程ROS方向应用型本科毕业设计重点课题学生验收成…...

RSA签名加密解密

目录Java 接口RSAUtils.java示例中的依赖生成密钥对示例签名示例验证签名示例加密和解密示例Javascript 接口引入依赖生成密钥对示例签名示例验证签名示例加密和解密示例说在最后Java 接口 支持的密钥长度包括4种 RSA512、RSA1024、RSA2048、RSA4096支持的签名算法包括7种 MD2…...

【C语言】数据的存储

☃️内容专栏&#xff1a;【C语言】进阶部分 ☃️本文概括&#xff1a; C语言中的数据类型及其存储方式。 ☃️本文作者&#xff1a;花香碟自来_ ☃️发布时间&#xff1a;2023.2.24 目录 一、数据类型详细介绍 1.1 基本的数据类型 1.2 整型家族 1.3 构造类型 1.4 指针类型…...

「RISC-V Arch」SBI 规范解读(上)

术语 SBI&#xff0c;Supervisor Binary Interface&#xff0c;管理二进制接口 U-Mode&#xff0c;User mode&#xff0c;用户模式 S-Mode&#xff0c;Supervisor mode&#xff0c;监督模式 VS-Mode&#xff0c;Virtualization Supervisor mode&#xff0c;虚拟机监督模式 …...

2023年全国最新二级建造师精选真题及答案5

百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 51.下列国有资金占控股或者主导地位的依法必须进行招标的项目&#xff0c;可以采取邀请招标的…...

365智能云打印怎么样?365小票无线订单打印机好用吗?

365智能云打印怎么样&#xff1f;365智能云打印是有赞官方首推的订单小票打印机&#xff0c;荣获2016年有赞最佳硬件服务商。可以实现远程云打印&#xff0c;无需连接电脑&#xff0c;只需通过GPRS流量或者WIFI即可连接&#xff0c;不受地理位置和距离限制。365小票无线订单打印…...

细说react源码中的合成事件

最近在做一个功能&#xff0c;然后不小心踩到了 React 合成事件 的坑&#xff0c;好奇心的驱使&#xff0c;去看了 React 官网合成事件 的解释&#xff0c;这不看不知道&#xff0c;一看吓一跳… SyntheticEvent是个什么鬼&#xff1f;咋冒出来了个事件池&#xff1f; 我就一…...

【架构师】零基础到精通——架构演进

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;软件设计师/鸿蒙高级工程师认证&#xff0c;在备战高级架构师/系统分析师&#xff0c;欢迎关注小弟&#xff01; 博主小留言…...

Hadoop命令大全

HDFS分布式文件系统 &#xff0c; 将一个大的文件拆分成多个小文件存储在多台服务器中 文件系统&#xff1a; 目录结构&#xff08;树状结构&#xff09; "/" 树根&#xff0c; 目录结构在namenode中维护 目录 1.查看当前目录 2.创建多级目录 3.上传文件 4.查…...

一文带你快速初步了解云计算与大数据

目录 &#x1f50d;一、云计算基础 1、云计算的概念、特点、关键技术 2、云计算的分类 3、云计算的部署模式 4、云计算的服务模式&#xff1a;IaaS、PaaS、SaaS分别是什么&#xff0c;具体含义要清楚 5、物联网的概念 6、物联网和云计算、大数据的关系 7、了解云计算的…...

STM32 OTA应用开发——通过USB实现OTA升级

STM32 OTA应用开发——通过USB实现OTA升级 目录STM32 OTA应用开发——通过USB实现OTA升级前言1 环境搭建2 功能描述3 BootLoader的制作4 APP的制作5 烧录下载配置6 运行测试结束语前言 什么是OTA&#xff1f; 百度百科&#xff1a;空中下载技术&#xff08;Over-the-Air Techn…...

JavaScript高级程序设计读书分享之6章——6.2Array

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 除了 Object&#xff0c;Array 应该就是 ECMAScript 中最常用的类型了。 创建数组 使用 Array 构造函数 在使用 Array 构造函数时&#xff0c;也可以省略 new 操作符。 let colors new Array() let …...

MySQL递归查询 三种实现方式

1 建表脚本1.1 建表DROP TABLE IF EXISTS sys_region; CREATE TABLE sys_region (id int(50) NOT NULL AUTO_INCREMENT COMMENT 地区主键编号,name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 地区名称,short_name varchar(50) CHARA…...

Servle笔记(7):过滤器

1、过滤器的作用与目的 过滤器的目的 在客户端的请求访问后端资源之前&#xff0c;拦截请求在服务器的响应发送回客户端之前&#xff0c;处理响应 2、过滤器的类型 身份验证过滤器&#xff08;Authentication Filters&#xff09;数据压缩过滤器&#xff08;Data compressio…...

2023年:我成了半个外包

边线业务与主线角色被困外包&#xff1b; 012022年&#xff0c;最后一个工作日&#xff0c;裁员的小刀再次挥下&#xff1b; 商务区楼下又多了几个落寞的身影&#xff0c;办公室内又多了几头暴躁的灵魂&#xff1b; 随着裁员的结束&#xff0c;部门的人员结构简化到了极致&am…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...