【发布时间】:2011-12-28 16:55:25
【问题描述】:
在某些地方,我读到堆栈从高地址增长到低地址,但是当我自己检查时,我注意到它从低地址增长到高地址。例如,我为地址为 2aba5ab06010 的线程分配了堆栈,并在某个时候发现它的值为 2aba5b7050f0,这显然大于堆栈的顶部。
但是当我检查反汇编时,我可以看到函数序言减去 %rsp 并且结尾添加它,所以从这个意义上说,不应该是 %rsp 的值小于堆栈的顶部。为什么会有这些矛盾的结果?
请注意,我在 x86 64 位机器上使用 Linux 和 gcc 编译器。
【问题讨论】:
-
视情况而定,为什么这对任何人都重要?
-
如果您将您的地址 (2aba5b7050f0) 转换为十进制值:46979886371056 -- 对另一个地址执行相同操作: (2aba5ab06010)->46979873792016 => 46979886371056 - 4697987792016 = 2您分配的地址大于稍后的地址。这意味着,堆栈从较高的值变为较低的值。
-
提供有关您的支票的更多详细信息。目前尚不清楚您到底检查了什么。此外,
2aba5ab06010小于2aba5b7050f0,而不是更大。你为什么断定它是向上增长的? -
对不起,Andrey 和 w00,我把值倒序排列了,现在我已经更正了。