httping 段错误问题总结

发布时间:2026/11/4 21:33:00

httping 段错误问题总结 项内容现象在板子上执行httping命令含空跑立刻 Segmentation fault结论-pie链接 目标文件未-fPIE→ TEXTREL → 启动重定位写只读段 →SEGV_ACCERR状态已修复并在板端验证通过1. 现象设备上执行/bin/httping不带任何参数即段错误。带 URL 的测速命令同样段错误。strace显示依赖库加载成功后在动态链接阶段崩溃尚未进入有效业务逻辑。典型 strace 尾部open(/usr/lib/libextservice.so, ...) 3 mmap2(... PROT_READ|PROT_EXEC ...) ... mmap2(... PROT_READ|PROT_WRITE ...) ... mprotect(..., PROT_READ) 0 # 各库 RELRO mprotect(..., PROT_READ) 0 mprotect(..., PROT_READ) 0 --- SIGSEGV {si_codeSEGV_ACCERR, si_addr0x49xxxx} --- killed by SIGSEGV 要点SEGV_ACCERR权限错误典型为写只读页不是缺页、也不是简单 OOM。si_addr随 ASLR 变化但相对主程序镜像的偏移固定落在 RX /.rodata一带。2. 根因2.1 直接原因链接编译结果CMakeLDFLAGS含-pie几乎所有.o没有-fPIEPIE 非 PIC 目标文件ELF 带DT_TEXTREL数百个R_ARM_RELATIVE落在RX 只读 LOAD启动时写只读段 → 段错误用readelf可见修复前Flags: PIE且存在TEXTREL指向非可写 LOAD 的 reloc 数量约672各.o以R_ARM_ABS32为主几乎没有 PIC 类重定位2.2 为何会编成这样CMake 为安全加固给 httping 加了-pie并把-fPIE放进C_CFLAGS。patch-httping-2.2.1/Makefile里原先只有在CONFIG_HSAN下、且仅对main.o使用C_CFLAGS。CMake 调用 make 时未传入CONFIG_HSANy旧Makefile.hsan会传。于是所有目标文件走默认规则只有CFLAGS/OFLAGS含头文件路径没有-fPIE再与-pie链接。对比历史可工作路径Makefile.hsan的LDFLAGS不含-pie非 PIC 目标文件链成普通可执行文件可以正常跑。CMake 路径引入-pie却未保证全量-fPIE从而引入本问题。2.3 与若干误判的关系猜测结论板子仍是旧httping排除md5sum/ 大小与 PC strip 产物一致libextservice.so未更新曾误用「25764旧」排除strip 后本就约 25KBmd5 与 PC 一致系统内存不足 /malloc(128KB)失败排除MemAvailable 充足崩溃点在链接收尾interpret_url里char in_use[65536]栈溢出排除空跑不进该函数该问题另作加固栈改堆仍保留3. 定位过程按时间线概括排查路径板端空跑即崩 → md5/大小对照确认已是新二进制 → free/meminfo排除内存不足 → 空跑路径分析排除 interpret_url 大栈 → strace定位到动态库加载后、SEGV_ACCERR → readelf -d/-r/-l发现 TEXTREL 大量 RX 段 reloc → 检查 .o 重定位类型确认未 -fPIE → 对照 Makefile.hsan / CMakeLists / Makefile找到 -pie 与 -fPIE 不一致 → 全量 -fPIE 重编TEXTREL0板端恢复正常关键命令分析侧# 动态标志与 TEXTRELreadelf-dhttping|grep-ETEXTREL|FLAGS|NEEDED# 程序头RX / RW LOADreadelf-lhttping# 目标文件是否 PICreadelf-rmain.o tcp.o|grep-cR_ARM_ABS32# 板端strace-fhttping21|tail-40md5sum /bin/httping /usr/lib/libextservice.so4. 修复内容涉及文件ubus8.8 / ubus7.20 均已改open_source/local/httping/CMakeLists.txtmake 增加CONFIG_HSANyOFLAGS、C_CFLAGS均加入-fPIE继续使用-pie链接open_source/local/httping/patch-httping-2.2.1/Makefile统一规则%.o: %.c使用$(CFLAGS) $(C_CFLAGS)保证所有目标文件带-fPIE修复后检查DT_TEXTREL消失写入非可写 LOAD 的 reloc 数量为0板端httping→No URL/host to ping given5. 重编与验证说明必须带prebuild_httping否则不会重新覆盖补丁目录。本次根因修复只需重编 httping不必重编libextservice。产物路径local/httping/rootfs/usr/bin/httping板端验证md5sum /bin/httping httping# 期望No URL/host to ping given6. 经验教训-pie与-fPIE必须成对只链 PIE、不编 PIC在 musl 上极易在启动阶段因 TEXTREL 直接 SIGSEGV。Make 变量与编译宏不是一回事CC上的-DCONFIG_HSANy只影响 C 预处理Makefile 的ifdef CONFIG_HSAN需要 make 侧传入CONFIG_HSANy。strip 后体积不能当版本依据libextservice.sostrip 前后可从 ~98KB 变为 ~25KB应以 md5 / 同源编译产物为准。空跑即崩优先怀疑加载/链接stracereadelf比先改业务逻辑更高效。补丁目录中的interpret_url大栈改堆仍建议保留属于另一类潜在栈溢出风险与本次空跑段错误不是同一根因。7.完整因果链① 编译时未加-fPIE → 目标文件含绝对地址代码是位置相关的 ↓ ② 链接时加了-pie → 链接器要求生成位置无关可执行文件 → 矛盾出现 ↓ ③ 链接器的选择 ├─ 现代链接器直接报错recompile with -fPIE└─ 老链接器妥协生成 TEXTREL → 在.text 段留下重定位项 ↓ ④ 程序启动ld.so 处理重定位 → 重定位项指向.text → 必须修正.text 里写死的绝对地址 ↓ ⑤ ld.so 写.text →.text 权限是 R-X只读可执行 → 写入触发 page fault ↓ ⑥ 内核 page fault handler 判定 → 地址有效已映射 → 权限不对只读页要写 → 发送 SIGSEGVsi_codeSEGV_ACCERR ↓ ⑦ 程序崩溃8. 总结根本原因编译时没加 -fPIE链接时却加了 -pie链接器被迫在只读的 .text 段留下重定位项TEXTREL启动时动态链接器要改写 .text但 .text 只读写入触发 page fault内核判定权限错误发送 SIGSEGVsi_code SEGV_ACCERR。核心理解.text 不是绝对地址它是代码段问题是 .text 里的代码写了绝对地址重定位要修正这些写死的地址修正位置就在 .text 里.text 只读一写就段错误正常 PIE 把绝对地址放到可写的 .got 里重定位只改 .got解决办法编译和链接选项配套要么全 -fPIE -pie要么全 -no-pie。
延伸阅读

更多相关文章

2026/11/2 2:46:04

CEO融资能力构建:从BP到估值谈判全流程指南

1. 项目概述:CEO融资能力构建指南融资能力已成为现代企业掌舵者的核心生存技能。作为连续创业者,我见证过太多项目因创始人融资能力不足而错失发展良机。本文将系统拆解融资全流程中的关键环节,从BP撰写到估值谈判,分享一套经过实…

2026/11/4 21:30:16

RAG翻车后,我总结了AI数据治理的四个关键落点

1. 从一次RAG翻车现场说起:数据治理到底卡在哪去年帮一个团队调一套RAG知识库,场景不复杂——把公司内部几百份产品文档、运维手册、客服话术灌进去,让大模型能回答一线同事的问题。模型选的是当时口碑不错的中文大模型,向量库用的…

2026/11/4 21:30:16

树莓派3B双线视觉寻迹:OpenCV4.5编译与实时车道定位实战

简介:本资源是一份基于树莓派3B四轮驱动小车的双线寻迹项目设计报告,面向嵌入式开发初学者、机器人爱好者及高校自动化/人工智能方向实践教学群体,聚焦视觉导航基础能力训练与工程排错实战。报告完整呈现了从OpenCVPython环境搭建&#xff08…

2026/11/4 21:30:16

KernelSU .ksurc 定制 su 启动环境:原理、配置与避坑指南

1. 从一次“su 环境不听话”的排查说起 .ksurc 这个东西,很多人第一次听说是在翻 KernelSU 的模块目录时,看到一个不起眼的点文件躺在 /data/adb/ 下面,既没有扩展名说明,也没有官方文档大书特书。我最初也把它当成一个可有可无…

2026/11/4 21:30:16

数据库中间件:架构核心与性能优化实战

1. 数据库中间件:现代架构的隐形支柱第一次接触数据库中间件是在2014年一个电商大促的深夜,当时我们的MySQL主库连接数突然爆满,整个订单系统陷入瘫痪。那次惨痛经历让我意识到:在分布式系统架构中,数据库中间件不是可…

2026/11/4 21:25:15

订单簿深度解析:从L1到L3数据与流动性机制

## 1. 订单簿基础概念与市场角色在加密资产交易中,订单簿(Order Book)是记录所有买卖挂单的实时清单。当你在交易所界面看到"买一价"和"卖一价"时,实际上看到的就是订单簿最顶层的报价。但真正的市场深度藏在…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑