-1

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

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

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

4

1 回答 1

2

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

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

隔离变量引用后,您想对它做什么?我假设您正在malloc()为调试目的进行检测,因此您可能会将其存储在某个地方。

于 2013-11-05T08:47:08.347 回答