linux环境下常见错误分析

原创 2012年03月22日 14:14:05

1. Killed(已杀死)

     是指操作系统已经应用程序杀死,杀死的原因保存在 /var/log/syslog中,可以通过查看日志得到。杀死原因通常包括"out of memory"等,如果是“out of memory”,则可能是程序内存泄露引起的,或是分配了一个过大的内存空间。

     检查内存是否泄露,可以通过Valgrind工具进行检查。

      valgrind --leak-check=full-output-file outputfile  <path>/program-name

2.Aborted(已放弃)

     出现的原因通常是由于内存访问非法引起的。为了得到出错时的具体信息,包括出错时的调用堆栈,我们可以在程序运行之前运行如下命令:

     ulimit -c unlimited

     这样程序在出错的时候,就会将堆栈等信息显示出来,并将相关信息保存在一个CORE文件当中,该文件保存在应用程序运行时所在的目录。为了得到出错时的上下文环境,可以通过gdb来加载该CORE文件

        gdb<exe-file> <core-file>

或者 gdb <program>

        core-file <core-file-name>

      加载CORE文件后,可以使用bt或者where显示出错时的调用堆栈或者出错时所处的位置。而后使用up或者down显示上一条出错信息和下一条出错信息。

 

3.Stack smashing detected

   如果显示“Stacksmashing detected”,多般是由于数组访问越界所致,因为只有数组的内存分配是在栈上,指针的内存分配是在堆上。

   下面是一个实例:


ab@cd-x:$cat test_overflow.c

#include <stdio.h>

#include <string.h>

 

intcheck_password(char *password){

   int flag = 0;

   char buffer[20];

   strcpy(buffer, password);

 

   if(strcmp(buffer, "mypass") == 0){

       flag = 1;

   }

   if(strcmp(buffer, "yourpass") == 0){

       flag = 1;

   }

   return flag;

}

 

int main(int argc, char *argv[]){

   if(argc >= 2){

       if(check_password(argv[1])){

           printf("%s", "Access grainted\n");

       }else{

           printf("%s", "Access denined\n");

       }

   }else{

       printf("%s", "Please enter password!\n");

   }

}

ab@cd-x:$gcc -g -fno-stack-protector test_overflow.c

ab@cd-x:$ ./a.outmypass

Access grainted

ab@cd-x:$ ./a.outyourpass

Access grainted

ab@cd-x:$ ./a.outwepass

Access denined

ab@cd-x:$ ./a.outwepassssssssssssssssss

Access grainted

 

ab@cd-x:$gcc -g -fstack-protector test_overflow.c

ab@cd-x:$ ./a.outwepass

Access denined

ab@cd-x:$ ./a.outmypass

Access grainted

ab@cd-x:$ ./a.outyourpass

Access grainted

ab@cd-x:$ ./a.outwepassssssssssssssssss

*** stacksmashing detected ***: ./a.out terminated

======= Backtrace: =========

/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xce0ed8]

/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xce0e90]

./a.out[0x8048524]

./a.out[0x8048545]

/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xc16b56]

./a.out[0x8048411]

======= Memory map: ========

007d9000-007f5000 r-xp 00000000 08:06 5776      /lib/libgcc_s.so.1

007f5000-007f6000 r--p 0001b000 08:06 5776      /lib/libgcc_s.so.1

007f6000-007f7000 rw-p 0001c000 08:06 5776      /lib/libgcc_s.so.1

0090a000-0090b000 r-xp 00000000 00:00 0         [vdso]

00c00000-00d3e000 r-xp 00000000 08:06 1183      /lib/tls/i686/cmov/libc-2.10.1.so

00d3e000-00d3f000 ---p 0013e000 08:06 1183      /lib/tls/i686/cmov/libc-2.10.1.so

00d3f000-00d41000 r--p 0013e000 08:06 1183      /lib/tls/i686/cmov/libc-2.10.1.so

00d41000-00d42000 rw-p 00140000 08:06 1183      /lib/tls/i686/cmov/libc-2.10.1.so

00d42000-00d45000 rw-p 00000000 00:00 0

00e0c000-00e27000 r-xp 00000000 08:06 4213      /lib/ld-2.10.1.so

00e27000-00e28000 r--p 0001a000 08:06 4213      /lib/ld-2.10.1.so

00e28000-00e29000 rw-p 0001b000 08:06 4213      /lib/ld-2.10.1.so

08048000-08049000 r-xp 00000000 08:05 1056811    /dos/hacking/test/a.out

08049000-0804a000 r--p 00000000 08:05 1056811    /dos/hacking/test/a.out

0804a000-0804b000 rw-p 00001000 08:05 1056811    /dos/hacking/test/a.out

08675000-08696000 rw-p 00000000 00:00 0         [heap]

b76fe000-b76ff000rw-p 00000000 00:00 0

b7717000-b7719000rw-p 00000000 00:00 0

bfc1c000-bfc31000rw-p 00000000 00:00 0         [stack]

Aborted

ab@cd-x:$ 



GDB与coredump错误类文件的解析

GDB与coredump错误类文件的解析 GDB是Linux与UNIX系统下的一款程序调试工具,下面来介绍GDB的用法: 请先看这个程序: ...
  • zmrlinux
  • zmrlinux
  • 2015年04月04日 23:35
  • 443

C++常见问题与分析

1.求下面函数的返回值(微软) int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return c...
  • wjeson
  • wjeson
  • 2013年12月03日 13:39
  • 1368

Linux系统下常用命令操作

在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.s...
  • jakeswang
  • jakeswang
  • 2016年01月25日 13:58
  • 1039

linux c错误解析

Ambiguous operators need parentheses不明确的运算需要用括号括起Ambiguous symbol xxx不明确的符号Argument list syntax erro...
  • wz125
  • wz125
  • 2007年07月16日 13:41
  • 1273

常见错误分析

情况1:语法错误,找不到的话,就去上一行找 情况2:缩进错误 情况3:变量没有定义   情况4:缺少参数...
  • guifei010
  • guifei010
  • 2018年01月23日 11:36
  • 11

windows7中配置linux开发环境

接触背景:合并Android应用apk,一款游戏需要在不同的平台上线,那么就要接各个平台的sdk。 我们公司做了一个sdk,用来完成接入我们的sdk就能完成接入n多个我们接好的平台的任务(我们的sdk...
  • gongxiaoou
  • gongxiaoou
  • 2016年02月22日 11:59
  • 649

Linux环境下安装R语言

Linux环境下安装R语言 1.        新建文件夹 mkdir software 2.        打开software 文件夹 cd software 3.        下载...
  • u010867924
  • u010867924
  • 2016年03月30日 13:32
  • 282

linux环境下java代码的开发与运行

1、首先要进行java环境变量配置,自行下载Centos版本的jdk,这里选择的是jdk-7u79-linux-x64.tar.gz ; 这里我是从csdn中下载:http://download.c...
  • Wflowerd
  • Wflowerd
  • 2018年01月28日 20:34
  • 16

单例模式的5种实现方式,以及在多线程环境下5种创建单例模式的效率

这段时间从头温习设计模式。记载下来,以便自己复习,也分享给大家。 [java] view plain copy package com.iter...
  • sdujava2011
  • sdujava2011
  • 2017年09月17日 10:17
  • 126

【Linux&C++】Linux环境下C++编程

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com   QQ:1494713801   在linux下,开发工具被切割成一个个独立的小工具。各自处理不同的问题。例如: ...
  • u010515761
  • u010515761
  • 2015年06月18日 16:03
  • 1517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux环境下常见错误分析
举报原因:
原因补充:

(最多只允许输入30个字)