文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
软件取证:使用 valgrind
在一个像 SPIES 这样庞大而复杂的程序里面,查找错误十分费时,所以 C 黑客写了一些帮助查错的工具。其中,有一个叫
valgrind 的工具,它用于 Linux 操作系统中。
valgrind 通过伪造 malloc() 可以监控分配在堆上的数据。当程序想分配堆存储器时,valgrind 将会拦截你对 malloc() 和 free() 的调用,然后运行自己的 malloc() 和 free() 。valgrind 的 malloc() 会记录调用它的是哪段代码和分配了哪段存储器。程序结束时,valgrind 会汇报堆上有哪些数据,并告诉你这些数据是由哪段代码创建的。
准备好代码:添加调试信息
在使用 valgrind 运行代码前,你不需要做任何修改,甚至不需要重新编译代码。但为了发挥 valgrind 的最大威力,应当在可执行文件中包含调试信息。调试信息是编译时打包到可执行文件中的附加数据,比如某段代码在源文件中的行号。只要有调试信息,valgrind 就能提供更多有助于发现存储器泄漏的信息。
为了在可执行文件中加入调试信息,需要加上-g 开关,并重新编译源代码。
真相只有一个:审问代码
为了弄明白 valgrind 是如何工作的,我们在 Linux 命令行中打开它,用它审问几次 SPIES 程序。
首先,我们用程序来辨认默认嫌疑犯 Vinny the Spoon。在命令行启动 valgrind ,加上--leak-check=full 选项,并把你想运行的程序传给 valgrind :
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论