gpt4 book ai didi

debugging - 为什么Windbg的dpp命令输出未对齐的地址值

转载 作者:行者123 更新时间:2023-12-02 22:39:48 25 4
gpt4 key购买 nike

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

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

我用VC2015,32位调试版编译,加载到Windbg for win7中。我在“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
... ...

Well, my question is, when "dpp" command prints out, why some lines prints out 1 dword value, sometimes 2 dword values.

是否有任何迹象表明“dpp”如何真正工作和打印?

最佳答案

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

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

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

dpp visualized

关于debugging - 为什么Windbg的dpp命令输出未对齐的地址值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com