assembly 堆栈指针未指向堆栈顶部[duplicate]

hmtdttj4  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(191)

此问题在此处已有答案

Compiler using local variables without adjusting RSP(1个答案)
What C/C++ compiler can use push pop instructions for creating local variables, instead of just increasing esp once?(2个答案)
4天前关闭。
下面是一个基本函数调用的基本C代码:

int multiply(int num, int k) {
    return num * k;
}

int main(int argc, char** argv) {
    
    int k = multiply(5,2);
}

当我尝试使用www.example.com上提供的工具反汇编此代码godbolt.org并选择 x86-64 clang 10.0.1 选项时,得到了以下汇编指令:
第一次
然而,堆栈指针似乎并不随着每次(甚至在被调用者将参数从寄存器ediesi添加到堆栈之后)而改变,并且仍然指向包含基指针寄存器的旧值的位置。为什么会发生这种情况?

km0tfn4u

km0tfn4u1#

编译器会规划函式所需的所有空间,并在函式开头和结尾各调整一次堆栈指标,而不是每次在函式内的堆栈上需要某些东西时都调整。

相关问题