【问题标题】:Implementing tool that tracks down C memory errors, finding where my overrided malloc etc is called from跟踪 C 内存错误的实现工具,查找从何处调用我的覆盖 malloc 等
【发布时间】: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


【解决方案1】:

由于您使用的是 Linux,您可以使用 glibc 的 malloc hook support. 该页面上还提供了一个工作示例。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 2011-06-08
    • 2014-08-30
    • 1970-01-01
    • 2010-12-13
    • 2014-01-15
    • 2016-02-10
    • 2012-12-23
    • 2011-01-03
    相关资源
    最近更新 更多