存档

‘跟踪调试’ 分类的存档

关于ELF的辅助向量

2013年2月5日 没有评论 6,984 次浏览

elf是Linux系统下最通用的可执行程序的文件格式,关于elf文件的加载与动态链接已很多的相关资料,而本文尝试着重介绍一下其中的一个点,即辅助向量(Auxiliary... [阅读更多]

如何追踪函数的完整调用过程

2013年2月5日 2 条评论 10,817 次浏览

何追踪函数的完整调用过程?对于软件编程人员来说,这一个有趣的话题,而在stackoverflow上就恰好有这么一个讨论,本文就对这个讨论里的内容进行一下实际操作与转述。 我们知道两个命令,ltrace和strace,其中ltrace用于追踪记录动态库函数的调用执行,而strace用于追踪记录系统调用函数的调用执行,看示例: #... [阅读更多]

64位Linux下的系统调用

2013年2月4日 没有评论 10,219 次浏览

AMD64,由AMD公司提出来的64位技术,由于它能很好的向下兼容32位,因此在与Intel公司的纯64技术IA64(即无法向下兼容)进行竞争的过程中占据着绝对的市场优势,当然,Intel公司不会自甘落后,因此也相继推出了IA32E(后被正式命名为EM64T,Extended... [阅读更多]

32位Linux下的系统调用

2013年2月4日 没有评论 6,663 次浏览

我们知道,Linux系统分为用户态和内核态,当用户态的应用程序请求执行内核态代码获取相关内核服务时,需要通过系统调用的形式来完成,比如利用系统调用getuid()请求获取执行程序的真实用户ID号。 当然,getuid()只是glibc封装的库函数,我们也可以直接通过syscall函数(这里是指glibc库里的syscall接口,请和后面文章将提到的syscall指令区分开)进行调用: #... [阅读更多]

systemtap初试用

2013年2月4日 1 条评论 14,895 次浏览

久闻systemtap工具的大名,之前也断断续续的看过它的介绍,并且利用CentOS发行版自带的systemtap相关命令试用过几次,感觉还算不错。本文将介绍一下systemtap的安装,以及对应用程序的追踪示例,不过,在此之前,先描述一下systemtap的背景知识以及相关资料。 在Solaris系统上,有一个大名鼎鼎的动态跟踪工具DTRACE,这一个相当棒的工具,曾荣获《华尔街杂志》2006技术创新大奖中的金奖,而在Linux上却没有对应的工具,当然,那是以前,因为我们已经知道,现在Linux上有了systemtap。 和ZFS文件系统一样,DTrace一直都因版权问题而无法移植到Linux上,但Oracle(SUN公司被Oracle收购)在2012年2月宣布发布DTrace... [阅读更多]

分类: *nix技术, 跟踪调试 标签:

gcc的编译过程及相关简介

2013年1月23日 没有评论 9,592 次浏览

我们知道,在平常编译程中所使用的gcc或g++只是一套工具集的外包封装,具体的编译工作并不是由gcc本身来完成的,而gcc为了完成整个编译工作,它直接或间接调用的工具主要包括预处理器/分析编译器/汇编器/连接器(preprocessor/parser-compiler/assembler/linker),比如cpp,cc1,cc1plus,as和ld等等。 如何查看gcc在编译过程的细节?这很简单,带上-v或-###参数(两者有差别,具体请看man手册:man... [阅读更多]

gcc中的weak和alias

2013年1月20日 没有评论 11,845 次浏览

在看glibc源代码的时候,能看到很多对函数的属性修饰,比如weak_alias(注:我当前看的是2.17版本的glibc源代码)宏里的weak和alias: /* Define ALIASNAME as a weak alias for NAME. If weak aliases are not... [阅读更多]

gcc选项-g与-rdynamic的异同

2013年1月13日 没有评论 16,774 次浏览

gcc的-g,应该没有人不知道它是一个调试选项,因此在一般需要进行程序调试的场景下,我们都会加上该选项,并且根据调试工具的不同,还能直接选择更有针对性的说明,比如-ggdb。-g是一个编译选项,即在源代码编译的过程中起作用,让gcc把更多调试信息(也就包括符号信息)收集起来并将存放到最终的可执行文件内。 相比-g选项,-rdynamic却是一个连接选项,它将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号,但不包括静态符号,比如被static修饰的函数)都添加到动态符号表(即.dynsym表)里,以便那些通过dlopen()或backtrace()(这一系列函数使用.dynsym表内符号)这样的函数使用。 看示例: #... [阅读更多]

分类: *nix技术, 跟踪调试 标签: , ,

利用GDB7.0的反向调试(reverse debug)特性调试程序

2013年1月11日 没有评论 6,160 次浏览

同事问到一个问题:假设a函数调用了b函数,并且当前执行点已经进入到b函数,如果想退到a函数来查看程序状态,是否有这样的调试工具?因为2010年在CU上写过一篇博客“利用GDB7.0的反向调试(reverse... [阅读更多]

read/write系统调用执行路径图解

2012年9月16日 4 条评论 11,392 次浏览

废话不说,给图一张。 ... [阅读更多]