malloc()和free()在哪里存储分配的地址及其大小(Linux GCC)?我已经读过一些实现将它们存储在实际分配的内存之前的某个地方,但是在我的测试中我无法确认.
背景,也许有人有另一个提示:我正在尝试分析进程的堆内存,以确定另一个进程中字符串的当前值.访问进程堆内存并在其中漫步是没有问题的.但是,因为字符串的值发生了变化,并且进程每次都会分配内存的新部分,所以字符串的地址会发生变化.因为字符串有一个固定的格式,它仍然很容易找到,但经过一些更改后,旧版本的字符串仍然在堆内存中(可能已释放,但仍未被重用/覆盖),因此我无法分辨哪个字符串是当前字符串.
所以,为了仍然找到当前的那个,我想检查我在内存中找到的字符串是否仍然被使用,通过比较它的地址与malloc/free知道的地址.
ciao,Elmar
如果已知应用程序泄漏内存(执行时),那么在应用程序的源代码中找到此类内存泄漏错误的各种方法有哪些.
我知道某些解析器/工具(可能对代码进行静态分析)可以在这里使用但是有没有其他方法/技术可以做到这一点,特定于语言(C/C++)/平台?
给定指向malloc分配的内存块的指针,如何获得它的大小?
例如:
void* ptr = malloc( 10 ); //Allocate 10 bytes
printf( "%d", GetMemSize( ptr ) ); //Should print 10
Run Code Online (Sandbox Code Playgroud)
我想这样做是为了调试目的.
可能重复:
简单的C实现跟踪内存malloc/free?
我需要知道我在C程序中使用了多少内存,这里是伪代码
#include <stdio.h>
int usedMemory =0;
void *MyMalloc(int size){
usedMemory = usedMemory +size ;
return malloc(size);
}
void MyFree(void *pointer){
/*****************what should i write here????*************/
}
int main(int argc, char *argv[])
{
char *temp1= (char *)MyMalloc(100);
char *temp2= (char *)MyMalloc(100);
/*......other operations.........*/
MyFree(temp1);
MyFree(temp2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我在MyFree方法中写什么(减少从usedMemory释放的内存量.
任何对glibc malloc代码有一些基本想法的人都可以告诉我如何迭代所有竞技场并找出哪些是没有被释放的块,即它们的使用位被设置.我必须在退出流程时这样做.
要么
更确定的是,如果我们有一个竞技场,我们可以访问其中分配的第一个块吗?
感谢大家花时间回复.很长一段时间我发布了这个问题.'Phrack'在这些问题中列出了一些黑客技术.我受益于此.
问候,卡皮尔
现在,当我在块数组中打印每个元素时,每个元素都具有相同的地址.例如:
ints: 20 bytes stored at 0xbffa84fc
doubles: 80 bytes stored at 0xbffa84fc
chars: 8 bytes stored at 0xbffa84fc
Students: 1008 bytes stored at 0xbffa84fc
Run Code Online (Sandbox Code Playgroud)