如何找到程序堆栈内存的起始和结束地址?



任何人都可以解释如何通过编程找到堆栈的起始地址和结束地址

没有可移植的方法可以获取 C 中的堆栈基础和限制,因为 C 不理解调用堆栈。

不过,我们可以讨论使用堆栈进行调用的特定实现。

现在,每个实现都使用由其中一个寄存器指向的某种线程本地存储。在 X86 上,它们使用一个未使用的段寄存器。 这些实现还提供了访问此 TLB 的方法。

如果你在Windows上,你可以看看NtCurrentTEB。

和TEB结构。您可以看到字段 - StackBase 和 StackLimit。

用于在 C 中获取堆栈基数和限制的代码(类似的代码可以用 CPP 编写((仅在 Windows 上(将是

#include <windows.h>
#include <winnt.h>
struct _TEB {
NT_TIB NtTib;
};
void *getStackBase(){
return NtCurrentTeb()->NtTib.StackBase;
}
void *getStackLimit(){
return NtCurrentTeb()->NtTib.StackLimit;
}

最新更新