【发布时间】:2012-02-15 05:13:02
【问题描述】:
我有一个 C++ 程序,当我使用 Visual Studio 在调试器中运行它时,它会因访问冲突而崩溃。问题是,在过去,它通常会将我带到发生这种情况的线路,但对于这个问题,它说没有可用的资源并带我去反汇编。我不知道如何破译它并获得任何有用的信息。它带我到以下行:
0000000057A93F0F cmp dword ptr [rcx+11BCh],0
然后,如果我再次运行它,它将停在:
0000000058673F0F cmp dword ptr [rcx+11BCh],0
然后,如果我再次运行它,它会在第一个停止,如果我重新运行它,它会再次停止在第二个......它只是继续在这个循环中。我发现这很奇怪,这发生在不同的地址交替时间,但我什至不知道这是否是确定的地址。
我如何使用这些信息来查找问题?
(我会发布代码,但我不知道是哪个部分导致了问题,所以不知道该发布什么......我不应该尝试使用 x64 平台编译 flash-to-directx)。
谢谢
编辑
这是崩溃发生前的几行:
0000000057A93EF3 test dl,1
0000000057A93EF6 je 0000000057A93EFD
0000000057A93EF8 call 0000000057FC8024
0000000057A93EFD mov rax,rbx
0000000057A93F00 add rsp,20h
0000000057A93F04 pop rbx
0000000057A93F05 ret
0000000057A93F06 int 3
0000000057A93F07 int 3
0000000057A93F08 sub rsp,28h
0000000057A93F0C mov ecx,r8d
然后崩溃发生在:
0000000057A93F0F cmp dword ptr [rcx+11BCh],0
我的调用堆栈上的最后一项是:
Flash64_11_1_102.ocx!0000000058673f0f()
【问题讨论】:
-
它在尝试从
[rcx+11BCh]读取时崩溃。现在,如果这是对 C++ 类成员函数的调用,RCX应该包含 this 指针,并且您正在尝试访问类实例中的某些内容。首先是看看此时RCX是什么。 -
所以当我运行它并且如果我将鼠标悬停在
RCX上它会停止它显示4278034432的值。这个值是多少?我如何弄清楚该值是什么?感谢您的帮助! -
在崩溃线之前显示 7 或 8 行也是有帮助的。这样我们也许可以确定 rcx 是否是从其他地方传来的垃圾。
-
Michael 我在上面的帖子中也直接在崩溃前编辑了我的帖子。谢谢。
-
4278034432=0xFEFDA000内存地址。0xFEFDA000+0x11BC=0xFEFDB1BC。检查您在这些地址上拥有什么。
标签: c++ debugging assembly directx