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

news/2024/7/23 10:22:16 标签: mfc, c++

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.niftyadmin.cn/n/5125525.html

相关文章

[moeCTF 2023] REV

逆向这东西,不太好说。 base64 这是个pyc文件(python编译后的字节码文件),这东西可以直接用各种方法反编译。也可以不弄,必竟这应该签到级别的。用notepad打开,可以看到base64的编译和两个码表。显然猜是…

【Reticulate Micro】申请1000万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国的【Reticulate Micro】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(RMIC) ,Reticulate…

网络编程 10.26

#include <head.h> #define SER_PORT 69 int main(int argc, const char *argv[]) {int cfdsocket(AF_INET,SOCK_DGRAM,0);//创建套接字文件用于发送给服务器if(cfd-1)//判断套接字文件是否创建成功{perror("socket error");return -1;}printf("*********…

GDPU 数据结构 天码行空7

一、【实验目的】 1、掌握数组的抽象数据类型 2、掌握动态数组的设计方法 3、理解动、静态数组的对比 4、掌握特殊矩阵的压缩存储及运算 5、掌握递归的原理及一般递归的程序设计方法 二、【实验内容】 1、设矩阵A、矩阵B为n阶对称矩阵&#xff0c;矩阵元素为整数类型&#x…

顺序表的查找(按位查找、按值查找)(数据结构与算法)

顺序表的基本操作&#xff1a;按位查找、按值查找 顺序表的按位查找 GetElem(L, i) :按位查找&#xff0c;获取表L中第 i 个位置元素的值 #define MaxSize 10 //定义最大长度 typedef struct{ElemType data[MaxSize]; //用静态的“数组”存放数据元…

系统架构师论文总结【持续更新】

系统架构师考试是对计算机从业人员&#xff0c;以考代评的重要考试&#xff0c;近几年一直在参加考试&#xff0c;屡战屡败&#xff0c;后又屡败屡战&#xff0c;记录总结论文相关的知识点&#xff0c;方便考前查看。 一、2010年论文 1&#xff09;论软件的静态演化和动态演化…

SolidWorks2020安装教程(超详细图文教程)

目录 一.简介 二.安装步骤 SolidWorks2020&#xff08;64位&#xff09;百度网盘下载地址&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1F9bb1WKdl-_LlQ_tpYV-4w 密码&#xff1a;umly 一.简介 SolidWorks软件是世界上第一个基于Windows开发的三维CAD系统&…

Shiro整合EhCache

缓存工具EhCache EhCache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。可以和大部分Java项目无缝整合&#xff0c;例如&#xff1a;Hibernate中的缓存就是基于EhCache实现的。EhCache支持内存和磁盘存储&#xff0c;默认存储在内存中&#xff…