怎么了? XXX!yyyyyyyyyy + zzz意味着!heap -flt的输出

时间:2012-04-23 14:51:11

标签: c++ debugging windbg memory-dump

我正在分析一些用户模式内存转储以尝试追踪泄漏,我有一些漏洞,但是当我运行!heap -flt时,我继续在转储中看到这些条目s xx命令。

    14a8bd58 0006 0006  [07]   14a8bd60    00018 - (busy)
    14a8bd88 0006 0006  [07]   14a8bd90    00018 - (busy)
    14a8bdf8 0006 0006  [07]   14a8be00    00018 - (busy)
    14a8bf48 0006 0006  [07]   14a8bf50    00018 - (busy)
      ? SomeModule!SomeFunction+1bdf4

我得到了什么

    14a8bd58 0006 0006  [07]   14a8bd60    00018 - (busy)

是行,但我不确定行是什么

      ? SomeModule!SomeFunction+1bdf4

真的很有意思。使用堆跟踪的+ ust标志捕获这些转储。

2 个答案:

答案 0 :(得分:4)

他们只是提供符号信息,以便读者更有用地找到来源的相应部分。

在Windows下,进程的虚拟地址空间由一组模块填充。每个模块由基地址和大小组成。因此,有时会显示此信息的另一种方式是Module + Relative Offset

模块可以包含功能。在符号表完好无损的情况下,可以找到相对偏移量(进入模块)和这些函数的大小。转储只是以更易于阅读的格式显示此信息。

答案 1 :(得分:3)

SomeModule是可执行模块的名称。

SomeFunction是从正在执行的模块导出的函数的名称。

+1bdf4是从该函数的开头以十六进制表示的偏移量。

此示例中的偏移值非常大,这可能意味着缺少模块的符号表,并且相对于具有已知名称的最近函数(通常是导出的函数)显示偏移量。