软件取证:使用valgrind

在一个像SPIES这样庞大而复杂的程序里面,查找错误十分费时,所以C黑客写了一些帮助查错的工具。其中,有一个叫valgrind的工具,它用于Linux操作系统中。

valgrind通过伪造malloc()可以监控分配在堆上的数据。当程序想分配堆存储器时,valgrind将会拦截你对malloc()free()的调用,然后运行自己的malloc()free()valgrindmalloc()会记录调用它的是哪段代码和分配了哪段存储器。程序结束时,valgrind会汇报堆上有哪些数据,并告诉你这些数据是由哪段代码创建的。

软件取证:使用valgrind - 图1

准备好代码:添加调试信息

在使用valgrind运行代码前,你不需要做任何修改,甚至不需要重新编译代码。但为了发挥valgrind的最大威力,应当在可执行文件中包含调试信息。调试信息是编译时打包到可执行文件中的附加数据,比如某段代码在源文件中的行号。只要有调试信息,valgrind就能提供更多有助于发现存储器泄漏的信息。

为了在可执行文件中加入调试信息,需要加上-g开关,并重新编译源代码。

软件取证:使用valgrind - 图2

真相只有一个:审问代码

为了弄明白valgrind是如何工作的,我们在Linux命令行中打开它,用它审问几次SPIES程序。软件取证:使用valgrind - 图3

首先,我们用程序来辨认默认嫌疑犯Vinny the Spoon。在命令行启动valgrind,加上--leak-check=full选项,并把你想运行的程序传给valgrind

软件取证:使用valgrind - 图4