18

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

背景,也许有人对此有另一个提示:

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

因此,为了仍然找到当前的字符串,我想通过将其地址与地址进行比较malloc()free()了解是否仍在使用我在内存中找到的字符串。

ciao,埃尔玛

4

2 回答 2

15

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

要了解 Linux 中的 C 库 (glibc) 是如何做到这一点的,请从http://ftp.gnu.org/gnu/glibc/获取源代码并查看该malloc/malloc.c文件。顶部有一些文档,它指的是 Doug Lea 的A Memory Allocator

于 2009-05-12T09:40:22.533 回答
1

当然,这取决于标准库的实现。所以你最好的选择可能是挖掘库的源代码(glibc是 Linux 上的默认值),看看你是否能弄清楚。这可能不会是微不足道的。

于 2009-05-12T09:41:15.480 回答