1
我做了一个简单的函数来遍历整个堆栈并打印出每个条目的内容。
穿越堆栈
void ListStack()
{
NT_TIB* tib = (NT_TIB*)NtCurrentTeb();
for (void* address = tib->StackBase; address > tib->StackLimit; address = (char*)address - sizeof(void*))
{
void* pointsTo = *((void**)address);
printf("address=%p, points to=%p\n", address, pointsTo);
}
}
在x86上,这工作正常。但是,在x64上,它使我读取访问冲突。
这是怎么回事?
你收集哪些信息的调试器下运行的代码?具体来说,哪个表达式/语句在访问冲突时失败? – IInspectable
@IInspectable'void * pointsTo = *((void **)address);' 这是循环失败时的第一次迭代。 – man