gpt4 book ai didi

从外部程序计算使用 malloc() 分配的 block

转载 作者:IT王子 更新时间:2023-10-29 01:22:26 27 4
gpt4 key购买 nike

我想写一个“简单的”内存泄漏检查器。

为了做到这一点,我需要计算程序中 malloc()ed 内存块的数量,但问题是我不想修改它的来源。

换句话说,我想实现以下接口(interface):

memory_check <executable name>

我无权访问可执行文件的源代码。

首先我应该尝试拦截系统调用。但我读到“So malloc doesn't invoke any syscall?”,它似乎不是一个主意,还因为它会极大地降低所有系统的速度(正如我所想的那样)。

是否有任何其他选项可以拦截 malloc() 调用?

最佳答案

如果您愿意将界面更改为 LD_PRELOAD=mymalloc.so <executable>你可以这样做:

  • 创建一个共享库
    • 获取 malloc 的句柄使用 dlsym
    • 公开一个外部void *malloc(size_t size)
    • 调用真实malloc通过上面获取的句柄,同时存储你的调试信息

然后:

  • 调用程序 LD_PRELOAD=mymalloc.so ./program
  • 该程序会自动调用您的“被劫持”版本的malloc

编辑

如果你不想改变你的界面但想使用这个技巧你可以制作一个包装程序 fork(2) s,设置LD_PRELOAD然后使用它的名称执行您的真实程序。

关于从外部程序计算使用 malloc() 分配的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183547/

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