strace跟着-编译和解决sip的bus srror问题记录

news2024/12/22 23:32:03

1 问题:

我编译了一个开源sip代码,可以确定的是,在nuc980dk61yc、nuc97251y上都可以跑的正常程序,

但在该开发板(NUC97261Y)上运行,报错bus error

此文记录了 解决该问题的过程

我手里有一个972开发板(参考https://item.taobao.com/item.htm?spm=a21n57.1.0.0.680b523c5VMC8Q&id=725614464020&ns=1&abbucket=5#detail)

    最近遇到了一个问题:

    我编译了一个开源sip代码,可以确定的是,在nuc980dk61yc、nuc97251y上都可以跑的正常程序,

在nuc980dk61yc和nuc97251y的环境运行正常:

 

 

但是, 在该开发板(NUC97261Y)上运行,报错bus error

    我尝试过重新裁剪内核。但是无济于事,还有很多能想到的可能都没有解决:

2.跟踪

strace 跟踪该程序进行查看:log如下:
Log :
execve("/uac", ["/uac"], 0xbeb7eeb0 /* 7 vars */) = 0
readlinkat(AT_FDCWD, "/proc/self/exe", "/uac", 4096) = 4
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f18000
open("/lib//libosip2.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=51244, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\370;\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 118784, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ee6000
mmap2(0xb6ee6000, 48252, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6ee6000
mmap2(0xb6f02000, 1048, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xc000) = 0xb6f02000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libeXosip2.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=303008, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\360~\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 471040, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6e73000
mmap2(0xb6e73000, 291208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6e73000
mmap2(0xb6eca000, 11148, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x47000) = 0xb6eca000
mmap2(0xb6ecd000, 99804, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6ecd000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libpthread.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=94000, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\260C\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 114688, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6e57000
mmap2(0xb6e57000, 67104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6e57000
mmap2(0xb6e6f000, 4124, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x10000) = 0xb6e6f000
mmap2(0xb6e71000, 4328, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6e71000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libosipparser2.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=117840, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0Th\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 184320, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6e2a000
mmap2(0xb6e2a000, 112492, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6e2a000
mmap2(0xb6e56000, 2056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1c000) = 0xb6e56000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=583552, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0-\1\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 745472, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6d74000
mmap2(0xb6d74000, 578232, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6d74000
mmap2(0xb6e11000, 4864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x8d000) = 0xb6e11000
mmap2(0xb6e13000, 91416, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6e13000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libosipparser2.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=117840, ...}) = 0
close(3) = 0
open("/lib//libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=583552, ...}) = 0
close(3) = 0
open("/lib//libssl.so.1.0.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=313108, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0l\361\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 380928, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6d17000
mmap2(0xb6d17000, 291236, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6d17000
mmap2(0xb6d6e000, 21196, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x47000) = 0xb6d6e000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libosip2.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=51244, ...}) = 0
close(3) = 0
open("/lib//libosipparser2.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=117840, ...}) = 0
close(3) = 0
open("/lib//libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=583552, ...}) = 0
close(3) = 0
open("/lib//ld-uClibc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=32496, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0H\21\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 98304, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6cff000
mmap2(0xb6cff000, 24287, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6cff000
mmap2(0xb6d15000, 4104, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x6000) = 0xb6d15000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libdl.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=13220, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\20\v\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 49152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f0b000
mmap2(0xb6f0b000, 8468, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6f0b000
mmap2(0xb6f15000, 4120, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2000) = 0xb6f15000
close(3) = 0
munmap(0xb6f17000, 4096) = 0
open("/lib//libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=583552, ...}) = 0
close(3) = 0
open("/lib//libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=583552, ...}) = 0
close(3) = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=32496, ...}) = 0
open("/lib//libcrypto.so.1.0.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0744, st_size=1310720, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f17000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\200\312\3\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 1417216, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ba5000
mmap2(0xb6ba5000, 1259316, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb6ba5000
mmap2(0xb6ce8000, 83280, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x133000) = 0xb6ce8000
--- SIGBUS {si_signo=SIGBUS, si_code=BUS_ADRERR, si_addr=0xb6cfc550} ---
+++ killed by SIGBUS +++
Bus error

3.分析

strace结果得出:
 
1. 程序在执行时加载了一些必需的共享库,如libc、libssl等。这部分加载流程正常。
2. 当加载libcrypto.so.1.0.0这个共享库时,mmap调用返回了物理地址0xb6ba5000,这部分映射 seeming ok.
3. 但是后面程序crash出错了,错误号是BUS_ADRERR,也就是非法的物理地址访问错误。
4. 信号来源地址si_addr是0xb6cfc550,这地址正好处于之前映射libcrypto.so.1.0.0区间内。
 
综上,分析原因如下:
libcrypto.so.1.0.0这个共享库中的某个代码块,内存使用或访问出现问题,试图访问了一个无效或非法的内存地址0xb6cfc550。
这导致触发了BUS错误信号,最终程序异常崩溃。
 
所以本次crash的原因很可能是libcrypto.so.1.0.0中的一个bug,引起的内存非法访问错误。

4.解决措施

重新更换一个库文件libcrypto.so.1.0.0,就解决了该问题。
 

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

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

相关文章

Dubbo 路由及负载均衡性能优化

作者:vivo 互联网中间件团队- Wang Xiaochuang 本文主要介绍在vivo内部针对Dubbo路由模块及负载均衡的一些优化手段,主要是异步化缓存,可减少在RPC调用过程中路由及负载均衡的CPU消耗,极大提升调用效率。 一、概要 vivo内部Java…

【STM32】STM32中断体系

一、STM32的NVIC和起始代码中的ISP 1.NVIC(嵌套向量中断控制器) (1)数据手册中相关部分浏览 (2)地址映射时0地址映射到Flash或SRAM (3)中断向量表可以被人为重新映射,一般用来IAP中 (4)STM32采用一维的中断向量表 (5)中断优先级设置有点复杂,后面细说 1…

windows10专业版优化记录

用来记录我的windows10专业版配置的所有设置 资源管理器占用CPU资源高 gpedit.msc打开本地组策略管理器 这样时不时资源管理器会占用CPU高。 禁用的service的列表 Problem Reports and Solutions Control Panel Support Diagnostic Policy Service 组件诊断服务 WMI Prov…

如何进行渗透测试以提高软件安全性?

对于各种规模的企业和组织来说,软件安全是一个至关重要的问题。随着网络攻击越来越复杂,软件中的漏洞越来越多,确保你的软件安全比以往任何时候都更重要。提高软件安全性的一个有效方法是渗透测试(penetration testing&#xff09…

基于Or-Tools的整数规划问题求解

基于Or-Tools的整数规划问题求解 Or-Tools官网整数规划问题导入线性求解器声明 MIP 求解器定义变量定义约束条件定义目标函数调用 MIP 求解器打印结果完整代码 Or-Tools官网例题:求解大规模问题的数组表示构造数据实例化求解器定义变量定义约束条件定义目标函数调用求解器 完整…

罗马数字转整数------题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 很简单&#xff0c;感觉没什么可以讲的&#xff0c;就是按照题目要求做判断就好了 public int romanToInt(String s) {char []arg s.toCharArray();int sum 0;for(int i0;i<arg…

【JAVA学习笔记】45 - (35 - 43)第十章作业

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/homework10 1.静态属性的共享性质 判断下列输出什么 public class HomeWork01 {public static void main(String[] args) {Car c new Car();//无参构造时改变color为red…

鸿蒙跨平台框架来了ArkUi-X

前言&#xff1a; 各位同学大家有段时间没有给大家更新博客了 之前鸿蒙推出了鸿ArkUi-X 框架所以就写个文章分享一下 效果图&#xff1a; 首先需要下载支持 ArkUI-X 套件的华为开发工具 DevEco &#xff0c;版本为 4.0 以上&#xff0c;目前可以下载预览版进行体验。下载地址…

常见的网络攻击类型及防范措施

网络攻击是指针对计算机网络、系统或数据的恶意行为&#xff0c;旨在破坏、入侵、窃取信息或干扰网络服务。网络攻击的类型多种多样&#xff0c;以下是一些常见的网络攻击类型&#xff1a; DDoS 攻击&#xff08;分布式拒绝服务攻击&#xff09;&#xff1a; 攻击者通过多个受感…

【数据集】指针式圆形表计关键点数据集

指针式圆形表计关键点数据集 数据集简介数据集一览 数据集简介 数据类型&#xff1a;指针式圆形表计ROI区域 数据数量&#xff1a;1069 标注标签&#xff1a;中心点&#xff0c;起点&#xff0c;终点&#xff0c;指针端点 图像质量&#xff1a;高清90%&#xff0c;较模糊10% …

如何利用视频号提取视频,视频号下载视频教程

随着视频号的兴起&#xff0c;越来越多的人开始关注这个平台&#xff0c;并希望能够提取视频号中的精彩视频。然而&#xff0c;视频号并不支持直接下载视频&#xff0c;也不能复制链接。那么&#xff0c;我们如何才能实现视频号提取视频的需求呢&#xff1f;答案就是借助视频下…

苹果将于10月31日举行今秋的第二场发布会

在今日凌晨&#xff0c;苹果宣布&#xff0c;将于北京时间10月31日早上8点举行今秋的第二场发布会&#xff0c;主题为“来势迅猛”。据多方猜测苹果本次活动的核心产品大概率是搭载全新M3芯片的Mac系列产品。 据了解&#xff0c;在苹果的产品线中&#xff0c;搭载M3芯片的Mac系…

【强化学习】09——价值和策略近似逼近方法

文章目录 前言对状态/动作进行离散化参数化值函数近似值函数近似的主要形式Incremental MethodsGradient DescentLinear Value Function ApproximationFeature Vectors特征化状态Table Lookup Features Incremental Prediction AlgorithmsMonte-Carlo with Value Function Appr…

【蓝桥杯选拔赛真题02】C++计算天数 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++计算天数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

VR全景拍摄市场需求有多大?适用于哪些行业?

随着VR全景技术的成熟&#xff0c;越来越多的商家开始借助VR全景来宣传推广自己的店铺&#xff0c;特别是5G时代的到来&#xff0c;VR全景逐渐被应用在我们的日常生活中的各个方面&#xff0c;VR全景拍摄的市场需求也正在逐步加大。 通过VR全景技术将线下商家的实景“搬到线上”…

102.linux5.15.198 编译 firefly-rk3399(1)

1. 平台&#xff1a; rk3399 firefly 2g16g 2. 内核&#xff1a;linux5.15.136 &#xff08;从内核镜像网站下载&#xff09; 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff…

点击弹出实现模拟百度那样子

<uni-section title"输入框示例" type"line" padding><view class"dialog-box"><text class"dialog-text">输入内容&#xff1a;{{ value }}</text></view><button class"button" type&qu…

支付宝支付接入流程

一、 接入准备 支付宝支付流程没有微信那么复杂&#xff0c;而且支付宝支持沙箱。登录支付宝开放平台控制台 点击开发工具中的沙箱 接口加密方式&#xff0c;我这里使用的是自定义密钥。生成密钥的方式 使用支付宝官方提供的密钥工具&#xff0c;唯一要注意的是支付宝密钥工具…

12 原子性|可见性|有序性|JMM内存模型

1 并发三大特性 1.1 原子性 一个或多个操作&#xff0c;要么全部执行&#xff0c;要么全部不执行。Java中&#xff0c;对基本数据类型的变量的读取和赋值操作是原子性操作&#xff0c;但不采取任何原子性保障措施的自增操作不是原子性的&#xff0c;如&#xff1a;i public c…

C语言系统化精讲(六):C语言选择结构和循环结构

文章目录 一、C语言选择结构1.1 if语句1.2 if…else语句1.3 else if语句1.4 if语句的嵌套1.5 条件运算符1.6 switch语句的基本形式1.7 多路开关模式的switch语句1.8 if…else语句和switch语句的区别 二、C语言循环结构2.1 C语言while循环和do while循环详解2.1.1 while循环2.1.…