黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 操作系统 >> LINIX UNIX >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]Linux系统中找出并解决程序错误方法
      ★★★

Linux系统中找出并解决程序错误方法

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-11-14 9:58:23

  YAMD

  YAMD 软件包由 Nate Eldredge 编写,可以查找 C 和 C++ 中动态的、与内存分配有关的问题。在撰写本文时,YAMD 的最新版本为 0.32。请下载 yamd-0.32.tar.gz(请参阅参考资料)。执行 make 命令来构建程序;然后执行 make install 命令安装程序并设置工具。

  一旦您下载了 YAMD 之后,请在 test1.c 上使用它。请删除 #include memwatch.h 并对 makefile 进行如下小小的修改:使用 YAMD 的 test1。

CODE:gcc -g test1.c -o test1

  清单 3 展示了来自 test1 上的 YAMD 的输出。

CODE:YAMD version 0.32 
Executable: /usr/src/test/yamd-0.32/test1 
... 
INFO: Normal allocation of this block 
Address 0x40025e00, size 512 
... 
INFO: Normal allocation of this block 
Address 0x40028e00, size 512 
... 
INFO: Normal deallocation of this block 
Address 0x40025e00, size 512 
... 
ERROR: Multiple freeing At 
free of pointer already freed 
Address 0x40025e00, size 512 
... 
WARNING: Memory leak 
Address 0x40028e00, size 512 
WARNING: Total memory leaks: 
1 unfreed allocations totaling 512 bytes 

*** Finished at Tue ... 10:07:15 2002 
Allocated a grand total of 1024 bytes 2 allocations 
Average of 512 bytes per allocation 
Max bytes allocated at one time: 1024 
24 K alloced internally / 12 K mapped now / 8 K max 
Virtual program size is 1416 K 
End.

清单 3. 使用 YAMD 的 test1 输出

  YAMD 显示我们已经释放了内存,而且存在内存泄漏。让我们在清单 4 中另一个样本程序上试试 YAMD。

CODE:#include "STDLIB.H" 
#include "STDIO.H" 

int main(void) 
{ 
char *ptr1; 
char *ptr2; 
char *chptr; 
int i = 1; 
ptr1 = malloc(512); 
ptr2 = malloc(512); 
chptr = (char *)malloc(512); 
for (i; i <= 512; i++) { 
chptr = 'S'; 
} 
ptr2 = ptr1; 
free(ptr2); 
free(ptr1); 
free(chptr); 
}

清单 4. 内存代码(test2.c)

  您可以使用下面的命令来启动 YAMD:

CODE:./run-yamd /usr/src/test/test2/test2

  清单 5 显示了在样本程序 test2 上使用 YAMD 得到的输出。YAMD 告诉我们在 for 循环中有“越界(out-of-bounds)”的情况。

CODE:Running /usr/src/test/test2/test2 
Temp output to /tmp/yamd-out.1243 
********* 
./run-yamd: line 101: 1248 Segmentation fault (core dumped) 
YAMD version 0.32 
Starting run: /usr/src/test/test2/test2 
Executable: /usr/src/test/test2/test2 
Virtual program size is 1380 K 
... 
INFO: Normal allocation of this block 
Address 0x40025e00, size 512 
... 
INFO: Normal allocation of this block 
Address 0x40028e00, size 512 
... 
INFO: Normal allocation of this block 
Address 0x4002be00, size 512 
ERROR: Crash 
... 
Tried to write address 0x4002c000 
Seems to be part of this block: 
Address 0x4002be00, size 512 
... 
Address in question is at offset 512 (out of bounds) 
Will dump core after checking heap. 
Done.

清单 5. 使用 YAMD 的 test2 输出

  MEMWATCH 和 YAMD 都是很有用的调试工具,它们的使用方法有所不同。对于 MEMWATCH,您需要添加包含文件 memwatch.h 并打开两个编译时间标记。对于链接(link)语句,YAMD 只需要 -g 选项。

  Electric Fence

  多数 Linux 分发版包含一个 Electric Fence 包,不过您也可以选择下载它。Electric Fence 是一个由 Bruce Perens 编写的 malloc() 调试库。它就在您分配内存后分配受保护的内存。如果存在 fencepost 错误(超过数组末尾运行),程序就会产生保护错误,并立即结束。通过结合 Electric Fence 和 gdb,您可以精确地跟踪到哪一行试图访问受保护内存。Electric Fence 的另一个功能就是能够检测内存泄漏。

上一页  [1] [2] [3] [4] [5] [6] 下一页

文章录入:sygbox    责任编辑:sygbox 
【字体:
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886