【问题标题】:How does GDB know where the heap is allocatedGDB如何知道堆分配在哪里
【发布时间】:2023-01-12 06:25:46
【问题描述】:

在 GDB 中,运行 info proc mappings 会转储目标的地址空间,包括堆。我的问题是,GDB如何知道堆分配在哪里?显然,malloc 之类的东西返回一个地址,但它没有指定确切的堆起始地址或其分配的大小。

【问题讨论】:

    标签: gdb heap


    【解决方案1】:

    在 Linux 上调试实时进程时,GDB 的 info proc mappings 命令解析 /proc/pid/maps 文件——其中包含进程内存区域的详细信息——然后格式化并显示信息。如果路径名地图文件中条目的字段显示[heap],这就是 GDB 将显示的内容。

    Linux 内核的implementation/proc/pid/maps 将在对应于包含称为地址的内存区域的行上显示 [heap]休息,历史上一直是数据段的顶部。中断可以通过使用移动到更高或更低的地址sbrk系统调用。

    glibc的分配使用堆进行小的分配,但对于较大的分配它调用mmap匿名支持。您可以在映射文件中看到这些内存区域;他们没有路径名场地。

    我写了一个小程序,它调用分配分配各种大小的内存空间,然后显示每个分配所在的内存区域。这是我对Can't search into heap using gdb的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 2016-11-04
      • 2014-06-01
      • 1970-01-01
      • 2017-10-09
      • 2010-10-14
      相关资源
      最近更新 更多