十六进制地址上的windbg dd命令给出???问号

十六进制地址上的windbg dd命令给出???问号,windbg,Windbg,当我对十六进制地址a66e920执行dd命令时,WINDBG中的以下输出意味着什么 0:001> dd a66e920 00000000`0a66e920 ???????? ???????? ???????? ???????? 00000000`0a66e930 ???????? ???????? ???????? ???????? 00000000`0a66e940 ???????? ???????? ???????? ???????? 00000000`0a66e950 ???

当我对十六进制地址a66e920执行dd命令时,WINDBG中的以下输出意味着什么

0:001> dd a66e920
00000000`0a66e920  ???????? ???????? ???????? ????????
00000000`0a66e930  ???????? ???????? ???????? ????????
00000000`0a66e940  ???????? ???????? ???????? ????????
00000000`0a66e950  ???????? ???????? ???????? ????????
00000000`0a66e960  ???????? ???????? ???????? ????????
00000000`0a66e970  ???????? ???????? ???????? ????????
00000000`0a66e980  ???????? ???????? ???????? ????????
00000000`0a66e990  ???????? ???????? ???????? ???????
这是否意味着十六进制地址为空? 我是windbg的新手:

下面是我们的代码片段,重命名了变量、函数和结构名称以保护隐私,它在访问hb->buck_magic时崩溃,因为hb无效

`#define BUCK_MAGIC 0x4255434b  /* "BUCK"   */

typedef struct {
   Card     buck_magic;
   Card     buck_size;
   Card     buck_used;
   List_obj **  buck_list;
} Bucket;



static Bucket *bucket_get( Ptr d )
{
   Bucket *hb;
   hb = *(Bucket **)d;
   
   if ( hb->buck_magic == BUCK_MAGIC ) return(hb);
   return(0);

}` 

崩溃的最新帧输出:

0:001> 
00000000`012af220 char * d = 0x00000000`09630580 "???"
00000000`012af200 struct Bucket * hb = 0x00000000`0a103b80

0:001> dx -r1 ((code_bin!Bucket *)0xa103b80)
((code_bin!Bucket *)0xa103b80): 0xa103b80 [Type: Bucket *]
    [+0x000] buck_magic : Unable to read memory at Address 0xa103b80
    [+0x004] buck_size  : Unable to read memory at Address 0xa103b84
    [+0x008] buck_used  : Unable to read memory at Address 0xa103b88
    [+0x010] buck_list  : Unable to read memory at Address 0xa103b90
    
0:001> dx -r1 ((code_bin!char *)0x9630580)
((code_bin!char *)0x9630580): 0x9630580 : "???" [Type: char *]

0:001> dd 09630580
00000000`09630580  0a103b80 00000000 0a1253c0 00000000
00000000`09630590  09197bb0 00000000 06d7f980 00000000
00000000`096305a0  091afa30 00000000 091aeb30 00000000
00000000`096305b0  0a0ffbc0 00000000 091b10b0 00000000
00000000`096305c0  091a6f70 00000000 0a13bbc0 00000000
00000000`096305d0  0a13bbc0 00000000 0a17df10 00000000
00000000`096305e0  062b5570 00000000 000d760e 80000308
00000000`096305f0  00009aaf 00061aaf 00095aaf 000a9aaf
0:001> dp 09630580
00000000`09630580  00000000`0a103b80 00000000`0a1253c0
00000000`09630590  00000000`09197bb0 00000000`06d7f980
00000000`096305a0  00000000`091afa30 00000000`091aeb30
00000000`096305b0  00000000`0a0ffbc0 00000000`091b10b0
00000000`096305c0  00000000`091a6f70 00000000`0a13bbc0
00000000`096305d0  00000000`0a13bbc0 00000000`0a17df10
00000000`096305e0  00000000`062b5570 80000308`000d760e
00000000`096305f0  00061aaf`00009aaf 000a9aaf`00095aaf

0:001> dq 09630580
00000000`09630580  00000000`0a103b80 00000000`0a1253c0
00000000`09630590  00000000`09197bb0 00000000`06d7f980
00000000`096305a0  00000000`091afa30 00000000`091aeb30
00000000`096305b0  00000000`0a0ffbc0 00000000`091b10b0
00000000`096305c0  00000000`091a6f70 00000000`0a13bbc0
00000000`096305d0  00000000`0a13bbc0 00000000`0a17df10
00000000`096305e0  00000000`062b5570 80000308`000d760e
00000000`096305f0  00061aaf`00009aaf 000a9aaf`00095aaf
0:001> dp 0a103b80 
00000000`0a103b80  ????????`???????? ????????`????????
00000000`0a103b90  ????????`???????? ????????`????????
00000000`0a103ba0  ????????`???????? ????????`????????
00000000`0a103bb0  ????????`???????? ????????`????????
00000000`0a103bc0  ????????`???????? ????????`????????
00000000`0a103bd0  ????????`???????? ????????`????????
00000000`0a103be0  ????????`???????? ????????`????????
00000000`0a103bf0  ????????`???????? ????????`????????
0:001> dq 0a103b80 
00000000`0a103b80  ????????`???????? ????????`????????
00000000`0a103b90  ????????`???????? ????????`????????
00000000`0a103ba0  ????????`???????? ????????`????????
00000000`0a103bb0  ????????`???????? ????????`????????
00000000`0a103bc0  ????????`???????? ????????`????????
00000000`0a103bd0  ????????`???????? ????????`????????
00000000`0a103be0  ????????`???????? ????????`????????
00000000`0a103bf0  ????????`???????? ????????`????????
0:001> dd 0a103b80 
00000000`0a103b80  ???????? ???????? ???????? ????????
00000000`0a103b90  ???????? ???????? ???????? ????????
00000000`0a103ba0  ???????? ???????? ???????? ????????
00000000`0a103bb0  ???????? ???????? ???????? ????????
00000000`0a103bc0  ???????? ???????? ???????? ????????
00000000`0a103bd0  ???????? ???????? ???????? ????????
00000000`0a103be0  ???????? ???????? ???????? ????????
00000000`0a103bf0  ???????? ???????? ???????? ????????

问号表示内存不可用

对于崩溃转储:内存可能不包括在崩溃转储中,具体取决于用于创建崩溃转储的内存。例如,有一个选项(
-mp
)来排除大于512 MB的内存区域。如果您假设是这样,请使用完整内存创建崩溃转储

对于实时调试:从未对返回这部分内存的操作系统调用过
VirtualAlloc()
。或者,内存已分配,但已
VirtualFree()
d,因此不再可用。如果程序在读或写操作中访问内存,则会发生访问冲突(AV)

问号不等于空值。该地址处的空指针值应为
00000000
(32位)或
00000000'00000000
(64位)

<如果你有一个指向这种内存的指针,也可能是你在发布版本中构建了一个C++程序,如果你从不初始化它们,那么指针可能会有一些垃圾(“指针指针”)。在调试模式下,它们将使用一些内存模式进行初始化


旁注:如果您正在调查指针,使用
dp
(“转储指针大小的数据”)比
dd
(32位)或
dq
(64位)更可取.

dd不完全适合在64位中使用,除非您确信使用dq或dp表示内存在您体内不可用dump@blabb:为什么64位中的
dd
不应该正常?它只会影响输出中的列
db
有单字节列,
dd
有4字节列,
dq
有8字节列。还有更多吗?@ThomasWeller dd是显示dword,如果地址没有正确提供,它可能会出错,正如我说的,不是你不能使用它,而是不愿意使用它@blabb:ok,你的意思是
a66e920
可能是一个打字错误或复制/粘贴问题,因为我们通常会从某个地方复制整个指针值,从而使命令
dd00000000'0a66e920
yes,并且也是在32位上下文中(不完全适用,但我希望您明白这一点),如果这半部分是0x0`a66e920f,那么它将属于内核va而不是用户va(我理解这有点吹毛求疵)但我现在坚持使用dp,只有在我绝对确信我需要32位的价值时才使用dd。谢谢你在这方面的帮助。我编辑了我的问题,添加了代码片段,核心转储了最新的帧输出和十六进制地址上给定的dp、dq、dd输出。你能帮助我如何避免这样的程序崩溃吗。