代码之家  ›  专栏  ›  技术社区  ›  Elmar Weber

malloc()/free()在哪里存储分配的大小和地址?

  •  14
  • Elmar Weber  · 技术社区  · 17 年前

    你在哪里 malloc() free() 存储分配的地址及其大小(Linux GCC)?我已经读到一些实现将它们存储在实际分配内存之前的某个位置,但在测试中我无法确认这一点。

    我正在尝试分析一个进程的堆内存,以确定另一个进程中字符串的当前值。 访问进程堆内存并遍历它不是问题。但是,由于字符串的值会发生变化,并且进程每次都会分配新的内存部分,因此字符串的地址会发生变化。因为字符串有固定的格式,所以仍然很容易找到,但是经过一些更改后,字符串的旧版本仍然在堆内存中(可能已释放,但仍然没有重用/覆盖),因此我无法判断哪个字符串是当前字符串。

    因此,为了仍然找到当前的字符串,我想通过比较内存中找到的字符串的地址和地址来检查它是否仍在使用 malloc() 免费的

    埃尔玛

    2 回复  |  直到 4 年前
        1
  •  15
  •   user25148 user25148    17 年前

    malloc/free可以通过多种方式存储内存区域的大小。例如,它可能存储在malloc返回的区域之前。或者它可能存储在其他位置的查找表中。或者它可能被隐式存储:一些区域可能被保留用于特定大小的分配。

    http://ftp.gnu.org/gnu/glibc/ malloc/malloc.c 文件顶部有一些文档,它引用了 A Memory Allocator

        2
  •  1
  •   unwind    17 年前

    当然,这取决于标准库的实现。所以你最好的选择可能是挖掘图书馆的来源( glibc 是Linux上的默认设置)并查看您是否能够解决它。这可能不会是一件小事。