博客首页
注册
建议与交流
排行榜
加入友情链接
推荐
投诉
搜索:
帮助
飞翔,嵌入式linux
linux嵌入式系统必将大行于天下。专注于linux嵌入式系统的搭键,专注于高效稳定软件的开发,专注底层程序调试技术。
feixiang.cublog.cn
管理博客
发表文章
留言
收藏夹
· 嵌入式资源
}
· 技术文章
· Arm资源
· 技术博客
· linux论坛及网站
}
· 技术文章
· 电子图书
· 技术文章
· 调试工具
}
· 技术文章
· LFS讨论区
博客圈
音乐
相册
文章
· Android
· 邮件服务器
· 硬件
· 关注性能
· 内存管理
· 嵌入式平台
}
· BootLoader
· 交叉编译工具链
}
· glibc
· gcc
· FLASH
· 底层调试技术
· Linux平台技术分析
· 程序设计
· 个人观点
· linux基础知识
· 软件工程
· VC
· License
首页
关于作者
姓名:飞翔 Email:loughsky@sina.com 职业:IT 年龄:32 位置:北京 个性介绍:专注在嵌入式操作系统,以及高效程序调试
||
<<
>>
||
我的分类
文章列表 - 底层调试技术
Linux下的段错误产生的原因及调试方法
<DIV>而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.<BR><BR>一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒……
查看全文
发表于:2007-08-22 ┆
阅读(876)
┆
评论(0)
对core文件资料的收集整理
<DIV> <P>//---------------------------------------------------------------<BR>1. core文件的简单介绍<BR>//---------------------------------------------------------------</P> <P>在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。</P> <P><BR>//---------------------------------------------------------------<BR>2. 开启或关闭core文件的生成<BR>//---------------------------------------------------------------</P> <P>用以下命令来阻止……
查看全文
发表于:2007-08-17 ┆
阅读(837)
┆
评论(0)
Linux core dump file
<DIV>1. 前言:<BR>有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.<BR>但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.<BR><BR>2. gdb:<BR>有一种办法是, 我们用gdb的step, 一步一步寻找. <BR>这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员.<BR>我们还有更好的办法, 这就是core file.<BR><BR>3. ulimit:<BR>如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下……
查看全文
发表于:2007-08-17 ┆
阅读(1180)
┆
评论(0)
ld中文使用手册完全版(译)-
<DIV>文档介绍GNU连接器ld的2.14版本. <P>本文档在GNU自由文档许可证下发行.在"GNU自由文档许可证"一章中有关于本许可证的一份拷贝.</P> <P>概述<BR>********</P> <P>'ld'把一定量的目标文件跟档案文件连接起来,并重定位它们的数据,连接符号引用.一般,在编译一个程序<BR>时,最后一步就是运行'ld'.</P> <P>'ld'能接受连接命令语言文件,这是一种用AT&T的连接编辑命令语言的超集写成的文件,用来在连接的整个<BR>过程中提供显式的,全局的控制.</P> <P>本版本的'ld'使用通用BFD库来操作目标文件.这就允许'ld'读取,合并,写入目标文件时……
查看全文
发表于:2007-08-10 ┆
阅读(876)
┆
评论(0)
关于突破glibc中 injectso的限制
<DIV>在前面的文章提到了,glibc为了防止injectso,做了一些补丁,来判断调用的地址必须来自libdl。采用injectso的方法,如果调用glibc的函数是可以,前面已经做过运行mtrace的例子。但是这样的用处不大。</DIV> <DIV> </DIV> <DIV>只有能够自己形成so文件,并且调用,这样才能做很多事情。</DIV> <DIV>有两个想法:</DIV> <DIV>1 有的程序编译过程中直接包含了libdl库,那么我们争取使用调用dl_open的方法,来启动so库。那么我们必须找到libdl的源码,来查看它是如何传参数的。</DIV> <DIV> </DIV> <DIV>2 如……
查看全文
发表于:2007-04-22 ┆
阅读(797)
┆
评论(0)
使用ptrace 截获系统调用
<DIV>这两天正在书写,内存分析软件,今天刚刚完成,计划分为3个层面,一个是通过/proc/pid/stat信息,显示出操作系统级别,物理内存使用曲线;一个是截获有管内存分配的系统调用,获得虚拟内存使用曲线;一个是获得malloc等的日志,来获得具体内存使用情况。</DIV> <DIV> </DIV> <DIV>在截获有关内存分配的系统调用时:</DIV> <DIV>brk,和mmap的参数传递很简单,他们都是通过寄存器来传递参数</DIV> <DIV> m_sys->param[0] = ptrace(PTRACE_PEEKUSER,pid, 4 * 0,NULL);<BR>&nbs……
查看全文
发表于:2007-04-18 ┆
阅读(1113)
┆
评论(6)
injectso dl_open失败分析
<DIV>injectso技术应该是比较成熟的技术,但看其相关的文档却大多是前几年的。</DIV> <DIV>我按照injectso教程里面讲述的方式,实验了一下,却报出了下面的错误。<BR>error while loading shared libraries: dlopen: invalid caller</DIV> <DIV>按原来的文档,_dl_open的参数caller,是无关紧要的,设置为0。实际上看来并非如此。</DIV> <DIV>查看了glibc的代码,也没有发现能够报invalid caller的地方,最后,找到了一个patch。<BR><A href="http://www.filewatcher.com/p/compat-glibc-2.3.2-95.30.src.rpm.14008569/glibc-execstack……
查看全文
发表于:2007-04-17 ┆
阅读(772)
┆
评论(0)
覆盖 GNU C 库 ― 轻而易举
<DIV> <BLOCKQUOTE>一种调试 glibc 函数的好方法是用您自己的版本覆盖所关注的函数。在没有root 许可权和不必重新编译 libc 源代码的情况下就可以完成这个任务。想象一下编写您自己的 <CODE><FONT face=新宋体>open()</FONT></CODE> 版本该有多激动啊! </BLOCKQUOTE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> <P>如果您没有应用程序的源代码并且由……
查看全文
发表于:2007-04-13 ┆
阅读(741)
┆
评论(0)
在不更動原始程式碼的前提下修改動態程式庫
<DIV> <DIV>源文:<A href="http://www.linuxjournal.com/article/7795">http://www.linuxjournal.com/article/7795</A></DIV> <DIV> </DIV> <DIV>Modifying a Dynamic Library Without Changing the Source Code / 在不更動原始程式碼的前提下,修改動態程式庫<BR>By Greg Kroah-Hartman / 繁體中文翻譯: Jim Huang (黃敬群) - jserv AT kaffe.org -<BR>Created 2004-11-02 00:00 / 繁體中文翻譯時間: 2005-01-16<BR>透過 LD_PRELOAD 環境變數來置放你自己的程式碼,是很簡單的動作<BR><BR>有時候你或許會想知道,在未修改程式帯
查看全文
发表于:2007-04-13 ┆
阅读(674)
┆
评论(0)
injectso可以让我们做很多事情,应该好好学习
<DIV> </DIV> <DIV>SHARED LIBRARY CALL REDIRECTION VIA ELF PLT INFECT</DIV> <DIV><A href="http://racl.oltrelinux.com/tutorial/p56-0x07.pdf">http://racl.oltrelinux.com/tutorial/p56-0x07.pdf</A></DIV>
查看全文
发表于:2007-04-13 ┆
阅读(585)
┆
评论(0)