任何人都可以解释如何通过编程找到堆栈起始地址和结束地址
答案 0 :(得分:1)
没有可移植的方法来获取堆栈基数和C中的限制只是因为C不理解调用堆栈。
我们可以讨论使用堆栈进行调用的特定实现。
现在每个实现都使用某个寄存器指向的某种线程本地存储。在X86上,他们使用一个未使用的段寄存器。 这些实现还提供了一种访问此TLB的方法。
如果您在Windows上,可以查看NtCurrentTEB。
TEB Structure。你可以看到字段 - 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;
}