堆栈是向上还是向下增长

Met*_*est 2 c 64-bit x86 stack gcc

在某些地方,我已经读过堆栈从较高的地址变为较低的地址,但是当我自己检查它时,我注意到它从较低地址变为较高地址.例如,我为地址为2aba5ab06010的线程分配了堆栈, 并且在某些时候发现它的值为2aba5b7050f0,这显然大于堆栈的顶部.

但是当我检查反汇编时,我可以看到函数序言减去%rsp和epilogues添加它,所以在这个意义上,不应该是%rsp的值小于堆栈的顶部.为什么这些矛盾的结果呢?

请注意,我在x86 64位机器和gcc编译器上使用Linux.

par*_*mar 6

线程堆栈可以根据平台向上或向下增长.检查这个的典型方法是让A调用B函数并使用

void FunctionB( int* FromFunctionA )
{
   int localStackVariableB;
   //Compare &localStackVariableB and FromFunctionA addresses
}


 void FunctionA( )
{
   int localStackVariableA;
   FunctionB( &localStackVariableA) 
}
Run Code Online (Sandbox Code Playgroud)

现在比较localStackVariableB和FromFunctionA 的地址并确定方向.确保完全关闭优化.