穿过堆栈

时间:2016-04-20 15:44:09

标签: c winapi x86 stack x86-64

我做了一个简单的函数来迭代整个堆栈并打印出每个条目的内容。

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上,它会给我读取访问权限。

这有什么问题?

1 个答案:

答案 0 :(得分:1)

问题是您要取消引用tib->StackBase

堆栈区域大于或等于tib->StackLimit小于 tib->StackBase

所以只需将你的for循环更改为:

tib->StackBase