如何获取Linux堆栈边界?

如何获取Linux堆栈边界?

如何使用系统调用获取 Linux 堆栈的地址边界而不诉诸异常处理程序?我可以使用 getrlimit 获取堆栈大小,但它没有说明堆栈从哪里开始或结束。 RSP 指向堆栈内的某个位置,因此我无法确定已使用多少量或可用量。我可以使用 msync 来查找已提交的内容,但无法查找尚未触及的区域。在我的汇编代码中,我想包含一个检查,以确保我没有在堆栈上推送太多,以至于我可能会接近极限。

答案1

不幸的是,对于 Linux 用户来说,rusage 结构的 ru_isrss 元素未维护。为了获得堆栈使用的近似值,我所采取的解决方法是:

1/ 尽可能靠近程序的开头,声明一个局部变量并全局保留它的地址。

2/ 有一个函数,您可以在需要检查堆栈使用情况时调用该函数,该函数只需声明另一个局部变量并计算其地址与 1/ 中保存的地址之间的差异。

顺便说一句,您可能需要首先检查在您的平台上堆栈是否向上或向下增长。

相关内容