存档

文章标签 ‘调试’

利用gdb在汇编指令级调试C程序

2012年5月30日 没有评论 11,082 次浏览

关于GDB调试C程序的常用命令与手段就不多说了,这里主要介绍一下如何对C程序做到汇编指令级别的调试。 首先是获取汇编代码,这可以通过disassemble命令或x命令或类似的命令: # gdb ./a.out... [阅读更多]

利用KVM调试内核

2012年5月12日 1 条评论 9,001 次浏览

虽然kvm运行的虚拟机也是host的一个进程,但是却不能像UML那样直接gdb attach到对应的进程进行调试,毕竟kvm和uml完全不同,如果那样做的话,你会发现你attach的只是qemu-system-x86进程: (gdb)... [阅读更多]

Linux下逆向工具

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

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

踩内存检测

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

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