存档

作者存档

关于ELF的辅助向量

2013年2月5日 没有评论 7,389 次浏览

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

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

2013年2月5日 2 条评论 11,065 次浏览

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

64位Linux下的系统调用

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

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

32位Linux下的系统调用

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

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

systemtap初试用

2013年2月4日 1 条评论 15,162 次浏览

久闻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,793 次浏览

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

gcc中的weak和alias

2013年1月20日 没有评论 12,123 次浏览

在看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日 没有评论 17,063 次浏览

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

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

nginx与正向代理

2013年1月12日 5 条评论 11,760 次浏览

对于nginx的介绍,往往都会以这么一句评价作为开头:nginx,是一个功能强大的高性能Web和反向代理服务器,……。那么,作为反向代理概念的另一面,正向代理,nginx是否同样支持呢?在解答这个问题之前,需要先搞清楚何谓正向代理,何谓反向代理以及它们之间的联系与差别。 在计算机网络领域,代理服务器也就是充当相互通信双方(按通信请求方client以及通信服务方server两种角色划分)的中间功能媒介的角色,而正向代理和反向代理,只不过是用于对代理服务器在充当中间功能媒介的不同类别的更进一步划分(除了正向代理和反向代理,还有其他类别,具体请看参考1)。即,如果代理服务器充当的是相互通信双方中的client角色,那么就是正向代理。图示如下(来之参考2): 与此相对,如果代理服务器充当的是相互通信双方中的server角色,那么就是反向代理。图示如下(来之参考2): 对此,我们需搞清楚两个问题: 1,所谓正向反向,这个方向性是相对相互通信双方中的client端而言的。 2,要判断一个代理服务器是正向代理还是反向代理,只需检查它在原始双方通信过程中代表着哪一方,替谁干活。 代理服务器的功能有很多,比如在做正向代理时,可以用于代理共享上网,翻(河蟹)墙,掩藏身份(在网易评论里换个火星IP地址,囧)等等;做反向代理时,隐藏服务器端,统一控制,防范攻击,提高服务性能等等。 回到本文的正题:nginx是否支持正向代理? 早在4年前,Igor已经给出了答案:不支持,并且也没有打算在短期内支持。原因是:已经有了非常优秀的正向代理软件,例如squid。 虽然如此,但nginx对正向代理的有限支持还是可以有的,比如对HTTP正向代理的支持(即不支持HTTPS),示例如下(参考2)。 1,编译nginx: #... [阅读更多]

分类: nginx, 源码分析 标签: ,

nginx对Linux native AIO机制的应用(实现篇)

2013年1月12日 没有评论 9,390 次浏览

从前面文章已经了解到,在Linux系统上,要使用native... [阅读更多]