【发布时间】:2011-02-07 14:47:39
【问题描述】:
我被要求实现一个工具(用于 linux),它有助于 C/C++ 程序的内存管理。主要目标是追踪内存泄漏,但我也在检查 memcpy 的重叠参数等。
我实际上需要我的版本来拦截对这些函数的所有调用(例如来自其他库),所以我实际上需要覆盖它们。所以我不能使用所有帖子中建议的#define 技巧。我的问题是如何找到原始源文件名、调用函数和行号。
到目前为止,我唯一的想法是使用调试信息编译程序并开始深入研究目标文件(ELF,因为我使用的是 linux)。我从来没有玩过目标文件,我只知道汇编语言的基础知识,所以这似乎是一项艰巨的任务。
还有其他更简单的方法来实现这一点吗?如果没有做过类似工作的人可以帮助我开始:)?。
谢谢
【问题讨论】:
-
那么,你想写valgrind之类的东西吗?它是开源的,因此您可以查看他们是如何做到的。或者只是使用它。
-
请问为什么不用Valgrind?除非这是大学作业或类似的事情,否则我不明白为什么你应该实施已经完成并经过尝试和测试的东西。
-
是的,这是大学作业^^。但是谢谢你,我要检查 Valgrinds 的源代码,看看我能走多远:)。如果有人有任何更有用的指示,我仍然会感谢您的帮助。谢谢
-
对于
memcpy检查,您可以使用 GNU 链接器的--wrap选项将memcpy包装为检查其参数的函数。没有可移植的方法来包装或重新定义标准函数,这比其他方法更丑。您可能还需要-fno-builtin来防止 gcc 为某些memcpy调用生成内联代码。
标签: c linux malloc elf object-files