【问题标题】:Why Windbg's dpp command output un-aligned address values为什么 Windbg 的 dpp 命令输出未对齐的地址值
【发布时间】:2016-09-05 03:29:52
【问题描述】:

我有一个非常简单的程序来测试 Windbg 的 dp 和 dpp 命令差异:

int main()
{
    int i = 0;
    i += 2;
    int& j = i;
    j += 4;
    int *pi = &i;
    *pi += 3;
    return 0;
}

我用VC2015编译,32位调试版,加载到Win7的Windbg中。我在“return 0”处设置了一个断点并观察所有值:

0:000> dv /v
0042fd64                     argc = 0n1
0042fd68                     argv = 0x0067e0d8
0042fd24                       d2 = class DerivedTwo
0042fd54                        i = 0n9
0042fd48                        j = 0x0042fd54
0042fd3c                       pi = 0x0042fd54
0042fd30                       d1 = class DerivedOne

0:000> dp 0042fd54
0042fd54  00000009 cccccccc 0042fd70 0016214e
0042fd64  00000001 0067e0d8 0067b3e0 0042fdc8
0042fd74  00161fb0 d50638fc 00000000 00000000
0042fd84  7efde000 00000000 00000000 00000000
0042fd94  00000000 7752299d 00000000 5c35a008
0042fda4  001696ec 001696f8 000034fa 0042fd78
0042fdb4  8933efa7 0042fe14 00163b50 d5524414
0042fdc4  00000000 0042fdd0 00161e4d 0042fdd8

没问题,显示“pi”指向地址为0042fd54的“i”,所以我尝试使用“dpp”查看windbg是否正确解释指针类型:

0:000> dpp 0042fd54
0042fd54  00000009
0042fd58  cccccccc
0042fd5c  0042fd70 0042fdc8
0042fd60  0016214e 5d0cc483
0042fd64  00000001
0042fd68  0067e0d8 0067e0e0
0042fd6c  0067b3e0 0067ef18
0042fd70  0042fdc8 0042fdd0
0042fd74  00161fb0 e8d44589
0042fd78  d50638fc
0042fd7c  00000000
0042fd80  00000000
... ...

好吧,我的问题是,当“dpp”命令打印出来时,为什么有些行打印出 1 个 dword 值,有时是 2 个 dword 值。

是否有任何迹象表明“dpp”实际上是如何工作和打印的?

【问题讨论】:

  • 你期望为 00000009 和 cccccccc 打印什么?如果地址不可访问,则无法打印内存中的内容。

标签: debugging pointers windbg


【解决方案1】:

dpp 显示从给定地址开始并打印以下内容:

  • 第 1 列:地址,从起始地址开始,指针大小递增(32 位为 4,64 位为 8)
  • 第 2 列:该地址处的内存内容,也以指针大小表示(如 dp <address> L1
  • 第 3 列:如果该地址的内容又是一个有效地址,则将其解释为地址并再次显示该地址的内容。如果它不是有效地址,则不显示任何内容(不像 dp <invalid address> L1 会显示 ????????

当我从 WinDbg 的帮助中找到我不完全理解的命令时,我将结果可视化如下。这至少有助于弄清楚前两列的含义。

【讨论】:

  • 这是一个很好的答案。非常感谢。
猜你喜欢
  • 2011-01-13
  • 2010-12-10
  • 2012-02-07
  • 1970-01-01
  • 2015-04-27
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多