说我有void f(int a, int b, int c) { g(a, b, c); h(a, b, c); }
在x86汇编这样的:在cdecl中,是否需要保存传递给它的参数的被调用者?
section .text
f:
pop dword [res_1]
call g ; g(a, b, c)
call h ; h(a, b, c)
push dword [res_1]
ret
section .bss
res_1:
resd 1
如果g
如下cdecl调用约定,我是保证g
不会改变传递给它的堆栈中的参数?
CDECL经过值与参数值的堆栈帧的副本。主叫方是否“保留”它并不重要,无论如何,该副本在通话后都会被丢弃。 –