gpt4 book ai didi

c - 通过 %esp 进行程序集堆栈管理

转载 作者:行者123 更新时间:2023-11-30 19:18:48 27 4
gpt4 key购买 nike

我不太明白为什么 gcc 在调用函数之前要先将 esp 减去 12。

    pushl   %ebp
movl %esp,%ebp
sub $12,%esp

socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
movl $AF_INET,(%esp)

最佳答案

当前* x86 ABI 要求堆栈指针在函数调用时以 mod 16 对齐。这是堆栈指针无法解释的调整的典型原因。

* 我说当前是因为GCC实际上单方面改变了ABI并在3.x系列的某个地方引入了这个要求。我手边没有引用资料,但也许其他人可以提供。该更改旨在优化 SIMD 指令的使用,但实际上并不需要此目的,并且当旧代码回调假定对齐的新代码时,最终会破坏与旧代码的 ABI 兼容性。整个故事一团糟。

关于c - 通过 %esp 进行程序集堆栈管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com