在GCCcdecl
调用约定中,调用返回后,我是否可以依靠推入堆栈的参数相同?即使在混合使用ASM和C并-O2
启用优化()的情况下?
一言以蔽之:不。
考虑以下代码:
__cdecl int foo(int a, int b)
{
a = 5;
b = 6;
return a + b;
}
int main()
{
return foo(1, 2);
}
这产生了以下asm输出(与-O0编译):
movl $5, 8(%ebp)
movl $6, 12(%ebp)
movl 8(%ebp), %edx
movl 12(%ebp), %eax
addl %edx, %eax
popl %ebp
ret
因此,__cdecl函数很有可能足堆栈值。
甚至还没有计算内联或其他优化魔术的可能性,这些事情可能不会一开始就出现在堆栈中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句