存档

‘跟踪调试’ 分类的存档

利用error指令判断宏是否已定义

2012年2月24日 没有评论 5,670 次浏览

Linux下特别的东西特别的多,比如说宏定义,看Linux内核代码,无数个宏开关,当然,这并不是Linux的过错,要知道Linux内核特性的开启与否都要靠这些宏定义。 在判断一个宏定义是否开启时,各人有各人的办法,最简单的当然是直接看代码,但这不一定准确,因为有可能此处define的宏在别处又undef了,在代码实际用到这个宏的地方,这个宏到底是否还存在呢?所以,最保险的方法就是在实际用到这个宏的地方做判断,此时可利用error指令,在编译时就可以准确判断出结果,直接看示例: #... [阅读更多]

利用pktgen发包工具做性能测试

2012年2月22日 6 条评论 17,870 次浏览

专业的发包仪器非常不错,比如思博伦通信Smartbits测试设备,但唯一的缺点就是太贵,而这个唯一的缺点又不是那么容易克服。还好,伟大的Linux为我们提供了一个先进的发包工具pktgen(http://www.linuxfoundation.org/collaborate/workgroups/networking/pktgen、http://lxr.linux.no/#linux+v2.6.38.8/Documentation/networking/pktgen.txt、ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/),这个工具以内核模块的形式存在,理论上性能应该比同等运行在应用层的工具性能要好,而且还是所谓的多核支持(的确是实打实),下面测试一下(临时用自己家里电脑上的虚拟机搭的环境,以便能够虚拟出需要的多个网卡来,不在意测试结果,而是这个测试过程)。 1,首先加载这个模块,当然需要先确定已经编译了它,加载成功后就会有对应的/proc接口,pktgen是每一个cpu绑定一个内核线程,我的虚拟机有4个cpu,所以这里可以看到4个kpktgend_*文件: #... [阅读更多]

加了-g选项仍然无调试符号

2012年2月16日 没有评论 7,468 次浏览

看标题像是一个很怪异的问题,其实只是一个小失误导致。 今天下午,一同事过来说,已经加了-g选项进行编译,但gdb调试仍然提示无调试符号。我过去看看,先输入make... [阅读更多]

Linux下逆向工具

2012年1月12日 2 条评论 11,819 次浏览

Windows下有很多逆向工具,Linux下也有,当然,和Windows平台有所不同的是,Linux下的逆向工具主要是用来定位和分析程序的问题,比如当应用程序崩溃之后,如何从core文件里给出的信息查出原因所在。 曾经用过的一些命令如下(只列出主要功能): addr2line:根据一个代码地址,定位到对应的源文件与代码行。 nm:列出程序里的符号。 objdump:反汇编。 readelf:显示任何ELF格式目标文件里的相关符号信息。 等等。 #... [阅读更多]

踩内存检测

2011年12月1日 2 条评论 11,456 次浏览

众所周知,踩内存是一个非常麻烦的问题,不管是在应用层或是内核层,关于踩内存的检测也有各种各样的工具,比如应用层的优秀开源valgrind,内核内置的kmemcheck等。关于这些工具的具体信息就不在这里做进一步描述了,本文主要简单介绍一下几种踩内存工具的工作原理。 一种最为简单的踩内存工具为通过给分配的内存前后多加上一小块内存,用于存放我们预先设定的值,比如Crc和Magic: 不管是应用程序(App)或是内核模块(Module),它们分配内存都是利用我们重载过的接口(malloc或kmalloc或new或其它等),这些接口分配比实际请求要大一点的内存,以便在前和后能空留出一个或几个字节存放检测值(也就是前面提到的Crc和Magic)。Magic可以是我们预先指定的特定值,比如0xC0,而Crc可以是某些条件(比如当前请求内存分配的进程的id、名、代码行等)的crc值。应用程序或是内核模块释放内存同样也是利用我们重载过的接口(free或kfree或delete或其它等),在这些接口里就可以做踩内存检测,如果发现Magic不再是我们预先指定的特定值,比如0xC0,则表示该块内存被踩了,而Crc呢?虽然没有固定的值,但也可以通过做同样的计算后做对比检测,或者我们还可以提前在分配内存时把这些值记录下来,比如可以设置一个hash表,把App... [阅读更多]

kgtp使用总结

2011年11月22日 没有评论 7,707 次浏览

kgtp使用总结 1,介绍: Kgtp项目主页是:http://code.google.com/p/kgtp/ 如其项目主页所描述,Kgtp是一个实时且轻量级的Linux跟踪内核调试工具。也许说是一个内核跟踪调试接口更合适,通过它来连通内核和GDB,使得GDB可以对内核进行跟踪调试。GDB既可以是在本机,也可以在另外一台机器上,甚至还可以进行离线调试,而这些感觉应该都是GDB本身提供的Targets、Trace... [阅读更多]