如何找出分配给哪个变量malloc()?

时间:2013-11-05 08:30:37

标签: c pointers gcc memory-management

我正在尝试通过指向探查器中的变量来跟踪malloc区域的使用情况。例如,对于函数func()中的以下赋值。

uint64_t *   dictionary = (uint64_t *) malloc(sizeof(uint64_t)*128);

我需要弄清楚指向malloc的内存区域的变量名称(在上面的例子中是'字典')。我检测了malloc()来记录分配的起始地址和大小。但是,仍然不知道变量'dictionary',我正在考虑检查函数func()的堆栈帧,找出指向与malloc类型匹配的数据类型的本地指针变量。该方法需要检测malloc()以返回一帧到func()以找出可能的局部变量,然后按类型进行模糊匹配。想知道是否有任何其他巧妙的方法来实现这一点。

1 个答案:

答案 0 :(得分:2)

总的来说,我认为这是不可能的。 :)

  • 当然,你不能假设变量 name 是可用的,一般来说最好的选择是(我猜)调用函数帧中的堆栈偏移量。如果调试符号可用,您可能也可以将其映射到名称。
  • 我猜可能 没有名字;在将(如果有的话)写入存储器之前,将返回地址放入寄存器并在那里进行操作。如果这意味着您的代码需要开始分析调用代码以跟踪它对返回值的作用,那听起来很难。

一旦隔离变量引用,您想对变量引用做什么?我假设你正在调试malloc()用于调试目的,所以你可能会将它存储在某个地方。