用户向我发送了我程序的崩溃转储,我无法理解我所看到的是什么。看起来其中一个寄存器只是改变了它的值,没有任何明显的原因。除了CPU错误之外,我没有任何解释,但我对此持怀疑态度。也许你可以发现这里发生了什么。
这是代码反汇编,如打开崩溃报告(可点击)时所见:
这里大致是C代码的外观:
void **pp = *g_some_global;
if(!pp)
return NULL;
int array_count = (int)pp[0];
void **array_ptr = (void **)pp[1];
for(i = 0; i < array_count; i++)
{
LONG_PTR *contents = array_ptr[i];
if(contents[4] == compare)
{
void **pp2 = (LONG_PTR *)contents[7]; // contents is different here! pp2 is NULL
int array_count2 = (int)pp2[0]; // the CRASH!
void **array_ptr2 = (void **)pp2[1];
// ...
}
}