gpt4 book ai didi

c++ - 在 C++ 中查找大内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:09 27 4
gpt4 key购买 nike

如果没有 valgrind,我如何找到分配大块内存的位置(例如 malloc?)是否可以为大内存分配设置 gdb 断点?

我不能使用 valgrind,因为某些依赖库禁止使用 valgrind(会导致 valgrind 崩溃,因为它无法识别其特殊堆栈)

最佳答案

共享库插入器可以很好地完成工作。 Here是一篇出色的文章,它完美地举例说明了您的需求。

如果函数在共享库中,则可以指示运行时链接器调用另一个“插入”函数。中介层可以完全取代功能,也可以增强功能。一个很好的例子是 malloc 系列函数。在您的情况下,您可以让插入器检查 malloc 大小并采取特殊措施。 gdb 可用于在 interpose 库本身中放置断点,因此您可以在特殊逻辑上放置断点以满足您的要求。

Interposers 仅适用于共享 (.so) 库。静态 (.a) 库直接链接到可执行文件中,调用不容易被拦截。 malloc 系列通常从 Linux 中的分片库链接,因此这对您来说应该不是问题。

Linux 的所有主要版本都支持使用 LD_PRELOAD 功能的插入器。

关于c++ - 在 C++ 中查找大内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com