segfault信息分析
在linux上,程序运行崩溃,通过dmesg,我们经常可以看到如下的崩溃信息。
[30573389.794159] a.out[8535]: segfault at 0 ip 00007f038f8e15b6 sp 00007ffcab34e670 error 4 in libread.so[7f038f8e1000+1000]
那么通过该信息,怎样定位到崩溃位置的函数和行号呢?
信息简述
- at 0 变量内容
- ip 00007f038f8e15b6 指令地址
- sp 00007ffcab34e670 栈顶地址
- error 4 错误类型
- libread.so 崩溃的库
- [7f038f8e1000+1000] 7f038f8e1000是库在内存映射中的 基地址,+1000不知道是啥
错误类型 的定义如下
* Page fault error code bits:** bit 0 == 0: no page found1: protection fault* bit 1 == 0: read access1: write access* bit 2 == 0: kernel-mode access1: user-mode access* bit 3 == 1: use of reserved bit detected* bit 4 == 1: fault was an instruction fetch
实例
read.c (动态库cpp文件)
int get_num_by_ptr(int *ptr)
{return *ptr;
}void set_num_by_ptr(int *ptr, int num)
{num = *ptr;
}
main.c (主文件)
extern int get_num_by_ptr(int *ptr);
int main(void)
{int num = get_num_by_ptr(0); //空指针解引用return 0;
}
- 编译运行
gcc read.c -g -fPIC -shared -o libread.so //没有-g,看不到行号,只能看到函数名
gcc main.c -L. -lread
./a.out
Segmentation fault (core dumped)
dmesg | tail -n1
[30573389.794159] a.out[8535]: segfault at 0 ip 00007f038f8e15b6 sp 00007ffcab34e670 error 4 in libread.so[7f038f8e1000+1000]
- 分析
由崩溃信息得到,崩溃时的指令地址为0x7f038f8e15b6,libread.so在内存映射中的基地址为0x7f038f8e1000,那么崩溃地址在libread.so中的相对偏移地址为5b6 = 7f038f8e15b6 - 7f038f8e1000。
用addr2line调试可得(addr2line需要的是偏移地址)
addr2line -f -C -e libread.so 5b6
get_num_by_ptr
/root/seg/read.c:3
- 总结
段错误,简单来说就是内存访问错误。大致分为这几类:
- 访问不存在或未分配的内存地址。
nullptr就属于不存在的内存地址,被释放的内存或未分配的内存就属于未分配的内存地址。
- 访问没有权限的内存地址。
如访问内核空间地址,对只读内存地址进行写操作(改变const修饰的变量)。
segfault信息分析相关推荐
- R语言使用pwr包的pwr.r.test函数对相关信息分析进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
R语言使用pwr包的pwr.r.test函数对相关信息分析(Correlations)进行效用分析(power analysis).在已知效应量(effect size).显著性水平(sig).效用值 ...
- R语言使用pwr包的pwr.r.test函数对相关信息分析(Correlations)进行效用分析(power analysis)的语法
R语言使用pwr包的pwr.r.test函数对相关信息分析(Correlations)进行效用分析(power analysis)的语法 目录
- 【Android 逆向】Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )
文章目录 一.Android 逆向方法 1.静态逆向解析 2.函数调用分析 3.动态运行跟踪 4.运行日志分析 5.文件格式解析 6.敏感信息分析 7.网络信息监控 8.软件动态调试 9.环境伪装模拟 ...
- 【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task
文章目录 一.打印 Android 中当前运行的 Activity 任务栈信息 二.Activity 任务栈信息分析 三.Activity 在相同 Stack 的不同 Task 情况 一.打印 And ...
- python找房源_Python租房信息分析!找到最适合自己的房源信息!
原标题:Python租房信息分析!找到最适合自己的房源信息! 租房信息分析 import numpy as np import pandas as pd import matplotlib.pyplo ...
- redis集群信息分析-cluster info-cluster nodes
[README] 本文po出 redis集群的节点信息,槽信息,以及字段含义 [1]集群信息 192.168.163.203:6380> cluster info cluster_state:o ...
- 2018--20179215--《文献管理与信息分析》第三讲 英文数据库资源的发展趋势和利用...
<文献管理与信息分析>第三讲 英文数据库资源的发展趋势和利用 一.科研相关的文献资源有以下十大来源: 专利.会议论文.期刊.学位论文.科技报告.科技档案.产品资料.政府出版物.标准文献.图 ...
- VideoUrlParser视频信息分析
VideoUrlParser视频信息分析 概述 VideoUrlParser是一款基于PHP根据视频URL抓取视频信息的工具,支持优酷.土豆.酷六.56.乐视.搜狐.腾讯.新浪. 版本 v1.2 更新 ...
- 速读《文献管理与信息分析》笔记
由于是第一次接触此类的书籍,加上研一的时间比较紧,并没有多少时间进行有效的阅读,只能对此进行简单的介绍,希望自己在未来的时间里可以仔细阅读和慢慢品味这本书. 这本书分为七章的学习计划,分别是: 第一章 ...
最新文章
- desc 枚举类型id_枚举系列(四):实现接口的枚举类
- mysql5.7命中率_MySQL5.7中 performance和sys schema中的监控参数解释(推荐)
- 每日算法系列【LeetCode 503】下一个更大元素 II
- 媒体化战略:数字时代企业如何做好公关与内容营销
- OpenCV用C画线代码示例
- 雷达导论PART-III.8 雷达接收机与数字化
- 责任链模式的高级用法
- Windows10关闭自动更新的多种方式
- display的值和作用
- 天猫店铺推广怎么收费?还有哪些推广方法?
- python 浏览器 弹 另存为_另存为弹出框如何调用
- 解决二义性问题解决 java_C++中常见的两种二义性问题及其解决方式
- D - Denouncing Mafia DFS
- GRU门控循环单元读书笔记
- Java的Enum枚举反编译的结果(为什么它是一个枚举对象是一个单例)
- java实现.费诺编码_香农费诺编码的matlab实现.doc
- 974. 和可被 K 整除的子数组
- workbench mesh划分边界层网格
- 国产芯片mcu性价比超高
- 爱普生Epson XP-830 一体机驱动