易截截图软件、单文件、免安装、纯绿色、仅160KB

linux程式段错误的调试方法

原帖:http://www.sudu.cn/info/html/edu/20070101/286290.html
   简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或根本就不存在对应的物理内存,尤其常见的是访问0地址.

般来说,段错误就是指访问的内存超出了系统所给这个程式的内存空间,通常这个值是由gdtr来保存的,他是个48位的寄存器,其中的32位是保存由他指
向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程式是否在内存中及程式的在cpu中的运行级别,指向的gdt是由以64位为一个单位的
表,在这张表中就保存着程式运行的代码段及数据段的起始地址及和此相应的段限和页面交换更有程式运行级别更有内存粒度等等的信息。一旦一个程式发生了
越界访问,cpu就会产生相应的异常保护,于是segmentation
fault就出现了.
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的
1)访问系统数据区,尤其是往
系统保护的内存地址写数据
  
最常见就是给一个指针以0地址
2)内存越界(数组越界,变量类型不一致等)
访问到不属于你的内存区域
解决方法

们在用C/C++语言写程式的时侯,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是个比较繁琐的工作,无论你多高明,经验多丰富,难
免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。不过手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个
内存访问越界的错误谈谈怎么快速定位这些"段错误"的语句。
下面将就以下的一个存在段错误的程式介绍几种调试方法:
   
1  dummy_function (void)
   
2  {
   
3         
unsigned char *ptr = 0x00;
   
4         
*ptr = 0x00;
   
5  }
   
6
   
7  int main (void)
   
8  {
   
9         
dummy_function ();
    10
   
11         
return 0;
   
12  }
作为一个熟练的C/C++程式员,以上代码的bug应该是非常清晰的,因为他尝试操作地址为0的内存区域,而这个内存区域通常是不可访问的禁区,


相关文档:

Linux 设备驱动 Edition 3) workqueue


7.5. Tasklets 机制
上一页
 
第 7 章 时间, 延时, 和延后工作
 下一页
http://lsec.cc.ac.cn/~tengfei/doc/ldd3/index.html
Linux 设备驱动 Edition 3
7.5. Tasklets 机制
另一个有关于定时问题的内核设施是 tasklet 机制. 它大部分用在中断管理(我们将在第 10 章再次见到). ......

Linux device driver 3 笔记 之 内存映射

今天自己学习 Linux设备驱动程序 第三版 第15章 内存映射和DMA. 感觉有点吃力。主要是对内存映射很多术语和概念不是很清楚,理解起来有点费劲。
后来结合英文原版,静下心来仔细学习,才算是有了一点进展。
现在在这里做一个笔记,以备以后复习用。
低端内存和高端内存
书中的图15-1有点误导人。图中将 内核虚拟地址 和 ......

Linux 替换命令

  vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
  :s/vivian/sky/ 替换当前行第一个 vivian 为 sky
  :s/vivian/sky/g 替换当前行所有 vivian 为 sky
  :n,$s/vivian/sky/ 替换第 n 行 ......

Linux Windows 共享文件


samba实现ubuntu跟windows文件共享
一. Samba 简介
Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的;
大家知 ......

Linux x86 Dropbear SSH <= 0.34 remote root exploit

/*
* /*
* Linux x86 Dropbear SSH <= 0.34 remote root exploit
* coded by live
*
* You'll need a hacked ssh client to try this out. I included a patch
* to openssh-3.6.p1 somewhere below this comment.
*
* The point is: the buffer being exploited is too small(25 bytes) to hold our
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号