【发布时间】:2016-08-13 10:22:17
【问题描述】:
我做了一个简单的函数来遍历整个堆栈并打印出其中每个条目的内容。
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
void* pointsTo = *((void**)address);这是循环失败时的第一次迭代。