十六进制地址上的windbg dd命令给出???问号
当我对十六进制地址a66e920执行dd命令时,WINDBG中的以下输出意味着什么十六进制地址上的windbg dd命令给出???问号,windbg,Windbg,当我对十六进制地址a66e920执行dd命令时,WINDBG中的以下输出意味着什么 0:001> dd a66e920 00000000`0a66e920 ???????? ???????? ???????? ???????? 00000000`0a66e930 ???????? ???????? ???????? ???????? 00000000`0a66e940 ???????? ???????? ???????? ???????? 00000000`0a66e950 ???
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输出。你能帮助我如何避免这样的程序崩溃吗。