01-Coredump核心转存&&Linux程序地址分析
来源:互联网 发布:nero10刻录软件怎么用 编辑:程序博客网 时间:2024/05/22 05:11
- 一Core Dump核心转存
- 二Linux程序地址分析
- Linux应用程序运行出现错误,有时候并不会马上就体现出来。-_-可能是由于错误的条件还没触发把。
- 但是发生的错误应该在哪里查找呢?—这时候,我们的Core Dump就派上用场了。
一、Core Dump——核心转存
- 定义:
- Core Dump又叫核心转存。当程序在运行过程中发生异常, 这时Linux系统可以把程序出错时的内存内容存储在一个core文件中, 这种过程叫Core Dump。
- 产生的原因:
- Linux应用程序在运行过程中,经常会遇到Segment fault(段错误) 这样的错误。产生这样错误的原因通常有:
- 数组访问越界
- 访问空指针
- 栈溢出
- 修改只读内存
- Linux应用程序在运行过程中,经常会遇到Segment fault(段错误) 这样的错误。产生这样错误的原因通常有:
- 开启和关闭:
- 打开:ulimit -c ulimited
- 关闭:ulimit -c 0
- 查看:ulimit -c
- 分析命令:
用法gdb 程序名 core文件名 功能发生core dump之后, 可以使用gdb进行查看core文件的内容, 以定位程序出错的位置例gdb ./test core.12345 - 示例:
功能这个程序在函数中访问了空指针导致异常的发生,查看core dump文件的具体过程步骤1、开启core dump功能;(ulimit -c ulimited)
2、编写程序test.c文件,生成可执行文件test;(gcc -g test.c -o test)
3、查看core dump文件,找出错误;(gdb ./test core.12345)
- 定义:
#include <stdio.h>int main( int argc , char **argv ) { char *p ; *p = 250 ; return 0 ;}
二、Linux程序地址分析
- 程序构成
在Linux应用程序中,函数代码中的变量、方法等都有其存储空间,下面就介绍下这几个存储空间:
数据存放内存布局当Linux应用程序在内存中运行的时候,以上组成部分在内存中又是如何布局的呢?
代码段:代码,全局常量(const)、字符串常量;1.从低地址到高地址分别为:代码段、数据段、BSS段、堆、栈;
2.堆向高内存地址生长;
3.栈向低内存地址生长;
数据段:全局变量(初始化以及未初始化的)、静态变量(全局的和局部的、初始化的以及未初始化的);BSS段(Block Started by Symbol,又名:未初始化数据段):
这里其实是数据段中的一个子分区而已;堆(heap):动态分配的区域;栈(stack):局部变量(初始化以及未初始化的,但不包含静态变量)、局部只读变量(const);编写程序查看数据的内存地址分布:1、编写程序chen.c(代码如下);
2、生成可执行程序chen(gcc -g chen.c -o chen);
3、执行程序;
4、开启另外一个终端,使用命令(ps aux)查看程序的执行pid123;
5、cat /proc/pid123/maps/即可看到程序占用的内存地址;
注意:1、每个程序的内存起始地址都是0x8048000;
2、每个程序在内存中都占用同一块代码区和数据区;
1、Linux的执行程序格式都是elf的;可以使用命令readelf -S 可执行程序查看程序的地址分布情况;
2、命令file可以查看文件的格式;
include <stdio.h>int main ( int argc , char **argv ) { int a ; scanf("please don't enter number :%d\n",&a) ; return 0 ;}
0 0
- 01-Coredump核心转存&&Linux程序地址分析
- 程序故障分析coredump
- 【Core Dump】核心转存 故障分析
- Linux上coredump调试:call stack栈顶函数地址为0 分析实战
- 2-3 Coredump程序故障分析
- 强制让Linux一个程序coredump
- Linux Debugging(五): coredump 分析入门
- coredump分析
- coredump 分析
- coredump分析
- linux - coredump
- linux coredump
- linux coredump
- LS3-Coredump程序故障分析之学习笔记
- 函数return 0后 程序coredump, 问题分析
- 在不同版本的Linux和gcc下报错:段错误(核心已转存储)
- Linux 数据库转存问题
- linux 编译选项中加入-shared 造成执行程序coredump
- Java垃圾回收机制
- poj3744——Scout YYF I(概率DP+矩阵快速幂)
- 数据库
- C++继承(四)对象模型
- java基础--3.面向对象-6.多态
- 01-Coredump核心转存&&Linux程序地址分析
- POJ 1201 & HDU1384 & ZOJ 1508 Intervals 差分约束
- 复杂json转MAP对象
- Weblogic 12c 集群环境搭建
- java.io.InvalidClassException异常产生原因及解决方案
- BZOJ 3944: Sum
- bzoj2456瞎搞
- 315. Data Stream as Disjoint Intervals
- 防小黄车弹可滑动引导界面