【发布时间】:2016-02-21 06:15:09
【问题描述】:
我需要查找给定地址是在堆中还是在堆栈中。在 Linux 中是否有可靠的方法来做到这一点?
我考虑过以下方法,假设堆栈将向下增长并且堆将向堆栈增长。这个解决方案的可靠性如何?我们不使用gcc split-stack。
is_stack (void *addr) {
int a;
if( &a < addr) return stack;
else return heap
}
[编辑 - 我看到了一个类似的问题,但这更像是一个理论上的问题]
【问题讨论】:
-
你到底为什么要问?
-
ASLR 将堆栈放置在虚拟内存空间中的某个随机位置,并将堆放置在其他随机位置。所以你不能假设堆栈地址和堆地址之间有任何关系。
-
不,堆栈增长的方向主要取决于处理堆栈的处理器指令,特别是调用/返回和推送/弹出指令。在大多数处理器上,堆栈会不断增长,但您不能依赖它(如果您想要可移植的面向未来的代码)。
-
我不禁觉得您要解决的实际问题需要不同的方法。你的problem X是什么?